---
name: v073-published
description: "v0.7.3 PUBLIC 2026-06-15 (counter 15); headline `spt adapter add --release` (REQ-INSTALL-9); deployah full self-drive, push→CI-green-on-main→tag"
metadata: 
  node_type: memory
  type: project
  originSessionId: 1fb9fc52-b258-4b44-9c4c-7cae9345098f
---

v0.7.3 SIGNED + PUBLISHED 2026-06-15 (release counter 15; v0.7.2=14, v0.7.3=15). Patch. deployah full self-drive (operator GO via doyle). main HEAD already had the feature (94bda1e) — no PR merge; authored bump only.

Hashes: linux `13fba4add332a7d1641e4770ca0e48f96cae1ebc9017193fce27860f97aeb78b`, win `d86768444acb772774d3c507d6f1295659faad01acfba702ec4812acb1090794`. signed `54188f12…05e3ec9`. update-set v15. release commit 22a9c58. https://github.com/SaberMage/spt-releases/releases/tag/v0.7.3

**Content:** headline `spt adapter add --release <user/repo> [--tag] [--asset]` (REQ-INSTALL-9, @94bda1e) — fetch a `.spt` archive from a GitHub release, extract (system tar), register root; closes perri's monorepo-adapter gap (root-only `--github` clone doesn't fit); acquisition only, doesn't change `[update]` route. Plus harness-contract doc clarity. Unblocks perri's `--release` int + end-user `/sptc:setup` activation path in a published binary (was authoring-only against docs). See [[adapter-add-release-archive]].

**NEW LESSON — push→CI-green-on-MAIN→tag (never tag-early).** ci.yml fires on `push: branches: [main, dev-freeform]` (NOT just PR). So the release bump commit pushed to main runs the full gate (test+n1-gate both runners + traceability; twohost opt-in). doyle's protocol: push bump → confirm CI GREEN both runners → THEN tag. Watched run 27598414868 green before tagging. (Contrast: for v0.7.2 I tagged right after the bump push without waiting — works but doyle wants the explicit gate.)

**CARGO.LOCK TARGETED-BUMP (refinement of [[v072-published]]):** when the NEW version collides with a third-party dep already at that version, a blanket `old→new` replace corrupts the dep. v0.7.3: bumping 0.7.2→0.7.3, `loom@0.7.2` AND `spki@0.7.3` were third-party. Used a TARGETED regex over only the 11 first-party crate names (`name = "(mock-adapter|spt|spt-daemon|spt-live|spt-msg|spt-net|spt-proto|spt-runtime|spt-store|spt-term|xtask)"\nversion = "X"`), left loom/spki untouched. Always check which packages carry the old AND new version before editing Cargo.lock.

**DOGFOOD SUCCESS 2026-06-15 (first real e2e --release):** perri upgraded her win node 0.7.2→0.7.3 (brain.ready exe_hash flipped to d86768…0794 = deployah's signed win hash, seamless no-bounce — upgrade path proven), then `spt adapter add --release SaberMage/spt-claude-code --tag v0.1.0` fetched adapter.spt from her v0.1.0 release, extracted to adapters/_github/SaberMage-spt-claude-code/, registered → claude-spt ACTIVE. The full release apparatus (sign→publish→upgrade→--release install) validated into a real downstream adapter. ONE GENUINE GAP (doyle triaging, REQ-INSTALL-9 follow-on): bundled binaries extract but bare-name templates don't resolve from PATH in copy-mode — perri's interim = place on PATH; proper spt-core fix rides a future cut (likely v0.7.4 = counter 16, deployah's leg).

**How to apply:** publisher leg proven 9× (counter 7-15). Throwaway-worktree mechanic (main locked in spt-core-doyle wt): `git worktree add --detach <path> <main-sha>` → bump → commit → push HEAD:main → watch ci.yml main run green → tag → `worktree remove --force`. Seed `SPT_RELEASE_SEED` resident in ENV (64-hex); Monitor=bash. M11 shell-substrate (W2/W3/W4, PR #16 branch m11-shell-substrate) NOT in v0.7.3 — ships a later release.
