# W6 GATE VERDICT — LIFECYCLE-TRUTH (final wave) — **PASS**

**Gater:** doyle · **Date:** 2026-07-07 · **Wave head:** `fbf5d35` · **Ruling:** `docs/W6-DISPATCH-RULING.md`

W6 is the LAST wave. Docs-only (+ one adapter wiring already closed). **PASS — milestone
LIFECYCLE-TRUTH is COMPLETE.**

## Scope delivered (3 items)

### 1. REQ-DOC-ECHO-COMMUNE-CONTRACT — `[doc]` ✓
`docs-site/src/harness-contract/echo-commune.md` (new, 187 lines). Reviewed FAITHFUL to the
W1 shipped contract:
- role fields + key catalog (id/session_id/node/subnet/adapter_dir/adapter_name/{VAR});
- "History is not fed on stdin" — the field-proven no-stdin-transcript rule (self-source like `[digest]`);
- read-env self-locate (`CLAUDE_CONFIG_DIR`, `direction="read"`, capture-at-bind, resolution order);
- drop-file protocol = single-writer `<id>-commune.md` + per-endpoint resolver
  (absolute→as-is / relative→endpoint cwd / relative-no-cwd→**loud once-skip, no daemon-cwd fallback**)
  + ingest-deletes — exact match to REQ-ECHO-DROP-DIR-RESOLVE + REQ-PSYCHE-ROLE-OPTIONAL-SKIP;
- stdout = the brief, two-slice envelope ingest.
- "hardened in v0.29.0" stamp = counter-49 (correct — W1 resolver ships first in the counter-49 cut).

### 2. REQ-DOC-DELIVERY-VOCAB — `[doc]` ✓
`docs-site/src/reference/json-shapes.md` (new, 114 lines) + tagged send-outcome vocab in
`docs-site/src/messaging/overview.md`. Reviewed FAITHFUL:
- send-outcome closed set (SENT / SENT(WAN) / QUEUED / QUEUED(idle-only) / DEFERRED / NO_PERCH);
- `endpoint digest --json` Turn/Entry schema + `after_predates_window` cursor;
- shell relay MAC-stamp (64-hex HMAC-SHA256, key = SHA-256(link_token)) + `api poll` auth split;
- full `--json` catalog (seed #3).
- Spot-checked DTO field names against source (3 samples, all match): daemon-status
  `stall_evict_count/last_ms/pump_heartbeat_ms/broker_stale` (cli.rs:3956-3980),
  `AdapterVersionJson{adapter,version}` (cli.rs:8641), digest `input_seq`/`after_predates_window`.

### 3. SPT_INJECT_VERIFY_ECHO CC-manifest wiring — CLOSED adapter-side (perri) ✓
claude-spt v0.15.8 landed + node-applied: manifest carries `[env.SPT_INJECT_VERIFY_ECHO]`
direction=inject value=1, unit-covered, gates green. Floor stays 0.27.0 (env inert on pre-49
cores, self-activates on the counter-49 core deploy — forward-safe, no floor gate). NOT a
spt-core gate blocker; the broker-arms E2E rides the counter-49 wave verify (needs the new core live).

## Gate checks (all GREEN)
- `traceable-reqs check` exit-0 — both W6 REQs `+doc`, **NON-vacuous** (real HTML-comment doc
  tags, written `[doc→…]` here with an arrow so this line is not itself scanned as evidence, on
  the doc-site pages).
- `xtask check` OK — docs-drift + no-internal-codes token gate clean.
- No visible internal codes (`REQ-*`/`F-###`/`M#-W#`/`ADR-####`) in the published page prose —
  the traceability tags are HTML comments, never rendered ([[public-docs-version-not-milestone]]).
- `mdbook build` renders clean — no broken anchors/cross-links (SUMMARY + intra-page).
- Docs-only → **no cross-platform leg required** (no path/platform semantics changed).

## Two flags from todlando — both correct, accepted
1. **Vacuous-tag neutralization:** my `docs/W6-DISPATCH-RULING.md` gate-criteria line carried
   literal `[doc→REQ-DOC-*]` tokens (arrow shown here) that `traceable-reqs` scanned as REAL evidence — a ruling
   doc satisfying a doc stage vacuously. todlando rewrote `->` to `→` so the scanner skips it.
   Correct per the tag-on-real-evidence rule (CLAUDE.md §1). Real evidence lives only on the
   doc-site pages.
2. **`since v0.29.0` stamp:** counter-49 = v0.29.0 (standard increment from published v0.28.0 =
   counter 48). Assumption confirmed against the release ledger. One-word fix only if the cut
   number differs — it will not.

## Milestone close
**LIFECYCLE-TRUTH is COMPLETE** — all 6 waves gated (W1–W5 code, W6 docs). Remaining steps are
**operator-gated**, not build work:
1. **Release counter 49 (v0.29.0)** — deployah drives on operator wake. Deploys W1–W5 code incl.
   the fire_echo drop-dir resolver that clears the OLD-live-daemon commune FAILED stamps.
2. **W1 field-accept swap window** — operator-coordinated; daemon restart brings live endpoints
   back via ENDPOINT-SURVIVAL (delivers W1 + W2 live together).

CHANGELOG census covers v0.28.0..HEAD (the counter-49 cut).
