03 — Endpoint_ref Binding
03 — Endpoint_ref Binding (Workstream B)
Decision: endpoint_ref stays NULL for BOTH contracts
Binding is allowed only if the endpoint is real and no-mutation. No real agent_api producer endpoint exists (doc 02), and the deterministic fn_dryrun_fixture_selfcheck is a harness, not the DOT — binding it would mislabel a harness as the agent_api DOT. Therefore no binding occurred. This is the correct, honest state.
Live confirmation: dot_agent_api_contract.endpoint_ref = NULL for DOT_KG_EXPLAIN and DOT_KG_EXPLAIN_VERIFY; contract mode unchanged (PLAN_ONLY / VERIFY_ONLY).
Schema guardrail still in force
CHECK (mode <> 'DRY_RUN' OR endpoint_ref IS NOT NULL) — a DRY_RUN-mode contract is illegal until an endpoint is bound. The blocker remains schema-encoded.
Bind packet (for the next macro, once a real endpoint exists)
Apply, per DOT, only after the executor route is live and proven no-mutation:
-- producer
UPDATE dot_agent_api_contract
SET endpoint_ref = '<registered no-mutation executor ref>', mode = 'DRY_RUN'
WHERE dot_code = 'DOT_KG_EXPLAIN';
-- verifier (endpoint = the deterministic checker, app- or DB-side)
UPDATE dot_agent_api_contract
SET endpoint_ref = 'fn_dryrun_fixture_selfcheck' -- or app twin
WHERE dot_code = 'DOT_KG_EXPLAIN_VERIFY';
Pre-bind checklist: endpoint exists ✓ · fixture bound ✓ (already) · output namespace DRYRUN-NS:% ✓ (already) · no-mutation proven ✓ · rollback exists ✓ (set endpoint_ref back to NULL, mode back to PLAN_ONLY).
Forward-compatible staging convention (v6)
v_process_discovery_agent_api_endpoint_status recognises an endpoint_ref LIKE 'STAGED:%' as endpoint_staged (a staged-but-unbound ref) distinct from endpoint_bound. No STAGED refs were written this run — all remain endpoint_missing.
Completion
endpoint_ref state is correct (NULL, no fake binding). Bind packet ready for the moment a real endpoint exists.