# releases#113 — echo-commune cadence, lane JIT (todlando, 2026-08-30)

Lane worktree `.worktrees/ns23-113`, branch `feat/113-echo-commune-cadence`, base `343df76e`.
Pool `ns23-113` claimed from this worktree. **W1 landed meanwhile — main is now `31020e02`, one
pick ahead of this base. Rebase-or-assemble is a park-time call; this lane touches no file W1
touched (`nowsignal.rs` is not in the diff), so no conflict is expected.**

## The four forks, as ruled (doyle, 2026-08-30)

Three of the four were ruled on premises that MEASUREMENT FOUND FALSE, and each went back as a
stop-refer before any code was written. That is the whole shape of this lane.

| fork | ticket / W0 premise | measured | ruled |
|---|---|---|---|
| 1 TRIGGER | "spt-core echoes only on attention change; an agent working for hours never echoes" | **FALSE, inverted.** `cmd_state`'s idle arm writes the gate unconditionally (published contract, api.md) and `api state idle` IS the turn-end report — so it echoed at EVERY turn end. The missing piece was the AGE GATE, not the trigger | SPLIT THE SENTINEL BY ARM — two files. Edge arm ungated; work arm at >= 15min with the three legacy mechanics |
| 2 SURFACING | "spt-core mirrors cadence echoes into the running context; legacy did not" | **FALSE.** Nothing mirrored. `run_echo_commune` writes a drop file (ingest -> durable tiers, read at resume) and `record_context_injection` only appends a digest line; ADR-0019 defers the read-back loop. The "mirror" was a COMMENT plus the `echo_mirror` kind name | no removal exists to perform; the RE-KIND is the whole fix, comment corrected in the same commit |
| 3 BOUNDARY DELTA | unmeasured at W0 | **NO delta caught, on three arms** — see `NS23-113-BOUNDARY-DELTA-MEASUREMENT.md` (main tree root) | build it: the constraint is INPUT-BEFORE-ROTATION, shape mine |
| 4 CONFIGURABILITY | — | — | 15-min HARDCODED this phase; NO watermark this phase |

## Built

- **Fork 2.** `KIND_ECHO_MIRROR`/`echo_mirror` -> `KIND_ECHO_COMMUNE`/`echo_commune` across the
  const, the call site, `lib.rs`, three doc comments, ADR-0019 (**amended by replacement**), the
  integration checklist and json-shapes. The false comment at `echo.rs:169` is corrected in
  place. `REQ-TERM-7` title amended by replacement to carry the phantom correction, and retagged
  in the same commit. Residual `echo_mirror` in `crates/`, `docs/`, `docs-site/`: **zero**
  (`DIGEST-MILESTONE-PLAN.md` keeps its historical mention deliberately — it records what was
  decided then, not what is true now).
- **Fork 1.** `EDGE_ECHO_SENTINEL` (`.echo-edge`) and `TURN_ECHO_SENTINEL` (`.more-done`, which
  keeps the name because that is exactly what it means). `take_turn_echo_gate` answers
  `NoSentinel | Fresh{remaining, aged_by} | Fire{aged_by: Option<AgeSource>}` — birthtime with a
  DECLARED mtime fallback, and `Fire{aged_by: None}` **is** the fail-open arm. A fresh sentinel
  is LEFT IN PLACE (clearing it would reset the age the arm exists to accumulate — the failure
  that would look armed and be dead). The daemon loop pulls ONE deadline in to land just after a
  near crossing, never re-phasing the durable D5-2 grid. `echo-gate set` arms the edge arm;
  `clear` clears BOTH.
- **Fork 3.** `cmd_boundary` records the departing sid (captured under the SAME lock as the
  rotation) and arms the edge gate — record written BEFORE the arm, so a pulse that sees the gate
  always finds the record. The pulse read-and-clears it and fires with that session as the
  history key, trigger `boundary`. First-wins on an un-consumed record. Best-effort in both
  halves; it can never fail the boundary.
- **REQs minted BEFORE the code**: `REQ-ECHO-IDLE-AGE-GATE`, `REQ-ECHO-BOUNDARY-INPUT-BEFORE-ROTATION`
  (both `doc, impl, unit`), plus the `REQ-TERM-7` amendment.

## Remaining

1. Unit runs green (`spt-live`, `spt-store`, `spt`, `spt-daemon`), then `traceable-reqs check` -> 0.
2. `xtask check`, `cargo clippy --workspace --all-targets -- -D warnings`.
3. Battery env-scrubbed with the leg-0 reap, both phases.
4. Commit, hand doyle the sha. **Do not land** without his gate.
5. Park-time call: rebase onto `31020e02` or hand him the base and let assembly place it.

## Next after this lane

W2 = #44 channel, then #45 alerts (one lane, two commits minimum). doyle has the gate rig
`gate-ns23-w1` + pool held warm for it, claim released for a sequential takeover.
