Completes the ADAPT-2 revision per the 2026-09-10 handoff: the adaptive route authority is now operational (called by production, changes execution, persisted, observable), not merely implemented.
What changed
The audit found classify_route() had zero production callers — architecturally implemented but cognitively dead (the exact §8 failure mode). Three commits fix this:
69a233c — Production wiring: the ISSUE stage (the single dispatch entry) classifies the route before the fixed-depth chain. LOCAL_FIX terminally routes out to the local implementation/verification lane (ROUTED_LOCAL_FIX) — the research chain is never entered. Sufficiency inputs replace substring inference as primary evidence: 5 questions with traceable provenance; non-establishable facts are recorded as UNKNOWN and escalate (never manufactured certainty). Mechanism-uncertainty language (performance/timing/concurrency) makes local_authority honest — measurement questions are not source-readable. Deep-research floor: narrow, objectively detectable triggers; FloorViolation refuses efficiency-driven bypass. Legacy boolean API preserved as a marked compat shim.
8dfa76b — Targeted Evidence Probe + verification escalation: bounded uncertainty-resolution outside the canonical chain (5-key schema, cited sources required for GROUNDED, budget-capped — no probe loops). Dispatch resolves material unknowns via probes before final routing; failures record ESCALATION events and enter deep research. Real probing is opt-in (MIMO_PROBE_ENABLED=1) — dispatch stays deterministic by default. escalate_on_verification_failure() is the local lane's production hook; bare "test failed" evidence is refused.
Escalation/downgrade/FINAL_ROUTE are persisted events in one append-only authority (route.jsonl); every transition carries previous_route/trigger/evidence/decided_at. Full trail reconstructible from persisted state with no prose inference.
Runtime Reachability acceptance (first application of the doctrine)
IMPLEMENTED ✓ → CALLED BY PRODUCTION ✓ → CHANGES EXECUTION ✓
→ PERSISTED ✓ → OBSERVABLE ✓ → END-TO-END PROVEN ✓
All six required canaries pass (tests/test_adaptive_router_wiring.py, tests/test_evidence_probe.py):
Local route has behavioural effect (research chain not entered, implementation lane reached)
Targeted uncertainty → probe GROUNDED → returns to implementation, no deep research
STILL_UNKNOWN/CONTRADICTED → recorded escalation → RESEARCHED_CHANGE
Verification-driven escalation (production hook, bare evidence refused)
Research floor non-downgradable
Full audit trail reconstruction from persisted JSONL
Ruff clean on all changed files (1 pre-existing F821 on master, untouched)
Notable design decisions
Probe gate honesty: STILL_UNKNOWN with empty source is a valid finding — "no evidence found" is the answer, not a schema violation.
Deterministic dispatch by default: real worker probes are opt-in; a minutes-long worker call must never be an implicit side effect of routing.
Legacy compat: the raw-boolean API keeps legacy semantics (marked compat shim); the UNKNOWN-escalation discipline governs the provenance-tracked production path.
## Summary
Completes the ADAPT-2 revision per the 2026-09-10 handoff: the adaptive route authority is now **operational** (called by production, changes execution, persisted, observable), not merely implemented.
## What changed
The audit found `classify_route()` had **zero production callers** — architecturally implemented but cognitively dead (the exact §8 failure mode). Three commits fix this:
1. **69a233c — Production wiring**: the ISSUE stage (the single dispatch entry) classifies the route before the fixed-depth chain. LOCAL_FIX terminally routes out to the local implementation/verification lane (`ROUTED_LOCAL_FIX`) — the research chain is never entered. Sufficiency inputs replace substring inference as primary evidence: 5 questions with traceable provenance; non-establishable facts are recorded as UNKNOWN and escalate (never manufactured certainty). Mechanism-uncertainty language (performance/timing/concurrency) makes `local_authority` honest — measurement questions are not source-readable. Deep-research floor: narrow, objectively detectable triggers; `FloorViolation` refuses efficiency-driven bypass. Legacy boolean API preserved as a marked compat shim.
2. **8dfa76b — Targeted Evidence Probe + verification escalation**: bounded uncertainty-resolution outside the canonical chain (5-key schema, cited sources required for GROUNDED, budget-capped — no probe loops). Dispatch resolves material unknowns via probes before final routing; failures record ESCALATION events and enter deep research. Real probing is opt-in (`MIMO_PROBE_ENABLED=1`) — dispatch stays deterministic by default. `escalate_on_verification_failure()` is the local lane's production hook; bare "test failed" evidence is refused.
3. Escalation/downgrade/FINAL_ROUTE are persisted events in one append-only authority (`route.jsonl`); every transition carries previous_route/trigger/evidence/decided_at. Full trail reconstructible from persisted state with no prose inference.
## Runtime Reachability acceptance (first application of the doctrine)
```
IMPLEMENTED ✓ → CALLED BY PRODUCTION ✓ → CHANGES EXECUTION ✓
→ PERSISTED ✓ → OBSERVABLE ✓ → END-TO-END PROVEN ✓
```
All six required canaries pass (tests/test_adaptive_router_wiring.py, tests/test_evidence_probe.py):
1. Local route has behavioural effect (research chain not entered, implementation lane reached)
2. Targeted uncertainty → probe GROUNDED → returns to implementation, no deep research
3. STILL_UNKNOWN/CONTRADICTED → recorded escalation → RESEARCHED_CHANGE
4. Verification-driven escalation (production hook, bare evidence refused)
5. Research floor non-downgradable
6. Full audit trail reconstruction from persisted JSONL
## Verification
- 1185 tests passed (3 pre-existing environment failures excluded — reproduced identically on clean master)
- Ruff clean on all changed files (1 pre-existing F821 on master, untouched)
## Notable design decisions
- **Probe gate honesty**: STILL_UNKNOWN with empty source is a valid finding — "no evidence found" is the answer, not a schema violation.
- **Deterministic dispatch by default**: real worker probes are opt-in; a minutes-long worker call must never be an implicit side effect of routing.
- **Legacy compat**: the raw-boolean API keeps legacy semantics (marked compat shim); the UNKNOWN-escalation discipline governs the provenance-tracked production path.
Closes #291 (revised scope). Related: #324 (unrelated checkpoint defect, filed separately).
The router had zero production callers — architecturally implemented but
cognitively dead. This makes it operational (handoff 2026-09-10 §1/§20.A–C):
- ISSUE stage (production dispatch entry) now classifies route before the
fixed-depth chain; LOCAL_FIX terminally routes out to the local
implementation/verification lane (ROUTED_LOCAL_FIX, tree records route)
- Sufficiency inputs replace substring inference as primary evidence:
5 questions with traceable provenance; non-establishable facts recorded
as UNKNOWN and forced upward (never manufactured certainty)
- Mechanism-uncertainty language (performance/timing/concurrency) makes
local_authority honest — measurement questions are not source-readable
- Escalation/downgrade/FINAL_ROUTE are persisted events in the same
append-only authority (route.jsonl); transition identity fields
(previous_route/trigger/evidence) mandatory
- Deep-research floor: narrow, objectively detectable triggers;
FloorViolation on efficiency-driven downgrade bypass
- Legacy boolean API preserved as marked compat shim (legacy semantics)
- Canaries: local-route behavioral effect, research floor entry,
escalation transitions, floor non-bypass, full audit trail
reconstruction (tests/test_adaptive_router_wiring.py)
- Suite: 1178 passed (3 pre-existing env failures excluded, reproduced
on clean master)
Refs #291, #324 (checkpoint defect, unrelated)
Handoff 2026-09-10 §20.D–E, canaries 2–4:
- evidence_probe.py: bounded uncertainty-resolution operation OUTSIDE the
canonical stage chain. Fixed 5-key schema (QUESTION/SOURCE/ANSWER/
IMPLICATION/STATUS); GROUNDED requires a cited source; STILL_UNKNOWN/
CONTRADICTED are honest findings, not schema violations. Executor-owned
artifact path (ADAPT-9); no stdout rescue. Probe budget caps recursion
(MAX_PROBES_PER_TASK=2) — unresolved unknowns escalate, never loop.
- Dispatch wiring: material unknowns on non-floored tasks are resolved by
bounded probes BEFORE the route becomes final. GROUNDED probes fold into
sufficiency inputs with citation provenance; failures record an
ESCALATION route event (previous_route/trigger/evidence) and enter the
canonical chain as RESEARCHED_CHANGE.
- Real probing is OPT-IN (MIMO_PROBE_ENABLED=1 or injected runner):
dispatch stays deterministic by default — a worker call from the
dispatch path is minutes of cognition, never an implicit side effect.
- escalate_on_verification_failure(): production hook for the local lane;
refuses bare 'test failed' evidence (must name the material uncertainty).
- ROUTED_LOCAL_FIX contract message names the exact escalation call.
- Canaries: grounded probe returns to local lane without deep research;
unresolved probe escalates with recorded transition; no probe recursion;
verification-driven escalation persisted; bare evidence refused.
- Suite: 1185 passed (3 pre-existing env failures excluded)
Refs #291
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The OUTWARD artifact-missing handler was stranded after an unconditional
return (~100 lines of unreachable code including a legacy stdout parser).
Worse: a missing OUTWARD artifact fell through to legacy stdout parsing
instead of failing loud per ADAPT-9 authority. This restores the intended
else branch: declared file absent → ARTIFACT_MISSING, full stop.
Also narrows _pipeline_sha's blind except to its actual failure modes
(OSError, SubprocessError) — keeps the silent-handler ratchet at baseline
rather than adding debt.
Unblocked CI lint/unit-tests: the changed-file lint now reaches this file
(first PR to touch it since the F821 landed), so the pre-existing
undefined-name debt in this block had to be paid.
1213 tests pass in the CI-identical venv (requirements-ci.txt pinned).
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
test_adaptive_router.py spec-loaded a standalone instance into
sys.modules, splitting class identity (FloorViolation) across two module
copies — cross-file canaries failed on ordering pollution. Prefer the
normal import; spec-load only as the pathless fallback.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The known recurring TUNE from the overnight session: the lock drifts when
upstream releases land between CI runs. Applied the documented refresh
procedure. No project code changed.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Completes the ADAPT-2 revision per the 2026-09-10 handoff: the adaptive route authority is now operational (called by production, changes execution, persisted, observable), not merely implemented.
What changed
The audit found
classify_route()had zero production callers — architecturally implemented but cognitively dead (the exact §8 failure mode). Three commits fix this:69a233c— Production wiring: the ISSUE stage (the single dispatch entry) classifies the route before the fixed-depth chain. LOCAL_FIX terminally routes out to the local implementation/verification lane (ROUTED_LOCAL_FIX) — the research chain is never entered. Sufficiency inputs replace substring inference as primary evidence: 5 questions with traceable provenance; non-establishable facts are recorded as UNKNOWN and escalate (never manufactured certainty). Mechanism-uncertainty language (performance/timing/concurrency) makeslocal_authorityhonest — measurement questions are not source-readable. Deep-research floor: narrow, objectively detectable triggers;FloorViolationrefuses efficiency-driven bypass. Legacy boolean API preserved as a marked compat shim.8dfa76b— Targeted Evidence Probe + verification escalation: bounded uncertainty-resolution outside the canonical chain (5-key schema, cited sources required for GROUNDED, budget-capped — no probe loops). Dispatch resolves material unknowns via probes before final routing; failures record ESCALATION events and enter deep research. Real probing is opt-in (MIMO_PROBE_ENABLED=1) — dispatch stays deterministic by default.escalate_on_verification_failure()is the local lane's production hook; bare "test failed" evidence is refused.Escalation/downgrade/FINAL_ROUTE are persisted events in one append-only authority (
route.jsonl); every transition carries previous_route/trigger/evidence/decided_at. Full trail reconstructible from persisted state with no prose inference.Runtime Reachability acceptance (first application of the doctrine)
All six required canaries pass (tests/test_adaptive_router_wiring.py, tests/test_evidence_probe.py):
Verification
Notable design decisions
Closes #291 (revised scope). Related: #324 (unrelated checkpoint defect, filed separately).
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.