Quick answer: Enable Terrain Holes on the TerrainCollider (it is on by default in recent versions), and after painting holes ensure the collider's holes data is synced so physics matches the visual.
Walking on an invisible surface over a hole means the collider ignores the hole. Enabling hole support on the collider and syncing fixes it. Here is how.
How to fix it
1. Confirm collider hole support
Make sure the project and TerrainCollider support terrain holes (Unity 2019.3+); on older setups the collider cannot represent holes and you must use a separate trigger to block walking.
2. Sync holes after painting
If you paint holes at runtime via TerrainData.SetHoles, the collider needs to rebuild; toggle the collider or resync so the physics heightfield removes those cells.
3. Avoid overlapping ground meshes
Check that no separate mesh or second terrain still covers the hole; a leftover collider underneath will keep the player from falling through the intended gap.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
Most of the time the fix is small. Seeing the failure clearly is the part that actually costs you.