M3 Gate Report: Production Honesty Boundaries #

Milestone: M3 — production callers, reachable branches, and failure readers Owner: m3-gate Date: 2026-09-11 Repository: /Users/dawn/proj/klbr Snapshot: uncommitted working tree at gate-run time; no commit or pushed snapshot is claimed here.

1. Executive Summary #

M3 did not primarily add features. It connected honesty claims to the whole production path: every claim now has a production caller, a branch that can actually be reached with production inputs, and a reader that exposes failure to the system or operator. The gates exercise the real daemon or Agent::run_turn path and bind their assertions to request bytes captured at a local TCP provider boundary.

The request gates cover causal prompt-prefix stability, route-scoped cache fields and usage absence, required-guidance overflow, and restart reconstruction after an unreported cache miss. The overflow path now refuses the provider request, persists a typed failure, and emits a client-visible error. The restart test constrains the cache adapter; it does not repair a cache-driven reset path, because no such reset path existed at M3 start.

The gate table's YES means source/helper and deterministic end-to-end evidence. Real-model authorship and later observed benefit remain NOT RUN for every item.

2. Gate Table #

item owner exact command exit code + pass/fail honesty label mutation receipt
U19 — causal request prefix survives reconnect and committed wake/helper evidence m3-compiler + m3-gate cargo test --locked -p klbr-daemon --test m3_request_gate u19_actual_request_prefix_survives_reconnect_and_causal_updates -- --nocapture 0; 1 passed, 0 failed YES Pending-tail push mutated to insert(0, ..); exit 101, panic m3_request_gate.rs:410: request 1 moved prior messages; restored.
U20 — cache profile is route-scoped; absent usage is distinct from reported zero; changed-route merge reaches wire m3-adapter + m3-gate cargo test --locked -p klbr-daemon --test m3_request_gate u20_actual_wire_is_profile_scoped_and_usage_keeps_absent_distinct_from_zero -- --nocapture and cargo test --locked -p klbr-daemon --test m3_request_gate u20_changed_route_merge_reaches_wire_without_inherited_cache_profile -- --nocapture 0; 1 passed, 0 failed for each YES Removed stream's apply_to_request; exit 101, panic m3_request_gate.rs:558: unsupported route emitted prompt_cache_key; restored.
U21 — required-guidance overflow refuses the request and reports the typed failure m3-compiler (core gate); m3-gate (daemon gate); m3-context (contract) cargo test --locked -p klbr-core --test m3_guidance_gate -- --nocapture (m3-compiler); cargo test --locked -p klbr-daemon --test m3_request_gate u21_required_guidance_overflow_stops_before_provider_request -- --nocapture (m3-gate) 0; 2 passed, 0 failed in core; 0; 1 passed, 0 failed in daemon YES Replaced the UnresolvedBudget bail with a no-op; exit 101 after 13.83s, Error: client did not receive required guidance budget error; restored.
U22 — reported cache miss preserves semantic history across daemon restart without fabricated turns m3-resilience + m3-gate cargo test --locked -p klbr-daemon --test m3_request_gate u22_provider_miss_replays_same_semantic_history_without_fabricated_turn -- --nocapture 0; 1 passed, 0 failed YES ctx.clear() mutation caused the exact prefix assertion at turn.rs:793 to fail; restored.

The complete owned gate binary was also run: cargo test --locked -p klbr-daemon --test m3_request_gate -- --nocapture — exit 0, 5 passed, 0 failed. Workspace compilation was checked with cargo check --workspace --locked --all-targets — exit 0.

3. Four Honesty Labels #

For U19–U22, source/helper implemented is YES and deterministic end-to-end execution is YES. Real-model authored evidence is NOT RUN; later observed benefit is NOT RUN. No gate claims either of those unmeasured properties.

4. NOT RUN #

The following are explicitly NOT RUN, and M3 makes no claim about them:

  • real-model-authored evidence;
  • later observed benefit or longitudinal improvement;
  • Linux/NixOS validation;
  • long-duration soak testing;
  • filesystem fault injection;
  • the (c) real-model-authored column and (d) later-observed-benefit column;
  • a clean full-workspace pass: NOT RUN / UNRESOLVED; the battery result is disclosed below.

The full workspace battery (cargo test --workspace --locked --no-fail-fast) was run twice: 615 passed across 40 suites, with ONE failing test, service_lifecycle::service_quiesce_preserves_waiting_deadline_and_resumes, failing with database is owned elsewhere or locking failed: WouldBlock from klbr-runtime/src/store.rs:220 (non-blocking File::try_lock). That suite passes 5/5 in isolation. The failure is under separate investigation; M3 does not claim it is green, and does not claim it is unrelated. No M3 gate item depends on it. No live provider measurement is claimed.

5. The Defects Found #

All six defects had the same species: an honest component whose honesty did not reach the system.

  1. ContextReceipt had no production caller. The component could describe request identity, but the daemon did not compile or persist it on the live path.
  2. GuidanceStatus::UnresolvedBudget had no daemon reader. The engine returned an honest signal that the caller ignored.
  3. Production passed usize::MAX as the guidance budget. The unresolved-budget branch was therefore unreachable. A guard that cannot fire is not a guard.
  4. Overflow logged and broke. The path did tracing::error! plus break, with no client error or durable turn-failure audience. That is silent truncation's twin.
  5. Gemini used unwrap_or(json!(0)). It fabricated a measured zero upstream of four layers that each preserved absence correctly.
  6. The U22 negative test used usize::MAX as its watermark. Its no-compaction assertion could not fail because compaction was impossible by construction. It now uses a finite watermark with context genuinely below it.

6. Limitations #

No commits were pushed. No live beads issue IDs are invented here. Rust tests were authored and run, but Linux/NixOS validation, long-duration validation, filesystem fault injection, real-model authorship, and later observed benefit were not run. M3 therefore does not claim them.