{
  "summary": "## Scope and evidence basis\nRead-only inventory of `../spt-claude-code`; no project-wide commands, builds, tests, formatters, or linters were run. “Tested” below means test evidence exists in the repository, not that I independently executed it. I did not inspect spt-core source; core references are limited to the adapter’s vendored public schema and its own documentation of the published surface.\n\n## Feature / packaging inventory\n\n| User-visible surface | Implemented behavior | Test evidence present | Documentation evidence | Packaged / released state |\n|---|---|---|---|---|\n| **Complete Claude Code command namespace** | Exactly **11** plugin commands exist: `/sptc:live`, `ready`, `send`, `commune`, `signoff`, `setup`, `role`, `list-agents`, `subnet`, `force-stop`, `version` under `plugin/sptc/skills/*/SKILL.md`. `plugin/sptc/.claude-plugin/plugin.json:1-9` fixes the namespace through plugin name `sptc`. | `ci/publish/validate-skeleton.sh:51-78` checks every skill dir and required `argument-hint`; `tests/skeleton-validate.sh:44-54` exercises missing/malformed hints. These are structural tests, not one end-to-end test per command. | Current command descriptions live in each `plugin/sptc/skills/*/SKILL.md`; `CHANGELOG.md:104-113` documents command argument hints. | All 11 skeleton commands are copied by `ci/publish/package-skeleton.sh:27,45-50`; current marketplace identity is **plugin 0.1.13** (`plugin.json:2-3`). |\n| **Injected operative skills** | Eight command bodies are adapter-updatable through `[strings.skills]`: `setup`, `ready`, `version`, `list-agents`, `force-stop`, `subnet`, `role`, `live` (`adapter/claude-spt.toml:1067-1095`; bodies under `adapter/strings/skills/`). UPS injection is implemented in `tools/claude-spt/src/hook.rs:1068-1074` and `handle_user_prompt_submit` at `:1074`. | `ci/manifest/registration-int.sh:54-66` resolves `ready`, `force-stop`, `live`, and `subnet`; `:68-80` injects `/sptc:ready` through the real hook binary. Rust hook tests cover skill-key dispatch and role/live special cases. | The operative bodies themselves are documentation-as-runtime under `adapter/strings/skills/*.md`. | Bodies are shared `strings/` inside `adapter.spt` (`ci/publish/package-adapter.sh:8-16,116-119`), independently updateable from the marketplace skeleton. |\n| **Reactive `send`, `commune`, `signoff`** | These three intentionally have **no** `[strings.skills]` entry. Their command files are thin stubs. Operative guidance is delivered proactively: `send` through `briefs/messaging-perch.md`; `commune`/checkpoint and `signoff` through `briefs/live-ops.md`; all are also taught inline during go-live (`adapter/claude-spt.toml:1082-1091,1111-1120`). `send` delegates to core CLI; shortform `@<targets body @>` dispatch is implemented by `tag_scan::parse_tag_sections`/`plan_dispatch` (`tools/claude-spt/src/tag_scan.rs:64,172`). | Tag messaging and commune shortcut have substantial Rust unit coverage in `tag_scan.rs:258+`; checkpoint translation/role choreography tests are in `translate.rs:884+`; `ci/idle-translate/translate-proof-int.sh` and `wake-survival-int.sh` provide acceptance-gated integration evidence. No distinct end-to-end signoff test was located. | Plugin stubs correctly say runtime guidance arrives from adapter/briefs. `CHANGELOG.md:10-27` documents current shortform messaging; `CHANGELOG.md:83-91` documents checkpoint behavior. | Skeleton command discoverability ships via cplugs; operative prose ships via adapter `strings/`. |\n| **Go live / resume live agent** | `/sptc:live` distinguishes spt-hosted from self-launched sessions, selects/creates/resumes an id, binds a Monitor relay, and surfaces roster/subnet state (`adapter/strings/skills/live.md`). Base manifest is live-capable via `[session.psyche_init]`/`[session.psyche_resume]` (`adapter/claude-spt.toml:731-795`). `claude-spt psyche` is a run-to-completion constrained companion (`tools/claude-spt/src/psyche.rs:284`); `/sptc:live --auto` restores most-recent context per plugin description. | Psyche argument/sandbox/turn behavior has Rust tests (`psyche.rs:359+`). `ci/psyche/live-relay-int.sh` intends a real-core relay proof but is stale (see inconsistencies); current manifest registration checks the live body (`registration-int.sh:60-63`). | Current runtime body: `adapter/strings/skills/live.md`; accepted constrained-Psyche design: `docs/adr/0003-psyche-is-a-constrained-auto-approving-companion.md:35-60`; current release behavior in `CHANGELOG.md:104-120,283-285`. | `claude-spt psyche` is one subcommand of the consolidated binary in every adapter target. The plugin carries only the command stub. |\n| **Ready / reachable perch** | `/sptc:ready` binds a self-launched Claude Code session and listens once or persistently; spt-hosted sessions avoid re-arming an already broker-hosted perch (`adapter/strings/skills/ready.md`). | Real manifest string resolution and `/sptc:ready` hook injection are covered by `ci/manifest/registration-int.sh:54-55,68-80`. Generic hook, poll, and registration paths have Rust/shell tests. No command-specific real-Claude ready UAT script was found. | Runtime body is the authoritative operational documentation. | Body in adapter archive; stub in marketplace plugin. |\n| **Durable role** | `/sptc:role` reads or rewrites endpoint role/description. Bare invocation opens an editable tagged draft; hook commits the round trip (`hook.rs:994-1042`), and idle translation types the draft without submitting (`translate.rs:204-275`). | Dedicated Rust unit coverage at `translate.rs:884-935` and hook-side role parsing/commit tests. | `plugin/sptc/skills/role/SKILL.md:4-8`; `adapter/strings/skills/role.md`; release announcement `CHANGELOG.md:116-123`. | Added to plugin skeleton 0.1.13 and adapter strings; functionality also depends on consolidated hook/translate binary. |\n| **Lifecycle hooks and delivery** | Static `plugin/sptc/hooks/hooks.json:2-37` routes **11 CC event types** through `hooks/dispatch.sh`: SessionStart, UserPromptSubmit, PreToolUse, Stop, SessionEnd, SubagentStart, SubagentStop, PostToolUse(Write), PostToolUseFailure, Notification, StopFailure. `dispatch.sh` resolves the installed adapter binary then runs `claude-spt hook <event>`. Hook implementations include SessionStart registration/briefs (`hook.rs:752`), prompt-start busy + transactional inbox delivery (`:1074`), mid-turn polling (`:1376`), Stop idle (`:1425`), Notification/StopFailure/interrupt healing (`:1464,:1522,:1536`), SessionEnd teardown (`:1547`), and checkpoint Write detection (`:1642`). | `tests/hooks-dispatch.sh`, `tests/msys-hazard.sh`, `ci/hooks/poll-int.sh`, broad Rust hook tests, and recent report claim at `.claude/reports/2026-07-10-user-prompt-hook-timeout/README.md:43-49` (“309-test suite green”; claim not rerun here). | Current hook mapping in `docs-site/src/reference/harness-contract.md:13-51`; behavior changes in `CHANGELOG.md:7-28`. Older ADR mapping is partly stale. | `hooks.json` + dispatch shell ship in marketplace; all changing hook logic ships in the platform binary, allowing adapter update without marketplace republish. Windows execution explicitly depends on Git Bash/bash because `hooks.json` commands are `sh …` with `shell: bash`. |\n| **Idle-message / checkpoint injection** | `[message-idle-translation-binary]` invokes `{adapter_dir}/claude-spt translate` (`adapter/claude-spt.toml:942-943`). Current design parks full bodies and types only compact `<msg …/>` or `<wake/>` markers; prompt/tool hooks drain parked bodies transactionally (`tools/claude-spt/src/translate.rs:522-584`, ADR-0007). | Extensive translator units plus `ci/idle-translate/translate-proof-int.sh` and `wake-survival-int.sh`; `tests/adapter-archive.sh` ensures translator is in the consolidated binary. | Current accepted design: `docs/adr/0007-stub-based-idle-delivery.md:17-65`; public change: `CHANGELOG.md:45-57`. | Consolidated binary on all three packaged targets. |\n| **Session digest, history, echo-commune** | `[digest] strategy=\"fetcher\"` invokes `claude-spt digest` (`adapter/claude-spt.toml:965-968`); `main.rs` also dispatches `history` and `echo-commune`; `echo_commune.rs` creates project/live-tier resume deltas after session end. | Cargo unit coverage; `ci/digest/digest-proof-int.sh`; `ci/psyche-download/psyche-download-int.sh`; echo-commune unit tests at `echo_commune.rs:416+`. | Manifest comments and changelog, notably current digest behavior at `CHANGELOG.md:54-57`. | One consolidated binary per target, not separate digest/psyche executables. |\n| **Harness-hosted launch / resume and ccs profile** | `[session.self]` and `[session.resume]` call `{adapter_dir}/claude-spt launch` (`adapter/claude-spt.toml:811-838`). `launch::run` is at `tools/claude-spt/src/launch.rs:213`. Profile `claude-spt:ccs` leaf-replaces those commands (`manifest:1028-1039`). `shortcut_basename=\"cc\"` brands generated `cc-<id>` launchers (`manifest:550-555`). | Rust launch tests; `tests/manifest-shortcut.sh`; `ci/launcher/bind-int.sh`; registration integration checks profile resolution. | Setup body documents optional ccs routing (`adapter/strings/skills/setup.md:37-45`). ADR-0005 documents naming; ADR-0006 documents consolidated binary. | Same adapter archive; ccs itself is user-supplied and is not bundled. Only base + `ccs` profile ship; experimental `deep` was intentionally removed (`CHANGELOG.md:486-487`). |\n| **Setup / install / update** | SessionStart bootstrap scripts install spt-core on demand (`plugin/sptc/bootstrap.sh`, `bootstrap.ps1`). `/sptc:setup` installs/repairs core, activates `claude-spt`, selects it, optionally checks ccs/subnet (`adapter/strings/skills/setup.md`). Manifest self-update is `[update] avenue=\"gh_release\"`, repo `SaberMage/claude-spt`, `transport=\"gh\"`, plus post-update reconciliation (`adapter/claude-spt.toml:571-608`). Adapter version-of-truth is **0.21.0** (`manifest:491`); core floor **0.27.0** (`:541`). | `ci/setup/activate-int.sh`; `ci/publish/release-acquire-int.sh`; `tests/adapter-archive.sh`; post-update Rust tests. `ci/run-gates.sh:17-73` is the deterministic gate runner. | Current install/update steps: `README.md:11-72`; current private-repo/gh requirement: `CHANGELOG.md:29-38` and runbook `:218-225`. | Two independent release channels: plugin skeleton **0.1.13** to `SaberMage/cplugs`; adapter **0.21.0** as GitHub release `adapter.spt`. Distinct versions are explicitly intentional, not a mismatch (`CHANGELOG.md:3-5`). Repository contains no `.github` workflow directory; release scripts are manual/dry-run and never upload. |\n| **Roster / force stop / version / subnet** | `list-agents` wraps `spt endpoint list`; `force-stop` wraps endpoint shutdown; `version` reports core + adapter/profile, not marketplace plugin; `subnet` wraps status/create/show-code/join. Bodies: `adapter/strings/skills/{list-agents,force-stop,version,subnet}.md`. | Generic skeleton and UPS coverage; registration integration explicitly resolves force-stop and subnet (`registration-int.sh:58-66`); `ci/subnet/multi-subnet-bringup-int.sh` tests multi-subnet endpoint creation. No dedicated behavioral integration script was found for list-agents, force-stop, or version. | Runtime bodies and matching plugin descriptions. | Stub + adapter-string split as above. |\n| **Worker endpoints — IDENTIFY THEN EXCLUDE from desired parity** | Worker support is real: manifest `hostable_types = [\"LiveAgent\", \"ReadyAgent\", \"Worker\"]` (`adapter/claude-spt.toml:542`); SubagentStart/Stop map to worker-start/stop (`:664-672`); hook handlers are `handle_subagent_start`/`handle_subagent_stop` (`hook.rs:1574,1612`). | Rust lifecycle tests and hook wiring structural tests; worker release history in `CHANGELOG.md:261-262`. | Harness docs include Subagent hooks; changelog documents worker-perch lifecycle. | Ships in hook binary and static hooks. **Explicit product decision says filter this entire row from desired feature parity.** |\n\n## Explicit platform / architecture release targets\n\n| Target | Implementation/build evidence | Packaged evidence | Status |\n|---|---|---|---|\n| **Windows x86-64, MSVC** — `x86_64-pc-windows-msvc` | Native Rust build output expected under `tools/claude-spt/target/release/claude-spt.exe`; Windows-specific branches appear in hook/process paths and PowerShell bootstrap. | `ci/publish/package-adapter.sh:54-60` and `tests/adapter-archive.sh:8-16`; current fat `dist/adapter.spt`. | Explicitly supported and packaged. Claude Code hooks require Git Bash/bash; PowerShell exists for installation/bootstrap. |\n| **Linux x86-64, glibc** — `x86_64-unknown-linux-gnu` | Cross-build path documented with `cargo-zigbuild` in `docs/RELEASE-RUNBOOK.md:196-214`. | Packer/test lines above; `dist/adapter.spt`. | Explicitly supported and packaged; standard/default Linux build. |\n| **Linux x86-64, static musl** — `x86_64-unknown-linux-musl` | Packer expects `tools/claude-spt/target/x86_64-unknown-linux-musl/release/claude-spt`. | `ci/publish/package-adapter.sh:13-16,54-60`; archive unit expects all three target dirs; `CHANGELOG.md:115-120` says added in 0.18.1 for pre-glibc-2.39 hosts. | Explicitly supported and packaged; requires spt-core musl classification support (changelog names v0.30.0). |\n| **macOS (x86-64 or ARM64)** | No Apple target triple, build command, package branch, or binary artifact found after both targeted and broad searches. | None. | **Not packaged / not an adapter release target.** README’s `bash (macOS / Linux / Git Bash on Windows)` at `README.md:31` is therefore only a generic installer-shell claim and overstates adapter availability. |\n| **Windows ARM64 / Linux ARM64 / x86 32-bit** | No `aarch64`, `arm64`, or `i686` target found in build, packer, tests, manifest, or docs searches. | None. | **Not packaged / not release targets.** |\n\nCurrent `dist/` contains `adapter.spt` plus older `adapter-linux-x86_64.spt` and `adapter-windows-x86_64.spt`; only `adapter.spt` is the current packer’s canonical multi-platform asset (`ci/publish/package-adapter.sh:8-16,44`). The per-OS files are stale artifacts, not current release targets.\n\n## Test and release-system inventory\n\n- Default structural/unit shell suite: nine files under `tests/`: `acceptance-harness.sh`, `adapter-archive.sh`, `ci-gates.sh`, `docs-gen.sh`, `hooks-dispatch.sh`, `manifest-schema.sh`, `manifest-shortcut.sh`, `msys-hazard.sh`, `skeleton-validate.sh`.\n- Acceptance/integration scripts: `ci/acceptance/run-acceptance.sh`, `ci/hooks/poll-int.sh`, `ci/manifest/registration-int.sh`, `ci/digest/digest-proof-int.sh`, `ci/idle-translate/{translate-proof-int,wake-survival-int}.sh`, `ci/psyche/live-relay-int.sh`, `ci/psyche-download/psyche-download-int.sh`, `ci/setup/activate-int.sh`, `ci/launcher/bind-int.sh`, `ci/subnet/multi-subnet-bringup-int.sh`, `ci/publish/release-acquire-int.sh`. Many are environment-gated and legitimately print SKIP without `SPTC_ACCEPTANCE=1`, real spt, Claude auth, or multiple nodes.\n- Rust unit tests are run through the single crate build path (`ci/digest/build.sh`); `ci/psyche/build.sh` and `ci/idle-translate/build.sh` are consolidation shims. Recent in-repo evidence claims 309 green tests after v0.21.0 (`.claude/reports/2026-07-10-user-prompt-hook-timeout/README.md:43-47`), but that claim was not rerun.\n- `ci/run-gates.sh` runs shell syntax, all `tests/*.sh`, Cargo build/tests, traceability when installed, skeleton validation, manifest schema, and docs drift. It correctly records failures; reruns with `|| true` only print diagnostics after the failure bit is already set (`:17-73`).\n- `docs/CI.md:1-8,88-100` explicitly chooses an agent-driven Windows+Linux fleet with a git `pre-push` messenger and **no GitHub-hosted CI**. No `.github` directory exists.\n- Release is manual: `ci/publish/package-adapter.sh` and `package-skeleton.sh` are dry-run by default and never upload/push. `docs/RELEASE-RUNBOOK.md:89-99` describes manual tag + GitHub release attachment and a separate marketplace push.\n\n## Internal inconsistencies / stale evidence\n\n1. **macOS install claim vs no macOS adapter artifact.** `README.md:31` advertises bash on macOS, but the package has only Windows x64 and two Linux x64 triples. This must be classified as documented-only, not implemented/packaged macOS support.\n2. **Release runbook says two triples, current packer ships three.** `docs/RELEASE-RUNBOOK.md:189-195` calls Windows MSVC + Linux GNU the “ONLY two” recognized fat-archive triples and says a third must be separate. Current `ci/publish/package-adapter.sh:54-60` and `tests/adapter-archive.sh:8-16` require a third `x86_64-unknown-linux-musl` directory.\n3. **Release runbook contradicts current update implementation and itself.** `RELEASE-RUNBOOK.md:247-255` says no `[update]`, acquisition-only, then immediately calls file-pull the real channel. The manifest actually has `[update]` at `adapter/claude-spt.toml:571-608` with private-repo `gh` transport. The same runbook `:234-236` says setup still performs OS/asset detection, while current `adapter/strings/skills/setup.md:24-31` already uses bare host-agnostic `adapter add --release`.\n4. **Stale live integration test models a resident Psyche.** `ci/psyche/live-relay-int.sh:2-25,115-145` still expects a resident `claude-spt-psyche` process/nested perch (despite partial comments acknowledging the consolidated image). Current product changed Psyche to run-to-completion at 0.14.2 (`CHANGELOG.md:283-285`) and manifest uses `claude-spt psyche` (`adapter/claude-spt.toml:731,769`). The script is acceptance-gated and not proof of current lifecycle behavior as written.\n5. **Stale registration-test comment about reactive skills.** `ci/manifest/registration-int.sh:56-57` says send/commune/signoff are “full-fat in plugin SKILL.md.” Current plugin files are stubs; authoritative manifest comments say prose moved into proactive adapter briefs (`adapter/claude-spt.toml:1082-1091`). The test’s assertion (that they are absent from injected strings) remains correct; its rationale is stale.\n6. **Published docs site is explicitly obsolete.** `docs-site/src/introduction.md:38-41` and `quickstart.md:44-47` call the adapter an early skeleton and say `/sptc:*` skills are still being wired. Current implementation has 11 commands and extensive runtime behavior. `README.md:75` candidly labels these deeper docs “warning: outdated.” Treat docs-site claims separately from current README/changelog/runtime bodies.\n7. **Accepted ADRs are historical, not always current-state specs.** ADR-0002 still says handwritten hook handlers directly shell `spt api` (`docs/adr/0002...:28-35`), but current plugin uses a static `dispatch.sh` to the consolidated adapter binary; ADR-0006 later records that migration. ADR-0004 still has status `proposed` (`docs/adr/0004...:3-5`) although checkpoint behavior is implemented and released. Readers cannot safely classify implementation from ADR status alone.\n8. **Release workflow claim has no repository workflow.** `RELEASE-RUNBOOK.md:89-91` says a tag triggers a docs-publish workflow, while the repo has no `.github` directory and `docs/CI.md:88-100` explicitly rejects hosted workflows. At minimum, release automation is not present in the inspected source.\n9. **Stale per-OS artifacts coexist with the canonical fat archive.** `dist/adapter-linux-x86_64.spt` and `dist/adapter-windows-x86_64.spt` remain beside current `dist/adapter.spt`, but current packer/runbook publish the latter only. Their existence should not be mistaken for active parallel release assets.\n\n## Intentional non-features / exclusions\n\n- **Workers:** implemented and tested, but excluded from desired cross-adapter parity by explicit product decision; filter manifest hostability, Subagent hooks, worker-start/stop handling, and worker test claims together.\n- **No `/sptc:whoami` skill:** deliberately dropped; users call core `spt whoami` (`adapter/claude-spt.toml:1071-1075`; `docs/PARITY.md`).\n- **No `/sptc:new-alarm`:** explicitly out of scope until core exposes an alarm/deferred-pulse primitive (`adapter/claude-spt.toml:1096-1101`; `docs/PARITY.md:90-92`).\n- **No `deep` profile:** removed; only base and `ccs` remain (`CHANGELOG.md:486-487`; manifest `:1028-1039`).\n- **No hosted CI and no automated release upload:** intentional CI/release model, although the runbook’s docs-workflow sentence is inconsistent as noted above.\n- **Legacy migration remains unavailable through the published core surface:** tracked as open F-008 in `docs/SPT-CORE-FINDINGS.md:18`; setup cannot offer a migration command without violating the public-surface-only rule.",
  "files": [
    {
      "path": "../spt-claude-code/plugin/sptc/.claude-plugin/plugin.json",
      "description": "Marketplace identity (`sptc` 0.1.13), intentionally separate from adapter version."
    },
    {
      "path": "../spt-claude-code/plugin/sptc/skills/",
      "description": "Complete 11-command Claude Code surface; every command is a thin skeleton with trigger description and argument hint."
    },
    {
      "path": "../spt-claude-code/plugin/sptc/hooks/hooks.json",
      "description": "Static wiring for 11 Claude Code hook event types."
    },
    {
      "path": "../spt-claude-code/plugin/sptc/hooks/dispatch.sh",
      "description": "Static resolver wrapper that forwards hook stdin to the installed `claude-spt hook` subcommand."
    },
    {
      "path": "../spt-claude-code/plugin/sptc/bootstrap.sh",
      "description": "POSIX SessionStart bootstrap for installing spt-core on demand."
    },
    {
      "path": "../spt-claude-code/plugin/sptc/bootstrap.ps1",
      "description": "Windows PowerShell install-on-demand bootstrap; packaged even though hooks themselves require bash."
    },
    {
      "path": "../spt-claude-code/adapter/claude-spt.toml",
      "description": "Adapter 0.21.0 manifest: core floor, update transport, hook contract, live/ready/Psyche/launcher roles, digest, idle translator, ccs profile, operative strings/briefs/hints, and Worker hostability."
    },
    {
      "path": "../spt-claude-code/adapter/strings/skills/",
      "description": "Eight UPS-injected runtime command bodies: setup, ready, version, list-agents, force-stop, subnet, role, live."
    },
    {
      "path": "../spt-claude-code/adapter/strings/briefs/",
      "description": "Proactive SessionStart behavior, including send, commune/checkpoint, signoff, identity, roster, and work discipline."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/main.rs",
      "description": "Single consolidated binary dispatcher: digest, echo-commune, history, psyche, post-update, translate, hook, launch."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/hook.rs",
      "description": "Primary Claude adapter implementation: lifecycle, identity, transactional message delivery, skill injection, role editing, checkpointing, recovery, and worker handlers."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/translate.rs",
      "description": "Idle translation, compact marker delivery, checkpoint clear/wake, and role-edit input choreography."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/tag_scan.rs",
      "description": "Shortform peer messaging and commune output shortcuts."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/psyche.rs",
      "description": "Run-to-completion constrained Psyche companion implementation."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/launch.rs",
      "description": "Harness-hosted Claude/ccs launch and resume implementation."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/post_update.rs",
      "description": "Post-adapter-update marketplace/plugin reconciliation."
    },
    {
      "path": "../spt-claude-code/ci/publish/package-adapter.sh",
      "description": "Canonical fat adapter packager; exact Windows x64, Linux GNU x64, and Linux musl x64 targets."
    },
    {
      "path": "../spt-claude-code/ci/publish/package-skeleton.sh",
      "description": "Manual, validated cplugs skeleton staging; dry-run by default and never pushes."
    },
    {
      "path": "../spt-claude-code/tests/adapter-archive.sh",
      "description": "Archive-layout contract and explicit three-target packaging test."
    },
    {
      "path": "../spt-claude-code/ci/run-gates.sh",
      "description": "Deterministic local/fleet gate orchestrator."
    },
    {
      "path": "../spt-claude-code/ci/psyche/live-relay-int.sh",
      "description": "Acceptance-gated live relay test whose resident-Psyche expectations are stale."
    },
    {
      "path": "../spt-claude-code/README.md",
      "description": "Current top-level install/update docs; contains unsupported macOS implication and marks deeper docs outdated."
    },
    {
      "path": "../spt-claude-code/CHANGELOG.md",
      "description": "Most current user-facing behavior/release record, through adapter 0.21.0."
    },
    {
      "path": "../spt-claude-code/CONTEXT.md",
      "description": "Authoritative glossary only; explicitly not an implementation specification."
    },
    {
      "path": "../spt-claude-code/docs/adr/",
      "description": "Historical design decisions; useful rationale but several statuses/current-state descriptions are stale."
    },
    {
      "path": "../spt-claude-code/docs/RELEASE-RUNBOOK.md",
      "description": "Manual release process; contains multiple contradictions with current three-target package and update manifest."
    },
    {
      "path": "../spt-claude-code/docs/CI.md",
      "description": "Intentional fleet/manual CI model with no GitHub-hosted workflow."
    },
    {
      "path": "../spt-claude-code/docs-site/src/",
      "description": "Generated-site source explicitly labeled outdated; should not be treated as current product evidence."
    },
    {
      "path": "../spt-claude-code/docs/SPT-CORE-FINDINGS.md",
      "description": "Public-surface-only gap ledger, including open lack of a legacy migration verb."
    }
  ],
  "architecture": "The adapter deliberately splits by volatility. The low-churn `sptc` Claude Code marketplace plugin contributes command discovery, a static hooks table/dispatch shell, and spt-core bootstraps. The high-churn adapter release contributes `manifest.toml`, file-backed operative skill/brief strings, and one platform-native `claude-spt` executable. On every Claude Code hook, the static dispatcher resolves the current installed binary and passes stdin to `claude-spt hook <event>`; the Rust hook layer owns session registration, identity, message delivery, skill injection, busy/idle transitions, context briefs, recovery, role edits, checkpoint triggers, and SessionEnd. The manifest separately asks public spt-core primitives to host lifecycle roles: launch/resume Claude or ccs sessions, run a constrained Psyche per pulse, run echo-commune summarization, call the digest fetcher, and invoke idle translation. Message guidance is split by trigger: typed slash commands get UPS-injected adapter bodies, while reactive send/commune/signoff guidance arrives proactively in SessionStart/live briefs. Updates are also split: `spt adapter update claude-spt` fetches private GitHub release `adapter.spt` through authenticated `gh` and runs post-update reconciliation; marketplace skeleton bumps remain manual and independently versioned. The canonical adapter asset is a single fat archive with exactly three implemented package triples—Windows x64 MSVC, Linux x64 GNU, and Linux x64 musl. No macOS or ARM release target exists. Worker lifecycle is cross-cutting through the same manifest/hooks/binary, but is the explicit product exclusion and should be removed as a whole from desired parity comparisons."
}