Part of #100 (EPIC). Workstream N. One issue = one PR.
Source: zmem deep audit 2026-09-10 (https://claude.ai/code/artifact/39012f75-25f0-441b-978f-cc90a3bd3a9d) and issue plan v3 (https://claude.ai/code/artifact/59e74242-17da-4416-9b00-0b0cf347837c); dependency DAG computed over all open PRs (edge kinds: Depends on = merged artifact, Schema after = migration lane, Gated on = #100 measurement/decision gate).
Labels: bug, severity:medium. Depends on: N-3 (#186) (resolveShell()). Blocks: #96.
Design. hooks/hooks.zcode.json entries use type: "process", command: "node", args: [...]; stdout protocol-only JSON; diagnostics on stderr. Live ZCode canary runs in #96.
Acceptance criteria. (a) Manifest test: every ZCode entry is process with args. (b) Launcher test under the ZCode env emits exactly one JSON object on stdout per verb (byte-exact against tests/fixtures/launcher/zcode-<verb>.json) and nothing else. (c) test-windows green; no test removed.
Part of #100 (EPIC). Workstream N. One issue = one PR.
Source: zmem deep audit 2026-09-10 (https://claude.ai/code/artifact/39012f75-25f0-441b-978f-cc90a3bd3a9d) and issue plan v3 (https://claude.ai/code/artifact/59e74242-17da-4416-9b00-0b0cf347837c); dependency DAG computed over all open PRs (edge kinds: Depends on = merged artifact, Schema after = migration lane, Gated on = #100 measurement/decision gate).
Labels: bug, severity:medium. Depends on: N-3 (#186) (
resolveShell()). Blocks: #96.Design.
hooks/hooks.zcode.jsonentries usetype: "process",command: "node",args: [...]; stdout protocol-only JSON; diagnostics on stderr. Live ZCode canary runs in #96.Acceptance criteria. (a) Manifest test: every ZCode entry is
processwithargs. (b) Launcher test under the ZCode env emits exactly one JSON object on stdout per verb (byte-exact againsttests/fixtures/launcher/zcode-<verb>.json) and nothing else. (c)test-windowsgreen; no test removed.