Skip to content

feat: support ZCode CLI on Windows - #54

Open
imxyanua wants to merge 15 commits into
EvoMap:mainfrom
imxyanua:codex/zcode-windows
Open

imxyanua wants to merge 15 commits into
EvoMap:mainfrom
imxyanua:codex/zcode-windows

Conversation

@imxyanua

@imxyanua imxyanua commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Add local ZCode CLI support on Windows. Configure ZCODE_CLI_PATH with the absolute path to the trusted zcode.cjs bundle, and add the packed plugin folder through the CLI configuration. Desktop follow-up #57

CLI prompt → Recipe context
  → native terminal record + matched Bash evidence
  → session range → isolated completion → private draft

The CLI layer selects the explicitly configured runtime. It reuses the same adapter, hook and evidence code that the Desktop layer extends.

Evidence

  • Windows Node 22 and 26 each passed 11 ZCode tests and 14 architecture, packaging and calibration checks. The packed plugin built on Windows Node 26.
  • A copied native ZCode 0.17.0 bundle loaded the packed plugin through plugins.dirs in a disposable profile, with six runnable hooks. This tested the loader and explicit runtime layout without a live model.
  • Earlier Windows CLI acceptance used the CLI shipped with Desktop, real Grok and an official unreleased Proxy 2.0.50 build. Verified work produced a private draft and cancellation produced no new report or candidate. Live completion on an independently built standalone CLI remains unverified.

Merge Danger

Two-way. The ZCode profile opts into native completion and captured model configuration. Tests exercise the shared process, report, and turn monitor paths. The Desktop layer adds its own marketplace and runtime discovery in #57.

@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 8 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 6 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="bf338062f32b3bcd5ff8acd3fd30b7966d79341d",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 bf338062f32b

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 8 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 自定义数据目录未应用到会话数据库,导致终态与模型路由无法确认 — homeOf()、providerConfigOf() 和 stateDir 都采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认数据库...(truncated) · hosts/zcode/model.js · advisory_f15325224037e798892529c4
  • [P2] running 状态未使用长等待窗口,Stop 后的终态可能永久丢失 — 新增的五分钟等待只覆盖 pending。本 PR 的 ZCode 测试夹具明确使用 running 表示进行中,但�...(truncated) · lib/runtime/turn-monitor.js · advisory_9703af8729a8e8dfed29572b
  • [P2] 状态库缺失或不可用后,旧 turn 不再由新会话补偿上报 — confirmTurnCompletion 仅根据 profile 的静态 confirmCompletion 能力设置;新逻辑据此无条件跳过 q...(truncated) · lib/app/session-start.js·advisory_9675db216794e39bea619595`
  • [P3] 原生状态为 running 时仅观察 30 秒,长回合的最终状态会被遗漏 — confirmTurnCompletion 只对状态为 pending 的记录使用 5 分钟等待时间。ZCode 测试夹具明确将进�...(truncated) · lib/runtime/turn-monitor.js · advisory_c5b1ccc450498a274e5bba8b
  • [P3] 等待 stdout 握手的子进程可能永久等待 stdin EOF — stdout handler 在 stdoutSize >= OUTPUT_MAX_BYTES 时直接返回,新增的 closeInputOn 检测也因此停止运�...(truncated) · lib/runtime/process/spawn.js · advisory_91b3b280574aed0b372343d1
  • [P3] epoch 不一致时反而允许旧工作轮次写入新候选范围 — canJoinRange 在候选范围的 sessionEpoch 与结束中的旧轮次不一致时直接返回 true。因此初次�...(truncated) · lib/app/turn-end.js · advisory_2114834de4d189e4fd8bff68
  • [P3] 旧轮次完成流程可在会话换代后写入并上报新会话数据 — 新增的 epoch/turn 检查只保护最终的 session 更新。reportTurn 会先读取当前会话,并在检查 ope...(truncated) · lib/app/turn-end.js·advisory_70bc2c20a4fc6a407e885cbd`
  • [P3] 未验证轮次未入队报告,却仍被标记为已报告 — verified=false 时 queued 被设为空数组,因此 due 中待报告数据没有进入 outbox;但成功执行�...(truncated) · lib/app/turn-end.js · advisory_c231cad0771758e8431613a9

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 bf338062f32b

Recheck dead-owner turns against native terminal status, keep delayed end handlers within their own session epoch, and only settle reuse evidence actually queued. Continue reading the completion handshake after stdout capture reaches its limit.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 15 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 4 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="78c65722098faf47e75b0b4747ebc89b898ec7c5",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 78c65722098f

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 15 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 原生状态元数据永久缺失时,死亡会话无法收敛 — 本次修改在支持 confirmTurnCompletion 时完全跳过 queueOrphanReports,而 recoverNativeTurns 只有在 ...(truncated) · lib/app/session-start.js · advisory_699e3596ebbbc5dd10c9c29d
  • [P2] 宿主退出后监视器只检查一次状态,无法等待原生终态 — 新逻辑允许 confirmTurnCompletion 在 owner 消失后读取一次状态,但同一轮末尾的 if (ownerGone || ...(truncated) · lib/runtime/turn-monitor.js·advisory_397663b6b650ddd2b8e99596`
  • [P2] 自定义数据根目录未作用于会话数据库,导致状态与模型路由读取不同实例 — homeOf()、providerConfigOf() 和 stateDir 均采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认路径仍...(truncated) · hosts/zcode/model.js · advisory_a0d2ddb2424ac13d1fb6c004
  • [P3] 确认型宿主补偿关闭时未传递 recordOf — closeUnfinishedTurn 的普通分支把 recordOf 传给 turnEnded,新增的确认型分支却漏传该参数。r...(truncated) · lib/app/turn-end.js·advisory_483daad68c50a6503d33714e`
  • [P3] 终态在恢复扫描后落库时,旧 turn 会一直保持 open — recoverNativeTurns 在 turnStatus 没有返回终态时直接成功结束;该任务只由 sessionStarted 调度�...(truncated) · lib/app/session-start.js · advisory_18ddfdf7d427384c7ee9f6f1
  • [P3] isolated 的空环境回退到 process.env,可能向模型进程泄露宿主凭据 — 新代码在隔离模式下令 runEnv = overrides;当 declaration 没有 env 时该值为 undefined。它被传�...(truncated) · lib/runtime/model-executor.js · advisory_89e8d3b79001cc42a9917882
  • [P3] 可选的 turnStatus 在确认模式下被无条件调用 — 新端口契约将 turnStatus 声明为可选,同时允许独立设置 confirmTurnCompletion;但 closeUnfinishe...(truncated) · lib/app/turn-end.js·advisory_52670e92f762906b67e07f8d`
  • [P3] readEach 不等待异步访问器,扫描状态可能提前完成 — readEach 声明为异步 API,但通过同步的 eachSession 调用 visit,既不 await 返回的 Promise,��...(truncated) · lib/runtime/store/file-stores.js · advisory_6ebf354f99e3f5420c8f612a
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 恢复扫描、原生终态与监视器缺少可靠收敛机制 — 多个切片分别发现:监视器在宿主退出后只查询一次状态、readEach 不等待异步访问器、原�...(truncated) · lib/runtime/turn-monitor.js · advisory_c84dfc7c8ae64f6904237fbb
  • [P3] 无换行的握手响应会让双方永久等待 — closeInputOn 只检查 split('\n') 后已经结束的行,最后一个未带换行的片段始终留在 incomplete...(truncated) · lib/runtime/process/spawn.js·advisory_b3e1cf53ee5a0e3d3d0e1a2d`
  • [P3] 生成发布物被跳过,当前结果不能代表完整发布一致性 — 四个 hosts/zcode/dist/* 发布文件被 size_report.skipped_files 明确排除,但其中三个仍出现在切片...(truncated) · hosts/zcode/dist/pack.json · advisory_da0a4c4df29e11dd93585297
  • [P3] 确认型宿主的补偿关闭契约在 API 审查范围外失配 — 确认型宿主的补偿关闭路径未传递 recordOf,同时对声明为可选的 turnStatus 无条件调用。AP...(truncated) · lib/app/turn-end.js · advisory_b8530bcd3668722133ada78c
  • [P3] 自定义数据根目录造成状态库与模型路由分叉 — 自定义数据根目录被环境、文件存储或模型路由消费,但会话数据库仍使用另一默认位置。...(truncated) · lib/app/background.js · advisory_c57f4889b421de31ccb80029
  • [P3] 隔离环境的空值语义跨模块不一致,可能泄露宿主凭据 — 环境构造层允许隔离模式产生空环境,但进程启动层把空对象或空值解释为“未提供环境”...(truncated) · lib/runtime/process/spawn.js · advisory_699e614bf29935e9d1e783c7

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 78c65722098f

Keep verified report payloads in the injection ledger after a local queue failure. Retry using the original check evidence and leave unverified injections out of delivery.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 11 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 4 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="c2f4ae537d21b68cd45555a1ae2c024fb5535dcd",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 c2f4ae537d21

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 11 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 恢复扫描遇到未终态后不会再次检查 — 恢复任务仅在 sessionStarted 时调度一次。扫描时 turnStatus 未返回可映射终态,代码不会调�...(truncated) · lib/app/session-start.js · advisory_dd9e1d4d5f767db8d6b3ed5e
  • [P2] 状态尚未落库时恢复任务会成功退出且不再重试 — reasonOfNativeStatus() 无法映射状态时,recoverNativeTurns 将该 turn 静默跳过并正常完成。恢复��...(truncated) · lib/app/session-start.js · advisory_c5aad22f2c51ea89095d385c
  • [P3] 宿主退出后监视器不会等待延迟写入的原生终态 — 新逻辑允许宿主退出后读取一次状态,但未得到终态时,新增的 if (ownerGone || ...) return 会�...(truncated) · lib/runtime/turn-monitor.js · advisory_487dc317a7911d2810caa003
  • [P3] 恢复扫描只执行一次,迟到或缺失的原生终态会让旧回合长期停留在 open — recoverNativeTurns 遇到无终态时直接跳过,既不重新调度自身,也不保留等待中的恢复任务;...(truncated) · lib/app/session-start.js · advisory_7d7c9c595d28f56b4bbb8d7b
  • [P3] 确认型宿主补偿关闭时丢弃原生回合记录读取器 — closeUnfinishedTurn 的确认型分支接受 recordOf,但调用 turnEnded 时没有传递它。recordTurn 因�...(truncated) · lib/app/turn-end.js · advisory_4a6c8fbc26fafac33661d954
  • [P3] isolated: true 在未配置覆盖变量时仍继承全部宿主环境 — overrides 此时为 undefined,runEnv 也被赋为 undefined;将其传入 runProcess 后触发参数默认�...(truncated) · lib/runtime/model-executor.js · advisory_4f3e0bb2034f28ef3abea2b1
  • [P3] 无换行的握手响应会让模型进程永久等待 stdin EOF — runProcess 只把由 \n 终结的内容传给 closeInputOn;每个 chunk 的最后一段始终留在 incompleteL...(truncated) · lib/runtime/process/spawn.js·advisory_f54e91d0f683c6e8e156c3f3`
  • [P3] 补偿关闭未要求原生终态,后续真实完成事件无法补偿 — 确认型分支使用 reasonOfNativeStatus(row?.status, true) ?? as。当原生状态不存在或尚未终结时,代...(truncated) · lib/app/turn-end.js · advisory_91f73794149cbc4ef9865808
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 私有伴随文件名可通过 .. 逃逸临时工作目录 — writePrivateFiles 直接执行 join(workdir, relative),没有拒绝绝对路径、.. 路径段或验证最终路...(truncated) · lib/runtime/model-executor.js · advisory_08de3679b8c3f344927e1987
  • [P3] 自定义数据根目录未用于原生会话数据库,恢复与终态确认可能读取错误实�...(truncated) — homeOf()、provider 配置和插件状态目录均接受 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认数据库...(truncated) · hosts/zcode/model.js · advisory_453a8d11ca49b1d71378d0f8

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 c2f4ae537d21

Forward the supplied record after native terminal confirmation and handle a missing status reader. Give a dead owner a bounded grace for terminal metadata and omit any stale worktree. Isolated model declarations default to an empty environment.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 10 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="d255f12658110c57477b47b2b0f43faa86b29593",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 d255f1265811

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 10 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 自定义数据根目录未应用于原生会话数据库 — homeOf()、provider 配置和插件 stateDir 都采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认路径仍...(truncated) · hosts/zcode/model.js · advisory_45310e890be4d1fb84b43eb6
  • [P2] owner 退出后五分钟终态等待被缩短为 30 秒 — pending 状态本应使用 PENDING_ROW_MS 的五分钟观察窗口,但一旦 ownerGone,循环改走独立的 ...(truncated) · lib/runtime/turn-monitor.js·advisory_be6e2acacc8a2878f9256dbf`
  • [P2] 恢复扫描成功退出后不会再检查迟到的终态 — recoverNativeTurns 在 turnStatus 没有返回可映射终态时直接跳过,并将任务视为成功;它既不�...(truncated) · lib/app/session-start.js · advisory_c37b87838f7d2e1f8473de6c
  • [P2] 私密伴随文件可通过路径穿越写出临时工作目录 — writePrivateFiles() 直接执行 join(workdir, relative),但没有拒绝 ..、绝对路径或校验解析后的�...(truncated) · lib/runtime/model-executor.js · advisory_6cd06b11116c4c4a4a5c0d0f
  • [P2] 非终态回退关闭后会永久丢弃迟到的原生完成结果 — 确认型宿主未读到终态时,当前代码仍调用 turnEnded 关闭回合,并将 recordOf 置空。该回��...(truncated) · lib/app/turn-end.js · advisory_1401ab22e9a0c1b8f1c5b6d5
  • [P3] 关闭回合后进程退出会永久丢失尚未入队的报告 — closeTurn 在报告入队前持久化关闭;新增的精确回合过滤又使下一回合只选择 asset.turn === o...(truncated) · lib/app/turn-end.js·advisory_d4b4e7adf89ae2ff2f9e0ad3`
  • [P3] 无换行的握手响应会让模型进程永久等待 stdin EOF — closeInputOn 只对 split('\n') 得到的完整行执行;最后一个未带换行的响应始终保存在 incompl...(truncated) · lib/runtime/process/spawn.js·advisory_0ed3a768febc5f70d9657b89`
  • [P3] 空数据目录变量绕过默认主目录回退 — ZCODE_DATA_BASE_DIR?.trim() ?? nativeHomeOf(env) 只对 null/undefined 回退;变量存在但为空或全空格�...(truncated) · hosts/zcode/model.js · advisory_c270009b8315554927bfe6b6
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] readEach 不等待异步访问器完成 — readEach 声明为异步接口,但底层 eachSession 同步调用 visit(target),既不等待返回的 Promise�...(truncated) · lib/runtime/store/file-stores.js · advisory_34b696141d27f29fa41f3a4a

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 d255f1265811

Keep the cross-shell calibration regression already landed upstream in EvoMap#55.
Require an explicit regular ZCode CLI bundle for background completion. Install through CLI plugin directories, and exercise the package without a Desktop installation.
@imxyanua imxyanua changed the title feat: support ZCode CLI and Desktop on Windows feat: support ZCode CLI on Windows Nov 8, 2026
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 17 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="29b7668f4494a817af2d3be8e320d0d0e28cb6bf",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 29b7668f4494

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 17 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P1] 确认型会话结束时可能跳过未报告资产 — 本 PR 在 confirmTurnCompletion 下以 pendingReportsOf 完全替代原来的 unreportedOf。后者会返回全��...(truncated) · lib/app/session-end.js · advisory_6a0625490373138d4773abb9
  • [P2] 私密伴随文件路径可逃逸临时工作目录 — writePrivateFiles() 将文件键直接传入 join(workdir, relative),未拒绝 .. 路径段,也未校验规范...(truncated) · lib/runtime/model-executor.js · advisory_7e8fbef0e2dc8056a60abe33
  • [P2] 恢复扫描成功退出后不会重试迟到的原生终态 — recoverNativeTurns 在 turnStatus 没有返回可映射终态时直接跳过并成功结束;恢复任务只在 se...(truncated) · lib/app/session-start.js·advisory_bfe86b180468fffd3f1337ea`
  • [P2] 恢复扫描把“状态尚未出现”当作成功完成 — turnStatus() 返回空值、running 或未知状态时,reasonOfNativeStatus() 不产生 reason,恢复循环直��...(truncated) · lib/app/session-start.js · advisory_9c17cd2d5e3a0d26fe1ed6a6
  • [P2] 确认型宿主会静默丢弃没有 pendingReport 的未报告资产 — pendingReportsOf() 只返回带有 pendingReport 的资产,但其结果即使为空数组也是真值。因此确�...(truncated) · lib/app/session-end.js · advisory_866ba125dfe91ae66dbe175e
  • [P3] 宿主退出后只等待 30 秒,可能丢失迟到的原生终态 — 当 confirmTurnCompletion 开启且 owner 已退出、当前状态不是终态时,逻辑改为使用 DEAD_OWNER_GRA...(truncated) · ``lib/runtime/turn-monitor.js`` · advisory_1310491dc4932e1f193f3726`
  • [P3] 无换行的协议响应不会关闭 stdin — closeInputOn 只检查已经由 \n 分隔出的完整行;最后一个没有换行符的 stdout 片段保存在 in...(truncated) · ``lib/runtime/process/spawn.js`` · advisory_a7c4505a7102c0b095c52b2c`
  • [P3] 生成的 CLI fixture 使用引用相等比较独立解析的 JSON 对象 — params.selection 来自请求 JSON,source.config.defaultModelSelection 来自再次读取并解析的配置 JSON��...(truncated) · test/hosts/zcode/hooks.test.js · advisory_cc680d0625220bc4058b4528
  • [P3] 缺失原生终态时仍关闭回合,迟到完成无法补偿 — 确认型宿主在 reasonOfNativeStatus() 无法映射终态时,仍使用 as 构造 fallback reason 并调用 tur...(truncated) · ``lib/app/turn-end.js`` · advisory_0c6df0df2ded8029ffe7a0ef`
  • [P3] 自定义数据根目录下会话数据库路径未收敛 — 新适配器的 homeOf()、provider 配置路径和 profile.js 的 stateDir 都使用 ZCODE_DATA_BASE_DIR,但 ...(truncated) · hosts/zcode/model.js · advisory_15202e6c1f8125172ed60dd4
  • [P3] closeInputOn 抛错会逃逸 Promise 并触发未捕获异常 — closeInputOn(line) 直接在异步 EventEmitter 的 data 回调中执行,没有 try/catch。该异常不会被 ...(truncated) · lib/runtime/process/spawn.js·advisory_988a1069f403006345540aac`
  • [P3] regularFile 会拒绝指向真实文件的符号链接 — 新增逻辑使用 lstatSync(file).isFile() 判断候选文件。lstat 检查的是链接本身,因此指向普通...(truncated) · lib/runtime/process/which.js · advisory_ec9db02026b6ed59a74be961
  • [P3] 空白 ZCODE_DATA_BASE_DIR 会禁用默认 provider 配置发现 — providerConfigOf() 使用 env.ZCODE_DATA_BASE_DIR?.trim() ?? nativeHomeOf(env);空白字符串经 trim() 后为 ...(truncated) · hosts/zcode/model.js · advisory_c1a774066b51465391bbc8df
  • [P3] 回合关闭与 pendingReport 消费契约不一致,可能静默丢弃资产 — turn-end 被报告可在缺失原生终态时关闭回合,而确认型会话结束逻辑只处理带有 pendingRepo...(truncated) · ``lib/app/turn-end.js, lib/app/session-end.js, lib/app/ports.js`` · advisory_dc9f2795c62a707f75a5aae2`
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 审查覆盖率只能标记为部分覆盖 — 计划覆盖 37 个变更文件,但 size report 明确只有 33 个 reviewable 文件,4 个发布产物被跳过。�...(truncated) · ``hosts/zcode/dist/README.md, hosts/zcode/dist/hooks/hooks.json`, `hosts/zcode/dist/pack.json`, `ho...(truncated)` · `advisory_842b2b40193a28f53b04ce74`
  • [P3] 迟到的原生终态可能永久失去消费机会 — 多个切片描述的行为组合成同一条生命周期断链:监控器在宿主退出后最多等待 30 秒;未��...(truncated) · ``lib/runtime/turn-monitor.js, lib/app/turn-end.js`, `lib/app/session-start.js`, `lib/session/state...(truncated)` · `advisory_017c03b85dfccd1b686b4bab`

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 29b7668f4494

Copying the index advances its mtime, which can make Git trust a cached stat entry for a same-size edit. Use the source index timestamp rounded down before adding untracked entries. A deterministic regression checks both diff parts and the untouched source index.

(cherry picked from commit bbd7c68)
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 9 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="b34de0bce67c512ae32a2e1bd7abce9cbee51fae",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 b34de0bce67c

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 9 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 自定义数据根目录未用于会话数据库 — homeOf()、provider 配置和插件 stateDir 都使用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认路径始...(truncated) · hosts/zcode/model.js · advisory_fb54d7eaf5f316503eef8303
  • [P3] 私密伴随文件路径可逃逸临时工作目录 — 文件键直接传给 join(workdir, relative),没有拒绝 .. 路径段,也没有校验规范化后的路径仍�...(truncated) · lib/runtime/model-executor.js · advisory_394ee6cdb08db66904eeafb9
  • [P3] 宿主退出后原生终态等待窗口被意外缩短为 30 秒 — 新逻辑为 ownerGone 单独使用 DEAD_OWNER_GRACE_MS = 30_000。即使当前状态是 pending,本应使用 P...(truncated) · ``lib/runtime/turn-monitor.js`` · advisory_63a0194605bb12469b69d1fe`
  • [P3] 缺少原生终态时仍会关闭确认型回合,迟到终态无法补偿 — reasonOfNativeStatus() 无法映射终态时,代码使用 reason ?? (as === 'answer' ? 'error' : as) 继续调用 ...(truncated) · lib/app/turn-end.js · advisory_b81570be4ef1ec04ad4ab0e8
  • [P3] 非绑定配置的 env 回调收不到 configPath — 当前实现先将 configPath 固定为 undefined,再调用 declaration.env(env, { workdir, configPath });对�...(truncated) · lib/runtime/model-executor.js · advisory_3353e05f7800c3b8cfa194d8
  • [P3] Owner 退出后将 pending 原生终态等待缩短至 30 秒 — 新代码为 pending 定义了五分钟等待窗口,但 owner 消失后改走独立的 30 秒宽限分支,未再��...(truncated) · lib/runtime/turn-monitor.js · advisory_2fdcf35d167a1316346fc1d7
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 无换行的握手响应可能让模型进程与父进程互相等待 — 新增解析器只把 split('\n') 后的完整行交给 closeInputOn,stdout 结束或当前 chunk 尾部的 incom...(truncated) · lib/runtime/process/spawn.js·advisory_ab7f4519c37964824133d5d9`
  • [P3] 绑定配置的路径身份检查仍存在可利用的换文件窗口 — 代码按“第一次 lstat、按路径 readFileSync、第二次 lstat”检查身份。可写源文件父目录��...(truncated) · lib/runtime/model-executor.js · advisory_52c1aa380baa97f46ebd1b60

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 b34de0bce67c

Preserve the pending native-terminal deadline after its owner exits, pass the private configuration path to unbound environment callbacks, reject escaping scratch-file paths, and tolerate a vanished dead-owner state lock.

Run the fixture Proxy independently of synchronous host work, preserve its request getter through the DSH wrapper, and track fixture-owned MiniMax workers for scoped teardown. Add regressions for the runtime contracts and native ZCode database discovery.

Validation on this exact tree: full Linux tests on Node 22.23.4 and 26.13.0 each passed 908 with one Windows-only skip. Windows test:minimax passed 528 with ten platform skips and test:zcode passed 14 on both Node versions. Packaging all ten hosts passed on both platforms. Assertions, suite workloads, and existing deadlines remain unchanged.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,并发现 1 个已核验问题。

另有 9 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="ad1256e1f3f3df7dc7a41fa5980b5a66f0ba5467",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 ad1256e1f3f3

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 9 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 未取得原生终态时关闭回合,迟到终态无法补偿 — reasonOfNativeStatus() 无法映射终态时,新增逻辑仍以 error 或调用方提供的 as 执行 turnEnded...(truncated) · lib/app/turn-end.js·advisory_0e3994a59c7121b590b92f82`
  • [P2] 空的 ZCODE_DATA_BASE_DIR 会使 provider 配置路径失效 — homeOf() 使用 trim() || nativeHomeOf(env),将空值视为未设置;但 providerConfigOf() 使用 trim() ?? ...(truncated) · hosts/zcode/model.js·advisory_a0a4d0d9dc0a6297a9886396`
  • [P3] 路径身份校验无法保证读取的是同一个配置文件 — 代码依次执行 lstatSync(source)、readFileSync(source)、lstatSync(source)。并发方可以在第一次检��...(truncated) · lib/runtime/model-executor.js · advisory_06e43435b81203302d130d5d
  • [P3] 握手判定函数抛错会成为未捕获异常 — closeInputOn(line) 在 EventEmitter 的 data 监听器中直接执行,没有 try/catch,也没有将异常交��...(truncated) · lib/runtime/process/spawn.js · advisory_d50f2f56563728a6f3314275
  • [P3] 未匹配响应且未配置超时时,stdin 永不关闭 — 启用 closeInputOn 后,新逻辑只执行 child.stdin.write(input),仅在匹配到某个换行终止的 stdout ...(truncated) · lib/runtime/process/spawn.js · advisory_cac8e57e214b09532adf726a
  • [P3] readEach 不等待异步 visitor,恢复扫描可能提前完成 — readEach 虽声明为 async,但底层 eachSession 同步调用 visit,既不 await 返回的 Promise,也�...(truncated) · lib/runtime/store/file-stores.js · advisory_ab067508e1dd1c2a5babf833
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 握手匹配器异常可越过 Promise 边界终止宿主 — 握手响应由进程/turn monitor 异步交付,而匹配器属于 executor 消费者。匹配器抛错未被转换为...(truncated) · lib/runtime/model-executor.js · advisory_21041e43f2837f13e7939647
  • [P3] 自定义数据根目录未应用于原生会话数据库 — homeOf()、provider 配置和插件状态目录都采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认数据库...(truncated) · hosts/zcode/model.js · advisory_3519fb6a70798b8df070274d

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 ad1256e1f3f3

// Discard an oversized line through its newline without matching a partial suffix.
lines[0] = incompleteLine === null ? null : incompleteLine + lines[0];
incompleteLine = lines.pop();
if (incompleteLine?.length > OUTPUT_MAX_BYTES) incompleteLine = null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

握手匹配器抛错会逃逸 Promise 并可能终止宿主进程

🔴 严重程度:高(P1)
closeInputOn 在 stdout 的 EventEmitter 回调中直接执行,没有 try/catch,异常不会转化为 runProcess 的 Promise rejection,而会作为未捕获异常逃逸。这样 modelRunnerOf.complete() 的 finally 也无法可靠执行,临时目录和子进程可能遗留,整个插件宿主还可能退出。

Finding:finding_a775c9e8ba89aee8d871e1d8

A throwing closeInputOn callback escaped the stdout EventEmitter, which could terminate the host before model completion cleaned its private files. Keep the original error, stop the owned process tree, and normally finish when the child closes. Preserve the same error through the existing timeout and process-error paths, and do not start a Windows handshake process when tree termination is unavailable.

Add regressions for child/grandchild termination, model error identity and private-file cleanup, and the missing Windows termination backend. The two exception tests failed uncaught before the fix. All five model-executor tests pass on Windows Node 22 and 26; each full Windows gate passes 531 common/MiniMax tests (10 platform skips), 14 ZCode tests, and packaging of all ten hosts. Existing assertions and deadlines are unchanged.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 17 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="4282859c1fe33334881f946821f7fb5a4cd5c989",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 4282859c1fe3

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 17 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P1] 确认型会话结束会永久跳过无缓存报告的资产 — pendingReportsOf() 只返回带 pendingReport 的未报告资产,但返回的空数组也是真值,因此确认�...(truncated) · lib/app/session-end.js · advisory_df955bcda2d4815f99f59d4a
  • [P2] 原生终态尚不可用时提前关闭回合,迟到完成事件无法补偿 — reasonOfNativeStatus() 未得到终态时,新增代码仍用 error 或调用方的 as 调用 turnEnded()。该...(truncated) · lib/app/turn-end.js · advisory_83ad7210986bb32ae6ab5289
  • [P2] 未换行的握手响应可能让模型进程永久等待 stdin EOF — 启用 closeInputOn 后只执行 stdin.write(),仅对换行终止的 stdout 行调用匹配器并关闭 stdin。��...(truncated) · lib/runtime/process/spawn.js · advisory_48fe0fc326a706369871d3c4
  • [P2] 空的数据根目录变量使 provider 配置源变为 null — homeOf() 用 trim() || nativeHomeOf(env),空白值会回退到用户目录;但 providerConfigOf() 用 trim() ...(truncated) · hosts/zcode/model.js·advisory_6a59c0a4026fa80be87d42d8`
  • [P2] 自定义数据根目录未用于原生会话数据库 — homeOf()、provider 配置和插件状态目录都会采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认数据...(truncated) · hosts/zcode/model.js · advisory_9d2aea41a2b3c4f6a31b1161
  • [P2] 恢复扫描将尚未出现的原生终态当作成功完成 — turnStatus() 返回空值、running 或未知状态时,reasonOfNativeStatus() 不产生 reason,循环直接跳��...(truncated) · lib/app/session-start.js · advisory_f9384b009abaa12a8a72e36e
  • [P3] spawnSync 阻塞父事件循环,新增代理测试可能在请求记录到达前断言 — spawnSync() 会同步阻塞宿主 Node.js 事件循环。fake worker 中的 requests.postMessage(...) 只是异步��...(truncated) · test/hosts/dsh/proxy.test.js · advisory_e583f5d9a2151cfd4cfe9e11
  • [P3] pending 回合在 owner 退出后最多只获得 30 秒额外终态窗口 — owner 存活时 pending 可持续监控;但 owner 一旦消失,退出条件同时要求“监控已满 5 分钟”...(truncated) · lib/runtime/turn-monitor.js · advisory_ebc29586bada8c208b814935
  • [P3] 代理调用链测试存在时序缺口,不能作为可靠覆盖证据 — 测试使用 spawnSync 阻塞父进程事件循环;代理请求记录依赖父事件循环处理时,子进程退��...(truncated) · test/hosts/dsh/proxy.test.js · advisory_8a8e42dd1338094af95c9ad9
  • [P3] 原生终态迟到时,回合会被提前结束且无法补偿 — turn-end 在原生终态尚不可用时关闭回合;恢复扫描又把“终态尚未出现”解释为成功完成�...(truncated) · lib/app/turn-end.js · advisory_b4540413ef530f337757643a
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:client_orchestration_01:state_chain_ff9609a9143112d6
  • [P3] 异步读取宿主记录期间可能消费下一回合的无标识 notes — 本次修改把 await recordOf(opened) 移到 notes.take(sessionId) 之前。等待期间若同一 epoch 的下一��...(truncated) · lib/app/turn-end.js · advisory_204bc8b7a5a16d39c86b8186
  • [P3] 无回合标识的 notes 可被异步读取串到下一回合 — 宿主记录读取是异步的,但 notes 没有携带 turnId 或 epoch。生产端完成读取前若下一回合已�...(truncated) · lib/app/ports.js · advisory_4f32f4da227fd7e18be2cfc7
  • [P3] 旧 monitor 可在相同 turnId 被复用时关闭新 session epoch — monitor 只用 open 和 turnId 判断当前 session 是否仍属于原回合,没有保存或比较启动时的 se...(truncated) · lib/runtime/turn-monitor.js·advisory_e6387941ead8068d5c23886c`
  • [P3] 旧 monitor 可跨 session epoch 关闭新回合 — monitor 的身份边界看起来只有 turnId,而 session 状态允许新 epoch 复用相同 ID。旧 monitor 的异...(truncated) · lib/runtime/turn-monitor.js · advisory_63e6fd96784c7ff85f508ab8
  • [P3] 自定义数据根目录没有贯穿 provider 与原生会话数据库 — 配置生产端允许空数据根目录使 provider 配置源变成 null,同时原生会话数据库没有使用自�...(truncated) · lib/app/background.js · advisory_a5391568b10261bb4905301d
  • [P3] 恢复任务对迟到原生终态是否形成重试闭环未能证明 — 当前 diff 只把 recoverNativeTurns 接入后台 worker;缺少 lib/app/session-start.js 函数体和任务调度...(truncated) · lib/app/background.js · advisory_5963a18ee9bc777e0ac83b3d

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 4282859c1fe3

An older turn waiting for its host record could consume a later turn's untagged check notes and edit baselines. Store evidence by the plugin epoch and turn counter, snapshot only the opened generation, and leave failed-reader claims recoverable with their original hashes. Keep ambiguous legacy files in their own namespace and bound abandoned evidence claims with the existing TTL; report-queue claims are unchanged.

Carry prompt-opened and tool-recorded identities into monitor tasks instead of adopting the state current after asynchronous work. Pin that identity through polling and atomic turn close, separate generation lock keys, and prevent a delayed Git HEAD read from updating a replacement epoch.

Regressions exercise real prompt/tool/turn flows, missing native turn IDs, same-ID epoch replacement, delayed worker startup, reader rejection and claim recovery, legacy namespace isolation, and evidence-only pruning. Joint driver/app/store/monitor/ZCode tests pass 140/140 on Windows Node 22 and 26. The complete Windows gates pass 542 common/MiniMax tests (10 platform skips), 14 ZCode tests and packaging of all ten hosts on both versions.
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 10 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="4028a69f42ca1119cbad7a366caac937e1cfbf70",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 4028a69f42ca

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 10 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 无换行握手响应会使模型调用永久停留在运行中 — 启用 closeInputOn 后,代码只执行 stdin.write();匹配器仅接收按 \n 拆出的完整行。最后一�...(truncated) · lib/runtime/process/spawn.js · advisory_de48eec2d349cc481721b782
  • [P2] 空白数据根目录会使 provider 配置源失效 — homeOf() 用 trim() || nativeHomeOf(env),空白值会回退到用户目录;providerConfigOf() 却用 trim() ?...(truncated) · hosts/zcode/model.js·advisory_560f73fee79a2c29139e0474`
  • [P2] 自定义数据根目录未用于原生会话数据库 — homeOf() 和 provider 配置采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认数据库路径始终基于 US...(truncated) · hosts/zcode/model.js·advisory_1597b995890719e9347de2b4`
  • [P2] 同步等待阻塞了被测代理的事件循环 — spawnSync() 会阻塞当前 Node.js 线程的事件循环;若 startProxy(t) 在当前测试进程中运行 HTTP ��...(truncated) · test/hosts/dsh/proxy.test.js · advisory_f570a1a7ce0d8e5d44a85fe4
  • [P2] 恢复检查早于原生终态时不会自动重试 — 当 reasonOfNativeStatus() 返回空值时,恢复任务直接跳过该 turn 并成功结束,没有重新调度、�...(truncated) · lib/app/session-start.js · advisory_e214582e74aefd762645110a
  • [P3] 原生终态尚未写入时会提前关闭确认型回合 — 未读到原生终态时,代码仍以 as 的回退原因调用 turnEnded() 并关闭 open turn;该次结束不��...(truncated) · lib/app/turn-end.js · advisory_305e8ea1fc14fda6a227d31c
  • [P3] reset/clear 后可能缺少 in-flight completion 防护 — 状态链探针:reset/clear path touches async state but no abort/generation fence is visible for in-flight completion...(truncated) · test/app/memory-ports.js · slice:data_integrity_01:state_chain_a02dcabaca94d6c8
  • [P3] 升级后的 scoped 读取不会消费旧 namespace 中的回合数据 — 新接口约定无 scope 调用保留在 legacy session namespace,而 recordTurn()、recallWhenStuck() 现改为��...(truncated) · lib/app/turn-end.js · advisory_8fe7ded691de78205ece28bf
  • [P3] 复用 turn ID 的旧终态可能关闭新 generation — 新代码用 turn/sessionEpoch 校验本地 session 没有换代,但 ports.turnStatus() 仍只按 sessionId/turnI...(truncated) · ``lib/runtime/turn-monitor.js`` · advisory_63555110367369d75e3abe79`
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:release_integrity_03:state_chain_8ea351ae8713ea3c

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 4028a69f42ca

forrestlinfeng and others added 2 commits November 9, 2026 16:18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macOS temp folders are reached through the /var symlink, so the worker entry and the scratch workspace a child sees resolve to /private/var and the fixtures never matched them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Sentinel 正在审核此变更,尚未形成最终结论。

大 PR 拆片审核中

  • Sentinel 判断这个 PR 规模较大,已经拆成多个 slice 分别审核,所以会比普通 PR 花更久。
  • 当前 check 会保持进行中;这不是绿色通过,也不是红色阻塞。
  • Sentinel 会继续完成 slice review、Cross-Slice Verifier 和聚合;如果后续发现红区问题,会更新本 head 的审核结论。
  • 规模等级: large
  • Slice 数量: 14

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="d23f10ededee22911aa81b1e88cf022278223364",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 d23f10ededee

@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。

另有 14 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。

审核覆盖提示: 2 个 hunk/条目缺少完整输入;它们不作为 bug 报告。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-agent-plugin"、pr_number=54、head_sha="bd90c21104d645fbd91233d5b79b85489becca4d",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 bd90c21104d6

@evomap-aiqa-bot

Copy link
Copy Markdown

Sentinel 保留了 14 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
开发 agent:请 review 以下 advisory,并逐条给出“已验证无风险 / 已修复 / 转为后续事项”的结论;不要只做整体确认。

  • [P2] 空白 ZCODE_DATA_BASE_DIR 使 provider 配置源失效 — homeOf() 使用 trim() || nativeHomeOf(env),空白值会回退到用户目录;providerConfigOf() 却使用 tr...(truncated) · hosts/zcode/model.js·advisory_7a66f037eb56e7d2d64bcc68`
  • [P2] 一次性恢复检查不会消费迟到的原生终态 — reasonOfNativeStatus() 返回空值时,恢复循环直接跳过该 turn 并成功结束,既不重试也不重新��...(truncated) · lib/app/session-start.js · advisory_ccd16b6565a69210f7a97fd7
  • [P2] 原生终态未就绪时仍会提前关闭回合 — reasonOfNativeStatus() 返回空值后,代码仍以回退的 error 调用 turnEnded()。该调用先关闭当前...(truncated) · lib/app/turn-end.js · advisory_703b628f56e408fe7bccfe91
  • [P2] 无换行握手响应不会关闭 stdin — closeInputOn 只检查由换行符终止并进入 lines 的完整行;stdout 最后一段被保存在 incompleteLi...(truncated) · lib/runtime/process/spawn.js·advisory_5009d0dfc19ec5b74bafb421`
  • [P2] 同步子进程可能阻塞测试代理,导致测试超时 — spawnSync() 阻塞当前 Node.js 主线程的事件循环;若 startProxy(t) 的 HTTP 请求处理器运行在该��...(truncated) · test/hosts/dsh/proxy.test.js · advisory_f6def4ef794944d943f1db8c
  • [P2] 自定义数据根目录未同步用于原生会话数据库 — homeOf() 和 provider 配置会采用 ZCODE_DATA_BASE_DIR,但 databaseOf() 的默认值始终从 USERPROFILE/...(truncated) · hosts/zcode/model.js·advisory_778cffce647ab0692795fa79`
  • [P3] reset/clear 与异步 completion 之间缺少代际约束 — 若 reset/clear 仅清除当前 ledger,而已启动的异步操作仍可提交 completion,旧操作可能在清理��...(truncated) · lib/injected-ledger.js · advisory_72d605fb2b348165df4c9f78
  • [P3] reset/clear 后可能缺少 in-flight completion 防护 — 状态链探针:reset/clear path touches async state but no abort/generation fence is visible for in-flight completion...(truncated) · test/app/memory-ports.js · slice:data_integrity_01:state_chain_a02dcabaca94d6c8
  • [P3] 可选的 modelForTurn 使跨账户隔离默认失效 — 隔离范围依赖宿主提供 modelForTurn,但调用链允许宿主不实现该能力。消费者在缺失映射时...(truncated) · lib/app/ports.js · advisory_bbe0ec647bdd35ca64a706a3
  • [P3] 回合提前关闭后,迟到的原生终态没有可靠消费入口 — turn-end 在原生终态尚未就绪时仍可关闭回合;后续恢复只执行一次,且 background 没有针��...(truncated) · lib/app/turn-end.js · advisory_4e5d803d0632207a78ed957c
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/store/file-stores.js · slice:release_integrity_03:state_chain_8ea351ae8713ea3c
  • [P3] 未提供 modelForTurn 的宿主可绕过跨账户范围隔离 — canJoinRange() 已定义模型配置及 selection 必须一致,但两个调用点都仅在 modelForTurn 存在时�...(truncated) · lib/app/turn-end.js · advisory_67e9c7c812ffc582ec9b87f3
  • [P3] 覆盖状态将跳过文件计入成功切片 — size_report.skipped_files 明确列出 4 个未审查文件,但这些文件仍出现在状态为 succeeded 的切�...(truncated) · hosts/zcode/dist/plugin.json · advisory_cf949a3c0995fbbb5e776421
  • [P3] 原生终态迟到时恢复任务可能缺少重试入口 — 本 PR 新增了恢复任务的后台分派,但所给材料不包含 recoverNativeTurns() 的当前实现。需要��...(truncated) · lib/app/session-start.js · advisory_d165cbcdd2c3309e7940defc

需要完整证据时,可用行末 finding_key 查询 Sentinel PR review context。

由 Sentinel 审核 · 目标提交 bd90c21104d6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant