Skip to content

feat: add native MiniMax Code host support - #19

Open
imxyanua wants to merge 9 commits into
EvoMap:mainfrom
imxyanua:codex/minimax-host
Open

imxyanua wants to merge 9 commits into
EvoMap:mainfrom
imxyanua:codex/minimax-host

Conversation

@imxyanua

@imxyanua imxyanua commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Add MiniMax Code as a native host of the existing plugin. Local installation supports recall, verified tool-result reporting, draft distillation, persistent preferences, background commands and recovery after a host exits without SessionEnd.

.minimax-plugin/plugin.json   native manifest
hosts/minimax/               hooks, evidence, session model route and headless completion
scripts/install-minimax.mjs  staged install/update with rollback
lib/runtime/                 state preservation, command jobs and Windows process support

The adapter captures and validates the session's provider/model/variant, uses a private temporary configuration for tool-free distillation, and prevents recursive hooks. Failed or cancelled turns cannot become verified candidates. Publishing a draft remains an explicit user action.

The release installer reuses a validated dist/minimax bundle and its stamped version; an explicit --version builds source instead. Updates retain preferences and drafts. Shared persistence now refuses to overwrite unreadable/invalid state and never deletes the previous state file before a replacement succeeds.

Add Linux and Windows test matrices on Node 22/26; both are required by the existing tag publication job. Refresh the development lockfile to the declared Core version and the patched fast-uri release. No generated packages or private acceptance records are committed.

Evidence

  • Before: an EBUSY draft read became an empty table and lost the old draft; repeated EPERM replacement errors deleted the previous file; a release bundle stamped 9.8.7 was installed as source version 1.0.0.
    After: regression tests preserve the exact previous state on failure, release locks and temporary files, retry transient sharing denial, preserve the released bundle/version, and retain user data across updates and rollback.

  • Before: MiniMax had no host manifest, native hook adapter or install/update route in this repository.
    After: packed hooks exercise recall/reporting, command settings/jobs, model-route validation and draft recovery using temporary profiles and loopback fixtures.

  • Before the final rebase: full Linux npm test passed 691/691 on Node 22.19.0 and 26.0.0; Windows npm run test:minimax passed 329, with 9 existing POSIX skips, on both versions. All nine hosts packed; dependency audit reported zero vulnerabilities.

  • On the rebased PR head: Windows npm run test:minimax and npm run pack passed on Node 22.19.0 and 26.0.0: 328 passed, 9 existing POSIX skips, 0 failures per run. The count changed because the upstream Recipe change replaced tests; this PR does not remove tests.

  • The post-rebase local Linux rerun was blocked before test execution by WSL service WSAETIMEDOUT. PR Linux CI must validate the rebased head; the earlier Linux results are not presented as a run of this head.

  • Native MiniMax Code 0.7.4, before the final rebase, with isolated profiles and fixture model/Proxy endpoints: install/update/remove, preferences, background command results and evolution checkpoint passed. An actual check failed, an edit made the same check pass, and killing the owned host without SessionEnd recovered exactly one unpublished draft with zero publication calls.

  • Current fix head efd41c2 accepts MiniMax's native empty default variant and aborts pending failed-check recall requests at deadline, with regression tests. GitHub workflow run 63 passed for this commit.

  • Local validation of this fix snapshot: Linux Node 22.23.4 and 26.13.0 each 694/694 full tests plus all nine bundles; Windows Node 22/26 final scoped gates each 332 passed, 9 existing POSIX skips plus packing. Earlier Windows Node 22 attempts hit ELOCKED/cleanup timeout; baseline and isolated comparisons passed, so attribution remains unverified and those failures are retained.

  • Native MiniMax 0.7.4 reread the actual empty-variant session records and completed on the captured provider route with an isolated loopback backend. Shared Grok-profile/runtime delayed-Proxy reproducer now closes in 0.7s instead of 13.4s; this is fixture runtime evidence, not native Grok acceptance.

Reproduce: npm ci && npm test && npm run pack on Linux; npm ci && npm run test:minimax && npm run pack on Windows. Tests need no personal account, credentials or globally installed MiniMax CLI.

Shared audit fixes are reviewed separately in PRs #20–#29; they are not all included in this MiniMax branch. No PR was merged and no release/tag was created.

Scope and cuts

This PR covers the complete MiniMax native adapter, direct install/update, shared runtime requirements, regression tests and release gates. It does not add a separate plugin repository or a reduced MCP-only edition.

Marketplace submission is not required for the requested direct-install route; its current intake excludes native hooks. No release tag, published package, acceptance log or developer-machine configuration is included.

Known limitation: Desktop 3.1.6 presents intercepted commands as Request failed, with the result available in its error tooltip. This PR does not change that native presentation. Full final Desktop flow with a real model, native macOS acceptance and real Hub publication remain unverified. Maintainers should assess these disclosed limits and the required PR checks before merging or releasing.

  • Final combined validation (immutable source SHA256 1333f0491d643b2fed2188e6c553d0007cf9bdfd88db0d4235c9f50a2e13b610): Linux Node 22/26 full 757/757 each, pack nine hosts; Windows Node 26 scoped 394 passed / 9 existing skips, pack nine hosts. Windows Node 22 scoped 393 passed / 1 after-hook cleanup failure / 1 cancellation / 9 skips; packing was not run after that failure. The MiniMax body saved its draft and settled its candidate, and report delivery later settled, but cleanup exceeded its unchanged 20s wait. Cause remains unclassified; no rerun, assertion or timeout relaxation. All 388 source files kept their hashes after all four cells. This is a local acceptance gap, separate from each PR's successful CI.

Merge Danger

Door: two-way

Code can be reverted; the installer keeps user state outside the replaceable package and restores the previous package if activation fails. Invalid/unreadable state now reports an error instead of silently resetting data; it needs repair before the operation can proceed.

Blast Radius: shared-runtime

State, deadlines, process handling and headless completion are shared with existing hosts. Full Linux tests, the Windows MiniMax/common-runtime gate and packing all nine hosts remain in place. No quality gate is removed or bypassed.

@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 a83ab6e19feb

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P3] 可选记录配置为 null 时校验函数直接崩溃 — 新增条件只排除了 undefined,但没有排除 null。当 profile.modelRecord === null 时,表达式会继...(truncated) · lib/agent/profile.js · advisory_514dfd1e150acc3640bbe990
  • [P3] Windows 缺少 SystemRoot 时非 shim 进程能启动但无法被终止 — 新版 taskkill() 在模块加载时无法从 process.env.SystemRoot/WINDIR 生成 SYSTEM32 就直接不执行;�...(truncated) · lib/runtime/process/spawn.js · advisory_0882e10f0ff61659f18475ed
  • [P3] SystemRoot 可将 PowerShell 调用重定向到攻击者控制的可执行文件 — 新增实现将可执行 PowerShell 的根目录直接取自可继承的 process.env.SystemRoot 或 WINDIR,仅验�...(truncated) · lib/runtime/process/windows.js · advisory_7d1d43526efea0f611610478
  • [P3] evolver-drafts 的前台/后台判定不一致 — promptCommandOf 明确将无参数的 evolver-drafts 返回为前台命令,但 isBackgroundCommand 只按命令�...(truncated) · hosts/minimax/commands.js · advisory_73a1959bc433c4a55470c62b
  • [P3] 取消和执行期限仅发送 AbortSignal,无法终止不响应信号的任务 — 取消和超时都只调用 controller.abort(),随后仍无限期等待 await execute(...)。如果执行器、SDK...(truncated) · lib/runtime/command-jobs.js · advisory_8fa68639b77c0cb022f2025e
  • [P3] 多个运行环境的设置快照会与持久化配置永久分叉 — configure() 在锁内重新读取并原子写入权威文件,但写完后只用 Object.assign 更新当前 settin...(truncated) · lib/runtime/settings.js·advisory_615d163f6b4382122cd7a500`
  • [P3] 提前结束时可能产生未处理的可取消计时器异常 — 当前 PR 将 AbortSignal 传给 recipeCutoff,但没有为这个独立的 Promise 添加 .catch() 或纳入已��...(truncated) · lib/app/prompt.js · advisory_b51f87fb4efaa3210bd7f80a
  • [P3] 安装回滚可能覆盖另一个并发安装已提交的版本 — 安装流程没有跨进程锁。进程 A 将旧目标移到自己的备份后,如果激活失败,而进程 B 已成...(truncated) · scripts/install-minimax.mjs · advisory_25cc35bf616c6a05e63c478f
  • [P3] 尚不可用的 Node 26 会使所有版本发布被跳过 — PR 将尚需确认可由 actions/setup-node 获取的 Node 26 加入必过矩阵,同时把整个矩阵设为 publis...(truncated) · ``.github/workflows/release.yml`` · advisory_da94e2357b958b4841f8ae95`
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_04:state_chain_8cc2bc92dff5cae0
  • [P3] 模型查询可能选中过期的 session 定义 — 查询只按 session_id 连接 local_runtime_session_agent_definitions,没有限定当前/最新定义,也没有...(truncated) · hosts/minimax/model.js · advisory_7ba4d764e6945b33d93935aa
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 默认退出策略可能导致 Hook 进程因其他活动句柄长期不退出 — PR 将默认 exit 从立即执行 process.exit 改为仅设置 process.exitCode,同时只对 stdin 调用 unr...(truncated) · ``lib/channels/hook/runner.js`` · advisory_977a7aef7f300299cd1bc499`

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

由 Sentinel 审核 · 目标提交 a83ab6e19feb

Comment thread lib/runtime/store/file-lock.js Outdated
return;
} catch (error) {
if (!['EEXIST', 'EACCES', 'EPERM', 'EBUSY'].includes(error?.code) || Date.now() >= deadline) throw error;
pause(LOCK_RETRY_MS);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Windows 上已有状态文件将无法再次写入

🔴 严重程度:高(P1)
Windows 的 renameSync(temporary, target) 通常不能覆盖已存在的目标,会持续返回 EEXIST 或 EPERM。新增循环只是重复同一个必然失败的操作,直到超时抛错;旧实现会先删除目标再重命名。

Finding:finding_f5b2397bafa874b30b5db635

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 efd41c2e788d

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] 取消和执行期限无法约束不响应 AbortSignal 的执行器 — 取消和期限处理仅调用 controller.abort(),随后仍无期限等待 await execute(...)。只要具体命令...(truncated) · lib/runtime/command-jobs.js · advisory_54dd2202e78852254c0b6e4c
  • [P2] 自然退出缺少兜底,残留句柄可永久阻塞 hook — 本次修改把确定终止的 process.exit(0) 改成仅设置 process.exitCode,同时只对 stdin 执行 unref()...(truncated) · lib/channels/hook/runner.js·advisory_86f2384a2e2c7132990fcf50`
  • [P2] 模型查询未限定代理,可能选择同会话中的错误模型 — 查询仅用 d.session_id = s.session_id 连接并按 s.session_id 过滤,没有限定当前 agent/definition。��...(truncated) · hosts/minimax/model.js · advisory_b66f2dd200de84b24d865ee9
  • [P2] 缓存的 Windows 祖先进程快照使失主任务无法被回收 — readProcess 通过 windows ??= windowsAncestorsOf(process.ppid) 在首次定位时永久缓存祖先表。后续 own...(truncated) · lib/runtime/process/owner.js · advisory_2bae85d607ca027ecf304794
  • [P3] 可选记录配置为 null 时校验函数直接崩溃 — 新增条件只排除了 undefined,但没有排除 null。当 profile.modelRecord === null 时,表达式会继...(truncated) · lib/agent/profile.js · advisory_ae0d27f0e8d28178ff725e24
  • [P3] Windows 缺少 SystemRoot 时直接启动的进程无法被取消 — SYSTEM32 在模块加载时仅由全局 process.env.SystemRoot/WINDIR 固定计算。若其不可用,非 shim 命�...(truncated) · lib/runtime/process/spawn.js · advisory_bb1c391f97f4603d900cacb6
  • [P3] macOS 临时目录符号链接会令无环境变量的 headless 检测失效 — 检测仅对 Windows 做路径归一化;macOS 上常见的 /var 到 /private/var 符号链接会使 process.cwd()...(truncated) · lib/runtime/headless.js·advisory_90e45e988830174e5eb88bab`
  • [P3] Hook 子进程异常时测试无法按预算终止 — 新增 run() 只等待子进程的 close 事件,没有定时器、取消信号或进程树清理。hook() 中的...(truncated) · test/hosts/minimax/hooks.test.js · advisory_9f797fcab9c7a3218f344490
  • [P3] 发布测试要求未随 PR 更新的 Windows 发布检查 — 当前 PR 只修改了测试断言,没有修改任何 workflow 文件;断言却把发布 job 的依赖从 test 改...(truncated) · test/release.test.js · advisory_cfc5d8a09de198386a41abb9
  • [P3] 安装已提交后清理失败会把成功操作报告为失败 — 新包重命名到正式路径后立即设置 committed = true 并准备返回成功,但 finally 中的 rmSync(st...(truncated) · scripts/install-minimax.mjs·advisory_f1db70d596317deea3017841`
  • [P3] 无参数 evolver-drafts 的前后台调度判定互相矛盾 — promptCommandOf() 将无参数 evolver-drafts 明确返回为不带 background 的前台命令,但 isBackground...(truncated) · hosts/minimax/commands.js·advisory_e4cd515aef0e3c9148cd95a5`
  • [P3] 环境变量可重定向所有者探测所执行的 PowerShell — 新增实现将可执行文件根目录直接取自 process.env.SystemRoot 或 process.env.WINDIR,只验证其为�...(truncated) · lib/runtime/process/windows.js · advisory_ad1b09003ae15489d9215edc
  • [P3] AbortSignal 取消计时器可能产生未处理拒绝,导致命令进程异常退出 — 当前 PR 将同一个可取消的 AbortSignal 传给了 recipeCutoff 和超时竞争用的 ports.clock.sleep()。...(truncated) · lib/app/prompt.js · advisory_67798f8882135445f795fcc0
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67

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

由 Sentinel 审核 · 目标提交 efd41c2e788d

@forrestlinfeng forrestlinfeng left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code review — rework requested

The MiniMax adapter files themselves are close to mergeable, but this PR also changes shared runtime behaviour for every host, and the installer has a bug.

Blocking

  1. Installer silently no-ops via a symlinked path — scripts/install-minimax.mjs:70 compares resolve(process.argv[1]) with fileURLToPath(import.meta.url). The first isn't realpath-resolved, so on macOS (/var → /private/var) or any symlinked checkout, the script exits 0 doing nothing. This is why test/hosts/minimax/install.test.js fails on macOS (CI only runs Linux/Windows). Use realpathSync like scripts/pack.mjs does.
  2. Shared state now fails closed, silently, for all hosts — lib/runtime/store/file-lock.js: readState throws on bad JSON / wrong shape / EBUSY, and updateState throws ELOCKED after 2 s instead of writing unguarded. lib/agent/driver.js handle() swallows every error and returns the empty reply, so one corrupt store or a busy moment with parallel hooks turns off recall/recording for Codex, Cursor, Grok, etc. with no visible message. Please move this to its own PR and surface the error (status or user message).
  3. Windows: every hook of every host now runs a PowerShell CIM query (up to 2.5 s) — lib/runtime/process/owner.js + process/windows.js. Previously owner lookup returned null on Windows; now orphan detection switches on for all hosts there, untested (the new Windows CI job only runs test:minimax). Scope it to the MiniMax profile or split it out with per-host tests.
  4. Hooks/workers no longer force exit — lib/channels/hook/runner.js and bin/worker.mjs replace process.exit with process.exitCode. Any lingering timer/socket now keeps the hook process alive on every platform; the Connection: close / abort additions are compensating for it. The rationale is Windows-only, the change is global.

Design

  1. evolver-status now does three jobs — lib/app/commands/status.js adds job listing/cancel and settings writes. These only work on MiniMax, and on other hosts /evolver-status foo changes from ignored to a usage error. Suggest separate evolver-jobs / evolver-config commands with a hint, parsed through the existing hint rule.
  2. New task kinds bypass the shared task table — lib/channels/worker/runner.js handles command: / turn: itself instead of via WORK in lib/app/background.js. A resident host declaring turnEnd.statusRecord would be silently ignored; a turn: payload that fails to parse returns false and drops the following tasks.
  3. lib/runtime/command-jobs.js — status goes through change(), so a read rewrites commands.json; the 200 ms poll cancels the running command on any read error, which a concurrent status rewrite can trigger on Windows (sharing violation).

Duplication

  1. promptCommandOf in hosts/minimax/commands.js is the 4th copy of the prompt-command parser (codex, grok, qoder) — past the rule of three, please extract to lib/agent/commands.js. The pending-request abort block is identical in lib/app/prompt.js and lib/app/stuck-recall.js. FAST hard-codes a command list instead of deriving from forAgent.

Nits

  • SQLite path defined twice (minimax/model.js, profile.js); profile.js imports ./paths.js twice; headless.js re-exports dataDirOf only for a test.
  • modelRecord is top-level in the profile while statusRecord is under turnEnd.
  • .minimax-plugin/plugin.json at repo root vs. other hosts' manifests under hosts/<h>/dist.
  • @evomap/evolver-core bump 2.0.38 → 2.0.47 is unrelated to MiniMax.
  • process/windows.js:12 is a ~730-column inline PowerShell script; build it from a multi-line constant. New code uses x => where the repo writes (x) =>.

Suggested path: fix (1), split (2)–(4) into separate PRs with cross-host tests, split the jobs/config subcommands out of evolver-status, then the adapter can land.

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 8b4062507c96

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] Windows 所有者快照永久缓存,宿主退出后任务无法判定为失主 — windows ??= windowsAncestorsOf(process.ppid) 只在首次检查读取进程表。之后 locate() 始终查询同一�...(truncated) · lib/runtime/process/owner.js · advisory_baaf1c02fa412ca98d644c5c
  • [P2] 残留句柄会阻止 Hook 在输出响应后退出 — 当前改动把默认的 process.exit(0) 替换为设置 process.exitCode = 0。后者只决定进程最终退出码...(truncated) · lib/channels/hook/runner.js · advisory_717d28f56d4a767b73477b05
  • [P3] 可选记录配置为 null 时校验器直接抛出异常 — 新增条件只排除 undefined;值为 null 时仍会读取 .file,导致 TypeError,无法按该函数既��...(truncated) · lib/agent/profile.js · advisory_715fef64aa93b7e096aeaa01
  • [P2] 模型查询未限定当前代理,可能读取同会话中的错误 provider — 查询将 local_runtime_session_agent_definitions 仅按 session_id 连接,没有限定当前 agent/definition。�...(truncated) · hosts/minimax/model.js · advisory_8eba6dab02d57be49dfcb5dc
  • [P3] 发布测试新增了当前工作流不存在的 Windows 依赖 — 测试将发布 job 的依赖从 needs: test 改为必须包含 windows-minimax,并要求存在 Windows 矩阵 job...(truncated) · test/release.test.js · advisory_083aea43733b65088f24038f
  • [P3] Windows 下含空格路径的 .cmd shim 无法启动 — 新增的 cmdLine() 将命令路径直接拼入 cmd.exe 的命令行,只转义 cmd 元字符而未引用整个可�...(truncated) · lib/runtime/process/spawn.js · advisory_25fbbb9a1077c6af253cf480
  • [P3] 取消和执行期限无法收敛不响应 AbortSignal 的后台命令 — cancel 和 deadline 只调用 controller.abort(),之后仍无期限等待 await execute(...)。若 SDK、桥接调...(truncated) · lib/runtime/command-jobs.js · advisory_7bf18d1e52352c75843fceab
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 空配置会生成没有映射值的 YAML 合并键 — headlessConfigOf 会把空白和注释全部移入 prefix,使 lines 为空,但仍输出裸 <<:。下一行��...(truncated) · hosts/minimax/headless.js · advisory_88479d97ff9d3cc8c68de7e6
  • [P3] 缓存的 Windows 祖先快照可能使失主任务无法被回收 — readProcess 通过 windows ??= windowsAncestorsOf(process.ppid) 延迟创建祖先表,但创建后永久复用。�...(truncated) · lib/runtime/process/owner.js · advisory_6de84471fa48fce3695410be
  • [P3] 设置文件运行期间失效时,内存状态不会进入保守禁用态 — error 和 settings.error 只在构造时计算。后续 configure 中的 readSaved 失败仅抛出 INVALID,�...(truncated) · lib/runtime/settings.js · advisory_d79dfc4fffa388a6b6b1a89b
  • [P3] evolver-drafts 的前后台判定互相矛盾 — 解析器把无参数 evolver-drafts 明确标记为前台命令,但独立的后台判定函数仅按命令名判断...(truncated) · hosts/minimax/commands.js · advisory_9c75dcac4cf47255f2937c4a

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

由 Sentinel 审核 · 目标提交 8b4062507c96

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 2c0ef89627f0

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] 不响应 AbortSignal 的执行器会永久占用命令槽位 — 取消和期限处理只调用 controller.abort(),之后仍无期限等待 await execute(...)。若命令实现或...(truncated) · lib/runtime/command-jobs.js · advisory_1a258693783400457cbeee6f
  • [P2] Windows 祖先进程快照不会刷新,宿主退出后仍可能被判定为有效所有者 — windows ??= windowsAncestorsOf(process.ppid) 将首次 CIM 快照永久保存在探测器闭包中。后续检查仍��...(truncated) · lib/runtime/process/owner.js · advisory_ba1bf12d493d8982d3f1b537
  • [P3] 可选记录配置为 null 时校验器崩溃 — 新增条件只排除了 undefined,却直接访问可选对象的 .file 和 .query。传入 null 时会在配�...(truncated) · lib/agent/profile.js · advisory_3a236f219abe6c4fe3d8c7d2
  • [P2] 模型查询未限定当前代理,可能选中错误的 provider 路由 — SQL 仅以 session_id 连接 local_runtime_session_agent_definitions,没有限定当前 agent 或 definition。一...(truncated) · hosts/minimax/model.js · advisory_5bb866583a1127f5a07c7bb4
  • [P3] 发布测试要求 Windows 门禁,但 PR 未修改发布工作流 — 当前 PR 将发布依赖断言从 needs: test 改为 needs: [test, windows-minimax],并新增对 Windows Node.js ...(truncated) · test/release.test.js · advisory_eff1f457205dd46babab088d
  • [P3] Windows 进程路径缺失时未回退到进程名,祖先进程匹配失效 — CIM 返回空的 ExecutablePath 时,新增代码将其强制转换为空字符串。ownerProbeOf 随后以 info.p...(truncated) · ``lib/runtime/process/windows.js`` · advisory_1f38e2fcfa6b2ceb0afce454`
  • [P3] 空配置会生成无效的 YAML merge 节点 — 函数无条件输出 <<:,但原配置没有任何内容可缩进到该 merge 键下时,下一行 agents: 成为...(truncated) · hosts/minimax/headless.js · advisory_e4bc5f85990a1b671d826f20
  • [P3] 无参数 evolver-drafts 的前后台判定相互矛盾 — 解析器对无参数的 evolver-drafts 明确返回未标记 background 的前台命令;但同一 profile 配置�...(truncated) · hosts/minimax/commands.js · advisory_6c6094b9e00d18d89a07f318
  • [P3] 可伪造的临时目录标记可绕过 headless 保护 — 新 fallback 不再只信任显式的 EVOLVER_HEADLESS=1,而是将以下可外部影响的条件组合视为可信��...(truncated) · lib/runtime/headless.js · advisory_a83d0dd6139d0f8329b78d63
  • [P3] headless 信任标记跨宿主边界可被伪造 — runtime 通过临时目录标记判断受信 headless 环境,而 Minimax 宿主消费该判断执行保护逻辑;若...(truncated) · lib/runtime/headless.js · advisory_eebd4360157422f6e59f88b4
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 异步设置读取可能向上层返回过期偏好 — scope_release_integrity 报告“修改偏好后可能返回旧的有效值”,release_integrity_05 同时报​��...(truncated) · lib/runtime/settings.js · advisory_cd8a10af7b6ea00dfc4d6c65
  • [P3] 无参数命令在打包钩子与 worker 间可能改变执行模式 — evolver-drafts 无参数调用的前后台判定相互矛盾;命令解析、worker 启动及打包后的 hook 配置...(truncated) · hosts/minimax/commands.js · advisory_295acfbb9e15a3be821e8347
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 生成制品被纳入分片但实际覆盖不完整 — 覆盖报告把多个发布制品列为 skipped,但分片摘要又把它们列入已成功审阅的文件集合,容�...(truncated) · hosts/minimax/dist/pack.json · advisory_f42d605c28baa4f0d484fd6e
  • [P3] 读取失败可能破坏 last-known-good 回退契约 — 设置层失败分支可能清空 last-known-good 数据,而应用层看起来依赖“旧的有效值”作为失败�...(truncated) · lib/runtime/settings.js · advisory_a561b786cd098b36bc93d3e0
  • [P3] Windows 自然退出依赖所有剩余句柄自行释放 — 该分支不调用 process.exit(code),仅对 stdin 执行 unref() 并设置 process.exitCode;任一仍被引...(truncated) · lib/runtime/process/exit.js · advisory_ff2bbd738b6de8fb4c354a6f
  • [P3] 修改偏好后可能返回旧的有效值 — settings.configure(...) 完成后,成功消息通过进入命令时捕获的 settings.recall/settings.autoDistill ...(truncated) · lib/app/commands/status.js · advisory_c4dde6003b19de6415158ab1

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

由 Sentinel 审核 · 目标提交 2c0ef89627f0

return quoted.replace(CMD_METACHARACTERS, '^$1').replace(CMD_METACHARACTERS, '^$1');
}

const cmdLine = (command, args) => [String(command).replace(CMD_METACHARACTERS, '^$1'), ...args.map(cmdArgument)].join(' ');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Windows 下含空格路径的 .cmd shim 无法启动

🔴 严重程度:高(P1)
新增的 cmdLine() 仅对命令名转义 CMD 元字符,没有将命令路径按 C runtime/CMD 规则加引号;cmd.exe 会把空格前的片段当成可执行命令。

Finding:finding_aefec21cda089eaa4a73a6ce

@forrestlinfeng forrestlinfeng left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Round 2 — not yet

Thanks for 8b40625 — the installer now uses realpathSync and has a symlinked-checkout test, so that blocker is fixed.

The rest of the round-1 review is still open, and the PR now conflicts with main (several PRs touching lib/runtime/store/file-lock.js, drafts and verification have merged). Before another review round, please:

  1. Split the shared runtime changes into their own PRs, each with tests for the other hosts:
    • readState / updateState now throwing (and driver.handle() swallowing it) — silently turns recall/recording off for every host on a corrupt store or a busy lock.
    • process.exit → process.exitCode in lib/channels/hook/runner.js and bin/worker.mjs — affects every host on every platform.
    • The Windows PowerShell owner probe in lib/runtime/process/ — now runs on every hook of every host on Windows.
  2. Take jobs/config out of evolver-status — separate evolver-jobs / evolver-config commands with a hint; today /evolver-status foo changes from ignored to a usage error on every non-MiniMax host.
  3. Route command: / turn: tasks through the shared WORK table in lib/app/background.js instead of lib/channels/worker/runner.js.
  4. Deduplicate: extract the prompt-command parser (4th copy) into lib/agent/commands.js; share the pending-request abort block between prompt.js and stuck-recall.js; derive FAST from forAgent.
  5. lib/runtime/command-jobs.js: status shouldn't rewrite commands.json; the 200 ms poll shouldn't cancel the command on a transient read error.
  6. Rebase onto main and resolve the conflicts.

The MiniMax adapter files themselves are close; once (1)–(3) are split out, the remaining adapter PR should be much smaller and quick to review.

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 6c6b4d0ae005

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] Windows 祖先进程快照永久缓存,宿主退出后仍可能被视为有效所有者 — windows ??= windowsAncestorsOf(process.ppid) 将首次 CIM 快照永久保存在 probe 闭包中。后续检查不会�...(truncated) · lib/runtime/process/owner.js · advisory_bdca3ed9f0f42b0e359b472c
  • [P2] 不响应 AbortSignal 的执行器会永久占用命令槽位 — 取消和期限处理只调用 controller.abort(),但 run() 随后仍无期限等待 await execute(claimed, contr...(truncated) · lib/runtime/command-jobs.js·advisory_69868fa0b3daebda3bbd2d73`
  • [P2] 模型查询未限定代理定义,可能使用错误的 provider 路由 — SQL 仅以 session_id 连接 local_runtime_session_agent_definitions,没有限定当前 agent 或 definition。若...(truncated) · hosts/minimax/model.js · advisory_a111616f92caad84a5ad767e
  • [P3] 可选记录配置为 null 时校验器直接抛出异常 — 新增条件只排除 undefined,随后直接读取 .file 和 .query。配置值为 null 时会抛出 TypeErro...(truncated) · ``lib/agent/profile.js`` · advisory_41dcccb479c4e93c099302dc`
  • [P2] 缺少命令或监控端口时任务被静默确认 — 两个新增处理器都使用可选调用。端口缺失时处理器返回 undefined,不会抛错;随后只有 c...(truncated) · lib/app/background.js·advisory_4c14429ca6332c6f3ec4520a`
  • [P2] 长时间任务会阻塞同批次后续后台工作 — 后台任务仍通过 for...of 串行 await,但本 PR 新增的 command 最长可运行 12 分钟,turn 监��...(truncated) · lib/app/background.js · advisory_65eb4ac96a7f6b9618ef53d0
  • [P3] 发布测试新增了不存在于本 PR 的 Windows 门禁 — 当前 PR 将发布 job 的依赖从 needs: test 改为必须包含 needs: [test, windows-minimax],并要求存在...(truncated) · test/release.test.js · advisory_6e11cf04d5a5ea4be55732f9
  • [P3] Windows shell 执行忽略调用方传入的系统根目录 — runProcess 和 startLogged 的公开参数允许调用方提供完整 env,但新增的 SYSTEM32 在模块加��...(truncated) · lib/runtime/process/spawn.js · advisory_b2dfe48464a3f2b4abceac1b
  • [P3] 无头配置继承 bypassPermissions 等非凭据策略 — headlessConfigOf 把原 YAML 的整个顶层映射放入 << 合并键,只显式覆盖 agents、memory、askUs...(truncated) · hosts/minimax/headless.js·advisory_177863005c83923f822fe9bc`
  • [P3] 显式数据目录与 PLUGIN_DATA 同时存在时形成双重状态源 — dataDirOf() 优先使用 MINIMAX_DATA_DIR 或 MAVIS_DATA_DIR,但 stateDirOf() 只要发现 PLUGIN_DATA 就��...(truncated) · hosts/minimax/paths.js · advisory_ece3c317e93ed99ae8f3f35b
  • [P3] 设置错误状态被永久缓存,修复后仍不可配置,后续损坏也不会停用功能 — error 只在构造 settings 时计算一次并被闭包永久保存。初始文件无效时,即使文件已修复�...(truncated) · lib/runtime/settings.js · advisory_f66dd17f2ed09a9a73ba0447
  • [P3] null 配置可能跨越序列化边界后触发校验异常 — security_boundary_01 表明空配置会生成值为 null 的 YAML 合并键;state_consistency_01 同时表明可...(truncated) · hosts/minimax/headless.js`, `lib/agent/profile.js · advisory_17f785a2d726a751405e30f3
  • [P3] 不响应取消的命令会阻塞整个后台批次 — release_integrity_03 指出长任务会阻塞同批次后续后台工作;release_integrity_04 指出不响应 Abo...(truncated) · ``lib/app/background.js, lib/runtime/command-jobs.js, lib/runtime/model-executor.js`` · advisory_10242d778e1ae08dd5698529`
  • [P3] 发布测试与实际 Windows 发布门禁不一致 — release_integrity_07 明确指出发布测试新增了本 PR 中不存在的 Windows 门禁,而工作流所在的 r...(truncated) · ``test/release.test.js, .github/workflows/release.yml`` · advisory_e82eba4a8accee76f8d79834`
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 打包产物未被审查,不能据此宣称发布链路已覆盖 — size_report.skipped_files 明确跳过了三个 Minimax 发布产物,但这些文件仍出现在成功切片的文��...(truncated) · ``hosts/minimax/dist/pack.json, hosts/minimax/dist/hooks/hooks.json`, `hosts/minimax/dist/README.md...(truncated)` · `advisory_62d92f26d08c45bed0bb3907`
  • [P3] 显式数据目录与环境变量可能让设置状态分裂 — general_01 指出显式数据目录与 PLUGIN_DATA 同时存在时形成双重状态源;release_integrity_05 同...(truncated) · hosts/minimax/paths.js`, `lib/runtime/settings.js · advisory_7b5ff266bc41759340bacc1f
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 空配置会生成值为 null 的 YAML 合并键 — 空白、仅注释或空 YAML 文档经过清理后没有可缩进的映射内容,但函数仍输出裸 <<:。该键...(truncated) · hosts/minimax/headless.js · advisory_f36a8c64d6ba5f3c933a49cc

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

由 Sentinel 审核 · 目标提交 6c6b4d0ae005

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 91c37a35bdbf

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P1] 发布测试要求不存在的 Windows 门禁 — 当前改动把发布 job 的预期依赖从 needs: test 改成 needs: [test, windows-minimax],并要求工作流�...(truncated) · test/release.test.js · advisory_755dc2205e34fc4ba171d2f1
  • [P2] 执行器忽略 AbortSignal 时命令永久占用槽位 — 取消和期限仅调用 controller.abort(),但 run() 仍无期限等待 await execute(...)。若执行器不响...(truncated) · lib/runtime/command-jobs.js · advisory_b1ab8bb38d502c931e3f38ab
  • [P2] 后台任务缺少执行端口时仍返回成功 — 新增的 command 和 turn 处理器均使用可选调用。对应端口缺失时表达式返回 undefined,不��...(truncated) · lib/app/background.js · advisory_f41db1e6c636237968391506
  • [P2] 模型查询未限定当前代理定义,可能启动错误 provider 的补全 — SQL 仅按 session_id 连接 local_runtime_session_agent_definitions,没有限定当前 agent 或 definition。同...(truncated) · hosts/minimax/model.js · advisory_6f485b0f16d5de828228c6bc
  • [P2] 缺少 SystemRoot 时 Windows 取消路径不会终止已启动进程 — taskkill() 在模块加载时解析不到 SystemRoot/WINDIR 时直接成为空操作;新增的拒绝启动保护��...(truncated) · lib/runtime/process/spawn.js · advisory_35b581ce637e8a421ba4901e
  • [P3] 可选记录配置为 null 时校验器直接抛出异常 — 新增校验仅排除 undefined,随后直接访问 profile.modelRecord.file 或 profile.turnEnd.statusRecord.file...(truncated) · lib/agent/profile.js·advisory_24208f131a7133760ba6ceda`
  • [P3] Windows shim 命令路径包含空格时启动失败 — 新增 cmdLine() 将 command 直接与参数拼接为一条 cmd.exe 命令行,但只对元字符做转义,没�...(truncated) · lib/runtime/process/spawn.js · advisory_2715ddf0a0f3b7a6092e076a
  • [P3] Windows 所有者探测复用过期进程快照 — readProcess 将第一次 windowsAncestorsOf(process.ppid) 的结果缓存至闭包变量 windows。后续查询仅...(truncated) · lib/runtime/process/owner.js · advisory_e21fdd6a19a12ed8a860c640
  • [P3] 关闭成功时不会等待仍在运行的 detached worker — closeProxyWhenSettled() 只在 proxy.close() 当场抛出 ENOTEMPTY、EPERM 或 EBUSY 时重试。如果关闭...(truncated) · test/helpers/fake-proxy.js · advisory_da0053f7ea16aaa6628ccc6c
  • [P3] 取消信号未覆盖 clock.sleep,轮询/退避可能继续运行 — 新增的 cancellable() 只包装了 scheduler.signal、proxy.request(..., { signal }) 和 model.complete(..., si...(truncated) · ``lib/app/background.js`` · advisory_af097e0af59af9ae7a94da22`
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 配置写入成功后可能总是被报告为并发失败 — withLock() 回调执行 writeState(file, next) 并更新内存对象,但回调没有显式返回成功值。随后...(truncated) · lib/runtime/settings.js · advisory_2e126279fed06249c448ce9d
  • [P3] 配置合并无差别继承权限绕过项 — <<: 会把原配置的全部顶层字段合并到无头配置,而不是只保留模型路由和凭据。代码仅显...(truncated) · hosts/minimax/headless.js · advisory_00550841b4306893bb0d5ea3

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

由 Sentinel 审核 · 目标提交 91c37a35bdbf

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

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

由 Sentinel 审核 · 目标提交 ce8cb59399cd

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] Windows 祖先进程快照不会刷新,可能持续保留已退出的所有者 — windows ??= windowsAncestorsOf(process.ppid) 将首次 CIM 结果永久保存在 probe 闭包中。后续检查仍查�...(truncated) · lib/runtime/process/owner.js · advisory_6e918b80b11b2ef1d21b064f
  • [P2] 命令与 turn 任务缺少执行端口时仍被视为成功 — commandJobs?.run(...) 和 turnMonitor?.(...) 在对应端口未装配时返回 undefined,不会抛错。调度��...(truncated) · lib/app/background.js · advisory_5a82d29cc2f252ed6274e7ba
  • [P2] 执行器不响应 AbortSignal 时命令永久占用槽位 — 取消轮询和期限处理只调用 controller.abort(),但 run() 仍无期限等待 await execute(claimed, contr...(truncated) · lib/runtime/command-jobs.js·advisory_af67630f9d454400c21ee207`
  • [P2] 显式数据根与 PLUGIN_DATA 可产生分裂状态 — runtimeDatabaseOf() 通过 dataDirOf() 优先采用显式数据根,但 stateDirOf() 无条件优先返回 PLUGI...(truncated) · hosts/minimax/paths.js·advisory_9d05c59feb74a87d417dd92c`
  • [P2] 模型查询未限定当前代理定义 — SQL 仅按 session_id 连接 local_runtime_session_agent_definitions,未限定当前 agent 或 definition。同一...(truncated) · hosts/minimax/model.js · advisory_5285cc47c9d6d5fed0041722
  • [P3] 可选记录配置为 null 时校验器直接崩溃 — 新增条件只排除了 undefined,没有排除 null。当 modelRecord 为 null 时,校验表达式会直接...(truncated) · lib/agent/profile.js · advisory_4c7b303b353b5e091156b618
  • [P3] 发布测试新增了不存在的 Windows 门禁,当前 PR 会使测试失败 — 当前 PR 将发布 job 的断言从 needs: test 改为要求 needs: [test, windows-minimax],并要求存在 wind...(truncated) · ``test/release.test.js`` · advisory_f20fc6572a445c23bfeab8fa`
  • [P3] 无效的绝对 SystemRoot 会绕过启动保护并导致清理静默失败 — SYSTEM32 只验证 SystemRoot/WINDIR 是否为绝对路径,不验证目录及 taskkill.exe 是否存在。只要...(truncated) · lib/runtime/process/spawn.js · advisory_d23e4af24b3c0140e68f14c9
  • [P3] worker 导出函数重命名并改变参数契约,可能破坏现有调用方 — 当前 PR 将导出的 runWorker(agent, tasks, { env }) 改为 runWorkerProcess(agent, tasks, env),同时移除了...(truncated) · lib/channels/worker/runner.js · advisory_3d0117447647cc622a7b04cf
  • [P3] worker 导出和调用参数契约可能已漂移 — worker 导出函数被重命名并改变参数契约,但当前摘要没有证明所有调用方、测试入口和间��...(truncated) · lib/channels/worker/runner.js`、`lib/agent/driver.js · advisory_b96d3ca8c3aa57391fcb6688
  • [P3] 会话状态读取失败会使监控任务提前退出且不再收敛 — sessions.read() 位于轮询循环内,但没有 try/catch、重试或失败状态转换。一次瞬时读取异常...(truncated) · lib/runtime/turn-monitor.js · advisory_f583a4ceb68571cdedb4ee04
  • [P3] 发布测试与 Windows 门禁实现不一致 — 发布测试新增了当前实现不存在的 Windows 门禁,而 Windows 进程相关实现位于另一切片,导致...(truncated) · test/release.test.js`、`lib/runtime/process/windows.js`、`lib/runtime/process/owner.js · advisory_153e707b75b9009e8d3d0374
  • [P3] 后台命令判定只检查 commandCatalog,可能漏掉 host-only 命令 — promptCommandOf 能解析 hostCommandCatalog 中的命令,但 isBackgroundCommand 只在 commandCatalog 中查...(truncated) · hosts/minimax/commands.js · advisory_3e0769215ee46f20ccd88235
  • [P3] 失败分支可能清空 last-known-good 数据 — 状态链探针:failure branch writes data/cache-like state; verify it does not clear useful last-known-good content · lib/runtime/settings.js · slice:release_integrity_05:state_chain_c145e848f519353e
  • [P3] 异步完成可能覆盖更新后的状态 — 状态链探针:late async completion may overwrite newer local/store state because no request/version/abort guard is ...(truncated) · lib/runtime/settings.js · slice:release_integrity_05:state_chain_8cc2bc92dff5cae0
  • [P3] 状态读取失败与异步写回可能破坏任务状态收敛 — 状态读取失败可能使监控任务提前退出;同时异步完成结果可能覆盖之后更新的状态。两条...(truncated) · lib/runtime/turn-monitor.js`、`lib/runtime/settings.js`、`lib/runtime/command-jobs.js · advisory_2bc26fe17e3db8b7631f1ad6
  • [P3] 状态链路需要人工确认 — 状态链探针:hydrate/refresh path writes data/cache state; verify failed or stale responses preserve last-known-goo...(truncated) · lib/runtime/command-jobs.js · slice:release_integrity_04:state_chain_e03f07871db2cf67
  • [P3] 缺少后台端口时任务被错误确认成功 — 任务生产方在没有可用后台执行端口时,仍沿用成功确认路径;命令任务和 turn 任务的端口...(truncated) · ``lib/app/ports.js、lib/app/commands/index.js`、`lib/app/background.js`、`lib/app/distill-sessio...(truncated)` · `advisory_ddd913900977e79ca8aa0ccf`

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

由 Sentinel 审核 · 目标提交 ce8cb59399cd

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.

2 participants