{
  "summary": "YES, bounded: installed omp-spt 0.9.4 forwards already-literal operator text `&quot;path&quot;` intact to both busy-state payload stdin and now-signal --user-input (within its 8 Ki-character prefix). NO quote-to-entity conversion occurs in these extension report paths. Core-delivered peer envelopes retain escaping in model context but are excluded from both USER_INPUT report surfaces by delivery-stub recognition. Mobile 1.1.1 installs only a manifest and executable; its readable local checkout delegates raw body bytes to `spt send --user-msg`, not either input-report API; binary/source equivalence is not established.",
  "files": [
    {
      "path": "C:/Users/decid/AppData/Local/spt-core/adapters/_github/BigscreenVR-omp-spt/manifest.toml",
      "description": "Installed 0.9.4 manifest; native launch/resume explicitly load strings/omp-spt.mjs through omp-spt launch-omp; no PTY input translator."
    },
    {
      "path": "C:/Users/decid/AppData/Local/spt-core/adapters/_github/BigscreenVR-omp-spt/strings/omp-spt.mjs",
      "description": "Primary shipped source evidence: decodeBody 47–55; peer envelope extraction 281–288 and 341–352; stub generation 634–642; signature filter 852–860; injection 872–891; clipping 902–908; process transport 1030–1061 and 1157–1163; wrapper 1488–1550; state payload 2058–2074; now-signal 2141–2151; peer submission 2425–2490; listener/poll context 2790–3098; before_agent_start 3116–3154."
    },
    {
      "path": "C:/Users/decid/AppData/Local/spt-core/adapters/_github/BigscreenVR-omp-spt/strings/package.json",
      "description": "Installed extension package version 0.9.4 and ./omp-spt.mjs extension registration."
    },
    {
      "path": "C:/Users/decid/Documents/projects/omp-spt/adapter/strings/omp-spt.mjs",
      "description": "Current checkout before_agent_start 3116–3154 matches examined installed hook; checkout package also says 0.9.4. No full-file equality or release commit attestation claimed."
    },
    {
      "path": "C:/Users/decid/Documents/projects/omp-spt/tools/omp-spt/src/launch_omp.rs",
      "description": "Current checkout native helper: argv 63–74 adds --extension; executable selector OMP_SPT_OMP_BIN / validated known locations / PATH; 627–632 inherits stdio rather than translating input."
    },
    {
      "path": "C:/Users/decid/Documents/projects/oh-my-pi/packages/coding-agent/src/session/agent-session.ts",
      "description": "Current native OMP checkout: ordinary prompt 7438–7463 applies slash/template expansion; expandedText becomes text content 7508 and reaches before-agent-start 7717–7723."
    },
    {
      "path": "C:/Users/decid/Documents/projects/oh-my-pi/packages/coding-agent/src/extensibility/extensions/runner.ts",
      "description": "Current native OMP checkout lines 988–1013 passes prompt directly into event.prompt; native checkout package version 16.3.15, not proof of currently running executable version."
    },
    {
      "path": "C:/Users/decid/AppData/Local/spt-core/adapters/_github/SaberMage-spt-mobile/manifest.toml",
      "description": "Installed mobile 1.1.1 Gateway manifest launches spt-mobile-host run --id {id}; installed directory contains exe/previous exe plus state, no shipped readable host source."
    },
    {
      "path": "C:/Users/decid/Documents/projects/spt-mobile/host/src/spt.rs",
      "description": "Current local checkout: CliRunner 110–129 writes body.as_bytes() to subprocess stdin; user_msg_args/send_user_msg 154–181 use spt send --user-msg with raw body."
    },
    {
      "path": "C:/Users/decid/Documents/projects/spt-mobile/host/src/link.rs",
      "description": "Current local checkout Request::Send 132–144 forwards body to send_fn unchanged; main.rs 172–174 wires to spt::send_user_msg."
    }
  ],
  "architecture": "Native OMP emits before_agent_start(prompt) → installed extension recognizes peer stub or forwards operator prompt → setState busy / pollNowSignal → raw subprocess stdin / argv. Separately, api listen yields escaped EVENT envelopes → extension creates a body-free <msg from=.../> wake stub → context hook adds raw envelope only to provider context. Busy polls add annotated raw envelopes to a custom context ledger. Mobile is a Gateway send delegator, not an established busy/now-signal reporter.",
  "report": "## Decision matrix (installed omp-spt 0.9.4)\n\n| Input origin | busy-state USER_INPUT payload | now-signal --user-input |\n|---|---|---|\n| Ordinary prompt containing normal `\"path\"` | Quotes remain normal quotes | Quotes remain normal quotes |\n| Operator supplies literal `&quot;path&quot;` | YES: exact prompt passed on stdin | YES: exact prefix passed as one argv element; limited to first 8192 JS string code units |\n| Listener-delivered peer text with core-escaped quotes | NO: wake prompt recognized as stub; state call has no payload | NO: stub maps to empty userInput, so flag omitted |\n| Busy api poll peer envelopes | NO direct re-report: stored as contextual delivery ledger | NO userInput: boundary poll passes only agentOutput |\n\nThese are source-reachable statements, not probes. No test, build, lifecycle action, remote access, or live-endpoint manipulation performed.\n\n## Installed extension source chain\n\n`before_agent_start` (3116–3154) reads `event.prompt` without encoding or decoding. `parseStubSignature(prompt)` decides exclusion. A nonblank nonstub goes to `setState(\"busy\", {payload: prompt})`; all nonstub prompts go to `pollNowSignal({userInput: prompt})`. Blank prompt suppresses state payload; truthy userInput is required to add now-signal flag.\n\n`setState` (2058–2074) adds `--payload-stdin` and passes the original payload to runCommand. `runCommand` (1488–1510) passes args/input unchanged to the production runner. `createOmpSpt` (1180–1205) selects runSpt by default. `runSpt` (1030–1061, 1157–1163) directly spawns `OMP_SPT_SPT_BIN || \"spt\"` with argv and calls `child.stdin.end(input)`. There is no shell quoting/XML conversion seam.\n\n`pollNowSignal` (2141–2151) constructs `--user-input=${clipInline(words.userInput)}`. `clipInline` (902–908) only String-coerces and slices at 8*1024; it neither escapes `\"` nor decodes `&quot;`. Therefore a short pasted entity string is a concrete reachable escaped-quote input to both CLI report surfaces, but is NOT evidence the consumer manufactured escaping from ordinary quotes. A deliberately supplied raw EVENT XML prompt would similarly be forwarded unless it matches the stub predicate; that is operator input, not the automatic peer-delivery path.\n\n## Peer boundary: decoding exists, but raw envelope is what the model sees\n\n`decodeBody` (47–55) converts br/lt/gt/quot and amp last. `drainEvents` returns BOTH decoded body and raw envelope (whole events 341–352; reassembled parts 281–288). For a core-escaped normal quote, decoded body has `\"`. For one layer representing a literal entity (`&amp;quot;`), amp-last decoding preserves literal `&quot;` rather than double-decoding.\n\nAutomatic submission (2425–2490) does NOT submit that body or envelope as the prompt: `senderStub` generates `<msg from=\"...\"/>` (ordinal correlation added as needed), and `pi.sendUserMessage(item.stub)` wakes/steers OMP. Stub sender attributes themselves are XML escaped (634–642), but recognized stub prompts are excluded before either input-report surface.\n\nThe filter is syntactic, not source metadata: `parseStubSignature` (852–860) searches for `<msg ...>` with double-quoted `from`, optionally `delivery`; it is not anchored to the entire prompt and does not test event.source. Consequently the exact exclusion boundary is any prompt matching that syntax, not a claim that all synthetic prompts or every conceivable peer representation are excluded.\n\nAt a context boundary, `injectEnvelope` (872–891) finds the matching user stub and appends `formatInboundEnvelope(item.envelope)`. Formatting (708–719) inserts frame newlines and attribute notes; it preserves the escaped envelope body. The listener path (2790–2896) drains events and queues/submits stubs; context processing (roughly 2980–3040) splices/respices raw envelopes. Thus `&quot;` is genuinely present on the peer-to-model surface but that is not the user-input-report surface.\n\nBusy poll (3040–3098) calls api poll, records `annotateDeliveries(String(polled))` in context ledger, then calls `pollNowSignal({agentOutput: ...})`. Annotation preserves body entities; ledger is a custom message, not a new operator prompt. If the model later quotes an entity-bearing peer body, its text can travel as AGENT_OUTPUT (mid/closing reports); that is a different report category, not evidence of peer USER_INPUT reclassification.\n\n## Provenance and native-host bounds\n\nInstalled manifest and strings/package.json both declare omp-spt 0.9.4. Manifest session.self/session.resume specify `{adapter_dir}/omp-spt launch-omp ... --extension {adapter_dir}/strings/omp-spt.mjs`; installed directory contains omp-spt.exe and that readable extension. This is direct shipped-extension evidence, not inferred from checkout alone. Manifest warns running endpoints retain old hosting until restart; this investigation did not prove hertz's in-memory module bytes or native executable build identity.\n\nThe current omp-spt checkout package also declares 0.9.4 and the examined turn-start hook matches the shipped hook. Native launch helper checkout assembles --extension argv and inherits stdin/stdout; it does not perform a PTY EVENT-to-input translation. Its OMP locator can be overridden with OMP_SPT_OMP_BIN. No source-to-executable hash mapping was established.\n\nCurrent oh-my-pi checkout (package version 16.3.15) corroborates the ordinary-prompt seam: `prompt(text)` handles slash commands/templates, stores expandedText as text, and calls emitBeforeAgentStart(expandedText); runner places it directly in event.prompt. The checked ordinary input path contains no quote/entity conversion. This is CHECKOUT evidence only, not proof every installed/native frontend or third-party extension behaves identically. The installed extension itself accepts literal entities as described above regardless of their prior origin.\n\n## Mobile bounded result\n\nInstalled mobile manifest is version 1.1.1, kind harness, Gateway, session command `spt-mobile-host run --id {id}`. It declares no input-report hook/translator, and installed contents expose no readable host implementation (only executable, previous executable, manifest, state). Therefore installed manifest alone cannot prove its binary's string transformations.\n\nA local source checkout exists and its host manifest also says 1.1.1, but matching version is not binary equivalence. CHECKOUT chain: link.rs Request::Send forwards body untouched → main.rs send_fn calls send_user_msg → spt.rs constructs `send <target> --from <from> --user-msg --json-payload <metadata>` and writes `body.as_bytes()` to stdin. In that chain literal `&quot;` is preserved and ordinary quotes are not XML-escaped. This is a send-authority/delegation path, not either requested busy-state/now-signal report path. Searches of host/src for now-signal, payload-stdin and api-state report patterns found no such report calls. The eventual recipient's consumer determines further delivery/report behavior; not established from this gateway source.\n\nNo new consumer defect is established here. For a claimed ordinary-quote → escaped-quote USER_INPUT bug, obtain a concrete emitting frontend/report path beyond the excluded OMP peer-context surface; these findings do not support a universal NO across all harnesses."
}
