Start looking at the moving agent itself, work through the physics checklist, make sure you have all the pieces necessary.
If you have, then put a plain old primitive cube underneath him and make sure he doesn’t go through that.
ALSO: if something starts out touching / penetrating, it could just continue falling through. It has to be at least separated by the default contact offset (see physics settings) BEFORE things start running.
With Physics (or Physics2D), never manipulate the Transform directly. If you manipulate the Transform directly, you are bypassing the physics system and you can reasonably expect glitching and missed collisions and other physics mayhem.
Always use the .MovePosition() and .MoveRotation() methods on the Rigidbody (or Rigidbody2D) instance in order to move or rotate things. Doing this keeps the physics system informed about what is going on.