False-green mobility on firm soil — Dual check on your URDF (PASS or FAIL both count)

Problem I keep hitting: a mobility / traverse claim can look fine on firm
ground (or a firm sim) and then die on soft soil — after you’ve already
spent hardware time.

I open-sourced a small referee for that check (not a Gazebo plugin, not a
ROS package yet):

same body · two soils · Safe must allow · Hostile must refuse
Rust Bekker sinkage · you pass URDF + optional soils JSON

Repo:

Two frozen runs (soft teaching · not field MEASURED):

  1. Dual separates (open skid-steer URDF · owned soil ids):
    ha-production-gate/docs/examples/08_stranger_urdf_owned_soils.md at main · StanByriukov02/ha-production-gate · GitHub
    Safe ~9.5 mm ALLOW · Hostile ~69 mm REFUSE

  2. Third-party Fetch Robotics URDF — Gate FAILS under declared contact
    (Safe also refuses). PASS is not the product; truth before hardware is:
    ha-production-gate/docs/examples/09_external_fetch_owned_soils.md at main · StanByriukov02/ha-production-gate · GitHub

Minimal command shape:

ha-dual-socket --urdf your_robot.urdf --kind wheeled_base
–soils your_safe_hostile.json

Happy to take technical pushback. Not asking for endorsement — asking
whether this Safe/Hostile framing is useful before you cut metal or trust
a firm-soil green.