{
  "summary": "## omp-spt feature/platform inventory\n\nStatus key: **I** = implemented in current source/manifest; **T** = covered by a test or gate artifact (not executed in this read-only investigation); **D** = stated in current user/contributor documentation; **P** = included in the release archive contract.\n\n| Surface | I | T | D | P | Exact evidence |\n|---|:---:|:---:|:---:|:---:|---|\n| Install and update | ✓ | ✓ | ✓ | ✓ | `adapter/omp-spt.toml` `[update]` declares `gh_release`, `BigscreenVR/omp-spt`, `transport=\"gh\"`; public commands are `spt adapter add --release BigscreenVR/omp-spt` and `spt adapter update omp-spt` (`README.md:23-50,78-90`, `docs-site/src/quickstart.md:39-44,73-85`). Hermetic behavior is covered by `tests/release-acquire.sh`; real tagged acquisition/version/string resolution is implemented by opt-in `ci/publish/release-acquire-int.sh`. The manifest is the archive root `manifest.toml`.\n| Fresh endpoint + native attached TUI | ✓ | ✓ | ✓ | ✓ | Manifest `[session.self]` runs `{adapter_dir}/omp-spt launch-omp --id {id} --extension {adapter_dir}/strings/omp-spt.mjs`; `tools/omp-spt/src/launch_omp.rs::{Args::parse,omp_argv,run}` validates OMP, snapshots endpoint environment, then Unix `exec`s OMP or Windows inherits stdio and propagates its status. User command: `spt endpoint run --adapter omp-spt --id <id> --create` (`README.md:58-71`; `docs-site/src/quickstart.md:46-70`). Tests: `tests/native-launch-manifest.sh`, `tests/manifest-shortcut.sh`, `tools/omp-spt/tests/launch_omp.rs`.\n| Explicit native resume + immutable binding | ✓ | ✓ | ✓ | ✓ | Manifest `[session.resume]` passes `--resume {session_id}`; `launch_omp::omp_argv` maps it to native `omp -r <session-id> --extension ...`. Extension hooks `session_before_switch` and `session_before_branch` call `blockSessionChange` and return `{cancel:true}` (`adapter/strings/omp-spt.mjs:1068-1082`). Acceptance command is `spt endpoint run --adapter omp-spt --id <new-id> --resume <omp-session-id>` (`docs/CI.md:70-81`). Covered by `tools/omp-spt/tests/launch_omp.rs`, `tests/native-launch-manifest.sh`, and `tests/omp-extension.mjs::testLifecycleCustodyAndContext`.\n| ReadyAgent and LiveAgent | ✓ | ✓ | ✓ | ✓ | Manifest `[adapter].hostable_types = [\"LiveAgent\", \"ReadyAgent\"]`; both use native OMP, while `[session.psyche_init]`/`[session.psyche_resume]` invoke `omp-spt psyche-omp`. `tools/omp-spt/src/psyche_omp.rs::run` performs one bounded, extension/skill/rule-free OMP turn, keeps private session state, and uses exit 95 for reseed. Tests enforce exactly these two roles (`tests/native-launch-manifest.sh`, `tests/manifest-shortcut.sh`) and cover Psyche parsing/planning/session-loss behavior (`psyche_omp.rs` unit tests; `tools/omp-spt/tests/launch_omp.rs`). Docs: `README.md:6-8,69-71`; `docs-site/src/introduction.md:7-13`; `docs-site/src/reference/harness-contract.md:65-69`.\n| Message receipt, serialized custody, context, reply | ✓ | ✓ | ✓ | ✓ | `adapter/strings/omp-spt.mjs::{drainEvents,createOmpSpt,dispatchNext,injectEnvelope,completeTurn,settleItem}` parses self-delimiting `<EVENT>`, bounds accepted queue/bytes, opens `<msg from=\"…\"/>`, injects the full envelope into context, serializes turns, sends a reply/failure to the original sender, and retries outcomes. `tests/omp-extension.mjs` covers parsing, context, overlap/queueing, submission failures, empty-response failures, retry exhaustion, overflow, and correlation. Documented in `docs-site/src/reference/harness-contract.md:44-62` and `docs/PARITY.md:28`.\n| Lifecycle, busy/idle, recovery, shutdown | ✓ | ✓ | ✓ | ✓ | Extension `session_start` binds with OMP session id and token, `agent_start`/`completeTurn` stamp busy/idle, `startListener` runs identity-preserving `spt api ... listen --session-id`, `handleListenerDeath` applies bounded 250/1000/4000ms retries, `failClosed` ends the session and shuts OMP, and `session_shutdown` performs bounded teardown (`adapter/strings/omp-spt.mjs:380-1157`). `tests/omp-extension.mjs` covers transient/stable listener recovery, protocol corruption, listener termination, state failure, pending-custody return, session-end retries, shutdown caps, and reaping. Docs: `docs-site/src/reference/harness-contract.md:44-77`; acceptance commands/evidence in `docs/CI.md:52-68,92-104`.\n| Continuity, Psyche, echo-commune | ✓ | ✓ | ✓ | ✓ | Manifest `[session]` uses project-local `.spt` for `commune_dir` and `signoff_dir`; `[session.echo_commune]` invokes `echo-commune-omp`; Psyche roles invoke `psyche-omp` and scrub inherited SPT identity. `tools/omp-spt/src/echo_commune_omp.rs::run` reads at most a 48 KiB whole-line transcript tail, isolates untrusted transcript from system policy, runs one tool-less/sessionless OMP summary turn, caps output, and emits exactly project/live context blocks; missing transcript is an empty successful delta. Covered by module tests plus `tools/omp-spt/tests/echo_commune_omp.rs` and `tests/manifest-shortcut.sh`. Public reference describes transcript helpers and Psyche (`docs-site/src/reference/harness-contract.md:12-18,65-69`); ADR-0012 records `.spt` ownership.\n| History and digest | ✓ | ✓ | ✓ | ✓ | Manifest `[history]` invokes `omp-spt history-omp --session {session_id} --project-dir \"{cwd}\"`; `[digest]` invokes `digest-omp` with truncation 240 and sprint collapse. `history_omp::run` locates exactly one OMP JSONL and writes bytes verbatim; `digest_omp::{locate,locate_from_project_snapshots,extract,run}` resolves exact/prefix session ids deterministically and maps OMP JSONL to `input|agent|tool` NDJSON. Unit/integration coverage lives in both modules, `tools/omp-spt/tests/captured_session_env.rs`, and `ci/digest/digest-proof-int.sh` (the latter is opt-in/standalone and not dispatched by `ci/run-gates.sh`). Docs: `README.md:6-8`; `docs-site/src/reference/harness-contract.md:18,68-69`; `docs/PARITY.md:32`.\n| Executable discovery and minimum OMP | ✓ | ✓ | ✓ | ✓ | `launch_omp::{resolve_omp_from,probe_omp_binary,validate_omp_version_output,resolve_omp}` uses explicit `OMP_SPT_OMP_BIN` → known install paths → PATH, demands exact `omp/X.Y.Z`, rejects collisions and versions below 16.3.15, and makes the path absolute for later daemon roles. Extensive unit and process tests are in `launch_omp.rs` and `tools/omp-spt/tests/launch_omp.rs`. Minimum is documented in `README.md:17-21,53-56` and `docs-site/src/quickstart.md:7-36`.\n| Helper CLI | ✓ | ✓ | indirect | ✓ | `tools/omp-spt/src/main.rs::{Sub,classify,usage,main}` exposes five subcommands: `launch-omp`, `digest-omp`, `history-omp`, `psyche-omp`, `echo-commune-omp`; tests also assert retired `bridge`, generic `digest/history/psyche`, `hook`, `translate`, etc. remain unavailable. User docs describe helper responsibilities but generally do not teach these internal commands directly (`docs-site/src/reference/harness-contract.md:12-20`). One consolidated binary is packaged per supported target.\n| Worker endpoint | intentionally no | ✓ exclusion | ✓ exclusion | no | Product decision is explicit in `docs/adr/0009-all-endpoints-use-native-omp.md:7-10`, `CONTEXT.md:26-32`, and `docs/CI.md:83-90`: OMP subagents are not independently bound endpoints. Manifest advertises no Worker; `tests/native-launch-manifest.sh` and `tests/manifest-shortcut.sh` require exactly ReadyAgent + LiveAgent. Worker appears only as the vendored schema’s generic example (`adapter/manifest.schema.json:141-145`) and exclusion language—not as current functionality. This is outside parity requirements.\n\n## User-visible command inventory\n\n- Prerequisites: `omp --version`, `spt --version`; upgrades `omp update`, `spt update` (`docs-site/src/quickstart.md:27-36`).\n- Install: `spt adapter add --release BigscreenVR/omp-spt`.\n- Create/attach: `spt endpoint run --adapter omp-spt --id <id> --create`; separate attach is recorded as `spt rc <id>` only in contributor `docs/PARITY.md:26`.\n- Update/restart: `spt adapter update omp-spt`; `spt endpoint stop <id>`; `spt endpoint run --adapter omp-spt --id <id>`.\n- Explicit resume: `spt endpoint run --adapter omp-spt --id <new-id> --resume <omp-session-id>` (`docs/CI.md:77-81`).\n- Release/diagnostic surfaces: `spt adapter version omp-spt`, `spt ring <id> --timeout 120`, `spt endpoint list --json`, `spt endpoint shutdown <id>` (`docs/CI.md`).\n- No plugin, slash-command namespace, hook bundle, profiles, or adapter skills are shipped. `docs/OMP-BRIDGE-FIELD-ISSUES.md:41-50` explicitly records OMP skill distribution as an open public-contract gap, not a fallback to the removed Claude plugin.\n\n## Platform and release inventory\n\n| Target | Build path | Archive member | Deterministic packaging check | Native release acceptance requirement |\n|---|---|---|---|---|\n| **Windows x86_64** / `x86_64-pc-windows-msvc` | `tools/omp-spt/target/release/omp-spt.exe` via `ci/digest/build.sh` on Windows | `x86_64-pc-windows-msvc/omp-spt.exe` | PE `MZ` magic required by `ci/publish/package-adapter.sh`; fixture/layout checks in `tests/adapter-archive.sh` | Full tagged acquisition + fresh/resume TUI + message/reply/state + both roles + shutdown, independently on this target (`docs/CI.md:31-104`) |\n| **Linux x86_64 GNU** / `x86_64-unknown-linux-gnu` | `tools/omp-spt/target/x86_64-unknown-linux-gnu/release/omp-spt`; native Cargo or Windows `cargo zigbuild --target x86_64-unknown-linux-gnu` (`docs/RELEASE-RUNBOOK.md:97-125`) | `x86_64-unknown-linux-gnu/omp-spt` | ELF magic and archived executable mode required by packer/writer/tests | Same complete acceptance, independently on Linux |\n| macOS (all arch), Windows Arm64, Linux Arm64/musl, all others | No release build path | No member | Packer allows exactly the two triples above | Explicitly unsupported by the release (`README.md:27`; `docs/RELEASE-RUNBOOK.md:18-20`) |\n\nThe one public asset is `adapter.spt`, a gzip tar with exactly four logical files: root `manifest.toml`, root `strings/omp-spt.mjs`, Windows helper, Linux helper. `ci/publish/create-adapter-archive.py` fixes ownership/modes; `ci/publish/package-adapter.sh` validates manifest, extension, both binaries, magic, exact membership, and Linux execute mode. `spt-core` flattens the current host triple at install/update. There are no per-platform assets.\n\nThe Rust source contains portability branches beyond the advertised matrix—e.g. `digest_omp.rs::SessionPlatform::MacOs` and Unix-generic launch behavior—but these are **not packaged or release-supported**. Source portability must not be read as a release target.\n\n## Internal inconsistencies / evidence gaps\n\n1. **Version drift:** shipped manifest and top-level user surface are 0.2.1 (`adapter/omp-spt.toml:12`, `README.md:27`, `CHANGELOG.md:7`), while the binary crate remains 0.2.0 (`tools/omp-spt/Cargo.toml:6`) and public quickstart plus release/acceptance docs still label the supported release v0.2.0 (`docs-site/src/quickstart.md:11`, `docs/CI.md:33`, `docs/RELEASE-RUNBOOK.md:18-20`). Generated ignored mdBook output also says v0.2.0 (`docs-site/book/quickstart.html:187`). The packer validates manifest schema/floor/binary formats but does not compare Cargo, manifest, changelog, and docs versions; `tests/release-acquire.sh` remains a generic v0.2.0 fixture.\n2. **Docs CI claim lacks repository implementation:** `docs/DOCS-STRATEGY.md:3-4,43-44`, `docs-site/README.md:3-4`, and `docs-site/book.toml:1` claim mdBook is CI-built, drift-gated, and Pages-published. There is no `.github/` workflow in the repository, and no `mdbook`, `docs-site`, or documentation/export gate in `ci/run-gates.sh` or `tests/`. `DOCS-STRATEGY.md:187-190` also specifies `llms-full.txt` and raw Markdown publication, but only the hand-authored `docs-site/llms.txt` exists.\n3. **Release is scripted/manual, not workflow-automated:** packaging and acquisition scripts exist, but tagging, `gh release create/edit`, two-host native acceptance, and update verification are operator steps only in `docs/RELEASE-RUNBOOK.md:159-279`. No repository workflow or machine-readable per-target acceptance record was found.\n4. **Gate coverage is layered but not all centrally dispatched:** `ci/run-gates.sh` dispatches schema, manifest, extension (indirectly through `tests/manifest-shortcut.sh`), archive, hermetic release acquisition, Rust tests/build, and traceability. It does not dispatch `ci/digest/digest-proof-int.sh`, the opt-in real `ci/publish/release-acquire-int.sh`, docs build, or native endpoint acceptance. `docs/CI.md` correctly treats real endpoint acceptance as a separate release layer, but its “deterministic gates on every change” wording is broader than the repository automation evidence because no CI workflow is present.\n5. **Skip semantics require operator discipline:** `ci/manifest/check-manifest.sh` and `ci/digest/build.sh` return exit 0 on missing Python capability/Cargo. `docs/CI.md:29` and the runbook say a release operator must treat such skips as failures, but `ci/run-gates.sh` does not mechanically hard-fail those two skip paths. The manifest’s real `spt adapter add` test hard-fails only when `OMP_SPT_RELEASE_MODE=1` or on a tag; the runbook invokes `sh ci/run-gates.sh` without setting that environment variable.\n\nNo files were edited and no project-wide/build/test commands were run; this is a read-only source/manifests/scripts/tests/docs inventory.",
  "files": [
    {
      "path": "adapter/omp-spt.toml",
      "description": "Version-of-truth manifest for adapter identity, spt-core floor, supported roles, update avenue, native fresh/resume commands, Psyche/echo/history/digest seams, continuity paths, and injected endpoint id."
    },
    {
      "path": "adapter/strings/omp-spt.mjs",
      "description": "Packaged OMP extension implementing bind/auth, listener, EVENT parsing, bounded serialized custody, OMP context injection, reply/failure correlation, activity state, immutable session hooks, recovery, and bounded shutdown."
    },
    {
      "path": "tools/omp-spt/src/main.rs",
      "description": "Consolidated helper dispatch and help for five OMP-native subcommands; tests reject retired foreign/bridge subcommands."
    },
    {
      "path": "tools/omp-spt/src/launch_omp.rs",
      "description": "Native OMP locator/version validator, fresh/resume argv, project-local environment snapshot, and Unix exec/Windows inherited-terminal launch."
    },
    {
      "path": "tools/omp-spt/src/digest_omp.rs",
      "description": "Session environment snapshot model, platform/profile-aware transcript location, deterministic ambiguity handling, and OMP JSONL-to-digest NDJSON extraction."
    },
    {
      "path": "tools/omp-spt/src/history_omp.rs",
      "description": "Per-session opaque transcript fetcher sharing the digest locator and preserving bytes verbatim."
    },
    {
      "path": "tools/omp-spt/src/psyche_omp.rs",
      "description": "One-event ephemeral LiveAgent Psyche turn, private OMP session continuity, bounded tool/context surface, and exit-95 reseed contract."
    },
    {
      "path": "tools/omp-spt/src/echo_commune_omp.rs",
      "description": "Bounded end-of-session summarizer with transcript tail caps, prompt-injection boundary, secure temporary files, isolated OMP invocation, and exact delta output shape."
    },
    {
      "path": "tools/omp-spt/Cargo.toml",
      "description": "Dependency-light consolidated helper crate; currently declares package version 0.2.0, inconsistent with manifest 0.2.1."
    },
    {
      "path": "ci/publish/package-adapter.sh",
      "description": "Dry-run/apply fat-archive packer; hardcodes the two supported x86_64 target triples and validates exact archive shape and executable formats."
    },
    {
      "path": "ci/publish/create-adapter-archive.py",
      "description": "Deterministic archive writer setting portable member ownership and modes, including Linux 0755."
    },
    {
      "path": "ci/publish/release-acquire-int.sh",
      "description": "Opt-in real GitHub tagged acquisition proof checking registration source, exact adapter version, and packaged string resolution."
    },
    {
      "path": "ci/run-gates.sh",
      "description": "Central deterministic gate dispatcher; useful both for covered tests and for identifying missing docs/integration/release automation."
    },
    {
      "path": "tests/omp-extension.mjs",
      "description": "Comprehensive behavioral harness for extension protocol, custody, state, listener recovery, shutdown, and immutable binding."
    },
    {
      "path": "tests/manifest-shortcut.sh",
      "description": "Manifest/product cutover guard: exact roles, native launch, snapshot-backed daemon roles, update repo, removal of foreign hooks/injection/profiles, and optional real registration."
    },
    {
      "path": "tests/native-launch-manifest.sh",
      "description": "Focused exact manifest assertions for native fresh/resume commands, roles, continuity directories, and RPC absence."
    },
    {
      "path": "tests/adapter-archive.sh",
      "description": "Deterministic two-target archive contract test using PE/ELF fixtures and negative format/mode/member cases."
    },
    {
      "path": "tools/omp-spt/tests/launch_omp.rs",
      "description": "Cross-platform process-level launch/resume, OMP version/collision, snapshot containment, and helper-role resolution tests."
    },
    {
      "path": "README.md",
      "description": "Current top-level 0.2.1 user install/create/update surface, prerequisites, release platform limitation, and product summary."
    },
    {
      "path": "docs-site/src/quickstart.md",
      "description": "Canonical public tutorial; commands and floors are current but release label remains v0.2.0."
    },
    {
      "path": "docs-site/src/reference/harness-contract.md",
      "description": "Public OMP-specific ownership, lifecycle, identity, failure, transcript-helper, update, and packaging contract."
    },
    {
      "path": "docs/CI.md",
      "description": "Contributor deterministic-test description and manual native release acceptance matrix for both supported triples."
    },
    {
      "path": "docs/RELEASE-RUNBOOK.md",
      "description": "Manual build/package/tag/prerelease/two-host acceptance/promotion/update procedure and exact target artifact paths."
    },
    {
      "path": "docs/adr/0008-omp-native-product-boundary.md",
      "description": "Accepted clean OMP-native cutover; foreign plugin/hooks/ccs/bridge behavior is lineage, not parity."
    },
    {
      "path": "docs/adr/0009-all-endpoints-use-native-omp.md",
      "description": "Accepted native-TUI topology and explicit Worker exclusion."
    },
    {
      "path": "docs/adr/0010-native-delivery-self-heals-or-closes.md",
      "description": "Accepted serialized custody, explicit outcomes, bounded listener recovery, and opaque peer-message contract."
    },
    {
      "path": "docs/adr/0011-endpoint-session-binding-is-immutable.md",
      "description": "Accepted immutable endpoint-to-OMP-session binding and explicit launch-time resume."
    },
    {
      "path": "docs/adr/0012-continuity-drops-live-under-spt.md",
      "description": "Accepted project-local `.spt` continuity ownership."
    },
    {
      "path": "docs/adr/0013-release-gate-stops-at-the-adapter-boundary.md",
      "description": "Accepted deterministic plus real-native acceptance boundary; cross-node transport excluded."
    },
    {
      "path": "CONTEXT.md",
      "description": "Canonical glossary for native/ready/live endpoints, custody, immutable sessions, continuity drops, and sister-lineage terminology."
    }
  ],
  "architecture": "The packaged runtime has a single ownership chain: public `spt-core` endpoint/install commands resolve `adapter/omp-spt.toml`; `[session.self]` or `[session.resume]` starts the packaged `omp-spt launch-omp` helper; that helper validates Oh My Pi >=16.3.15, records only non-secret endpoint environment selectors under project `.spt/omp-spt-env-v1/`, and yields the broker PTY to native OMP; OMP loads the packaged `strings/omp-spt.mjs`, which binds the actual OMP session, owns delivery/state/replies/recovery/shutdown, and blocks in-TUI session mutation. The same consolidated helper is reused out-of-process by spt-core for transcript digest/history, echo-commune, and per-event Psyche roles. ReadyAgent stops at the native endpoint; LiveAgent adds the Psyche role. Worker has no runtime path.\n\nDistribution is one manually produced GitHub release asset, `adapter.spt`: shared root manifest + shared extension + one helper under each of exactly `x86_64-pc-windows-msvc` and `x86_64-unknown-linux-gnu`. spt-core selects and flattens the host directory. macOS and every Arm64/musl/other architecture are absent from the archive and unsupported as release targets, regardless of generic Unix/macOS branches in source. Tests are mainly deterministic shell/Rust/Node contracts; real acquisition and native endpoint verification are opt-in/manual, and no GitHub workflow exists in the inspected repository."
}