- start_run.py: classify_start_error — one canonical mapper for ENVIRONMENT_NOT_CONFIGURED,
every BASELINE_* code, IDEMPOTENCY_KEY_REUSED and existing UPPER_SNAKE typed codes; unknown
ValueErrors collapse to RUN_START_CONFLICT. REST and MCP now share it, so the same failure
can no longer present a transport-dependent error vocabulary (the divergence the matrix caught:
MCP returned raw exception text while REST collapsed to RUN_START_CONFLICT).
- Parity matrix (12+ vectors): env/baseline/conflict/disabled-action/disabled-automation/
investigation-RBAC/unauthenticated, plus service-principal human-gate denial.
- Base-drift adaptations during integration: the investigation-case ACL vector now asserts the
real no-bypass invariant (foreign case collapses to not_found via MCP, no content leak) since
the investigation MCP tools exist on this release; terminal-transition atomicity expectations
now include the queue_created receipt and pin replay idempotency (2 receipts, no growth).
- 17 parity tests; union wave-3 verification: 1845 passed.