---
name: v0400-echo-race-workaround-retired
description: "v0.40.0 SHIPPED 2026-09-09 (#37): retired the recharge timing workaround after spt-core 0.68.0 removed the drop-path race. ⭐ Retiring a workaround is a CORRECTION, not a deletion — enumerate what the old text guaranteed. ⭐⭐ Guard the COUPLING (brief+floor), never the wording."
metadata: 
  node_type: memory
  type: project
  originSessionId: f3635e58-bddb-43d0-8b7a-586a2afd835b
  modified: 2026-09-09T11:59:47.787Z
---

**v0.40.0 shipped, mirrored and installed** (commit `a8089ff`, tag `v0.40.0`, public snapshot
`f741355`). Gate PASS 79 checks, `traceable-reqs` exit 0. `#37` DONE. NO skeleton step — `plugin/`
untouched.

**Operator trigger:** "spt-core v0.68.0 is released, so the 'extra tool call' instruction for
recharges should no longer be needed." The premise was TRUE, and verified before acting rather than
taken on faith.

## The mechanism, not the say-so

Until 0.68.0 core's echo host wrote the SAME path as the agent's commune drop, so a marker-bearing
recharge written as a turn's last act could be overwritten unread and its wake never fired. The
brief's answer was a timing rule (never write it last; spend one more tool call).

⭐ **What makes removal safe is not "core fixed it" but the consequence: with nothing overwriting the
drop, the FRAME LEG now reads the AUTHOR's bytes**, so a last-act commune still arms via
`REQ-COMMUNE-FRAME-BACKSTOP` with no timing discipline. Name the mechanism, not the fix.

## ⭐⭐ Retiring a workaround is a CORRECTION, not a deletion

Enumerating what the old text guaranteed found **two statements 0.68.0 made FALSE**, which a
one-line removal would have left teaching falsehoods:

1. *"the drop file being gone proves nothing either way — either writer's ingest deletes it"* — one
   writer left, and the docs now call the file disappearing the CONSUMED signal.
2. *"a payload starting `Source: echo-commune` means the echo won and your delta never landed"* —
   core deliberately KEPT that header (claude-spt keys its authorship refusal on it), so the echo
   still publishes those frames legitimately. Left in place this raises a FALSE ALARM on every one
   and drives agents to rewrite good communes forever.

Same family as [[v0383-echo-commune-authorship]]: a replacement deletes properties the old rule
supplied incidentally. Enumerate before rewriting.

## ⭐⭐ Guard the COUPLING, never the wording

`min_spt_core_version` 0.66.0 → 0.68.0, and **the floor is the load-bearing half**: a node on 0.67.x
reading the new brief takes the last-act path and loses its recharge wake SILENTLY.

`tests/echo-drop-race-retired.sh` asserts the IMPLICATION — *brief lacks the timing rule ⇒ floor >=
0.68.0* — compared as ordered version components so a legitimate future floor rise stays green. **A
wording pin would have stayed green if someone later lowered the floor**, which is exactly the
combination that hurts. Mutation-checked four ways; restoring the workaround alongside a LOW floor
stays LEGAL — only the unsafe pairing is refused.

`REQ-ECHO-DROP-RACE-RETIRED` (doc/unit). ⭐ **No `impl` stage on purpose**: the only implementation
is a manifest DECLARATION and the scanner does not read `.toml` (established convention —
`REQ-DIST-SESSION-RESUME`), so the unit test asserts the floor's VALUE instead.

## ⭐ Two mistakes, both caught by gates rather than by me

1. **My own test's predicate was wrong on its FIRST run.** A bare `last act` grep matched the
   CORRECTED brief's wording ("your turn's very last act") and reported the workaround as still
   present — the instrument answering the exact OPPOSITE of the truth, on the very check written to
   prevent that class. Match prescriptive forms, not incidental phrases. Run a new test and read
   which branch it took, never just its exit code.
2. **The mirror leak guard caught me putting private-home repo literals into two public-bound
   files.** Removed the references rather than growing EXCLUDES (reserve that for surfaces that
   genuinely must name the private home). ⭐ **`docs/plans/` IS mirrored publicly** — only ROOT
   `*-PLAN.md` is excluded, as a `:(glob)` class — so a private ref in `docs/plans/` is a real leak.

## Node condition found and reported (NOT claude-spt)

`spt serve list` → `SERVE_UNCONFIRMED: daemon did not answer` **and exits 0 while printing it**.
`spt docs url` prints `http://localhost:5474/<node>/docs/` which **404s**, while the same server
answers 200 at `/` and serves the whole mdBook. Hypothesis (offered as one, not falsified): the
serving registry never confirmed, so the node-scoped route is unregistered while the raw book still
serves at root. ⭐ **An agent following `spt docs url` gets a 404 and may conclude the docs are
unavailable rather than that the URL is wrong — I nearly did, mid-release.** Reported to doyle;
`ADAPTER_WEB_PENDING` on `adapter update` is the same subsystem. Adapter install itself verified fine.

Related: [[v0391-profile-string-resolution]], [[v0390-recharge-trust-trace]],
[[brief-rule-scoped-to-mechanism]], [[list-vs-predicate-assertions]],
[[exit-zero-from-a-flag-order-noop]], [[node-local-book-gate]].
