07 — P5 C1 Preflight & Dispatchability Proof — 2026-06-22
07 — P5 C1 Preflight & Dispatchability — 2026-06-22
Live governed route IS exercisable (positive control)
The dispatcher fn_process_agent_api_dispatch was called read-only (p_write_observation=false, non-mutating). Gate precondition is already satisfied: process_dot_runtime.execute_enabled=false, …real_run_enabled=false, …dry_run_only=true.
Positive control — existing DOT validates:
fn_process_agent_api_dispatch('DOT_KG_EXPLAIN','probe-live-route-c1macro','agent','PLAN_ONLY',false,NULL)
→ { "validated": true, "contract_status": "endpoint_bound",
"endpoint_present": true, "true_dry_run_possible": true,
"fixture_ref": "FIXTURE:dot:kg:explain:v1",
"output_namespace": "DRYRUN-NS:dot:kg:explain",
"note": "PLAN_ONLY/VERIFY_ONLY validation only; dispatcher cannot execute a DOT and never writes DRY_RUN/REAL_RUN." }
⇒ The governed route is live, the gates are in dry-run-only posture, and a fully-registered+endpoint-bound DOT is dispatchable to a real no-mutation endpoint.
C1 preflight / dispatchability: NO_GO (fail-closed)
C1 DOT is not dispatchable:
fn_process_agent_api_dispatch('DOT_C1_VOCAB_BUILD','probe-c1-not-registered','agent','PLAN_ONLY',false,NULL)
→ ERROR: dispatch refused: no agent_api contract for DOT_C1_VOCAB_BUILD
This is the route-level preflight result for C1: NO_GO because no contract is registered. It is correct fail-closed behavior, not a defect.
Preflight summary
| Check | Result |
|---|---|
| Runtime in dry-run-only posture | PASS (gates set) |
| Dispatcher route live | PASS (DOT_KG_EXPLAIN validated) |
| Real-run blocked | PASS (REAL_RUN refused — file 09) |
| C1 contract present | FAIL (0 C1 contracts) |
| C1 dispatchable | NO_GO (refused: no contract) |
| C1 endpoint on executor | ABSENT (executor serves DOT_KG only) |
Result
P5 = the governed route is proven live and fail-closed, but C1 is not dispatchable until a C1 contract + endpoint exist. ⇒ contributes C1_DRYRUN_CAPABILITY_LOCKED_OPERATOR_ACTION_REQUIRED (would otherwise read C1_DRYRUN_HOLD_DRYRUN_NOT_DISPATCHABLE).