---
name: v0310-published
description: v0.31.0 PUBLISHED counter 58 — MSG-IDENTITY milestone release (messaging delivery-integrity + endpoint identity); RESTART-REQUIRED apply; field-verify phase notes
metadata: 
  node_type: memory
  type: project
  originSessionId: 5b71855b-82d2-483b-908f-4b2c3f57db84
---

v0.31.0 PUBLISHED 2026-07-10, counter 58, release PR #85 merged @c9586d1 (bump-in-PR off main @a6ff501). Release: https://github.com/SaberMage/spt-releases/releases/tag/v0.31.0 — 10 assets, msvc+gnu+musl, signed rel-primary-2026 (pubkey matched anchor), SHA256s verified pre-sign, upload-before-flip held (xtask release-publish orders upload→flip).

Scope: MSG-IDENTITY milestone (F-032/033/034/036/038/039 + W6 riders; F-037 excluded). CHANGELOG = symptom census: dup-delivery/echo path, send stamps (agent-id not cli@machine), bringup seed restore + `listen --session-id` fallback, project-slice preservation, seat-theft scrub, poison/retired log split, `endpoint run --save` autostart. W6 test-side riders excluded from public notes.

Rollout comms (carry until verify closes):
1. **RESTART-REQUIRED apply** — broker-side; `spt update fetch --apply` = full daemon restart, sessions restart at comeback (not live swap).
2. **CORE FIRST then adapter** — perri export fix rides adapter >0.20.0; min_spt_core unenforced on acquisition, ordering is manual.
3. HFENDULEAM live daemon runs echo-verify force-on until its v0.31.0 apply restarts it — expected, not anomaly.

Field-verify dispatched 2026-07-10: todlando (apply + W6 stderr semantics: POISONED=deadline-only, RETIRED attribution, lifecycle records; mobile-gw restart = F-038 live case; partner flags perri W1/W3, hertz+perri W2, flynn W5), flynn (autostart --save + boot replay), perri (send stamps + reply routing + adapter ordering).

Field-verify status:
- **perri stamps (F-033): ✅ CLOSED 2026-07-10** — both directions passed (doyle→perri from=doyle; perri→doyle from=perri, routed to perch), then full clean-path close: adapter 0.20.1 published + node-applied (fetch itself proved transport=gh against now-private repo); fresh-session env file carries export-prefixed OWL_SESSION_ID/SPT_ADAPTER; behavioral leg `env -u SPT_ENDPOINT_ID` scratch send arrived stamped from=scratch-c with NO manual promotion. Send-stamp + carrier-claim wave fully verified on perri's box.
- **todlando (W6 semantics + F-038 live): ✅ CLOSED 2026-07-14** — 1/2 W6 semantics CLEAN (POISONED strictly deadline-only 2/2 w/ matched lifecycle close; 36,320 organic fails all RETIRED w/ attribution; chain complete @535k records); 2/2 F-038 live PASS (daemon stop --force → start: mobile-gw auto-returned via startup_endpoints; broker 0.31.0; their pump stall cured by the restart). Riders seeded to [[spt-core-findings-backlog]]: lia no-comeback (hosted-live comeback promise broken), emphasys vanished from local-endpoints (seed-#6 kin), 115MB pre-restart stderr preserved C:/spt-diag/pump-stall-2026-07-14/ for pump-stall + torn-line RCA, no `spt daemon restart` verb (W4 rider candidate). **→ v0.31.0 field-verify COMPLETE all three partners; MSG-IDENTITY milestone CLOSED** (flynn OS-boot-replay confirmatory still rides next real reboot).
- **flynn autostart (F-038): ✅ PASS 2026-07-13** (accepted on shipped scope) — box bounced to 0.31.0 by brandon (operator-supervised gate satisfied); `endpoint run --save mobile-gw` + daemon restart + auto-return works per operator; adapters updated with the bounce. Riders: (1) OS-boot replay confirmatory pending next real reboot (bounce was daemon-only). (2) Scope gap seeded — --save = endpoint-at-daemon-start only; managed_by:null box has no daemon-at-boot → interim logon task stays as daemon-bridge + rollback (NOT retired); full retirement needs install-service rider (seeded in [[spt-core-findings-backlog]]). (3) flynn fixed own interim-script 5s→60s bringup poll (their commit cfb64ca). flynn's SPT-CORE-NEEDS #7 marked SHIPPED-in-0.31.0 with scope note.

Related: [[msg-identity-milestone-progress]], [[v0121-published]].

---

## ⬇ Merged 2026-08-03 from the other memory root (store A) — [[two-memory-roots-diverged]]

Both stores held a note under this name, written by different sessions. Neither is wrong;
they record different facets of the same cut. Everything below is store A's version
**verbatim**, appended rather than reconciled, so nothing is lost to a summarizing pass.

⚠ **Apparent date conflicts between the two halves are the local-vs-UTC artifact, not a
disagreement:** this box is PDT (UTC-7), so a cut published after 17:00 local carries the
NEXT day's UTC date. v0.25.0 `2026-07-04` local == `2026-07-05T02:33:10Z`; v0.31.0
`2026-07-10` local == `2026-07-11T04:21Z`. Same class as the `ls -l` LOCAL vs traded-UTC
trap in [[commune-drops-orphaned-box-wide]]. Prefer the UTC stamp when quoting.

---

v0.31.0 = counter 58, published 2026-07-11 (04:21Z). MSG-IDENTITY milestone cut: PR #85 (release, base a6ff501) merged @c9586d1, tagged, signed rel-primary-2026, Latest flipped. All six waves (PRs #79-#84): F-036 seat-theft, F-034 bringup-bind, F-032 commune-ingest preserve, F-033 dup-delivery (inject exclusion + carrier claim + echo-scrub + send stamps), F-038 `endpoint run --save` autostart, F-039 POISONED/RETIRED token split + attribution.

**Published asset hashes:**
- win `spt-x86_64-windows.exe` sha256 `4d57cf941d45d4504a0e4ae8c543d512bbd428fa23cdc297373413a347f62b5d`
- linux-gnu `spt-x86_64-linux` sha256 `1306b84e46b083cbb7ce88ae87c72b66b834c3da5c62e19495b9dbeb952e2ba9`
- musl `spt-x86_64-linux-musl` sha256 `7356a2a9280f32fe7178e22f1b2e149d17ed81c7d740e12f14a774772fe4c0da`
- update-set v58 "0.31.0", 3 platforms (msvc/gnu/musl); URL https://github.com/SaberMage/spt-releases/releases/tag/v0.31.0

**Rollout notes (doyle-ruled comms):** RESTART-REQUIRED apply (broker-side: startup echo-scrub + carrier claim); CORE FIRST then adapter (min_spt_core still unenforced, see [[v0250-published]]); HFENDULEAM live daemon ran echo-verify force-on until this apply restarted it. Field-verify dispatched post-publish: flynn (autostart), perri (send stamps + adapter export fix >0.20.0).

Publish mechanics this cut: seed already in env as `SPT_RELEASE_SEED` (64-hex) — publish one-shot clean, no `_CMD`. `gh pr checks --watch` died mid-run on a GitHub TLS handshake timeout while a job was pending — re-verify with `gh run view --json jobs` conclusions, never the watch exit code.
