- [v0.17.0 W1-W4 LANDED (robust-join + presence)](v0170-w1-w4-blockers.md) — IN BUILD on shared branch v0.16.0-update-arc, doyle's tree. W1 @7cddaba per-family bind gate · W4 @867c7ab cold-perch→Suspended (presence truth) · W2 @a07322c two-phase meet-before-code join ([[v0170-w2-design]]) · W3 @be1f4d6 diagnosable join (progress/detail/--verbose). All doyle-gated GREEN. Diags [[broken-ipv6-poisons-iroh-discovery]] [[presence-dead-shows-online]].
- [v0.17.0 W5 DOYLE-OWNED (display parity, LAST wave)](v0170-w5-design.md) — 2026-06-28: doyle executes off design §B + 16-site map (registry Instance +3 gossiped fields / EpDisplay rework / view palette); todlando stood down (context), reactive for W6 (twohost ON for W2 seam, counter-36 bump-in-PR).
- [broken IPv6 poisons iroh discovery](broken-ipv6-poisons-iroh-discovery.md) — half-broken IPv6 (AAAA resolves, path dead) silently fails subnet-join; iroh dual-stack burns rendezvous window. Tell: Test-NetConnection dns.iroh.link -443 IPv6 FAIL/IPv4 OK. Fixed by W1 family-gate.
- [presence: dead shows ONLINE remotely](presence-dead-shows-online.md) — registryhost gossiped not-alive perch as Dormant→picker maps Dormant→Online. FIXED W4 (cold→Suspended).
- [v0.16.0 PUBLISHED (update-arc + CLI/UX)](v0160-published.md) — counter 35 @9e5b33b (PR#38). subst keys {adapter_dir}/{adapter_name} + lazy [strings] (ADR-0029) / translation [command] / [update.post] / --reply-to REMOVED / empty-create / global --json / digest cursor / rc identity. Detail [[v0160-w1-manifest-runtime]]; docs-token leak gate [[clap-doc-comment-leaks-req-tag]].
- [Win update-exe UAC-740](win-update-exe-uac740.md) — exe/fixture names with "update"/"setup"/"install" trip Win installer-detection → os-error-740. Name test helpers around it.
- [v0.15.0 messaging milestone](v0150-w1-activity-gated-delivery.md) — counter 34 @18d5045 (PR#37). activity-gated delivery + re-spool; spt send axes (--idle-only/--active-only/--ephemeral/--prefer-native/--force-native/--json-payload) + Win console fix; api psyche-download.
- [seedmap test timeout = STARVATION](seedmap-test-collides-live-daemon.md) — request_stop_barrier_holds_until_no_listener times out on a LOADED box; NOT socket collision (unique per-test socket). RERUNNABLE flake. Verify the FULL chain before confirming a diagnosis.
- [v0.15.0 public docs-site update](v0150-public-docs-update.md) — release-riding; xtask gen only reference.md, PROSE pages hand-direct. doyle authors, publish docs-publish.yml, VERSION not internal codes.
- [v0.16.0 release → ping perri](v0160-release-ping-perri.md) — on counter-35 drop doyle $OWL-sends perri GO (cluster-A consumable + min_spt_core→0.16.0) for claude-spt v0.8.0.
- [v0.15.0 W5 resume-context pull](v0150-w5-resume-context-pull.md) — SHIPPED. api psyche-download <id> + durable role/live/project + <pending-commune>/<pending-signoff> gated on NOT-YET-SYNTHESIZED. Tier-2 DEFERRED.
- [v0.15.0 W2 drain-split ratify](v0150-w1-activity-gated-delivery.md) — SHIPPED. deferred=1 IFF window=active_only; derive deferred from window at the single insert chokepoint.
- [owl --reply-to broken](owl-reply-to-broken.md) — BINDING: $OWL send --reply-to loops msg back to sender. ALWAYS plain `$OWL send <target> <self-id>`. Kin [[owl-send-not-legacy-spt-send]].
- [commune-ingest LLM-synthesis](commune-ingest-pulse-latency-gap.md) — commune ingest IS LLM-synthesized upstream of drop; daemon ingest (lifecycle.rs @5s) = mechanical filing. meaning-Qs → read CONTEXT.md primary.
- [v0.14.3 raw-inject removal](v0143-raw-inject-removal.md) — counter 33. spt-hosted idle = translation-binary-ONLY; no-binary/faulted → SPOOL (loud), never raw PTY write. REQ-HAZARD-IDLE-SILENT-NONDELIVERY.
- [Win netstream redrive flake](win-netstream-redrive-flake.md) — FIXED v0.14.1: Win CI flake, root=StreamLog seq counts transport read_chunks. Verify-per-attempt.
- [translation binary console-window bug](translation-binary-console-window-bug.md) — spt-hosted translation binary spawns VISIBLE console on Win. Fix=cfg(windows) creation_flags(0x0800_0000). v0.15.0 W4.
- [release standard: bump-in-PR](release-standard-bump-in-pr.md) — v0.14.1+: bump rides IN release PR → PR CI validates tagged commit → tag on merge.
- [v0.14.0 W6 int structure](v0140-w6-int-structure.md) — ≥2-subnet gate, Case1 endpoint-run E2E behind acceptance-env, Cases2/3 fast bind probes.
- [v0.14.x endpoint-creation + builds](v0140-endpoint-creation-flow.md) — counters 30/31/32: multi-subnet home-at-creation + UNBOUND pre-bind attach (SPT_RELEASE_SEED len64); F-018 adapter-add non-destructive + picker home-subnet [[f018-adapter-add-nondestructive]]; F-019 install_dir resolve_program_in_dir ×4 [[f019-translation-install-dir-resolve]]. GOTCHA: `spt` NO lib → --bin spt.
- [v0.13.2 build drive](v0132-build-drive.md) — counter 29 adapter-packaging. W6 docs-token gate (public --help no internal codes).
- [v0.13.0 forkpty ground truth](v013-forkpty-groundtruth.md) — counter 27. green-units≠green-int. gh run rerun attaches STALE attempt — verify per-attempt.
- [v0.13.0 W1b effect-journal wedge](v013-w1b-effect-journal-wedge.md) — REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE: lock-across-fsync+PtyWrite kills attaches. Fix=no-lock-across-effect + drop per-keystroke fsync.
- [v0.12.1 real-harness reopen](v0121-realharness-reopen.md) — v0.12.0 broke in REAL harness (green-on-mocks). BINDING: gate lifecycle vs REAL dummy-harness, NO mocks.
- [v0.12.1 L0 attach-deadlock](v0121-l0-attach-deadlock-root.md) — KEYSTONE: serve_attach forwards on SAME broker IPC conn; inline ring replay blocks → deadlock → rc 0 bytes.
- [v0.12.1 help-md render](v0121-help-md.md) — `spt --help` leaked literal MD; helpfmt::render (bold→ANSI/code→cyan, strip on pipe/NO_COLOR). REQ-CLI-HELP-MARKDOWN.
- [changelog scope vs commit range](changelog-scope-vs-commit-range.md) — release CHANGELOG covers every user-facing SURFACE in vPREV..vNEW (log=checklist) + bullet scope not broader than delta.
- [pre-flight clippy --workspace](ci-clippy-preflight-workspace.md) — CI denies warnings workspace-wide; -p <crate> misses sibling lints. CI fires on PR.
- [gate int with nextest not bare cargo test](gate-int-tests-with-nextest-not-bare-cargo-test.md) — re-gate broker/PTY int via nextest (process-per-test) or --test-threads=1; NEVER bare cargo test on Win (env set_var races → FALSE flakes).
- [behavior-change → grep tests](behavior-change-grep-tests-not-comments.md) — rename/behavior/token change: grep tests/+ci/ for OLD behavior as ASSERTIONS; comment-only hit = RED FLAG, read body.
- [shared-seam → run ALL seam tests](shared-seam-change-run-all-seam-tests.md) — SHARED runtime-seam change breaks SIBLING tests; grep+run ALL seam tests.
- [ccs Windows PTY-spawn fix](ccs-win-pty-program-resolve.md) — bare program → portable-pty picks extensionless shim → CreateProcessW 193. Fix: spt_term::winprog PATHEXT resolver. REQ-HAZARD-WIN-PTY-PROGRAM-RESOLVE.
- [harness adapter-agnostic resolution](harness-adapter-agnostic-resolution.md) — ADR-0021: seed adapter-AGNOSTIC (pid+session_id), --adapter OPTIONAL; resolve at bind by pid→exe→host_binaries→profiles.
- [broker-QUIC-deadline](v083-broker-quic-deadline.md) — REQ-HAZARD-BROKER-QUIC-DEADLINE: NetHost::bounded_block_on (10s<30s brain) wraps dial/open/send → dead peer = ORDINARY error, pump redials.
- [F-007 live-relay acceptance](f007-live-relay-acceptance.md) — live bringup = persistent `api listen` via Monitor (NOT --once/ready); psyche-spawn gated on --manifest + install-dir fix.
- [delegate-build preflight hang](delegate-build-preflight-hang.md) — bg build agents hang silently on full int suite; instruct targeted units; check liveness via transcript mtime, take partial work.
- [proceed autonomously](dont-wait-proceed-autonomously.md) — operator: don't stop to ask permission between steps; chain next action.
- [broker is daemon state anchor](broker-is-daemon-state-anchor.md) — post-ADR-0018 BROKER (not restartable brain) = always-up CLI-reachable daemon-lifetime anchor; place ephemeral in-mem state there.
- [adapter add --release archive](adapter-add-release-archive.md) — `spt adapter add --release <user/repo>` (REQ-INSTALL-9): fetch .spt tar from GH release, extract, register root.
- [adapter tips → published docs](adapter-tips-published-docs.md) — perri tips → harness-agnostic docs-site patterns.md; publish docs-publish.yml --ref main. Pre-flight xtask check.
- [unmergeable PR blocks CI](unmergeable-pr-blocks-ci.md) — push yields NO pull_request run + 0 checks = UNMERGEABLE PR. Diagnose gh pr view --json mergeable. Fix: merge main in.
- [CLI command → docs-drift gate](cli-command-docs-drift.md) — adding/changing a `spt` CLI command needs xtask gen (regen reference.md) AND no internal codes in clap ///. CI-gated.
- [gate against documented design](gate-against-documented-design.md) — verify a wave's premise vs RECORDED design (CONTEXT/ADRs) not just impl — an impl limitation can contradict locked design.
- [grep REQ tags to find impl](grep-req-tags-to-find-impl.md) — to reconcile is-REQ-X-wired, grep REQ-X FIRST — [impl/int->REQ-X] tags point straight to code.
- [public docs: version not milestone](public-docs-version-not-milestone.md) — published docs-site uses VERSION numbers, never internal M#/W# codes; grep docs-site edits before commit.
- [M12 FULLY GATED](m12-w1-progress.md) — end-to-end GATE-PASS. Published v0.6.0 baseline used to start perri.
- [cplugs publish mechanics](cplugs-publish-mechanics.md) — cplugs steps in claude_skill_owl/docs/DEPLOY.md; spt-claude-code takes SKELETON only (binary+manifest ride adapter registry).
- [perri question triage](perri-question-triage-protocol.md) — STANDING: perri builds blind from PUBLISHED docs+binary. Every impl Q = diagnostic; classify w/ EVIDENCE.
- [perri needs reply to continue](perri-needs-reply-to-continue.md) — STANDING: ALWAYS reply to perri (ack+keep-going+next); silence = stop-point.
- [no machine-wide kill on shared runner](no-machinewide-killon-shared-runner.md) — BINDING: HFENDULEAM runner shares box w/ LIVE agents; never machine-wide Stop-Process spt; scope to $GITHUB_WORKSPACE/target or PID.
- [agent roles](agent-roles.md) — doyle=gater/owner (don't self-execute big builds), todlando=executor, perri=adapter builder. perri gap→doyle design→todlando build→doyle gate→perri validate.
- [EVENT envelope + __REPLY_TO__ removal](event-envelope-reply-to-removal.md) — ADR-0020: `<EVENT type=msg from=…>` = sole arriving format. __REPLY_TO__ REMOVED. pin OWL_SESSION_ID for auth-gated E2E.
- [harness boundary + grounding](spt-core-harness-boundary-and-grounding.md) — BINDING: spt-core never caters to a harness; ground completeness Qs in CONTEXT/ADRs (apparent gaps usually already specified).
- [sptc plugin name ruling](sptc-plugin-name-ruling.md) — sptc plugin = `sptc` (interim) → flips to `spt` on proven parity; CC ties skill prefix to plugin.json name. adapter_name=claude-spt.
- [experimplate seed leaks](experimplate-traceable-seed-leaks.md) — experimplate ships traceable seed defects (tag-leaks + manifest_error in example docs); doyle fixes upstream before reuse.
- [spt-claude-code NEXT](spt-claude-code-next.md) — SCOPING DONE. perri builds from spt-releases+GH-Pages ONLY.
- [M10 digest extractor](m10-digest-extractor.md) — [digest] imperative extractor (ADR-0019) + thread-spanning + two-origin merge. SHIPPED v0.6.0. Carried: real-CC digest-proof → perri criterion.
- [PARITY ARC CLOSED](parity-arc-closed.md) — spt-claude-code v0.3.0 = full bare-bringup parity; perri dogfood GREEN. Next = sptc→spt flip.
- [spt-core findings backlog](spt-core-findings-backlog.md) — non-blocking → todlando: REQ-SEND-SPT-HOSTED, REQ-HAZARD-RC-EOF (rc.rs:362 raw-EOF crash), REQ-HAZARD-DEFERRED-MANIFEST.
- [update-apply confident message](update-apply-confident-message.md) — public `spt update apply` SUCCESS says "Updated" not internal "trial"; trial/rollback machinery untouched.
- [traceable per-wave activation](traceable-per-wave-activation.md) — traceable check requires ALL declared required_stages per commit; activate incrementally (int at final wave), never full end-state upfront.
- [v0.9.0 harness-resolution](v090-harness-resolution.md) — SHIPPED PR#21: adapter-agnostic seed + bind-time resolution (ADR-0021); --adapter no longer mandatory.
- [v0.9.1 resolve-dotstem](v091-resolve-dotstem.md) — normalize_basename stem-before-first-dot + stale-broker seed hint. REQ-HAZARD-BROKER-SEED-WIRE-SKEW, KH 7.9.
- [release counter from published](release-counter-from-published.md) — release --version counter from PUBLISHED spt-releases metadata NOT memory; collision breaks spt-update rollback floor. Cross-check monotonic.
- [release retag mechanics](v080-published.md) — cut ONLY after doyle CHANGELOG-vet. retag = amend CHANGELOG→delete draft→move tag→rebuild→sign FRESH bytes.
- [release Cargo.lock first-party](v073-published.md) — bump collides w/ third-party @ same version; TARGETED replace ~11 first-party crate names ONLY.
- [fix-only PR doesn't bump](v072-published.md) — fix PR does NOT bump; release driver authors bump. main locked → git worktree add --detach + push HEAD:main.
- [transient release-API flake](v071-published.md) — release.yml assemble TLS-timeout on gh-release-create → gh run rerun --failed clears (builds reused, no re-tag).
- [hfenduleam disk-full CI](hfenduleam-disk-full-ci.md) — Win CI LNK1318/os-error-112 = disk full not code; cargo clean dev target, rerun; check disk before treating Win RED as code defect.
- [v0.4.2 Linux respawn fix](v042-published.md) — REQ-HAZARD-BRAIN-RESPAWN-PATH: respawn via canonical install path not current_exe + bytes-assert→auto-rollback.
- [boot-race self-heal](boot-race-self-heal.md) — daemon self-heals net-less boot (NetHost retry+attach to OnceLock broker); systemd network-online ordering does NOT reliably prevent the race.
- [pump-IPC-deadline fix](pump-ipc-deadline-fix.md) — reader-thread+channel carrier (nonblock dead on Win named pipes); MERGED @4d8b810, rides v0.4.1.
- [CI self-host migration](ci-selfhost-migration.md) — runners kitsubito + hfenduleam; twohost jobs gated by [twohost] commit tag.
- [CI kitsubito speedup plan](ci-kitsubito-speedup-plan.md) — PLANNED: mold → cargo-nextest → sccache size-cap. Cross-build-ship REJECTED.
- [which process is the listener](spt-daemon-is-live-infra.md) — owl.exe (plugin) = live listener; target\debug\spt.exe daemon = dev/test artifact, killable.
- [self-clear skill API-blocked](self-clear-skill-api-blocked.md) — never invoke /self-clear; usage-policy classifier refuses the turn; continue in-context / user-manual /clear.
- [adapter glue-model boundary](adapter-glue-model-boundary.md) — adapters = manifest + binary only; real adapters in own repos; no adapter-aware source in spt-core.
- [use $OWL send for messaging](owl-send-not-legacy-spt-send.md) — $OWL send works (legacy = where live perches run); `spt send` bounces NO_PERCH. Don't read $? after piping send through tail — use PIPESTATUS.
- [daemon service-detection gotcha](daemon-service-detection-gotcha.md) — service detection reading GLOBAL OS state blind on single-home non-elevated dev box; gate Linux on SPT_HOME-unset, Win refuse on would-vanish.
- [Linux SPT_HOME no-bug](linux-spt-home-no-bug.md) — unix spawn_detached inherits env (forwards SPT_HOME); only Win CreateEnvironmentBlock rebuilds/drops it.
- [kitsubito Linux rig](kitsubito-linux-rig.md) — ssh reavus@kitsubito (key); deploy origin=local runner (git bundle); live spt-daemon user unit; build-in-scratch leaves ~/.local/bin/spt untouched.
- [Gravity deploy procedure](gravity-deploy-procedure.md) — ssh david@100.100.62.43; build in ~/spt-core-deploy NOT runner workspace; setsid daemon; ~1 min first-sync after restart.
- [v0.3.2 platform-safe update](v032-platform-safe-update.md) — REQ-UPD-8: fetch stages multi-platform update-set, apply refuses unstamped/wrong-OS. GOTCHA: fetch floor=staged_version.
- [M6 shipped v0.1.0](m6-shipped-v010.md) — release procedure = RELEASE-RUNBOOK.md; releases-repo/ = repo-face truth.
- [Published releases ledger](v0121-published.md) — counters v0.12.0=25, 12.1=26, 13.0=27, 13.2=29, 14.0=30, 14.1=31, 14.2=32, 14.3=33, 15.0=34, 16.0=35 (@9e5b33b). bump-in-PR (v0.14.1+). Each vX.Y.Z-published.md holds hashes+gotcha.
- [v0.15.0 published detail](v0150-published.md) — counter 34 @18d5045 (PR#37). hashes linux 93ed9b89… / win b4950a8d…. signed FRESH, 33→34 monotonic, docs-publish green on tag.

-- [v0.14.0 endpoint-creation-flow](v0140-endpoint-creation-flow.md) — PUBLISHED counter 30. Multi-subnet home-at-creation + UNBOUND pre-bind attach. SPT_RELEASE_SEED in env (len64).

-- [v0.14.1 builds (F-018+picker+netstream)](f018-adapter-add-nondestructive.md) — PUBLISHED counter 31. F-018 adapter-add non-destructive, picker home-subnet, netstream flake FIX. GOTCHA: `spt` NO lib target → `--bin spt`.

-- [F-019 translation install_dir resolve](f019-translation-install-dir-resolve.md) — PUBLISHED v0.14.2 counter 32. CC-on-Win blocker: idle msgs typed-not-SUBMITTED, root=bare path not resolved vs install_dir. Fix=resolve_program_in_dir ×4 sites.

-- [v0.17.0 robust-join DESIGNED (next build)](v0170-robust-join-design.md) — branch v0.17.0-robust-join off main @551f3dc. ADR-0030 (two-phase meet-before-code + per-family bind gate + diagnosable join) + REQ-PRESENCE-LIVENESS-TRUTH. JIT W1 family-gate + W4 presence-truth = urgent correctness; W2/W3 = UX. todlando builds next. Diags: [[broken-ipv6-poisons-iroh-discovery]] + [[presence-dead-shows-online]].

-- [v0.17.0 W5 PLAN (display parity — LAST wave)](v0170-w5-design.md) — execute-ready, GROUNDED. DOYLE-OWNED as of 2026-06-28: doyle executes W5 in a fresh worker off design §B + this 16-site map, then gates + folds W6 himself. todlando STOOD DOWN (overloaded-context judgment). Wire-touching: registry Instance +3 gossiped fields (bound/controller_node/harness_only) → 16 `Instance {}` sites + advertise + data.rs remote-derivation + EpDisplay rework (drop UnboundControlled, add Suspended) + view palette. todlando reactive for W6 Qs (twohost/counter-36) only.

-- [v0.17.0 W3 LANDED (diagnosable join)](v0170-w1-w4-blockers.md) — @be1f4d6: REQ-JOIN-DIAGNOSTICS impl+unit. CLI live-progress thread + meet_failure_detail (concise/--verbose, bound-families ties W1) + terminal-event propagation (W2 already killed the _=>continue swallow) + --verbose flag. DEFERRED: SUCCESS-path SPT_LOG trace (no daemon tracing facility). W5 is the last build wave.

-- [v0.17.0 W2 LANDED (two-phase join)](v0170-w2-design.md) — @a07322c: meet-before-code (REQ-JOIN-TWO-PHASE impl+unit+int). meet_via_rendezvous split + broker pair_holds 5-min state machine + cli meet→prompt→submit. All gates green. GOTCHA: orphan target/debug/spt.exe from cli nextest locks files → kill by workspace-PID before xtask.

-- [v0.17.0 W1+W4 LANDED](v0170-w1-w4-blockers.md) — 2026-06-28: W4 @867c7ab (cold perch→Suspended not Dormant, REQ-PRESENCE-LIVENESS-TRUTH impl+unit+int) + W1 @7cddaba (per-family bind gate, REQ-NET-FAMILY-GATE doc+impl+unit). All gated (311/311 traceable, clippy/xtask clean). Built on SHARED branch v0.16.0-update-arc (NOT the design-memo's v0.17.0-robust-join), doyle's tree. W2/W3/W5/W6 pending doyle scope. Build OOM→CARGO_BUILD_JOBS=2 per-crate.

-- [presence: dead endpoints show ONLINE remotely](presence-dead-shows-online.md) — registryhost.rs:404 gossips a not-alive perch as Dormant; picker/data.rs:268 maps remote Dormant→Online. Fix=dead→Offline (guard live-unbound) + picker Dormant-distinct. v0.17.0 W4.

-- [v0.16.0 PUBLISHED (update-arc + CLI/UX)](v0160-published.md) — ✅ counter 35 @9e5b33b (PR#38, 2026-06-25). 6 waves all doyle-gated: subst keys {adapter_dir}/{adapter_name} + lazy [strings] (ADR-0029 resolve-not-execute) / translation [command] / [update.post] composite / --reply-to REMOVED / empty-scope create / global --json / digest cursor / rc identity row. hashes linux e13d7c2d… / win f6cd39ec…. deployah caught a docs-token leak at the gate (clap /// REQ-tag → //, see [[clap-doc-comment-leaks-req-tag]]). perri GO sent for claude-spt v0.8.0 (min_spt_core→0.16.0). Build/ratify detail: [[v0160-w1-manifest-runtime]].

-- [Win update-exe UAC-740](win-update-exe-uac740.md) — exe/fixture names containing "update"/"setup"/"install" trip Win installer-detection → os-error-740 elevation. Name spawned test helpers around it (W2 used "post_step").

-- [v0.15.0 messaging milestone](v0150-w1-activity-gated-delivery.md) — PUBLISHED counter 34 @18d5045 (PR#37). W1 activity-gated delivery + fault-transient re-spool; W2-W4 `spt send` axes (--idle-only/--active-only/--ephemeral/--prefer-native/--force-native/--json-payload) + Win console-window fix; W5 `spt api psyche-download`. perri real-CC validate pending (3 axes+json+no-window+psyche-download).

-- [seedmap test timeout = STARVATION not collision](seedmap-test-collides-live-daemon.md) — `seedmap::request_stop_barrier_holds_until_no_listener` times out on a LOADED shared box. NOT a socket collision (REFUTED — with_home tempdir SPT_HOME → unique per-test socket). REAL=load-starvation, RERUNNABLE flake. LESSON: verify the FULL chain before confirming a diagnosis.

-- [v0.15.0 public docs-site update](v0150-public-docs-update.md) — MUST ride the release. xtask gen only does reference.md; PROSE pages need hand-direction. GAPS: integration-checklist api psyche-download row + api.md verb + messaging send-axes/--json-payload. doyle authors, publish docs-publish.yml, VERSION numbers no internal codes.

-- [v0.16.0 release → ping perri](v0160-release-ping-perri.md) — ON v0.16.0 drop (counter 35) doyle MUST $OWL send perri the GO: cluster-A consumable (subst keys/[strings] lazy/translation command/[update.post]) + min_spt_core→0.16.0. perri builds claude-spt v0.8.0 dependent features.

-- [v0.15.0 W5 resume-context pull](v0150-w5-resume-context-pull.md) — SHIPPED. REQ-RESUME-CONTEXT-PULL: `spt api psyche-download <id>` + durable role/live/project + <pending-commune>/<pending-signoff> append gated on NOT-YET-SYNTHESIZED (adapter read=TOCTOU vs ingest-delete). Tier-2 (drift-stamp/<current>/memformat) DEFERRED.

-- [v0.15.0 W2 drain-split ratify](v0150-w1-activity-gated-delivery.md) — SHIPPED. deferred=1 IFF window='active_only'. Only active-hook re-points to a new drain_active_window_at; relay + drain_idle_window UNCHANGED; derive deferred from window at the single insert chokepoint.

-- [owl --reply-to broken](owl-reply-to-broken.md) — BINDING (operator 2026-06-24): `$OWL send --reply-to` BROKEN (loops msg back to sender as fake inbound). ALWAYS plain `$OWL send <target> <self-id>` (e.g. `spt send perri doyle`). Kin [[owl-send-not-legacy-spt-send]].

-- [commune-ingest LLM-synthesis + gap shapes](commune-ingest-pulse-latency-gap.md) — commune ingest IS LLM-synthesized UPSTREAM of the drop; daemon ingest (lifecycle.rs:466 @5s pulse) is MECHANICAL filing. LESSON: meaning-Qs → read CONTEXT.md/CONTEXT-MEMORY.md primary, not a single Explore trace.

-- [v0.14.3 raw-inject removal](v0143-raw-inject-removal.md) — PUBLISHED counter 33. spt-hosted idle = translation-binary-ONLY; no-binary/faulted → SPOOL (loud), never raw PTY write. REQ-HAZARD-IDLE-SILENT-NONDELIVERY.

-- [Win netstream redrive flake](win-netstream-redrive-flake.md) — FIXED v0.14.1 (#4): Win-only CI flake, root=StreamLog seq counts transport read_chunks. Verify-per-attempt lesson stands.

-- [translation binary console-window bug](translation-binary-console-window-bug.md) — spt-hosted translation binary spawns VISIBLE console on Win. ROOT=translation.rs:242 missed CREATE_NO_WINDOW. Fix=cfg(windows) creation_flags(0x0800_0000). Rolls into v0.15.0 W4. NOT a new REQ.

-- [release standard: bump-in-PR](release-standard-bump-in-pr.md) — v0.14.1 ONWARD: bump rides IN release PR → PR CI validates tagged commit → tag on merge. Kills serial 2nd-CI wait.

-- [v0.14.0 W6 int structure](v0140-w6-int-structure.md) — mirror perri regression: ≥2-subnet gate, Case1 endpoint-run E2E behind acceptance-env, Cases2/3 fast bind probes.

-- [v0.13.2 build drive](v0132-build-drive.md) — PUBLISHED counter 29; adapter-packaging. W6 docs-token gate (public --help no internal codes).

-- [v0.13.0 forkpty ground truth](v013-forkpty-groundtruth.md) — SHIPPED counter 27. green-units≠green-int. gh run rerun attaches STALE attempt — verify per-attempt.

+- [v0.17.0 W1-W4 LANDED (robust-join + presence)](v0170-w1-w4-blockers.md) — IN BUILD on shared branch v0.16.0-update-arc, doyle's tree. W1 @7cddaba per-family bind gate · W4 @867c7ab cold-perch→Suspended (presence truth) · W2 @a07322c two-phase meet-before-code join ([[v0170-w2-design]]) · W3 @be1f4d6 diagnosable join (progress/detail/--verbose). All doyle-gated GREEN. Diags [[broken-ipv6-poisons-iroh-discovery]] [[presence-dead-shows-online]].

+- [v0.17.0 W5 DOYLE-OWNED (display parity, LAST wave)](v0170-w5-design.md) — 2026-06-28: doyle executes off design §B + 16-site map (registry Instance +3 gossiped fields / EpDisplay rework / view palette); todlando stood down (context), reactive for W6 (twohost ON for W2 seam, counter-36 bump-in-PR).

+- [broken IPv6 poisons iroh discovery](broken-ipv6-poisons-iroh-discovery.md) — half-broken IPv6 (AAAA resolves, path dead) silently fails subnet-join; iroh dual-stack burns rendezvous window. Tell: Test-NetConnection dns.iroh.link -443 IPv6 FAIL/IPv4 OK. Fixed by W1 family-gate.

+- [presence: dead shows ONLINE remotely](presence-dead-shows-online.md) — registryhost gossiped not-alive perch as Dormant→picker maps Dormant→Online. FIXED W4 (cold→Suspended).

+- [v0.16.0 PUBLISHED (update-arc + CLI/UX)](v0160-published.md) — counter 35 @9e5b33b (PR#38). subst keys {adapter_dir}/{adapter_name} + lazy [strings] (ADR-0029) / translation [command] / [update.post] / --reply-to REMOVED / empty-create / global --json / digest cursor / rc identity. Detail [[v0160-w1-manifest-runtime]]; docs-token leak gate [[clap-doc-comment-leaks-req-tag]].

+- [Win update-exe UAC-740](win-update-exe-uac740.md) — exe/fixture names with "update"/"setup"/"install" trip Win installer-detection → os-error-740. Name test helpers around it.

+- [v0.15.0 messaging milestone](v0150-w1-activity-gated-delivery.md) — counter 34 @18d5045 (PR#37). activity-gated delivery + re-spool; spt send axes (--idle-only/--active-only/--ephemeral/--prefer-native/--force-native/--json-payload) + Win console fix; api psyche-download.

+- [seedmap test timeout = STARVATION](seedmap-test-collides-live-daemon.md) — request_stop_barrier_holds_until_no_listener times out on a LOADED box; NOT socket collision (unique per-test socket). RERUNNABLE flake. Verify the FULL chain before confirming a diagnosis.

+- [v0.15.0 public docs-site update](v0150-public-docs-update.md) — release-riding; xtask gen only reference.md, PROSE pages hand-direct. doyle authors, publish docs-publish.yml, VERSION not internal codes.

+- [v0.16.0 release → ping perri](v0160-release-ping-perri.md) — on counter-35 drop doyle $OWL-sends perri GO (cluster-A consumable + min_spt_core→0.16.0) for claude-spt v0.8.0.

+- [v0.15.0 W5 resume-context pull](v0150-w5-resume-context-pull.md) — SHIPPED. api psyche-download <id> + durable role/live/project + <pending-commune>/<pending-signoff> gated on NOT-YET-SYNTHESIZED. Tier-2 DEFERRED.

+- [v0.15.0 W2 drain-split ratify](v0150-w1-activity-gated-delivery.md) — SHIPPED. deferred=1 IFF window=active_only; derive deferred from window at the single insert chokepoint.

+- [owl --reply-to broken](owl-reply-to-broken.md) — BINDING: $OWL send --reply-to loops msg back to sender. ALWAYS plain `$OWL send <target> <self-id>`. Kin [[owl-send-not-legacy-spt-send]].

+- [commune-ingest LLM-synthesis](commune-ingest-pulse-latency-gap.md) — commune ingest IS LLM-synthesized upstream of drop; daemon ingest (lifecycle.rs @5s) = mechanical filing. meaning-Qs → read CONTEXT.md primary.

+- [v0.14.3 raw-inject removal](v0143-raw-inject-removal.md) — counter 33. spt-hosted idle = translation-binary-ONLY; no-binary/faulted → SPOOL (loud), never raw PTY write. REQ-HAZARD-IDLE-SILENT-NONDELIVERY.

+- [Win netstream redrive flake](win-netstream-redrive-flake.md) — FIXED v0.14.1: Win CI flake, root=StreamLog seq counts transport read_chunks. Verify-per-attempt.

+- [translation binary console-window bug](translation-binary-console-window-bug.md) — spt-hosted translation binary spawns VISIBLE console on Win. Fix=cfg(windows) creation_flags(0x0800_0000). v0.15.0 W4.

+- [release standard: bump-in-PR](release-standard-bump-in-pr.md) — v0.14.1+: bump rides IN release PR → PR CI validates tagged commit → tag on merge.

+- [v0.14.0 W6 int structure](v0140-w6-int-structure.md) — ≥2-subnet gate, Case1 endpoint-run E2E behind acceptance-env, Cases2/3 fast bind probes.

+- [v0.14.x endpoint-creation + builds](v0140-endpoint-creation-flow.md) — counters 30/31/32: multi-subnet home-at-creation + UNBOUND pre-bind attach (SPT_RELEASE_SEED len64); F-018 adapter-add non-destructive + picker home-subnet [[f018-adapter-add-nondestructive]]; F-019 install_dir resolve_program_in_dir ×4 [[f019-translation-install-dir-resolve]]. GOTCHA: `spt` NO lib → --bin spt.

+- [v0.13.2 build drive](v0132-build-drive.md) — counter 29 adapter-packaging. W6 docs-token gate (public --help no internal codes).

+- [v0.13.0 forkpty ground truth](v013-forkpty-groundtruth.md) — counter 27. green-units≠green-int. gh run rerun attaches STALE attempt — verify per-attempt.

-- [v0.12.1 real-harness reopen](v0121-realharness-reopen.md) — v0.12.0 lifecycle broke in REAL harness (green-on-mocks). BINDING: gate lifecycle vs REAL dummy-harness, NO mocks.

+- [v0.12.1 real-harness reopen](v0121-realharness-reopen.md) — v0.12.0 broke in REAL harness (green-on-mocks). BINDING: gate lifecycle vs REAL dummy-harness, NO mocks.

- [v0.12.1 L0 attach-deadlock](v0121-l0-attach-deadlock-root.md) — KEYSTONE: serve_attach forwards on SAME broker IPC conn; inline ring replay blocks → deadlock → rc 0 bytes.

- [v0.12.1 help-md render](v0121-help-md.md) — `spt --help` leaked literal MD; helpfmt::render (bold→ANSI/code→cyan, strip on pipe/NO_COLOR). REQ-CLI-HELP-MARKDOWN.

-- [changelog scope vs commit range](changelog-scope-vs-commit-range.md) — release CHANGELOG must COVER every user-facing SURFACE in vPREV..vNEW (log=checklist NOT quota) + bullet SCOPE not broader than delta.

-- [pre-flight clippy --workspace](ci-clippy-preflight-workspace.md) — CI denies warnings workspace-wide; `-p <crate>` misses sibling lints. CI fires on PR.

-- [gate int with nextest not bare cargo test](gate-int-tests-with-nextest-not-bare-cargo-test.md) — re-gate spt broker/PTY int suites via `cargo nextest` (process-per-test) or `--test-threads=1`, NEVER bare `cargo test` on Win (env set_var races → FALSE flakes). Paid 2026-06-23.

-- [behavior-change → grep tests](behavior-change-grep-tests-not-comments.md) — rename/behavior/token change: grep tests/+ci/ for OLD behavior as ASSERTIONS; comment-only hit = RED FLAG, read body. Run heavy e2e locally.

-- [shared-seam → run ALL seam tests](shared-seam-change-run-all-seam-tests.md) — SHARED runtime-seam change breaks SIBLING tests; grep+run ALL seam tests not just new ones.

+- [changelog scope vs commit range](changelog-scope-vs-commit-range.md) — release CHANGELOG covers every user-facing SURFACE in vPREV..vNEW (log=checklist) + bullet scope not broader than delta.

+- [pre-flight clippy --workspace](ci-clippy-preflight-workspace.md) — CI denies warnings workspace-wide; -p <crate> misses sibling lints. CI fires on PR.

+- [gate int with nextest not bare cargo test](gate-int-tests-with-nextest-not-bare-cargo-test.md) — re-gate broker/PTY int via nextest (process-per-test) or --test-threads=1; NEVER bare cargo test on Win (env set_var races → FALSE flakes).

+- [behavior-change → grep tests](behavior-change-grep-tests-not-comments.md) — rename/behavior/token change: grep tests/+ci/ for OLD behavior as ASSERTIONS; comment-only hit = RED FLAG, read body.

+- [shared-seam → run ALL seam tests](shared-seam-change-run-all-seam-tests.md) — SHARED runtime-seam change breaks SIBLING tests; grep+run ALL seam tests.

- [broker-QUIC-deadline](v083-broker-quic-deadline.md) — REQ-HAZARD-BROKER-QUIC-DEADLINE: NetHost::bounded_block_on (10s<30s brain) wraps dial/open/send → dead peer = ORDINARY error, pump redials.

-- [F-007 live-relay acceptance](f007-live-relay-acceptance.md) — live bringup = persistent `api listen` via Monitor (NOT --once/ready); psyche-spawn gated on --manifest + install-dir fix. Ground in CONTEXT.md before ruling.

+- [F-007 live-relay acceptance](f007-live-relay-acceptance.md) — live bringup = persistent `api listen` via Monitor (NOT --once/ready); psyche-spawn gated on --manifest + install-dir fix.

- [proceed autonomously](dont-wait-proceed-autonomously.md) — operator: don't stop to ask permission between steps; chain next action.

-- [adapter add --release archive](adapter-add-release-archive.md) — `spt adapter add --release <user/repo>` (REQ-INSTALL-9): fetch .spt tar from GH release, extract, register root. Acquisition only.

-- [adapter tips → published docs](adapter-tips-published-docs.md) — perri tips → harness-agnostic docs-site patterns.md; publish via `gh workflow run docs-publish.yml --ref main`. Pre-flight xtask check+site.

-- [unmergeable PR blocks CI](unmergeable-pr-blocks-ci.md) — push yields NO pull_request run + 0 checks = UNMERGEABLE PR. Diagnose `gh pr view --json mergeable`. Fix: merge main in.

-- [CLI command → docs-drift gate](cli-command-docs-drift.md) — adding/changing a `spt` CLI command needs `cargo run -p xtask -- gen` (regen reference.md) AND no internal codes in clap ///. CI-gated.

+- [adapter add --release archive](adapter-add-release-archive.md) — `spt adapter add --release <user/repo>` (REQ-INSTALL-9): fetch .spt tar from GH release, extract, register root.

+- [adapter tips → published docs](adapter-tips-published-docs.md) — perri tips → harness-agnostic docs-site patterns.md; publish docs-publish.yml --ref main. Pre-flight xtask check.

+- [unmergeable PR blocks CI](unmergeable-pr-blocks-ci.md) — push yields NO pull_request run + 0 checks = UNMERGEABLE PR. Diagnose gh pr view --json mergeable. Fix: merge main in.

+- [CLI command → docs-drift gate](cli-command-docs-drift.md) — adding/changing a `spt` CLI command needs xtask gen (regen reference.md) AND no internal codes in clap ///. CI-gated.

- [gate against documented design](gate-against-documented-design.md) — verify a wave's premise vs RECORDED design (CONTEXT/ADRs) not just impl — an impl limitation can contradict locked design.

-- [grep REQ tags to find impl](grep-req-tags-to-find-impl.md) — to reconcile is-REQ-X-wired, grep `REQ-X` FIRST — [impl/int->REQ-X] tags point straight to code; faster than an agent trace.

+- [grep REQ tags to find impl](grep-req-tags-to-find-impl.md) — to reconcile is-REQ-X-wired, grep REQ-X FIRST — [impl/int->REQ-X] tags point straight to code.

- [public docs: version not milestone](public-docs-version-not-milestone.md) — published docs-site uses VERSION numbers, never internal M#/W# codes; grep docs-site edits before commit.

- [M12 FULLY GATED](m12-w1-progress.md) — end-to-end GATE-PASS. Published v0.6.0 baseline used to start perri.

-- [cplugs publish mechanics](cplugs-publish-mechanics.md) — cplugs steps in claude_skill_owl/docs/DEPLOY.md; spt-claude-code takes SKELETON only (binary+manifest ride adapter registry not cplugs).

-- [perri question triage](perri-question-triage-protocol.md) — STANDING: perri builds blind from PUBLISHED docs+binary. Every impl Q = diagnostic; classify w/ EVIDENCE. Never answer from memory.

-- [perri needs reply to continue](perri-needs-reply-to-continue.md) — STANDING: ALWAYS reply to perri (ack+keep-going+next); silence = stop-point. todlando self-drives, perri needs nudge.

-- [no machine-wide kill on shared runner](no-machinewide-killon-shared-runner.md) — BINDING: HFENDULEAM self-hosted runner shares box w/ LIVE agents; never machine-wide `Stop-Process spt`; scope to $GITHUB_WORKSPACE/target or PID.

+- [cplugs publish mechanics](cplugs-publish-mechanics.md) — cplugs steps in claude_skill_owl/docs/DEPLOY.md; spt-claude-code takes SKELETON only (binary+manifest ride adapter registry).

+- [perri question triage](perri-question-triage-protocol.md) — STANDING: perri builds blind from PUBLISHED docs+binary. Every impl Q = diagnostic; classify w/ EVIDENCE.

+- [perri needs reply to continue](perri-needs-reply-to-continue.md) — STANDING: ALWAYS reply to perri (ack+keep-going+next); silence = stop-point.

+- [no machine-wide kill on shared runner](no-machinewide-killon-shared-runner.md) — BINDING: HFENDULEAM runner shares box w/ LIVE agents; never machine-wide Stop-Process spt; scope to $GITHUB_WORKSPACE/target or PID.

- [agent roles](agent-roles.md) — doyle=gater/owner (don't self-execute big builds), todlando=executor, perri=adapter builder. perri gap→doyle design→todlando build→doyle gate→perri validate.

-- [EVENT envelope + __REPLY_TO__ removal](event-envelope-reply-to-removal.md) — ADR-0020: `<EVENT type=msg from=…>` = sole arriving-message format. __REPLY_TO__ REMOVED. LESSON: pin OWL_SESSION_ID for auth-gated E2E.

-- [harness boundary + grounding](spt-core-harness-boundary-and-grounding.md) — BINDING: spt-core never caters to a specific harness; ground completeness Qs in CONTEXT/ADRs (apparent gaps usually already specified).

-- [sptc plugin name ruling](sptc-plugin-name-ruling.md) — sptc plugin = `sptc` (interim) → flips to `spt` on proven parity; CC hard-ties skill prefix to plugin.json name. adapter_name=claude-spt.

-- [experimplate seed leaks](experimplate-traceable-seed-leaks.md) — experimplate ships traceable seed defects (4 tag-leaks + manifest_error in example docs); doyle fixes upstream before next reuse.

+- [EVENT envelope + __REPLY_TO__ removal](event-envelope-reply-to-removal.md) — ADR-0020: `<EVENT type=msg from=…>` = sole arriving format. __REPLY_TO__ REMOVED. pin OWL_SESSION_ID for auth-gated E2E.

+- [harness boundary + grounding](spt-core-harness-boundary-and-grounding.md) — BINDING: spt-core never caters to a harness; ground completeness Qs in CONTEXT/ADRs (apparent gaps usually already specified).

+- [sptc plugin name ruling](sptc-plugin-name-ruling.md) — sptc plugin = `sptc` (interim) → flips to `spt` on proven parity; CC ties skill prefix to plugin.json name. adapter_name=claude-spt.

+- [experimplate seed leaks](experimplate-traceable-seed-leaks.md) — experimplate ships traceable seed defects (tag-leaks + manifest_error in example docs); doyle fixes upstream before reuse.

- [spt-claude-code NEXT](spt-claude-code-next.md) — SCOPING DONE. perri builds from spt-releases+GH-Pages ONLY.

-- [M10 digest extractor](m10-digest-extractor.md) — `[digest]` imperative extractor (ADR-0019) + thread-spanning + two-origin merge. SHIPPED v0.6.0. Carried: real-CC digest-proof → perri criterion.

+- [M10 digest extractor](m10-digest-extractor.md) — [digest] imperative extractor (ADR-0019) + thread-spanning + two-origin merge. SHIPPED v0.6.0. Carried: real-CC digest-proof → perri criterion.

- [PARITY ARC CLOSED](parity-arc-closed.md) — spt-claude-code v0.3.0 = full bare-bringup parity; perri dogfood GREEN. Next = sptc→spt flip.

-- [spt-core findings backlog](spt-core-findings-backlog.md) — 3 non-blocking → todlando: REQ-SEND-SPT-HOSTED, REQ-HAZARD-RC-EOF (rc.rs:362 raw-EOF crash), REQ-HAZARD-DEFERRED-MANIFEST. +2 from the broken-IPv6 diag: discovery IPv6-resilience + join silent-UX.

-- [broken IPv6 poisons iroh discovery](broken-ipv6-poisons-iroh-discovery.md) — CONFIRMED 2026-06-27: half-broken IPv6 (AAAA resolves, path dead) silently fails subnet-join — iroh dual-stack burns the rendezvous window on dead IPv6. Tell: `Test-NetConnection dns.iroh.link -443` IPv6 FAILS / IPv4 OK. Fix=disable IPv6. Refuted first: clock/firewall/relay.

+- [spt-core findings backlog](spt-core-findings-backlog.md) — non-blocking → todlando: REQ-SEND-SPT-HOSTED, REQ-HAZARD-RC-EOF (rc.rs:362 raw-EOF crash), REQ-HAZARD-DEFERRED-MANIFEST.

- [update-apply confident message](update-apply-confident-message.md) — public `spt update apply` SUCCESS says "Updated" not internal "trial"; trial/rollback machinery untouched.

-- [traceable per-wave activation](traceable-per-wave-activation.md) — traceable check requires ALL declared required_stages per commit; activate stages incrementally (int at final wave), never full end-state upfront.

+- [traceable per-wave activation](traceable-per-wave-activation.md) — traceable check requires ALL declared required_stages per commit; activate incrementally (int at final wave), never full end-state upfront.

- [v0.9.0 harness-resolution](v090-harness-resolution.md) — SHIPPED PR#21: adapter-agnostic seed + bind-time resolution (ADR-0021); --adapter no longer mandatory.

- [v0.9.1 resolve-dotstem](v091-resolve-dotstem.md) — normalize_basename stem-before-first-dot + stale-broker seed hint. REQ-HAZARD-BROKER-SEED-WIRE-SKEW, KH 7.9.

-- [release counter from published](release-counter-from-published.md) — release --version counter from PUBLISHED spt-releases metadata NOT memory; collision breaks spt-update rollback floor. Cross-check monotonic at publish.

+- [release counter from published](release-counter-from-published.md) — release --version counter from PUBLISHED spt-releases metadata NOT memory; collision breaks spt-update rollback floor. Cross-check monotonic.

- [release retag mechanics](v080-published.md) — cut ONLY after doyle CHANGELOG-vet. retag = amend CHANGELOG→delete draft→move tag→rebuild→sign FRESH bytes.

- [release Cargo.lock first-party](v073-published.md) — bump collides w/ third-party @ same version; TARGETED replace ~11 first-party crate names ONLY.

-- [fix-only PR doesn't bump](v072-published.md) — fix PR does NOT bump; release driver authors bump. main locked → `git worktree add --detach` + push HEAD:main.

-- [transient release-API flake](v071-published.md) — release.yml assemble TLS-timeout on gh-release-create → `gh run rerun --failed` clears (builds reused, no re-tag). Read failed step.

-- [hfenduleam disk-full CI](hfenduleam-disk-full-ci.md) — Win CI LNK1318/os-error-112 = disk full not code; cargo clean dev target, rerun job; check disk before treating Win RED as code defect.

+- [fix-only PR doesn't bump](v072-published.md) — fix PR does NOT bump; release driver authors bump. main locked → git worktree add --detach + push HEAD:main.

+- [transient release-API flake](v071-published.md) — release.yml assemble TLS-timeout on gh-release-create → gh run rerun --failed clears (builds reused, no re-tag).

+- [hfenduleam disk-full CI](hfenduleam-disk-full-ci.md) — Win CI LNK1318/os-error-112 = disk full not code; cargo clean dev target, rerun; check disk before treating Win RED as code defect.

- [v0.4.2 Linux respawn fix](v042-published.md) — REQ-HAZARD-BRAIN-RESPAWN-PATH: respawn via canonical install path not current_exe + bytes-assert→auto-rollback.

- [boot-race self-heal](boot-race-self-heal.md) — daemon self-heals net-less boot (NetHost retry+attach to OnceLock broker); systemd network-online ordering does NOT reliably prevent the race.

- [pump-IPC-deadline fix](pump-ipc-deadline-fix.md) — reader-thread+channel carrier (nonblock dead on Win named pipes); MERGED @4d8b810, rides v0.4.1.

- [which process is the listener](spt-daemon-is-live-infra.md) — owl.exe (plugin) = live listener; target\debug\spt.exe daemon = dev/test artifact, killable.

- [self-clear skill API-blocked](self-clear-skill-api-blocked.md) — never invoke /self-clear; usage-policy classifier refuses the turn; continue in-context / user-manual /clear.

- [adapter glue-model boundary](adapter-glue-model-boundary.md) — adapters = manifest + binary only; real adapters in own repos; no adapter-aware source in spt-core.

-- [use $OWL send for messaging](owl-send-not-legacy-spt-send.md) — `$OWL send` works (legacy = where live perches run); `spt send` bounces NO_PERCH. Don't read `$?` after piping send through tail — use PIPESTATUS.

+- [use $OWL send for messaging](owl-send-not-legacy-spt-send.md) — $OWL send works (legacy = where live perches run); `spt send` bounces NO_PERCH. Don't read $? after piping send through tail — use PIPESTATUS.

- [Linux SPT_HOME no-bug](linux-spt-home-no-bug.md) — unix spawn_detached inherits env (forwards SPT_HOME); only Win CreateEnvironmentBlock rebuilds/drops it.

- [kitsubito Linux rig](kitsubito-linux-rig.md) — ssh reavus@kitsubito (key); deploy origin=local runner (git bundle); live spt-daemon user unit; build-in-scratch leaves ~/.local/bin/spt untouched.

- [Gravity deploy procedure](gravity-deploy-procedure.md) — ssh david@100.100.62.43; build in ~/spt-core-deploy NOT runner workspace; setsid daemon; ~1 min first-sync after restart.

- [v0.3.2 platform-safe update](v032-platform-safe-update.md) — REQ-UPD-8: fetch stages multi-platform update-set, apply refuses unstamped/wrong-OS. GOTCHA: fetch floor=staged_version.

- [M6 shipped v0.1.0](m6-shipped-v010.md) — release procedure = RELEASE-RUNBOOK.md; releases-repo/ = repo-face truth.

- [v0.15.0 published detail](v0150-published.md) — counter 34 @18d5045 (PR#37). hashes linux 93ed9b89… / win b4950a8d…. signed FRESH, 33→34 monotonic, docs-publish green on tag.


MEMORY.md compacted (now well under the limit). doyle confirms all 3 W5 flags captured + owns W5/W6/release. Acking the handoff.


Bash

printf '%s' 'doyle — ACK, clean handoff. All yours: W5 + W6 + release. Flags confirmed captured (additive serde N-1 round-trip / EpStatus::Suspended third state / W4 int reassert on gray-filled). twohost-ON-for-meet-int = right read (meet/ceremony handshake = the one real cross-host change; transport untouched). Perched + reactive for any W6 question. Standing down. Good run.' | $OWL send doyle todlando 2>&1 | tail -1


➜ SENT:doyle


Handoff complete. Standing down.

**v0.17.0 build run — done my side:**
- W1 `7cddaba` · W4 `867c7ab` · W2 `a07322c` · W3 `be1f4d6` — 4/5 waves LANDED, all doyle-gated GREEN (926/926).
- W5 (display parity) + W6 (release, counter 36) — doyle-owned, executing off design §B + the 16-site map I left in `v0170-w5-design.md`.

Memory compacted (under limit), commune checkpointed. Perched + reactive for W6 questions only.