---
name: m9-wave3-digest-progress
description: M9 Wave 3 / G3 — session-digest log-source re-foundation (REQ-TERM-4); G3 STAMPED PASS, PR#10 held
metadata: 
  node_type: memory
  type: project
  originSessionId: 86f6382c-e3ce-4405-a345-5f5ce8b948e7
---

**M9 Wave 3 (G3) — session digest re-founded on session logs** (ADR-0008 amendment). doyle-vetted plan `M9-WAVE3-JIT.md`; greenlit 2026-06-13. Branch `m9-digest-logs` off the M9 stack tip (`m9-gateway-wan` @ 58f034f). **PR #10 open** (base m9-gateway-wan), awaiting doyle's **G3 gate**.

5 commits, all green (clippy -D workspace, cargo test --workspace, xtask check, traceable EXIT=0):
- 82ead73 T7a `spt-term::projection` — published **digest-record contract** (`{role∈input|agent|tool, text, tool{name,arg}}`) + project/project_lines + 8 units
- 6033326 T7a `api digest-entry` door + `spt_store::append_digest_entry` → separate `digest.log`
- 5a09577 T7b-core on-demand projector (`project_endpoint_digest`) + `DigestHub::project_and_publish` + `reproject` verb; removed dead `run_digest_feed`; CC-fixture E2E
- ba8e3c1 T7b retire+re-point: deleted DigestParser/PtyDigest/[pty_digest] (schema re-blessed, regex dep dropped); RETITLED REQ-TERM-4 honest log-source title + impl/unit/int tags on projection+E2E; migrated native fixture; full docs sweep

**KEY ARCHITECTURE:** digest is now an **on-demand projection** of normalized session logs, NOT a PTY byte-parse. **Topology-independent** — harness-hosted (Claude-Code) endpoint with no broker PTY gets a digest. The byte-feed (`run_digest_feed`) had **zero production callers** — never live-wired — so retire was clean. History subsystem stays opaque; the digest-record contract is spt-core's published overlay on the line content (one schema, no mapping layer). digest rides `[history]`, no manifest seam.

**doyle RULINGS folded in:** §2 = approach A (spt-core PUBLISHES the contract, not "adapters already emit it"; migrate the stray fixture). T7b scope = snapshot-pull on-demand projection IS the G3 bar; **autonomous file-watch freshness + Option-C persistence re-home DEFERRED** (tracked in `docs/DEFERRED.md`, consuming-frontend milestone — no consumer yet: Shell M10 / GUI pane / Gateway window). Delta-stream CONTRACT ships, deltas driven by pull/digest-entry pushes. G3-note wording locked: "autonomous file-watch freshness deferred to consuming-frontend milestone; snapshot-pull + push-driven deltas delivered."

Side-check done: T5 twohost honored-path int already logged REQUIRED-BEFORE-LECTURN on REQ-MSG-6 + ROADMAP:81 (commit 58f034f) — nothing to add.

**G3 GATE: PASS — doyle STAMPED 2026-06-13.** Independently verified end-to-end: title honest (1fc6236 dropped the Option-C overclaim), evidence doc+impl+unit+int on real code, no orphan tags, retire grep-clean (his one hit a false positive: "em-pty_digest" substring in test name), CC-fixture E2E 1/0 topology-independence proven, workspace zero-fail + clippy -D + --no-default-features + xtask check, docs sweep + BOTH deferrals logged. ONE HOLD during gate (title overclaimed "opt-in Path-B log" = deferred Option-C, no evidence) — FIXED 1fc6236, doyle re-verified, cleared. doyle praised the byte-feed-never-live discovery + the second Option-C deferral catch.

**M9 ("Adapter customization & session surfaces") COMPLETE** — all four gates closed: G1 ✓ G2 ✓ Gateway-WAN ✓ G3 ✓ (see [[m9-gateway-wan-progress]]). **DO NOT MERGE PR #10** — operator/release-gated only (policy 2026-06-13); PR stays open as the gate vehicle, no tag rides M9. STAND DOWN on M9; next move is the operator's.
