Contracts

bridge-surface.md

Contract: runtime_bridge surface after the mission

Kept public names (callers outside src/runtime/next/)

NameBindingGuarantee
get_or_start_runfrom runtime.next.runtime_bridge_io import get_or_start_runruntime_bridge.get_or_start_run is runtime_bridge_io.get_or_start_run
build_operational_context_for_claimfrom runtime.next.runtime_bridge_io import build_operational_context_for_claimruntime_bridge.build_operational_context_for_claim is runtime_bridge_io.build_operational_context_for_claim

Both stay in runtime_bridge.__all__. Every other public name the bridge defines today is unchanged (query_current_state, answer_decision_via_runtime, decide_next_via_runtime, QueryModeValidationError, …).

Removed names

The 36 names in ../data-model.md, less the two above, no longer exist on runtime_bridge. Accessing one raises AttributeError.

Patch-point rule

A test that wants to replace a seam-owned function patches the owning seam module. Inside src/runtime/next/, every call site looks the name up on its owner, so that single patch intercepts every internal caller. Patching runtime_bridge.get_or_start_run / runtime_bridge.build_operational_context_for_claim intercepts only callers that look the name up on the bridge (the CLI modules), not the runtime package itself.

Enforcement

tests/runtime/test_bridge_no_compat_delegates.py (new) checks, per seam: no top-level definition of a removed name in the bridge, no _rb.<removed name> lookup in any seam, the two re-export identities, and (self-mutation) that the scanner flags a synthetic forwarding module.