Bounded variable transformation when not using HMC?

What you are describing is part of why we use transformations: to not propose useless or invalid values in the first place. Our step samplers are mostly general and distribution agnostic so the best they can do is provide values and check if they are valid.

The only cases this has shown to be somewhat problematic is when there are random indexing operations and the logp function may try to index an out of bounds value. That can usually be sorted by adding an explicit guard, you could probably do the same:

with pm.Model() as m
  sigma = pm.HalfNormal("sigma", transform=None)
  safe_sigma_value = 1
  safe_sigma = pm.math.switch(sigma < 0, safe_sigma_value, sigma)
  pm.Potential(..., foo(safe_sigma, ...)

That way negative sigmas will still be rejected, but it won’t lead to any exceptions in foo.

I am not sure what you’re proposing with interrupting when there is a negative value, our non-nuts samplers do need to propose and observe invalid logps.

You can also use a non-default transform of your liking.

Perhaps if you share the exact likelihood that is giving you trouble we can help more.