{
  "summary": "## Sister location status\n\n- The user-suggested exact sibling `../claude-spt` is absent (`read` returned `Path '../claude-spt' not found`). `C:/Users/decid/Documents/claude-spt` is also absent.\n- The plausible sister repository is present at **`C:/Users/decid/Documents/projects/spt-claude-code`**, i.e. **`../spt-claude-code`** from omp-spt. It contains the complete comparison surface: `adapter/claude-spt.toml`, schema, strings/briefs/skills, `plugin/sptc`, `tools/claude-spt`, tests, CI integrations, and release packaging. This is not merely a lineage snapshot inside omp-spt; it is a usable sister checkout.\n- The sister is newer: its manifest is `0.20.1` (`../spt-claude-code/adapter/claude-spt.toml:479`) while omp-spt is `0.1.3` (`adapter/omp-spt.toml:398`). The omp changelog explicitly says it forked after inherited claude-spt `0.17.3` (`CHANGELOG.md:1-13`). Thus differences after sister 0.17.3 must be separated from accidental fork staleness.\n\n## Evidence-backed parity matrix\n\n| Inherited surface | Classification | Evidence and conclusion |\n|---|---|---|\n| Repository/adapter identity | **Partial** | Core manifest identity was correctly ported: `[adapter].name=\"omp-spt\"`, `host_binaries=[\"omp\",\"omp-spt\"]`, shortcut `omp`, update repo `BigscreenVR/omp-spt` (`adapter/omp-spt.toml:36-38,448-480`). However the primary public README is still the sister README and installs `SaberMage/claude-spt`, names Claude Code, `sptc`, and `/sptc:*` (`README.md:1-81`). |\n| Manifest schema | **Implemented** | Both adapter schema copies expose the same modern public categories, including `host_binaries`, session roles, `env_remove`, `recursion_guard_env`, fetcher digest/history, update post-hook, and message-idle translation (`adapter/manifest.schema.json`; `../spt-claude-code/adapter/manifest.schema.json`). No missing OMP-only schema fork is apparent. |\n| Native hosted session (`session.self`/`session.resume`) | **Implemented, intentionally transformed** | omp-spt correctly replaces the sister’s Claude launcher with native `omp --extension {adapter_dir}/strings/omp-spt.mjs`, and has a distinct `-r {session_id}` resume template (`adapter/omp-spt.toml:671-730`; guarded by `tests/manifest-shortcut.sh:26-47`). This follows ADR-0007 and `OMP-ADAPTER-PLAN.md:62-87`. |\n| Native OMP lifecycle/message transport | **Implemented** | `adapter/strings/omp-spt.mjs` owns native OMP lifecycle, starts `spt ready`, drains `<EVENT>` frames, serializes turns, calls `sendUserMessage`, tracks busy/idle, replies, and tears down. `tests/omp-extension.mjs` exercises envelope parsing/reply extraction; `tests/bridge-acceptance.sh` covers the headless bridge with fake OMP. This is the correct harness-specific replacement for sister CC hooks. |\n| Headless RPC bridge | **Implemented, deliberately retained** | `tools/claude-spt/src/bridge.rs` is OMP-specific (`ADAPTER=\"omp-spt\"`) and `tests/bridge-acceptance.sh` proves inbound prompt, outbound reply, binding, timeout recovery, and Windows child-tree teardown. ADR-0007/`OMP-ADAPTER-PLAN.md:44-79` intentionally keep this for noninteractive callers while native OMP owns attached PTYs. |\n| Digest extractor | **Implemented in code; integration proof stale** | OMP-specific `digest_omp.rs` maps OMP JSONL roles/content/toolCall to the common digest contract and manifest selects `omp-spt digest-omp --session {session_id}` (`tools/claude-spt/src/digest_omp.rs`; `adapter/omp-spt.toml:849-881`). But `ci/digest/digest-proof-int.sh:1-64` still checks for a `claude-spt` binary, creates a Claude-shaped `projects/<slug>/<session>.jsonl`, exports `CLAUDE_CONFIG_DIR`, and invokes `digest-proof claude-spt`; it does not prove the OMP path at all. |\n| History fetcher | **Implemented** | Manifest selects `omp-spt history-omp --session {session_id}` (`adapter/omp-spt.toml:778-781`) and OMP-specific `history_omp.rs` is compiled. The sister’s CC history implementation remains compiled as dead lineage (see stale-code row). |\n| Psyche ephemeral roles | **Implemented** | Both `session.psyche_init` and `session.psyche_resume` invoke `psyche-omp`, use the frozen `{id,session_id,psyche_context_file}` key shape, `detach=false` for resume, and scrub identity variables (`adapter/omp-spt.toml:615-667`; `tools/claude-spt/src/psyche_omp.rs`; `tests/manifest-shortcut.sh:55-74`). This is a real OMP port rather than a rename. |\n| Echo-commune/end-of-session summarizer | **Implemented** | OMP-specific `echo-commune-omp` and `history-omp` are wired (`adapter/omp-spt.toml:733-781`; `tools/claude-spt/src/echo_commune_omp.rs`). The recursion guard and identity scrub are retained. |\n| Adapter update acquisition | **Implemented at manifest level** | `[update]` points at `BigscreenVR/omp-spt`, uses authenticated `gh`, and has OMP-specific update prose (`adapter/omp-spt.toml:478-506`; `tests/manifest-shortcut.sh:76-82`). |\n| Update post-hook/plugin reconciliation | **Missing/correctness defect** | The active manifest executes `{adapter_dir}/omp-spt post-update` (`adapter/omp-spt.toml:504-506`), but `tools/claude-spt/src/post_update.rs:1-103` still describes Claude Code, chooses only `claude`/`ccs`, and hardcodes `PLUGIN_REF=\"sptc@cplugs\"`. Therefore an omp-spt update reconciles the sister plugin, not `omps@cplugs`. Unit tests explicitly lock in the wrong ref (`post_update.rs:398-421,482-517`). |\n| Invisible spt-core bootstrap | **Retained mechanically, broken end-to-end** | `plugin/omps/bootstrap.sh` and `.ps1` correctly retain the sister’s published install-on-demand commands. But they are reached through retained Claude Code SessionStart hooks, not the native OMP extension. More seriously, both setup instruction bodies activate the wrong adapter: `plugin/omps/skills/setup/SKILL.md:3-61` and `adapter/strings/skills/setup.md:1-46` instruct `SaberMage/claude-spt`, `adapter/claude-spt.toml`, `spt adapter use claude-spt`, and `claude-spt:ccs`. `/omps:setup` therefore repairs/activates the sister instead of omp-spt. |\n| Public skill namespace/inventory | **Partial** | Ten skill skeletons were renamed to `plugin/omps/skills/*`: setup, ready, live, send, commune, signoff, subnet, list-agents, force-stop, version. The sister has those plus `role`. Namespace filenames/frontmatter were partly ported, but several bodies still say Claude Code/claude-spt (setup above; ready at `plugin/omps/skills/ready/SKILL.md:3-6`; `adapter/strings/skills/live.md:1-5`; version at `adapter/strings/skills/version.md:6-8`). |\n| `/role` durable role editing | **Missing relative to current sister; decision required** | Sister added it in 0.18.0: plugin stub, injected skill, manifest `strings.skills.role`, hook persistence, and translate-based input editor (`../spt-claude-code/plugin/sptc/skills/role/SKILL.md`; `../spt-claude-code/adapter/claude-spt.toml:1069-1070`; sister `hook.rs:928-1024`; sister `translate.rs:203-279,536-540`). omp-spt has none. The directive/file-overwrite path is harness-agnostic and portable; the editable-input round-trip is CC-keystroke-specific and needs an OMP-native UX decision. This is not a fork-at-0.17.3 regression, but it is a concrete sister capability gap. |\n| Work-discipline brief | **Missing relative to current sister; decision required** | Sister 0.19.0 adds `adapter/strings/briefs/work-discipline.md` and manifest `briefs.work-discipline`, composed only for spt-hosted sessions (`../spt-claude-code/adapter/claude-spt.toml:1103-1109`; `../spt-claude-code/tools/claude-spt/src/hook.rs:618-634`). omp-spt lacks the file, manifest key, and native-extension composition. The prose is harness-agnostic, but its checkpoint behavior currently assumes the sister translation path. |\n| ccs profile | **Intentionally inapplicable/dropped** | omp-spt has no `[profiles.*]`, enforced by `tests/manifest-shortcut.sh:88-89`. `OMP-ADAPTER-PLAN.md:128-154` makes OMP provider/profile/model routing native configuration. This is a correct drop. The stale setup docs still advertising `claude-spt:ccs` are defects, not evidence that ccs should return. |\n| Claude Code hook plugin | **Intentionally inapplicable in design, accidentally retained in implementation** | The accepted port plan says `plugin/sptc` hooks are **removed** because OMP/RPC/native extension owns lifecycle (`OMP-ADAPTER-PLAN.md:15-20,86-88`). Yet omp-spt still publishes `plugin/omps/hooks/hooks.json` with 11 CC event handlers, `dispatch.sh`, all manifest `[hooks.*]`, and the entire `hook.rs`; `tests/hooks-dispatch.sh` positively requires them. This is a direct contradiction between design and shipped artifacts. |\n| Retained hook behavior if invoked | **Wrong adapter/cross-adapter hazard** | `plugin/omps/hooks/dispatch.sh:37-64` bootstraps on CC SessionStart, resolves `spt adapter get-string claude-spt hook_cmd`, caches through `$CLAUDE_ENV_FILE`, and invokes the hook binary. `tools/claude-spt/src/hook.rs:33-38` hardcodes `ADAPTER=\"claude-spt\"`. Thus the `omps` plugin’s hooks operate on the sister adapter, not omp-spt. They are not harmless renamed leftovers if a Claude-compatible plugin loader activates them. |\n| Manifest `[hooks.*]` and `[inject]` metadata | **Stale/partial** | `adapter/omp-spt.toml:508-594` still declares CC event semantics and `activity=[\"hook\"]`, `idle=[\"hook\"]` despite the native extension independently managing state and message delivery. There is no OMP event mapping in these manifest declarations. They should be removed if only documentary, or replaced with OMP-native declarations if spt-core consumes them. |\n| Message idle translation binary | **Stale and likely unsafe; runtime consequence blocked by public-contract gap** | omp-spt actively declares `{adapter_dir}/omp-spt translate` (`adapter/omp-spt.toml:845-846`), and `tests/manifest-shortcut.sh:84-86` calls it “harness-agnostic.” It is not: `translate.rs:1-120` explicitly implements Claude Code Ctrl+S draft stashing, `/clear`, `/rename`, Enter timing, and CC soft-newline behavior. OMP native delivery already runs through `sendUserMessage` in the extension. The factual defect is that CC-specific translation is advertised as OMP’s idle translator. Whether core can activate it concurrently with the native listener—and cause duplicate delivery or inject CC commands into OMP—is **blocked by a public-contract gap** without inspecting core; this coexistence needs a public-doc/binary proof before shipping. |\n| Sister 0.20 compact-stub delivery/no-stall changes | **Intentionally inapplicable to native OMP, unless translation is retained** | Sister 0.20 solves slow/garbled full-body typing and marker races in a CC PTY (`../spt-claude-code/CHANGELOG.md:23-31`). OMP’s extension calls the public `sendUserMessage` API and serializes events, so the CC stub choreography should not be ported. If maintainers insist on retaining the translation binary, omp-spt is also behind these fixes, which strengthens the case to remove that path instead. |\n| Identity propagation to child tool commands | **Implemented by native inheritance** | OMP hosted process receives `[env.SPT_ENDPOINT_ID].value=\"{id}\"` and its tool children inherit process environment (`adapter/omp-spt.toml:783-802`). Sister 0.20.1 needed `$CLAUDE_ENV_FILE` because CC hook shells lost identity (`../spt-claude-code/CHANGELOG.md:9-21`); that exact workaround is not required for native OMP. |\n| `CLAUDE_CONFIG_DIR` capture | **Stale** | OMP manifest retains `[env.CLAUDE_CONFIG_DIR] direction=\"read\"` and extensive CC/ccs comments even though active digest/history roles use OMP locators (`adapter/omp-spt.toml:817-843,877`). OMP has its own config/session roots. This should not remain as active adapter contract unless an OMP use is demonstrated. |\n| `SPT_INJECT_VERIFY_ECHO` | **Intentionally inert but unnecessary** | `adapter/omp-spt.toml:803-815` retains the CC TUI echo-verification opt-in; `tests/manifest-shortcut.sh:91-92` explicitly calls it “inert on omp; forward-safe.” This is not an implementation of an OMP behavior. Keeping an unexplained inert injected variable is a design choice; removal is cleaner unless public core compatibility requires declaration. |\n| Commune/signoff directories | **Partial/design decision** | omp-spt retains `.claude` as `commune_dir` and `signoff_dir` (`adapter/omp-spt.toml:594-614`) and skills/briefs refer to those file drops. The watched-directory mechanism can still function because it is adapter-declared, but `.claude` is a lineage name in an OMP adapter. Decide whether compatibility/continuity outweighs an OMP-native `.omp` or adapter-owned directory; changing it is a migration decision, not a blind rename. |\n| Compiled binary surface | **Partial with substantial dead lineage** | `tools/claude-spt/src/main.rs:25-134` compiles OMP `bridge`, `digest-omp`, `history-omp`, `psyche-omp`, `echo-commune-omp`, but also the sister-only `digest`, `history`, `psyche`, `echo-commune`, `hook`, `launch`, and `translate`. Active manifest references only OMP variants plus `post-update` and the questionable `translate`; `hook` is referenced only by the stale plugin. The legacy modules add binary size, maintenance surface, wrong help text (`usage` still starts `claude-spt`), and opportunities for cross-adapter execution. |\n| Multi-platform fat archive | **Partial** | The packer correctly rebrands the active payload to one `omp-spt` binary and includes shared manifest/strings plus Windows and glibc Linux triple directories (`ci/publish/package-adapter.sh:1-140`; `tests/adapter-archive.sh`). Comments still show `claude-spt` filenames at lines 12-14 and describe the old consolidated crate, but executable paths use `BINS=\"omp-spt\"`. |\n| musl Linux | **Missing relative to sister 0.18.1** | Sister now packages `x86_64-unknown-linux-musl` and tests all three triples (`../spt-claude-code/ci/publish/package-adapter.sh:1-141`; `../spt-claude-code/tests/adapter-archive.sh`). omp-spt still states only Windows+gnu are recognized (`ci/publish/package-adapter.sh:21-25`) and omits musl. This is a concrete portability gap, though it postdates the fork and should be prioritized according to supported-host policy. |\n| macOS support claim | **Missing/artifact defect** | Current README advertises “bash (macOS / Linux)” (`README.md:31-35`), but the packer has no macOS target at all. This arrived with the stale sister README and is not backed by the archive. |\n| Manifest registration integration | **Stale/nonfunctional for omp-spt** | `ci/manifest/registration-int.sh` registers the OMP manifest but then asserts `claude-spt`, the removed `:ccs` profile, Claude labels, `/sptc:` bodies, and a CC hook (`:25-90`). Its cleanup can remove the operator’s real claude-spt registration. It provides no valid omp-spt registration proof. |\n| Release-acquire integration | **Stale/nonfunctional for omp-spt** | `ci/publish/release-acquire-int.sh:14-60` defaults to `SaberMage/claude-spt`, removes/inspects `claude-spt`, and asserts `:ccs`/Claude labels. It does not test `BigscreenVR/omp-spt`. |\n| Hosted-launch integration | **Stale/nonfunctional for omp-spt** | `ci/launcher/bind-int.sh:1-85` explicitly launches `--adapter claude-spt`, waits for Claude SessionStart hook binding, and kills `claude-spt.exe`. It does not cover native OMP hosted launch. |\n| Idle-translate integration | **Stale plus wrong concept** | `ci/idle-translate/translate-proof-int.sh:23-122` points at the OMP manifest but looks for a `claude-spt` binary and invokes `translate-proof claude-spt`; it then asserts CC `/clear` and `/rename` choreography. It neither finds the renamed OMP binary nor validates OMP behavior. |\n| Acceptance harness | **Stale** | `ci/acceptance/*` and `tests/acceptance-harness.sh` create `.claude/settings.json`, launch real `claude -p`, and assert a CC UserPromptSubmit hook. They are sister acceptance tests, not OMP acceptance. The useful OMP acceptance is instead `tests/bridge-acceptance.sh`; there is no equivalent real native-extension hosted-session acceptance in the generic acceptance lane. |\n| CI gate trustworthiness | **Partial/false-confidence risk** | `ci/run-gates.sh` still brands `spt-claude-code`, runs all inherited unit scripts, and its build slots describe CC digest/psyche/translate. Some stale tests pass precisely because stale CC artifacts remain; integration scripts with the worst wrong identities are not called by this runner. Therefore “green” does not imply OMP adapter parity. |\n| Public docs/decision lineage | **Severely stale** | `README.md`, `docs/PARITY.md`, `docs/CI.md`, `docs/RELEASE-RUNBOOK.md`, `docs-site/book.toml`, `docs-site/src/*`, and many ADRs remain Claude-specific. Historical ADRs may intentionally remain lineage records, but the README, quickstart, generated docs, runbook, parity verdict, and CI docs are current operational surfaces and currently instruct the wrong product/repo/harness. |\n\n## Stale lineage hazards (factual defects, not taste decisions)\n\n1. **`/omps:setup` installs the wrong adapter.** Both authoritative setup bodies point to `SaberMage/claude-spt`, `claude-spt:ccs`, and `adapter/claude-spt.toml`.\n2. **The project README installs and updates the wrong product.** Every install/update command names claude-spt; it requires Claude Code and `/reload-plugins` rather than OMP.\n3. **omp-spt’s active update post-hook mutates the sister plugin.** `post_update.rs` hardcodes `sptc@cplugs` and Claude/ccs, while the active manifest invokes it on every adapter update.\n4. **The shipped `omps` hook plugin resolves and operates `claude-spt`.** `dispatch.sh` queries `get-string claude-spt`; `hook.rs` hardcodes adapter `claude-spt`.\n5. **CC-only hook and keystroke systems remain advertised as omp-spt behavior despite the accepted native-extension architecture.** This creates at least dead code/confusing contract and may create concurrent/duplicate delivery; the latter needs public-contract verification.\n6. **Several integration tests can only test or destructively remove claude-spt.** Registration, release acquisition, launch, digest proof, translate proof, psyche relay/download, poll, wake-survival, and acceptance lanes retain sister identities/fixtures.\n7. **The binary ships two adapters’ implementations under one OMP executable.** Legacy CC subcommands, constants, help, and tests remain compiled.\n8. **Current operational docs remain sister docs.** This is broader than harmless historical ADR retention.\n9. **The package omits sister’s musl build while the public README overclaims macOS/Linux portability.**\n\n## Deliberate drops / correct divergences\n\n- ccs profile removal is correct: OMP has native provider/profile/model routing.\n- Native `session.self`/`resume`, digest/history, psyche, echo-commune, native extension, and headless bridge are substantive ports and should remain.\n- CC hook delivery and CC 0.20 compact-stub input typing are intentionally inapplicable to an OMP `sendUserMessage` integration. The defect is retaining those systems, not failing to reproduce them.\n- Sister’s 0.20.1 `$CLAUDE_ENV_FILE` identity persistence is not required when OMP and its tool children inherit broker-injected `SPT_ENDPOINT_ID` directly.\n\n## Design decisions requiring user input (separate from defects)\n\n1. **Published skill delivery:** should `plugin/omps` exist as an OMP-compatible skill package, and if so what is OMP’s actual public install/update surface? The current Claude `.claude-plugin` hooks/update path cannot be accepted by inheritance alone.\n2. **Idle translator:** remove `[message-idle-translation-binary]` entirely for native OMP, or define and prove an OMP-specific translator. Do not keep the CC Ctrl+S/`/clear` implementation under an OMP manifest without a public-contract coexistence proof.\n3. **Manifest hooks/inject:** remove inherited `[hooks.*]`/hook injection metadata, or author OMP-native mappings if public spt-core actually consumes these declarations.\n4. **Durable role command:** port the harness-agnostic `/role <directive>` behavior now; separately decide whether a bare role edit gets an OMP-native editor or a simpler agent-mediated flow.\n5. **Work-discipline brief:** port the prose only if OMP has a proven checkpoint/reset mechanism; otherwise adapt rather than copy the CC checkpoint assumptions.\n6. **Watched directory names:** preserve `.claude` for on-disk continuity or migrate to an OMP/adapter-owned path with an explicit migration.\n7. **Supported Linux floor:** add musl parity now or explicitly scope omp-spt to Windows+glibc Linux and correct docs.\n\n## Concrete missing pieces, ordered by adapter correctness\n\n- **P0:** Rewrite `README.md`, both setup bodies, version/live/identity text, and active quickstart so every command targets `BigscreenVR/omp-spt`, `omp-spt`, OMP, and the actual skill-install surface.\n- **P0:** Replace or remove `post_update.rs`; it must never install/update `sptc@cplugs` from an omp-spt update.\n- **P0:** Resolve the dual-delivery architecture: remove CC hooks, `hook.rs`, `interrupt_watch.rs`, CC manifest hook declarations, and CC translator from the OMP runtime unless each has an explicit OMP use and public proof.\n- **P1:** Rewrite registration, release-acquire, digest-proof, hosted-launch, and native-extension acceptance tests around `omp-spt`, OMP JSONL, the renamed binary, and observable OMP side effects. Ensure cleanup cannot remove claude-spt.\n- **P1:** Prune unused CC subcommands/modules and make binary usage/help say `omp-spt`.\n- **P1:** Replace current operational docs/site/runbook/parity/CI pages; retain historical ADRs only when clearly marked lineage/non-operative.\n- **P2:** Decide/implement `/omps:role` and the work-discipline brief as post-fork sister feature ports.\n- **P2:** Add the musl triple or explicitly document/support-test the narrower platform set.\n\nNo files were edited and no commands/tests were executed; investigation was read/glob/grep only as required.",
  "files": [
    {
      "path": "../spt-claude-code",
      "description": "Located full sister repository; exact `../claude-spt` was absent."
    },
    {
      "path": "../spt-claude-code/adapter/claude-spt.toml",
      "description": "Current sister manifest (0.20.1), including role, work-discipline, CC hooks, translation, update, profiles, roles, and strings."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/hook.rs",
      "description": "Sister’s current CC lifecycle/skill injection/role-edit/work-discipline implementation used to identify post-fork surfaces."
    },
    {
      "path": "../spt-claude-code/tools/claude-spt/src/translate.rs",
      "description": "Sister’s CC PTY translation implementation, including role-edit and compact marker choreography."
    },
    {
      "path": "../spt-claude-code/ci/publish/package-adapter.sh",
      "description": "Sister’s current three-triple Windows/glibc/musl fat-archive packer."
    },
    {
      "path": "../spt-claude-code/CHANGELOG.md",
      "description": "Dates sister-only 0.18–0.20 features and distinguishes them from omp-spt’s 0.17.3 fork baseline."
    },
    {
      "path": "adapter/omp-spt.toml",
      "description": "OMP manifest: correctly ported adapter/session/OMP role seams but retains CC hooks, inject metadata, translation, CLAUDE_CONFIG_DIR, and inert echo flag."
    },
    {
      "path": "adapter/strings/omp-spt.mjs",
      "description": "Correct native OMP extension delivery/lifecycle implementation."
    },
    {
      "path": "tools/claude-spt/src/main.rs",
      "description": "Consolidated OMP executable still compiles and exposes both OMP and obsolete CC subcommands/help."
    },
    {
      "path": "tools/claude-spt/src/post_update.rs",
      "description": "Active post-update implementation incorrectly hardcodes Claude/ccs and `sptc@cplugs`."
    },
    {
      "path": "tools/claude-spt/src/hook.rs",
      "description": "Retained CC hook implementation hardcodes `ADAPTER=\"claude-spt\"`."
    },
    {
      "path": "tools/claude-spt/src/translate.rs",
      "description": "Retained translator is explicitly Claude Code Ctrl+S, `/clear`, `/rename`, Enter, and soft-newline choreography, not harness-agnostic."
    },
    {
      "path": "tools/claude-spt/src/digest_omp.rs",
      "description": "Substantive OMP JSONL-to-digest port."
    },
    {
      "path": "tools/claude-spt/src/psyche_omp.rs",
      "description": "Substantive OMP ephemeral Psyche-turn port."
    },
    {
      "path": "tools/claude-spt/src/echo_commune_omp.rs",
      "description": "Substantive OMP end-of-session summarizer port."
    },
    {
      "path": "plugin/omps/hooks/dispatch.sh",
      "description": "Retained CC hook dispatcher queries the sister `claude-spt` registry entry and uses `$CLAUDE_ENV_FILE`."
    },
    {
      "path": "plugin/omps/hooks/hooks.json",
      "description": "Publishes eleven Claude Code hook event handlers despite native OMP design saying hook plugin removed."
    },
    {
      "path": "plugin/omps/.claude-plugin/plugin.json",
      "description": "Renamed to `omps`, but description/keywords still advertise Claude Code and claude-spt."
    },
    {
      "path": "plugin/omps/skills/setup/SKILL.md",
      "description": "Public `/omps:setup` body installs/activates the wrong sister adapter and ccs profile."
    },
    {
      "path": "adapter/strings/skills/setup.md",
      "description": "Injected setup body also installs/activates the wrong sister adapter."
    },
    {
      "path": "README.md",
      "description": "Entire current public install/update guide remains claude-spt/SaberMage/Claude Code/sptc content."
    },
    {
      "path": "OMP-ADAPTER-PLAN.md",
      "description": "Accepted seam map explicitly says CC hook plugin is removed and OMP control/native extension owns lifecycle."
    },
    {
      "path": "docs/adr/0007-native-omp-tui-hosts-spt-extension.md",
      "description": "Accepted native OMP TUI architecture decision."
    },
    {
      "path": "ci/publish/package-adapter.sh",
      "description": "Functional OMP two-triple packer with stale claude-spt comments and no musl parity."
    },
    {
      "path": "tests/adapter-archive.sh",
      "description": "OMP archive structural guard; only Windows+glibc Linux."
    },
    {
      "path": "ci/digest/digest-proof-int.sh",
      "description": "Stale Claude-shaped digest proof targeting claude-spt instead of OMP digest."
    },
    {
      "path": "ci/manifest/registration-int.sh",
      "description": "Stale registration integration asserts/removes claude-spt and :ccs after registering OMP manifest."
    },
    {
      "path": "ci/publish/release-acquire-int.sh",
      "description": "Stale release acquisition test downloads/removes/asserts SaberMage/claude-spt."
    },
    {
      "path": "ci/launcher/bind-int.sh",
      "description": "Stale hosted-launch test drives real Claude SessionStart instead of native OMP."
    },
    {
      "path": "ci/idle-translate/translate-proof-int.sh",
      "description": "Stale translation proof looks for old binary and validates CC `/clear`/`/rename` behavior."
    },
    {
      "path": "ci/acceptance/run-acceptance.sh",
      "description": "Stale acceptance harness launches `claude -p` and asserts CC UserPromptSubmit hooks."
    },
    {
      "path": "tests/bridge-acceptance.sh",
      "description": "Useful OMP-specific headless bridge acceptance with observable side effects."
    },
    {
      "path": "tests/omp-extension.mjs",
      "description": "Focused native OMP extension unit coverage."
    },
    {
      "path": "ci/run-gates.sh",
      "description": "Still sister-branded and capable of green results while wrong-identity integration scripts remain unexercised."
    },
    {
      "path": "docs/PARITY.md",
      "description": "Current operational parity verdict remains exclusively claude-spt/legacy owl oriented."
    },
    {
      "path": "docs/RELEASE-RUNBOOK.md",
      "description": "Current release operations still target SaberMage/claude-spt, Claude plugin install, and `/reload-plugins`."
    },
    {
      "path": "docs-site/src/introduction.md",
      "description": "Published docs-site introduction still explains Claude Code hook architecture, not OMP."
    }
  ],
  "architecture": "The intended omp-spt architecture is coherent on its primary path: spt-core’s broker launches native `omp --extension <adapter>/strings/omp-spt.mjs` as PTY leader; the OMP extension binds/starts `spt ready`, parses inbound EVENT envelopes, serializes native `sendUserMessage` turns, tracks busy/idle, and replies through `spt`. Manifest roles invoke OMP-specific `digest-omp`, `history-omp`, `psyche-omp`, and `echo-commune-omp`; a separate `bridge` subcommand retains `omp --mode rpc` for headless callers.\n\nA second, inherited Claude architecture still ships in parallel and is not cleanly isolated: a `.claude-plugin` hooks every CC lifecycle event, `dispatch.sh` resolves the `claude-spt` registry entry, `hook.rs` calls `--adapter claude-spt`, and `translate.rs` emits Claude-specific PTY keys and slash commands. The OMP manifest still advertises those hook/inject/translation seams, while its update post-hook installs `sptc@cplugs`. This parallel path contradicts the accepted OMP plan, can act on the sister adapter, locks stale tests into place, and obscures which delivery/lifecycle owner is authoritative. Correct cutover should preserve the native OMP path and headless bridge while deleting or explicitly redesigning every CC-only path."
}