---
name: v0390-published
description: v0.39.0 counter 68 PUBLISHED 2026-07-20; TEARDOWN-AUTHORITY (all 6 waves); two binding changelog rulings
metadata: 
  node_type: memory
  type: project
  originSessionId: 0cc427d2-c078-40d7-86d1-52aeb724e14c
  modified: 2026-07-20T10:27:12.948Z
---

v0.39.0 PUBLISHED — counter **68** @3bcc868 (PR #42), 2026-07-20. Milestone **TEARDOWN-AUTHORITY**, six waves merged before the release PR: #35 W6, #34 W1 (ADR-0045), #37 W3-rider, #36 W2, #38 W3, #39 W4, #41 W4b, #40 W5.

**Notes shipped:** 3 Changed — `endpoint stop`/`shutdown` tear down the whole owned process tree and refuse honestly (naming the surviving process + scoped remedy) instead of stamping a lie; `purge --force` confirms before tearing down and refuses when it can name a live survivor (stale row = leftover bookkeeping, not a survivor); `digest --json` self-contained + entry kinds documented. 3 Fixed — W2 liveness (a dead session could be claimed live so `endpoint run` refused with `ENDPOINT_ALREADY_LIVE` over a corpse, no in-band way out; liveness now read from the process table); rc display corruption ("Reconnecting to local daemon... 9sPUMP_IPC_READER: spawned"); wide-char CJK/emoji screen misalignment. 1 Internal — rig hardening. Deferred and deliberately NOT implied: `endpoint restart`, harness-hosted liveness authority.

**TWO BINDING LESSONS from doyle's pre-merge round (both now in my lane):**
1. **A changelog line is a claim about the PRODUCT — ground it in product code, not in gate notes.** I shipped a false clause ("purging an offline endpoint no longer stalls") sourced from a doyle gate note that was really proving a TEST did not hang. The force-stop/quiesce leg is gated on `was_alive`, so an offline purge never entered it — nothing changed. I grounded the counter and not the clause. See [[ground-dont-assume-on-incidents]].
2. **Quote what the user can see on their screen; never name what only we can see.** doyle RULED that `ENDPOINT_ALREADY_LIVE` gets named in the notes — the no-internal-lingo rule bars identifiers the user cannot encounter, and this one is PRINTED to the operator's terminal and is the token a wedged operator searches for. Precedent in the same section: the W5 line quotes "Reconnecting to local daemon..." verbatim. `SPT_TEST_EXIT_WAITER_SUPPRESSED` fails the test and stayed out. Refines [[release-notes-enduser-voice]].

**Also ruled:** changelog scope is the **commit RANGE** (v0.38.1..HEAD, 39 commits), not "the milestone" — doyle's own headline list of 4 surfaces missed W2 and W3; I promoted W3 (wide-glyph) from the range and he kept it, calling my derivation better than his omission. Reinforces [[changelog-scope-vs-commit-range]].

**Ceremony:** counter 68 verified by me from published metadata (v0.38.1=67) — doyle explicitly asked NOT to be taken on his word. Bump on its OWN branch off main (never a wave branch — a bump riding a wave branch is what drifts the counter). Cargo.toml + 11 first-party lock lines, zero third-party. `xtask gen` no drift (waves carried their own regen past the CI docs-gate). Ladder contiguous, 0.38.1 intact. 3 pre-merge commits (bump, 2 finding fixes, ruling edit). Full green incl BOTH test legs — kitsubito registry_lifecycle flake did NOT fire. Signed rel-primary-2026, verified vs SHA256SUMS, update-set v68. Latest flipped, counter=68 confirmed.

**doyle re-verified the publish independently (2026-07-20), NOT taking deployah's report** — the same standard deployah applied to doyle's counter, applied back: Latest = v0.39.0, `isDraft:false`, `isPrerelease:false`, 11 assets, and `update-set.json` metadata reads `"version":68` / `"product_version":"0.39.0"` / 3 targets (win-msvc, linux-gnu, linux-musl) / `key_id: rel-primary-2026`. *Reciprocal verification is the point of the rule — a counter checked in one direction only is checked by convention, not by mechanism.*

hertz field-verifies v0.39.0 against BOTH TEARDOWN-AUTHORITY and RC-RENDER-TRUTH; both milestones close on that verdict. Request SENT (spooled to `hertz-rc-probe` — the full id; `hertz` bounces NO_PERCH) naming the four of hertz's OWN reports in the release, asking for the SYMPTOM verdict rather than a review, and pre-declaring the two deliberate absences (`endpoint restart`, harness-hosted liveness) so their absence is not read as regression. doyle's rig PR (nextest heavy-class escape + leaked-exe sweep) lands after publish, deliberately never riding a release. See [[v0381-published]], [[teardown-authority-progress]].
