Can you provide a complete code involving some data and the hads object that you are using for initializing your priors.
Otherwise one thing to do is to break inside the model
and try things like
b.shape.eval()
pm.math.dot(X,b).shape.eval()
to see if you are getting object of the shape you think you
should. Another option is to do prior predictive check
https://www.pymc.io/projects/docs/en/stable/learn/core_notebooks/posterior_predictive.html
to see if your priors generate results for y which is reasonable to start with. Finally similar to above you can also check things like
pm.math.dot(X,b).eval({mus:mu_initi_value, M_0:...})
to check if reasonable initial values for your priors give reasonable mus for your regression.
Finally since your sigma seems very small you may wanna check again by eval
tau = 1.0/( all_sigma**2 + observed_apparent_mag_errs**2 )
is not very large (which would indicate sigma for your likelihood is very small which may be problematic for sampling.