---
name: v0270-published
description: "v0.27.0 PUBLISHED (counter 47 @cb4a5ab) — WORKER-TRUTH milestone; adapter-BREAKING worker verbs; EPERM rerun recovered; LESSON: dropped-watcher idle stall"
metadata: 
  node_type: memory
  type: project
  originSessionId: 5b3a2381-5e45-4f9a-8543-4c5f5009c468
---

**v0.27.0 PUBLISHED + PUBLIC 2026-07-06T15:17:47Z — counter 47, tag on blessed commit cb4a5ab, Latest on SaberMage/spt-releases.** Milestone: WORKER-TRUTH (5 waves N-1/W-2, V-1/V-2, W-3, P-2, P-1; PR #54 worker-truth→main @7a59e3b, then release PR #55). Signed rel-primary-2026 (54188f12...e3ec9), update-set v47.

- linux   sha256: 2b874e52766e8dd437cc8b4dfde4a51b280508f782545998476d0285f8deaace
- windows sha256: 7dc1f6eedc83f751319e70110c80d107fe9f7d638928d0d663af31646e506508

**Adapter floor for next claude-spt = cb4a5ab. BREAKING: worker verbs went token-free sid-symmetric (core-minted `<parent>-w<N>` ids) — perri gets worker-verb migration GO from doyle.**

**RELEASE-DRIVE (banked):**
- Same clean FF-merge mechanics as v0.26.0: release branch 1 commit ahead → `git push origin release/v0.27.0:main` FF, tag on cb4a5ab (exact CI-validated + blessed commit).
- BUMP: workspace 0.27.0 + 11 first-party Cargo.lock lines (12 total w/ workspace), zero third-party collision. `xtask gen` drift was EOL-ONLY on docs-site/src/cli/reference.md (Windows CRLF, `--ignore-space-at-eol` = empty) → `git checkout --` discarded it, commit stayed CHANGELOG+Cargo.toml+Cargo.lock only. (v0.26.0 gen was a full no-op; v0.27.0 had the CRLF artifact because WORKER-TRUTH touched the CLI surface — reference.md content already correct on main, only line-endings differed.)
- doyle CHANGELOG scope-gate: first-pass ONE-line extension (reap Added line under-described — missed (a) immediate removal of a finished+collected worker, no TTL, and (b) TTL also catches a worker leaked WITHOUT a stop signal even under a LIVE parent, not just orphaned). Amended verbatim to doyle's suggestion → BLESS. 6 surface clusters, BREAKING flagged twice (headline + Changed).
- EPERM RECURRED (v0.24.0 pattern): release.yml Win build RED on leaked runner-workspace `target\debug\spt.exe` cross-account lock. doyle remediated (his catch, not mine): DISPLACE-not-kill to `_leak\spt-displaced-*.exe` + `gh run rerun --failed`, NO re-tag (tag stood on cb4a5ab); Linux leg untouched. _leak exe GCs when holding daemon dies.
- **LESSON (my miss): dropped-watcher idle stall.** My release-build Monitor exited on the FIRST run completion (conclusion=failure, pre-rerun) → I never re-armed correctly and sat idle ~45min with a READY draft, until doyle's flip-watch nudge. Published instantly on the ping. FIX for next cut: after ANY `rerun --failed`, immediately re-verify draft readiness by DIRECT poll (gh release view isDraft) rather than trusting a monitor that may have already terminated on the failed attempt; a rerun continues under the SAME run id but a status-completed monitor is already dead.

Ledger: 44=v0.24.0, 45=v0.25.0, 46=v0.26.0, 47=v0.27.0.

**doyle post-publish addendum:** perri pinged GO — worker-verb migration floor 0.27.0 (frozen shape unchanged), flynn P-2 live-proof watch ON (psyche lands in bigscreen root once the box takes 0.27.0 + parent pulses; perri reports either way). Gater lesson mirrored: the flip-watch alarm chain caught BOTH stalls this release (merge stall v0.26.0-pattern + this publish stall) — keep publish-watch alarms armed through the FLIP, not just the tag. Milestone CLOSED; next = operator triage ([[workertruth-triage]] + [[spt-core-findings-backlog]] hold the queued seeds: cross-node digest, crate-publish privacy-gated, flat-legacy disk GC, ensure-daemon preamble, full F-027 pre_spawn pull-forward).
