# ACROSS-WAKE-INSTALL-PLAN — v0.23.0

> Grilled 2026-07-16 (operator + doyle). Three bodies: the across/wake rename, the
> fresh-install loud-failure fix, and claude-CLI auto-install.

## Decisions (grill outcomes)

1. **Layered rename.** Skill flag `--checkpoint` → `--across`; agent-facing verbiage reframed
   to "commune across (to the next session)". Markers/protocol/code identifiers → **wake**
   vocabulary (they mark the wake message). **Hard cutover on the word "checkpoint"** in all
   agent-facing text — Claude Code now ships an official `/checkpoint` skill (semantic collision).
2. **Staged wire rename** (LOCKSTEP-degrade discipline): receive-both, emit-old this release.
   Hook + translate ACCEPT both `!!wake!!`/`!!checkpoint!!` markers and both old/new envelope
   keys; the EMIT side keeps the old envelope keys for one release (an un-bounced old resident
   translate receiving an unknown envelope key must never type raw JSON at a boundary). Emit
   flips next release. Code identifiers rename now.
3. **Fresh install (doyle-verified):** `[update.post]` runs on ADD since spt-core v0.19.0;
   add is blocking; post-step failure = stderr `ADAPTER_UPDATE_POST_FAIL` + CLI exit 1 — BUT
   core's emit_fallback still prints the static `[update].message` on stdout after a failed
   post-step, masking failure as success. Adapter-first fix:
   - post-update prints a **custom VERIFIED success notice** (supersedes the static message)
     only after asserting the plugin actually landed (re-read installed_plugins.json);
   - static `[update].message` reworded to never read as an unconditional success
     confirmation (names the ✔-verified-line contract);
   - failure keeps exit-nonzero, never detach-and-exit-0.
   Core finding filed (emit_fallback masking) — doyle seeds kin core-side.
4. **claude auto-install lives in post-update** (chicken-egg: no claude → no CC → no plugin →
   no /sptc:setup). When neither `claude` nor `ccs` resolves: run the platform-native installer
   verbatim from code.claude.com quickstart (PowerShell `irm https://claude.ai/install.ps1 | iex`;
   unix `curl -fsSL https://claude.ai/install.sh | bash`), loud on stderr, re-probe PATH +
   known install dirs after, proceed with reconcile; install failure = loud + exit nonzero with
   the manual one-liner. `ccs`-present skips the install (drop-in). Auth stays the operator's
   first `claude` run; notice says so.
5. **Folded:** stale `SaberMage/claude-spt` in setup.md + setup SKILL.md → private home.
   Plugin skeleton 0.1.13 → 0.1.14 + cplugs marketplace push (SKILL.md content changed).

## Tasks

- manifest: version 0.23.0; hint text → across; [update].message reword; comments.
- post_update.rs: auto-install + post-verify + verified notice; unit tests.
- hook.rs / translate.rs / stub.rs: wake identifiers; accept-both markers + envelopes; tests.
- plugin/sptc/skills/commune/SKILL.md (+ plugin.json bump); briefs/live-ops.md;
  strings/skills/live.md; setup docs repoint.
- CONTEXT.md: across commune / wake marker terms; ADR-0009 (rename + collision rationale).
- traceable-reqs: REQ-DIST-INSTALL-VERIFIED, REQ-DIST-CLAUDE-AUTOINSTALL,
  REQ-WAKE-RENAME-STAGED (titles final at mint).
- docs/SPT-CORE-FINDINGS.md: the emit_fallback masking finding.
- CHANGELOG 0.23.0.

## Gate

`sh ci/run-gates.sh` green → release spine (build ×3 triples, pack, tag v0.23.0, publish at
the private home, mirror snapshot) → fresh-install acceptance on a scratch CLAUDE_CONFIG_DIR
+ claude-less PATH proving loud failure/verified success + auto-install routing (dry-run).
