['', 'version = "0.70.0"', '']
# Changelog

All notable **user-facing** changes to `spt` — what a person running the CLI
notices or does differently. The `## [<version>]` section of each release
becomes that release's GitHub Release notes verbatim (see
`docs/RELEASE-RUNBOOK.md`). This project follows
[Keep a Changelog](https://keepachangelog.com) and semantic versioning.
Pre-1.0, choose the bump by what a user can notice: **minor** when a release
breaks something, or changes the observable behavior of existing surfaces
broadly; **patch** for fixes, and for additive opt-in capability — a new key,
flag, or page that no existing user can encounter without opting into it.

## [Unreleased]

### Fixed

<!-- [doc->REQ-MEET-RUNTIME-ISOLATION] -->
<!-- [doc->REQ-MEET-PORTMAPPER-OFF] -->
- Rotating pairing listeners no longer share the workers serving active network
  sessions, preventing their synchronous Windows network discovery from stalling
  `spt rc`. Automatic UPnP, NAT-PMP and PCP router mappings are also disabled for
  all endpoints, removing recurring synchronous gateway discovery from the
  workers serving active sessions. Relay-assisted connectivity and NAT
  hole-punching remain available. The running broker must be updated; a brain-only
  refresh keeps the older broker's runtime and mapping policy.
<!-- [doc->REQ-HAZARD-HOSTED-LIVENESS-RECONCILE] -->
<!-- [doc->REQ-ER-BRIEFING-PRESENTED] -->
- Engine-room sessions stay online while starting, so their opening briefing is
  delivered even when a liveness check runs before startup finishes or overlaps
  the transition from starting to a running session.
<!-- [doc->REQ-HAZARD-SERVE-REGISTRY-LOST-UPDATE] -->
- Serving registrations and their stable URL-name assignments no longer disappear
  when attachment expiry updates the registry concurrently. Protection requires
  both the running broker and brain to be updated; a brain-only update with an
  older broker does not activate it.
<!-- [doc->REQ-UPDATE-LOCAL-DOCS-LINKS] -->
- Update completion messages and consent notifications link to the node's locally
  hosted changelog, and successful documentation installs link to its local index.
  When the local documentation service is unavailable, the existing release link
  or installed directory remains the fallback.
<!-- [doc->REQ-HAZARD-INPUT-ACK-BACKPRESSURE] -->
- Active `spt rc` sessions resume input after `spt node refresh` or an update's
  brain restart instead of freezing while replaying retained keystrokes.


{"body":"Fast-follow of #304 (operator-ruled RELOCATE, Reavo in-session 2026-09-14 via lia). Holds the three remedy items whose DIAGNOSTICS shipped in v0.70.0 but whose fixes are unbuilt:\n\n- #49 / #267 — rc/PTY freeze across daemon refresh / staged self-update restart. v0.70.0 shipped the two refresh-wait observability events (REQ-REFRESH-WAIT-ATTRIBUTION). Next: run the observation leg to answer Q1 (CONTROLLER_SLOT_CLOSED mapping) and Q3 (BRAIN_PROMOTE_GATE_NOT_DRAINED under a real AppliedPending trial), then design/build the fix.\n- #302 — rc sessions hitch. v0.70.0 shipped SPT_RC_HITCH_DIAG (REQ-RC-HITCH-DISCRIMINATOR). Next: read the probe on the operator's box during a real hitch to pick #1 runtime starvation (seam B) vs #2 synchronous broker/stream wait, then build the chosen remedy.\n\nPlan draft: .spt/preserved/304-handoff/FAST-FOLLOW-PLAN-draft.md (observation + probe procedure, conditional #302 remedy seams and guards). Not greenlit; milestone stays backlog until operator greenlights the build cycle.\n\n-doyle@HFENDULEAM\n\n*\\-doyle@HFENDULEAM*","id":5659464087}
{"body":"Correction to comment 5659464087 (precision, per deployah): v0.70.0 is NOT yet published — the diagnostics (REQ-REFRESH-WAIT-ATTRIBUTION events for #49/#267; SPT_RC_HITCH_DIAG for #302) are present in the v0.70.0 CANDIDATE (asm/304-v3 @ b8482445), pending golden + publish. Read 'shipped' as 'built into the pending v0.70.0 candidate'. The relocated remedy work here at #307 is unchanged. -doyle@HFENDULEAM\n\n*\\-doyle@HFENDULEAM*","id":5659480838}
{"body":"# #307 JIT plan — v0.71.0 \"REFRESH-FREEZE \u0026 RC-HITCH remedies\" (fast-follow of #304)\n\ndoyle, 2026-09-16 01:40Z. Operator directive (2026-09-15): pull relevant/troublesome requests into #307 by doyle's judgment, plan, dispatch, drive to publish. Base: main `289e3cdf`. Target: v0.71.0 (counter 107).\n\n## Members\n- Carried from #304 relocation: #49, #267 (refresh freeze), #302 (rc hitch).\n- Added 2026-09-16 by doyle's judgment (resolves the pending \"milestone home\" ruling both mints carried): #308 (serve-registry lost-update, prep draft `fix/308-registry-process-lock` @fefc4d64 exists), #309 (ER briefing lost when liveness reconcile offlines a bringing-up session). Both are intermittent CONTRACT losses found by the #304 consumer leg with hertz RCAs on file.\n- Excluded on purpose: #296 (field PASS on omp-spt 0.9.2 = adapter-side; no core defect shown). #25/#263 adjacent but unscoped; stay BACKLOG.\n\n## Waves\n**W1 (parallel, now)**\n- **W1a — todlando, #308.** Rebase fefc4d64 (base 7890ead3) onto 289e3cdf; build; new fail-closed unit + two-process int (`serving_registry_two_process_int.rs`) via nextest; targeted `serving`/`webserve_attachment_e2e` suites; activate the REQ stages in the same commit; traceable-reqs 0.4.1 check; thin PR. Pool: claim from the lane's own worktree.\n- **W1b — hertz, #49/#267 observation rig (evidence, not fix).** Per `docs/49-267-REFRESH-OBSERVATION-PLAN.md` (measurement/teardown rules) + `FAST-FOLLOW-PLAN-draft.md` §1–4: isolated `SPT_HOME`, `SPT_PUMP_TRACE=1`, binary pinned by sha (main 289e3cdf build), disposable brain-owned controller/PTY with counter+generation-stamped output, real `spt daemon refresh`; capture `CONTROLLER_SLOT_CLOSED` (Q1) and `BRAIN_PROMOTE_GATE_NOT_DRAINED` (Q3). Q3 needs a real `AppliedPending` trial — report BLOCKED if not admittable, never fabricate. Bound 300 s + 120 s teardown. Output: receipt + RCA candidate that explains why prior fixes failed.\n- **W1c — hertz, #302 discriminator.** Isolated-home daemon on hfenduleam (NEVER the resident fleet daemon), local rc session, `SPT_RC_HITCH_DIAG=1 spt node status --json` during healthy/hitch/recovery; the five-line cadence experiment ONLY on the isolated home. Plus: doyle asks lia to authorize ball-b (ENLYZEAM) to run the read-only probe on the operator's box during a real hitch. Output: #1 (runtime starvation: seconds-stale canary + hitch-correlated dials) vs #2 (synchronous broker/stream wait: fresh canary).\n\n**W2 (after W1 receipts)**\n- **W2a — todlando, #309.** Coherent live/starting/absent observation at the spawn/reconcile authority boundary: livehost session poll honours the broker's `bringing_up` ledger; false-death mutations (incl. control cleanup) protected. NOT a longer briefing wait. Red-first unit on the reconcile arm + `er_briefing_presented_e2e` clause 4 green. hertz: regression cell hardening if the e2e needs a deterministic barrier.\n- **W2b — todlando, #49/#267 remedy** from the W1b RCA (RCA-first; agreement never promotes to proven). hertz: regression cell on the W1b rig. Rider if the path is touched: IR-82 (daemon.pid predecessor/death record, todlando-owned).\n- **W2c — todlando, #302 remedy** per W1c: seam B (dials quarantined behind `NetHost`, connections handed to the serving executor BEFORE `register_conn`) if #1; if #2, establish the rc dependency before any remedy. hertz: proof with unchanged gauges (`.spt/preserved/302/REMEDY-DESIGN.md`).\n\n**W3 — assembly.** doyle assembles the golden head (merge chain off current main, compile-gate + traceable check), hands to deployah; deployah verifies GREENLIT FORM (every member fulfilled or relocated-with-reason on the issue) → golden → publish v0.71.0. Red → doyle RCA-first triage.\n\n## Gate discipline (every lane)\nIsolated worktree under `.worktrees/`, own pool claim, targeted suites + compile-gate, `traceable-reqs check` exit 0, ff-only landing of the tested sha, co-author trailer space spelling. Register sweep at intake done (hertz, 82333ca1; IR-86 retired, IR-11 built).\n\n## One decision that may come back to the operator\n#302's remedy cannot be CHOSEN without a field reading. If W1c yields neither an hfenduleam repro nor an operator-box reading, #302 RELOCATES (never drops) with the reason on the issue before golden. Everything else proceeds without operator input.\n\n## Pre-flight (role discipline)\nCost: W1a ~1 lane-day (prep exists); W1b/W1c ~half-day each, light rigs. Box: hfenduleam runner idle (last run 289e3cdf 15:54Z), 182 GB free (above the 128 GiB golden floor, but tight — reap own retired targets before golden). Parallel fill: all three W1 legs run concurrently; todlando's cargo vs hertz's single isolated daemon = CPU contention only.\n\n*\\-doyle@HFENDULEAM*","id":5690720085}
{"body":"**Addendum 2026-09-16 01:50Z (doyle):** operator added #310 to this milestone (`spt update` concludes with outdated links; small product change). Lane W1d on todlando, queued after #308 is handed to gate and before #309. Sites: `crates/spt/src/cli.rs` RELEASES_URL (3 uses) + `UPDATE_DOCS_LANDED` print, `crates/spt-daemon/src/notif.rs` CONSENT_CHANGELOG_URL; helper already exists (`spt_daemon::docshost::docs_url(node, port)`, `cli::resolved_docs_url`). Operator also authorized ball-b read-only SPT_RC_HITCH_DIAG readings on ENLYZEAM and the ssh route decid@enlyzeam (read-only) for the #302 discriminator (W1c).\n\n*\\-doyle@HFENDULEAM*","id":5690823110}

