诊断记录:引擎钩子 spawn 环境与 ZCode shell PATH(2026-09-07)

1 · 事实链(全部 file:line / 活体命令输出可复核)

  1. ZCode Bash 工具 PATH 无 node 的根因是「shell 快照」硬编码,不是 zsh rc 链问题:
    • nvm 初始化在 ~/.zshenv:4-8(全部 zsh 含非交互都 source),实测 zsh -c 'echo $PATH' 首项即 nvm bin;
    • 但 Bash 工具实跑 /bin/zsh -c . '<snapshot>.sh',快照最后一行硬编码 export PATH='/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin:…ZCode tools', 把 nvm bin 与 ~/.local/bin 全部抹掉;
    • 该 9 项 PATH 无 /System/Cryptexes/App/usr/bin/etc/paths 必含项)→ 不是 login shell path_helper 的产物 → 快照 PATH 即引擎进程 env PATH 的写照 → 引擎 env 无 nvm/node
  2. lzy 不在 PATH 的直接原因是从未全局安装:各 nvm 版本 lib/node_modules 无 lazyzcode, /usr/local/bin/opt/homebrew/bin、全局 bin 目录均无 lzy shim;package.json bin 字段具备 条件但未执行过 npm i -g。与 PATH 断链是两个独立问题。
  3. 钩子命令裸 node:hooks.json(修复前)四条命令均为 node "${ZCODE_PLUGIN_ROOT}/hooks/<script>";引擎 shell:!0 计数为 0(zcode.cjs grep 实锤), 命令按 argv 解析后以引擎自身 env 直接 spawn(env 合并 ZCODE_PLUGIN_ROOT 等,源码 :1786/:2551)。
  4. 本会话活体信号(2026-09-07,GUI 直启场景)
    • 首条用户消息含 zw 触发词,但未见 UserPromptSubmit 注入(该通道 2026-09-06 MVP 活体验收过可达);
    • 探针实验:向缓存 hooks.json 追加两条 PostToolUse 探针(裸 node / 绝对路径 node)后 Write 触发, 产物 /tmp/lzy-zw-probe.jsonl 未产生(引擎在会话启动时缓存钩子配置,中途改 hooks.json 本会话不可见, 故本探针无法在本会话直触钩子;归档:.lazyzcode/evidence/probe.jsonl);
    • 含 TODO 的 Write 触发后亦无 comment-checker 注入(辅助信号;PostToolUse 注入可达性本就只有 代码级证据)。
  5. 2026-09-06 MVP 验收时钩子能跑(Stop 拉回 1/2→2/2 活体)→ 当时 ZCode.app 是从带 nvm PATH 的 终端环境启动。引擎 env 随启动方式而变由此两日对照成立。

2 · 处置(分支 A 落地)

3 · 用户环境建议(非产品缺陷部分)

4 · 勘误附注(同日另一会话的引擎日志审计,证据更强)

平行会话(sess_1dfc6a1c)从引擎 CLI 日志独立实锤了同一根因,且证据更硬: