Hierarchical Model - behavioural data: should param standard deviation priors be group level or inside per subject loop?

Your intuition is correct here. In Stan, the distribution statement alpha_sd ~ cauchy(0, 1) functions by incrementing the log probability of the model by the log probability of the distribution (dropping constant terms).

So if you have a simple model p(\theta | y) \propto p(y | \theta) p(\theta) and you repeat the distribution statement of the prior in a loop N times like above, the model you are actually fitting is p(\theta | y) \propto p(y | \theta) p(\theta)^N. This is pretty straightforward to test out for a simple model.

As a note on \alpha_\mu and \beta_\mu, since they are defined with lower and upper bounds, then the priors are \alpha_\mu \sim \mathrm{Uniform}(0, 1) and \beta_\mu \sim \mathrm{Uniform(0, 3)}. Whether this makes sense for the problem, I can’t say, but it is generally not good practice to place hard constraints on parameters in the prior like this; it can cause various computational/inferential issues. Also, this prior communicates "we are 100% a priori certain that the parameter lies in this range, which is rarely the case (excluding, obviously, parameters in distributions that are constrained to be between 0 and 1 or strictly positive, etc.).

What typically better are soft constraints. If your prior belief is that a parameter lies in the range (0, 3), then you place a prior that has 95% or so of the mass within that region. This communicates a similar prior belief, but avoids many of the issues that come with constraints.

This is likely to cause issues in this model, because you have \alpha_s \sim \mathcal{N}(\alpha_\mu, \sigma_\alpha), where \sigma_\alpha is given that Cauchy prior, so very wide, but both \alpha_\mu and \alpha_s have hard uniform priors placed on them. This means that your priors are probably going to be fighting with each other quite a bit.

Another note, this Stan model uses the older style syntax on arrays that is being deprecated. For example:

int<lower=0,upper=4> choice[nSubjects, nTrials];
real<lower=0, upper=100> reward[nSubjects, nTrials];

can be rewritten in the more modern style:

array[nSubjects, nTrials] int<lower=0,upper=4> choice;
array[nSubjects, nTrials] real<lower=0, upper=100> reward;