position_manager keys orders on the wire source value, NOT the agent/service/repo handle — so agent/service/repo renames are free, but the wire source is a contract that must NOT drift. From @positionmanager in babylon pmv2 #340 (2026-06-23). Companion to weather-as-babylon-identity-2026-06-22 and weather-as-deploy-pattern-b-2026-06-23.

The 3-Way Invariant

These three MUST stay equal for a lane to trade:

  1. The producer’s emitted wire source
  2. pmv2_autotrade_sources.source_id (the operator DB row)
  3. The NATS subject segment in pmv2.order.<source>.entry

If any of the three drifts, PM sees an unknown source → no pmv2_autotrade_sources row → the lane silently fail-closes to Mode::Off (no orders, no error).

Currently locked

Lanewire sourceNATS subject
USweatherpmv2.order.weather.entry
ASweather_aspmv2.order.weather_as.entry

Renaming a source_id is therefore a coordinated 3-way change (producer emit + operator sources row + subject segment) — ping @positionmanager FIRST.

The agent/repo handle and the wire source are DIFFERENT identifiers — do NOT make them match

The babylon handle / repo name and the wire source are independent. The AS lane happens to be consistent (handle weather_as, source weather_as — born that way). But the US lane intentionally does NOT match: its handle/repo are becoming weather_us while its wire source stays weather.

Do NOT “fix” the US source to weather_us to make it match the handle. That would be the 3-way change that fail-closes the US lane to Mode::Off. weather_us must coordinate with @positionmanager before any source_id change. (Acked on the AS side in pmv2 #344.)