---
name: v0394-published
description: "v0.39.4 counter 72 PUBLISHED 2026-07-21; RC-RENDER-TRUTH presentation barrier; symptom-scope correction vs retraction; grounding a loose GO on the actual changelog bodies"
metadata:
  node_type: memory
  type: project
  originSessionId: 0cc427d2-c078-40d7-86d1-52aeb724e14c
  modified: 2026-07-22T01:12:07.490Z
---

v0.39.4 PUBLISHED — counter **72** @03e4957 (PR #52), 2026-07-21. Off main @d957326 (PR #51: RC-RENDER-TRUTH presentation barrier + additive `sync` wire flag). Patch on the 0.39 line. Cut entirely from `.worktrees/release-lane`; shared root was on `fix/rc-resize-presentation-barrier` (todlando's, OCCUPIED) and never touched — occupancy protocol held clean this time.

**Headline (Fixed):** resizing a controlled or viewed terminal no longer garbles the live view. Output is held while a resize settles; when the new size lands, every attached window gets one clean repaint at that size (same clean-screen refresh as attach). Prior releases repaired the server screen MODEL (what a fresh attach repaints) but never gated LIVE delivery, so an already-attached window still rendered mixed-size output mid-resize — the field symptom persisted. This closes the live-delivery seam.

**⭐ GROUND A LOOSE GO ON THE ARTIFACT, NOT THE MESSAGE.** doyle's GO said "v0.39.0 AND v0.39.1 each carried a Fixed claim for rc resize corruption — quote each." I grepped the actual published bodies in CHANGELOG.md: v0.39.1 has the clean resize claim; **v0.39.0's Fixed section has NO literal resize claim** (its three items: ENDPOINT_ALREADY_LIVE, connect-time corrupted output, wide-char alignment). A fabricated/mis-attributed quote in a CORRECTION section — whose entire value IS attribution — is self-defeating. Stopped and asked rather than invent. doyle: "right stop; my GO phrasing was loose." This is [[ground-dont-assume-on-incidents]] applied to a gater's own instruction: even a GO gets grounded against the source when the source is checkable.

**⭐ SYMPTOM-SCOPE CORRECTION ≠ RETRACTION (doyle's ruling, new correction shape).** Two prior claims, two different framings:
- v0.39.1 resize claim → the DIRECT quote/gap/closure ([[v0393-published]] template): quote verbatim → gap (true of the stored screen model, not of live delivery) → closure (this release holds delivery + clean repaint).
- v0.39.0 (c) wide-char claim → a **symptom-scope correction, explicitly NOT a retraction**. That fix "was and remains correct for its cause — wide characters." But the SAME visible symptom (rows shift left, fragments at the right margin) had a SECOND cause (resize) still present, so operators kept seeing it and read the claim as false. Frame: *"that claim fixed one cause of this symptom; a second cause (resize) remained, and is closed by this release."* Claim-class vs evidence again — the claim was accurate for its evidence; the symptom just wasn't wholly owned by that one cause.
- v0.39.0 (b) connect-time corruption → **EXCLUDED**: different symptom family (garbage while connecting, root in startup diagnostics), no field falsification; citing it blurs the very attribution the correction protects. A correction section names only the claims a reader was actually misled by.

**Rule for next time:** when THIS release completes a symptom that a PRIOR note claimed fixed, sort each prior claim by whether it was WRONG (retract) or CORRECT-BUT-INCOMPLETE-FOR-THE-SYMPTOM (symptom-scope). Only quote claims the reader could have read as false in the field. Published text wins over the gater's paraphrase on the actual quote.

**Ceremony notes:**
- Counter 72 self-verified from published metadata at authoring time (v0.39.3=71). Re-verified from published after flip: counter=72, product=0.39.4, stable, rel-primary-2026, draft=false.
- **quick-xml third-party gotcha:** lock `version = "0.39.4"` count came back **12, not 11** — quick-xml was ALREADY at 0.39.4 (coincidence with our target semver). Verified by name-grep it was the only non-first-party at that version; my `0.39.3→0.39.4` replace never touched it (it was already 0.39.4). **Count check = 11 first-party + any third-party already sitting at the new semver.** Don't panic on N+1; name it.
- `xtask gen` produced CRLF-only churn on `reference.md` (numstat empty) → restored, commit stayed 3 files (toml + 11 lock lines + changelog).
- `twohost` auto-SKIPPED (bump+changelog only, no wire/behavior change). n1-gate + test green both boxes first try, no flake. `resize_presentation_barrier` is Windows-only Phase B, ran hfenduleam-only as doyle flagged.
- `gh release view --json isLatest` is not a field in this gh build — use `isDraft`/`isPrerelease` + the no-arg `gh release view` Latest pointer instead.

**Open:** hertz two-seam RC-RENDER-TRUTH field-verify from Latest (readable-prose exact-cell bar) + their still-pending lifecycle leg (bind→listen→control→detach from a real OMP session) — routes through doyle, not me. Next queued: v0.40.0 NOTIF-TRUTH (ADR-0046), GO comes from doyle with triage in hand. Still unverified from earlier: v0.39.0's three TEARDOWN-AUTHORITY claims ([[v0390-published]]).
