Regarding boundary bump mitigation:
Although I'm still keen on what can be done to help cases where I do need to stack dynamic entities (i.e. a moving box that's at rest).
Given the lack of completely general purpose boundary smoothing, this pretty much relies on minimizing penetration and reducing the normal deviation when it exists. In v1, that might mean a shorter and more frequent time steps, combined with a smooth shape like a capsule or rounded cylinder.
(I actually came up with a potential solution to this between the previous post and this one. I'm not sure if it'll actually be fast enough, and it's pretty darn complicated so no guarantees, but I MIGHT be able to solve this generally in v2... eventually. Probably several months at the earliest

)
Total beginner so would appreciate some guidance if this is easy-ish. Is this something can be done at run time? Sounds similar to what I was thinking with consolidating the stacks?
It's not super duper easy to implement, but conceptually it's fairly simple- identify all surfaces that are exposed (that is, not blocked by another grid entry) and create some triangles for them. Then, ensure that vertices on the edges between triangles are shared- maybe by maintaining a hash table of vertex locations already encountered. It's possible to optimize this a bit further by combining adjacent quads when possible, but doing this can get complicated fast since T junctions introduce unavoidable boundary bumps.
It could be done at runtime, but it would probably have to be handled asynchronously to avoid frame hitches. There are also some annoyances created by the API design- changing a mesh's topology tends to require garbage generation in v1 (not in v2!). For some games that's okay, but random GC pauses can get pretty terrible in a high performance or VR focused game.
It is indeed similar to consolidating the stacks in end result, except that it could also smooth boundaries in all directions rather than just up and down.
Where exactly is that? Had a quick look in the controller and couldn't see anything.
It's a property of the CharacterController.Body.CollisionInformation.Shape. In the CharacterController, it's set by the constructor's margin parameter and CollisionMargin property. In the SphereCharacterController, there is no directly exposed collision margin property because the radius of the sphere
is the collision margin.
Regarding not-boundary-bump causes:
Does it still happen if CollisionResponseSettings.PenetrationRecoveryStiffness is set to 0?
If it's still there, how large is the effect? Starting from 0 velocity and jumping, does it immediately jump to something like 0.2 horizontal velocity, or is it more like 1e-4?
If you output the set of contacts (enumerate each pair in character.Body.CollisionInformation.Pairs, and then enumerate each contact in pair.Contacts), do any of the generated contact normals point in a weird direction, maybe mostly-horizontal-but-a-little-down?
If setting the stiffness to 0 gets rid of it, then some contact is detecting nonzero depth. If you set the character.HorizontalMotionConstraint.PositionAnchorDistanceThreshold to 0, does it still happen?