Tasks — RunIndex port

Mission: runindex-feature-runs-port · #5390, #5389 · refs #2624

IDTaskDepsIssue
T00Campsite: hoist entry-key + run-store path literals to named constants (behaviour-preserving)——
T01Red-first @pytest.mark.regression copy repro through next (original cursor untouched)—#5390
T02Red-first @pytest.mark.regression move repro through next (continues, no RUN_STATE_MISSING)—#5390
T03Red-first @pytest.mark.regression two-process concurrent-start (both registrations retained)—#5389
T04Red-first port test: never persists an absolute run_dir—#5390
T05Implement run_index.py port: token serialize, read-time resolve+containment, locked RMWT00#5390,#5389,#2624
T06Rewire runtime_bridge_io.py funcs to delegate to the port; keep ≤15 complexityT05—
T07Route state/contract.py filename through the port constantT05—
T08Heal migration m_*_heal_run_index_paths (+ describe_leaks)T05#5390
T09doctor run-index self-registering sibling (_run_index_doctor.py)T08#5390
T10Gate: single-reader (empty allowlist) + self-mutation testT06#5390
T11Gate: port never persists absolute run_dir (behavioural)T05#5390
T12Docs + CHANGELOG (Before/After); doctor help textT06—
T13Validate: make test-fast + touched module + gate files; record countsall—

Green criteria: T01–T04 RED pre-fix, GREEN post-fix; all AC in spec.md met.