---
name: echo-commune-overwrites-fresh-commune
description: "A fresh hand-authored doyle-commune.md was OVERWRITTEN minutes later by 'Source: echo-commune' carrying a STALE earlier-session summary — latest-write-wins on the commune drop-box means an echo writer can replace live testimony with dead state."
metadata: 
  node_type: memory
  type: project
  originSessionId: d699f8c2-d295-4a58-a94f-4a80031a23c1
  modified: 2026-09-06T08:05:15.162Z
---

Observed 2026-08-18 (~06:4xZ, NAMEPLATE fix-first session): doyle authored
`.claude/doyle-commune.md` (fix-first ruling executed, todlando dispatched), and minutes later
the file held `Source: echo-commune` content instead — a summary of an EARLIER doyle session
(auth-expiry idle stretch, threads: hertz ENLYZEAM corroboration, ball-b evidence for lia).
The echo content was internally coherent and identity-correct, so nothing about it LOOKS wrong
on resume — only content-vs-measurement comparison catches it ([[resumed-session-reground-before-acting]]).

**Why:** the commune file is a latest-write-wins drop-box. Any second writer (here an
echo-commune generator, presumably summarizing a previous session's transcript on a delay)
silently replaces live testimony with stale state. Which write the psyche daemon ingested is
NOT observable from the file ([[commune-ingest-dies-silently]]).

**How to apply:** after writing a commune in a session where echo-commune may fire, treat the
file as clobberable — if it matters, re-check and re-write (correct by replacement, carrying
any live-looking threads from the echo as UNVERIFIED rather than dropping them). On ANY resume,
rank the brief by content-vs-measurement, never by which write is newest; an echo brief can be
newer AND staler.

**Mechanism — TRACED (perri by direct observation 2026-09-06; doyle read the source same day):**
the writer is core's echo-commune host, `crates/spt-live/src/echo.rs:156-166` (`run_echo_commune`):
it composes `commune_dir/<id>-commune.md` — the SAME path the live brief tells the agent to write —
and `atomic_write_string`s it UNCONDITIONALLY. No existence check, no unread-drop refusal, no merge;
the module comment still calls core the "single writer" (stale vs the across-commune protocol).
Ingest then deletes the file ~4s later, so an authored drop still waiting for ingest is replaced and
the authored bytes exist NOWHERE (disk, funnel, digest, mind). perri's funnel replay (`spt api
io-events <id> --after <seq>`, non-destructive) over 342 events: 5 authored drops, the 2 with an
echo landing inside the ingest window (+3s, +11s) emitted NO COMMUNE frame, the 3 without survived —
5/5. Widest exposure: a commune written as a turn's FINAL act (~10s unread vs 2.8-5.8s ingest floor).
Adapter cannot fix it (file leg loses the race, frame leg reads the echo). Filed on the board via
alchemy 2026-09-06 as a bugfix (ref in [[v0670-arc-in-flight]]); candidate fix = distinct echo path
or refuse-to-overwrite-unread. Full write-up: spt-claude-code/docs/plans/ECHO-COMMUNE-DROP-COLLISION.md.
**Until fixed:** write the across-commune mid-turn and take one more tool call after it (so the
adapter's PreToolUse leg reads it inside the ingest floor), never as the turn's last act.
