---
name: v0320-published
description: "v0.32.0 PUBLISHED counter 59 — THE-FORKENING, first release on the private channel BigscreenVR/spt-bs-releases"
metadata: 
  node_type: memory
  type: project
  originSessionId: 89cc9038-e5d9-429e-b4a9-40fba8af71ee
---

**v0.32.0 PUBLISHED — counter 59** @ca6386e (merge PR #5, tag v0.32.0), 2026-07-15.
THE-FORKENING milestone release. **FIRST release on the private channel
`BigscreenVR/spt-bs-releases`** (counter-58/v0.31.0 baseline stays on SaberMage/spt-releases).

URL: https://github.com/BigscreenVR/spt-bs-releases/releases/tag/v0.32.0
Signed: rel-primary-2026 (54188f12...). Platforms: windows-msvc, linux-gnu, linux-musl.
Assets: 3 binaries + 3 `.release.json` sigs + `update-set.json` (v59) + **`spt-docs.tar.gz` (1.3MB, new docs bundle)** + SHA256SUMS + manifest.schema.json + mock-adapter.zip.

## What shipped (user-facing surfaces, all 9)
gh-CLI release transport + OS install hints; `spt install` bootstrap verb; docs
bundle ships as signed release asset (lands $SPT_HOME/docs); node-local docs
server localhost:5474 + `spt docs`/`spt docs url` (public Pages docs RETIRED);
bare `spt update` composite (core→adapters) + `-c`; `spt update adapters` +
comma-list + summary lines; `spt update --restart` full-cycle; `spt daemon
refresh`; adapter-update skip-not-error for local/dev registrations.

## Release-ceremony facts (new/confirmed this cut)
- **RELEASES_TOKEN on BigscreenVR/spt-bs-core** (fine-grained PAT, Contents R/W on
  spt-bs-releases only) worked cross-repo FIRST try — no resource-owner issue. First live use.
- **Sign leg is OPERATOR-ATTENDED**: SPT_RELEASE_SEED lives in the OPERATOR's env
  (raw hex, len 64), NOT SPT_RELEASE_SEED_CMD, NOT in CI, NOT in machine env. deployah
  runs `xtask release-publish --tag v0.32.0 --key-id rel-primary-2026 --version 59`
  once the operator has the seed in-session. Don't assume the seed is present — ASK/confirm.
- REQ-RELEASE-CHANNEL-PRIVATE int stage FLIPPED in the release PR — the ceremony IS
  the integration evidence (W2 ruling); `[int->...]` tag rides release.yml draft-create leg.
- CI flake: `spt-daemon applyhost::tests::apply_staged_update_set_refuses_broker_touching_payloads`
  TIMED OUT (240s) on the Windows runner (hfenduleam) first run — a served_broker UNIT
  test outside the heavy filter (FLAKE-LEDGER #14 escape shape; W4 added a 2nd served_broker
  unit to that module = marginal contention). Passed clean on rerun --failed. doyle filed the
  #14-shape classification fix (route served_broker spt-daemon lib units to heavy-broker-pty)
  as non-blocking follow-up. Discriminator ruled: solo-timing (green-in-sec=classification, slow=dig).
- Minor stale doc (NOT fixed, flag): docs/RELEASE-RUNBOOK.md step-3 still cites the RETIRED
  docs-publish.yml. My dispatch only covered the PAT-scope line (fixed → spt-bs-releases).

Verified isDraft=false, releases/latest → v0.32.0. THE-FORKENING release lane CLOSED both sides.

## Field-verify is OPERATOR-CUTOVER-GATED (doyle, hard-cutover ADR-0036)
v0.31.0 nodes carry the OLD transport (public SaberMage channel, counter 58 = latest THERE)
— NO node can self-update across the channel move. Operator HAND-updates each node
(gh release download + `spt install`, the bootstrap path) to cross onto v0.32.0/private channel.
ONLY THEN does doyle dispatch field-verify against the 0.32.0 surfaces (docs server :5474,
composite `spt update`, `spt daemon refresh`). doyle HOLDS that dispatch until operator confirms
nodes flipped. Implication for the NEXT private-channel release: once nodes are on v0.32.0's gh
transport, self-update across the private channel works normally (this hand-cutover is a
one-time channel-move cost, not a per-release cost).
Related: [[the-forkening-plan]], [[v0310-published]], [[release-counter-from-published]], [[v0121-published]].
