---
name: v0390-recharge-trust-trace
description: "v0.39.0 SHIPPED 2026-09-09 (milestone #33 rest): recharge rename, trust auto-seed, hook-trace retention. ⭐ An instrument that dies before the investigation is not an instrument."
metadata: 
  node_type: memory
  type: project
  originSessionId: 45d4cae9-0ba3-42ec-a68a-54197b32289e
  modified: 2026-09-09T01:21:05.066Z
---

**v0.39.0 shipped** (commit `1dd3470`, tag pushed, private release + public mirror + cplugs 0.1.19
all done). Gate PASS, 561 unit tests, `traceable-reqs check` exit 0. Milestone #33's remaining three
Requests. FIELD-VERIFY still OWED on all three.

**#34 hook-trace retention** (`REQ-HOOK-TRACE-RETENTION`). Two defects, both measured not estimated:
87 B/s, 512KB cap in 101 min, 247/263 lines (95% of bytes) were `arm_from_commune_frame` logging one
line PER STALE FRAME PER POLL. Collapsed to one summary line per poll (silent when nothing refused —
an unconditional summary is the same defect with a smaller constant) → ~32 h. And the roll was
`fs::write(path, b"")`, an in-place TRUNCATION performed by whichever endpoint crossed the cap, so
one agent's poll destroyed a peer's evidence; now rotates to `hook-trace.log.1`.
⭐ **An instrument that cannot outlive the gap between a defect and its investigation is not an
instrument.** I filed this DURING the milestone because #32's measurement was destroyed ~2 min after
it was written. Same family as [[node-local-book-gate]]'s validate-the-instrument rule.

**#24 recharge rename** (`REQ-RECHARGE-VOCABULARY`, ADR-**0011** — the plan said 0010, taken by
account-roots; check `ls docs/adr/` before minting a number). STAGED: `--across` / "commune across"
still accepted. ⭐ **A staged rename needs BOTH halves guarded, because each fails in the opposite
direction** — drop the new name and the rename never happened; teach the old one as current usage and
the staging is silently a no-op. `tests/recharge-vocabulary.sh` (modelled on `knock-vocabulary.sh`)
asserts both; it caught a real miss in `CONTEXT.md` on its first run. Ids NOT renamed — an id is
identity. History (CHANGELOG/ADR/plans) deliberately untouched.

**#31 trust auto-seed** (`REQ-TRUST-AUTOSEED`, `launch.rs`). Seeds `hasTrustDialogAccepted` +
`hasClaudeMdExternalIncludesApproved` + `hasClaudeMdExternalIncludesWarningShown` pre-spawn, tmp+
rename, on the root THE SPAWN resolves (account root > `$CLAUDE_CONFIG_DIR` > `~/.claude.json`),
write-only-when-wrong. ⭐ **Re-verified the key shape on the live store rather than trusting my own
60-day-old memory: 75/75 forward-slash, 0 backslash.** Never canonicalize (Windows `\\?\` prefix
would mint a second key nothing reads).

**#32 busy race ships NOTHING, deliberately.** Stated root cause REFUTED (UPS *does* mark busy).
⭐ I demonstrated candidate (b) is REACHABLE by hand — that is NOT the claim that it FIRES in the
field, and only the second justifies a fix. Its measurement needs #34's retention IN THE FIELD, so it
opens the next milestone: `BUSY-RACE-PLAN.md` (step 0 = install v0.39.0 and confirm the instrument).

**A CLOSED, CHANGELOGGED FIX THAT REACHED NOBODY** — the sharpest finding of the release, and found
by ACCIDENT. `package-skeleton.sh --apply` staged a `send/SKILL.md` diff I never touched: the fix for
**#17**, committed under an EARLIER release whose skeleton step was judged unnecessary. Issue closed
on merge, changelog moved on, zero users had it until v0.39.0 happened to carry it (the sweep then
credited #17 to v0.39.0 — correct, that IS when it shipped). ⭐ **The runbook was right and the
judgement was wrong: a skill BODY edit is a structural plugin change.** ⭐⭐ **A rule that depends on
per-release judgement fails silently; a gate does not.** Filed as **#35** (a predicate gate refusing a
release when `plugin/sptc/` differs from the PUBLISHED skeleton without a `plugin.json` bump — the
repo tree alone cannot tell delivered from undelivered, so the published copy is the baseline).
Verified after the push: repo tree == published cplugs, so nothing is stranded *now* — but #17 was
found by accident, so the historical population was never established. Same family as
[[v0261-hints-never-called]] (declared ≠ delivered).

**Release mechanics re-confirmed this run:** `mirror-public.sh --apply` in position 1; the snapshot
tree excludes `traceable-reqs.toml` and root `*-PLAN.md` — I verified that at the CONSUMER
(`git ls-tree` on the snapshot sha) rather than trusting the guard's exit, per
[[exit-zero-from-a-flag-order-noop]]. `package-skeleton.sh --apply` surfaced a `send/SKILL.md` change
from an EARLIER release whose skeleton step was skipped — ⭐ a skipped skeleton step leaves drift that
only shows up at the next one, so read the cplugs diff before committing it.

Related: [[commune-loop-and-stale-brief-task]], [[v0384-commune-frame-replay]],
[[claudejson-write-hazard]], [[f027-trust-seam-groundtruth]],
[[headless-spawn-external-imports-gate]], [[release-notes-ux-only]].
