---
name: v0440-published
description: v0.44.0 counter 79 published @2189f87 (RESIDENT-SERVICE W1) — and the disk-exhaustion incident that cost two CI windows
metadata: 
  node_type: memory
  type: project
  originSessionId: 9575a48b-3125-41d7-ba41-4548df626265
  modified: 2026-07-27T03:10:10.535Z
---

**v0.44.0, release counter 79, published 2026-07-27 @2189f87** (PR #90). Cuts RESIDENT-SERVICE W1 (ADR-0049). MINOR. Latest flip confirmed; all three `*.release.json` + `update-set.json` read `version=79 product=0.44.0`.

⭐ **The big lesson — I under-named my own discharge, and it cost a window.** CI red 1 was `digest_cross_node a_silent_peer_is_bounded…` failing on `brain IPC read deadline elapsed`. I discharged it environmental on a genuinely strong anchor (zero `.rs` delta + **two** independent Windows greens on the byte-identical tree — #89's run and the `push:[main]` run for my exact base 12555b4) and filed "12.2 GB free disk" as a *side flag*. Red 2 then named the root outright: `fatal: write error: No space left on device`. Both reds were one root — **disk**, not load. A timing probe is what disk exhaustion looks like through an instrument. [[lead-with-the-defect-that-needs-no-box]] applies to *my own discharge writeups*, not just to filing others' bugs: I had the measurement in hand and ranked it second. **Rule: when a box measurement is in hand at discharge time, it leads the writeup — the deadline probe is the symptom paragraph.**

⭐ **Windows fixture temp-dir leak — the real defect, banked as a REQ seed (doyle owns, credited to me).** `%LOCALAPPDATA%\Temp` held **14,319 leaked `.tmp*` dirs** dating to 2026-07-19 — 163 GB, and the failing test's own `git fetch` died inside one. Our test fixtures do not clean up on Windows. It re-eats the box on a schedule, and **its first symptom each time is a mystery timing red on an unrelated test** — exactly the class that gets miscalled a flake and burns release windows. Proposed tripwire: **CI preflight free-space assertion**, so the box fails LOUD on the resource instead of obscurely on a deadline. Second recorded instance of [[hfenduleam-disk-full-ci]], now with a mechanism proposal.

⭐ **Test *duration* is corroborating evidence.** Healthy Windows leg = 19m51s. Both disk-era reds were **6m51s / 7m33s — fast-fails, not slow ones**. When you suspect load, a red that finishes *early* argues against load and toward a hard resource/abort. Read the duration before theorizing.

⭐ **An `expect()` label is not a measurement — check it against the instrumentation.** `digest_cross_node.rs:443` printed "still blocked after 8s against a 250ms silence budget — the budget is being computed but never reaching the transport read". The `CONN_LIFECYCLE` line in the same output said `transport-close mono_ms=255 poisoned=false timed_out=false` — the budget *did* reach the transport. The real failure was a helper thread panicking at `:428`, which dropped the sender, so the main thread's recv returned `Disconnected` and printed the hang label. **A panicking helper makes a channel assertion print its own worst-case story.** Routed to hertz as a test defect.

⭐ **Flag, don't absorb — doyle's changelog scope was short.** GO named #89+#87+#88; `git log v0.43.1..12555b4` also carried **#86, #71, #78** (his was a truncated-log read, corrected on challenge). Wrote the changelog **from the range** per runbook. Entry-bearing: #89, #88, #86, #71. Silent: #87 (test-only git-spawn census isolation), #78 (runbook-internal).

⭐ **Seed:** host ruling held — `SPT_RELEASE_SEED_CMD` **unset**, raw machine-scope `SPT_RELEASE_SEED` used. doyle's GO said `_CMD`; that line was stale against the runbook and he ratified my read. Probed value-free (`:+` only) per [[secret-env-probe-no-value-expansion]]. See [[no-version-floor-before-it-ships]] sibling rule: verify a relayed instruction against the recorded ruling.

⭐ **Sequencing judgement:** held doyle's two authorized `target/` deletions off the entire CI+release window on purpose — extra disk I/O on a release *builder* is the exact perturbation class just paid for, and at 193 GB free there was nothing to race. Cleanup after the box is off the clock.

📌 **Runbook drift filed, not fixed mid-release:** step 3 names `docs-publish.yml` as a tag trigger. That workflow **does not exist** — `.github/workflows` holds only `ci.yml` and `release.yml`, and docs ship as `spt-docs.tar.gz` from release.yml's assemble job. Docs published fine; the text is stale.

**doyle close-out (2026-07-26 ~20:30):** independent metadata verify PASS (all three platforms 79/0.44.0/rel-primary-2026, counter spent once); `spt update` applied on HFENDULEAM — core 0.44.0, claude-spt 0.25.20, omp-spt 0.3.28→0.3.29 (F-034 trigger fix live; NB hertz's channel ran 0.3.28 during the day's mode-2 corruption samples); daemon stays 0.43.1 until operator restart (standing item, nothing blocks). Adopt-now pings sent flynn+perri. Runbook docs-publish.yml drift = deployah's docs PR, doyle gates. My GO carried TWO errors deployah caught by protocol (changelog range from truncated log; stale _CMD vs recorded host ruling) — GOs should name the RANGE COMMAND and cite the runbook section, not restate mechanics from memory.

Related: [[release-counter-from-published]] · [[changelog-scope-vs-commit-range]] · [[window-assertion-load-direction]] · [[measure-the-box-before-the-instrument]] · [[v0420-published]]
