Skip to content

fix: keep stale worker-lock recovery exclusive - #28

Open
imxyanua wants to merge 7 commits into
EvoMap:mainfrom
imxyanua:codex/fix-stale-worker-lock
Open

imxyanua wants to merge 7 commits into
EvoMap:mainfrom
imxyanua:codex/fix-stale-worker-lock

Conversation

@imxyanua

@imxyanua imxyanua commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Two reclaimers can inspect an expired worker lock, then one deletes the other's fresh lock and both enter the protected work. An expired mtime can also evict a paused but living owner.

stage a nonempty unique admission directory → atomic rename
  → inspect/reclaim/refresh/release worker lock
  → unlink only this admission's unique owner → nonrecursive rmdir

Serialize directory mutations with a short admission protocol. Prepopulated publication and owner-specific unlinking also prevent a dead-admission reclaimer from removing a fresh guard. Known live-PID owners keep their locks; dead and legacy locks retain lease recovery. Cleanup retries transient sharing denial; release contention is bounded and fails closed.

Evidence

  • Before: deterministic real A/B/C-process probes enter two callbacks concurrently. A first proposed file-guard solution also failed a separate dead-reclaimer ABA probe and was discarded.

  • After: both interleavings admit one owner. Final runtime tests 14/14 passed on Windows Node 22 and Node 24; all eight hosts pack. Tests cover live/dead/legacy owners, transient cleanup refusal, bounded contention and preservation of unknown guards.

  • BEFORE the final cleanup-retry change: Linux Node 26 full 652/652 and pack passed. Linux Node 22 full twice had 651 pass / 1 failure, the first OpenCode session-end distillation exceeding its existing 10s wait; isolated OpenCode 8/8 and exact main baseline 644/644 passed. Causal attribution remains unresolved; no test, timeout or workload was relaxed. CI must validate the final commit separately.

  • Final follow-up head 71f98f8 distinguishes missing owner metadata (ENOENT, recovery retained) from unreadable metadata (refuse takeover). Release retries transient owner reads and reports persistent ELOCKED; whole refresh is best effort for timer callers while final release remains strict. New RED→GREEN regressions bring final runtime checks to 21/21 on Windows Node 22; packing passed. Earlier full-matrix results above predate this follow-up; final CI reruns separately.

  • Final head 71f98f8 passed GitHub CI run 75. External combined PR19–29 validation passed full 757/757 and packing all nine hosts on Linux Node 22 and 26. That copy includes feat: add native MiniMax Code host support #19's existing OpenCode fixture Connection: close calibration; this does not retroactively replace the earlier standalone failed runs.

  • 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

New owner tokens carry the PID. Legacy fresh locks remain respected; stale legacy locks retain their existing recovery. Old processes do not participate in the new admission protocol, so restart hosts after an update.

Blast Radius: concurrency

Protects outbox and engine work shared by hosts. PID reuse fails closed. Permanent cleanup denial can require repair/restart; crash-only private staging directories can remain. No process is terminated and no dependency is added.

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 05d14ec00aa9

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P3] 清理失败会遗留当前进程“仍存活”的工作锁,后续无法恢复 — 工作锁已经写入 owner 为当前进程 PID 的令牌,但 admission 清理异常会在锁句柄交付给 withLo...(truncated) · lib/runtime/store/file-lock.js·advisory_334841b17f48bd2a241e3c47`
  • [P3] PID 命名空间隔离可使活跃锁被误判为死亡并接管 — 新实现以锁文件中的 PID 和调用方本地的进程可见性判断所有者是否死亡。若 B 所在 PID 命��...(truncated) · lib/runtime/store/file-lock.js · advisory_c2ce44735650fd3be9d858e2

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

由 Sentinel 审核 · 目标提交 05d14ec00aa9

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 71f98f860e4f

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P3] 锁释放失败会替换工作阶段的原始错误 — withLock() 在 finally 中直接 await lock.release();新增的异步释放可能因 admission 竞争、owner ��...(truncated) · lib/runtime/store/file-lock.js · advisory_7c852d0b4f3bb83028bf4678

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

由 Sentinel 审核 · 目标提交 71f98f860e4f

@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 — changes requested

The admission protocol itself is sound (guards are published already holding an owner file, and only the inspected owner is unlinked). Two recovery holes remain.

Major

  1. A stranded admission guard never heals — lib/runtime/store/file-lock.js reclaimAdmission (~L195-204) only clears a guard whose owner PID is gone; there is no age fallback.
    • PID reuse (common on Windows): a holder is killed, its PID is reused → every later withLock on that lock returns false forever (outbox drain, engine setup, hub login stop silently). Reproduced with a day-old guard owned by PID 1.
    • Own PID: if releaseAdmission throws after its retries (e.g. AV holds the owner file), the guard carries process.pid, which ownerIsGone never reports as gone. The new test at test/runtime/file-lock.test.js:254-270 asserts this left-behind state.
    • Fix: admission is held for a few synchronous ms, so treat a guard older than ~10 s as abandoned regardless of PID. Unlinking only the inspected owner name keeps that race-safe.
  2. Failed admission release orphans the work lock — tryLock creates lockDir + owner inside admitted; if releaseAdmission throws in finally, the handle is lost but the directory stays, owned by a live PID, and the new "live PID is never evicted" rule means it is never reclaimed while this process lives. Remove the work lock before rethrowing (or don't throw and let the guard age out).

Minor

  • refresh timer is now mostly dead: new tokens carry a PID, live owners are never evicted, dead ones can't refresh, so the mtime lease matters only for legacy tokens — while each refresh still takes admission and makes contenders see "busy". Delete it or scope it to legacy tokens.
  • await lock.release() in finally masks the work's own error if release also throws.
  • admissionOf reads like a getter but creates and renames directories — e.g. enterAdmission.
  • Crash-leftover *.claim staging dirs are never swept.
  • ['EPERM','EBUSY','EACCES'] appears twice — make it one constant.
  • file-lock.js grows to ~340 LOC and now holds state files, state lines, work locks and admission; extracting admission into its own module would bring it back under 300 and give one place for the liveness rule.

Tests: deterministic (4/4 clean runs), but the spawn/marker/wait harness is copy-pasted twice here and a third time in #29 — please extract a helper.

@cursor

cursor Bot commented Nov 3, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 a638041595b4

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P3] 回滚读取失败会遗留无法由当前进程回收的工作锁 — admission 清理失败后,回滚还要通过 ownsLock() 重新读取 owner;若该读取也失败,回滚自身抛...(truncated) · lib/runtime/store/file-lock.js · advisory_69e830ee178785e2949d962c
  • [P3] 最终释放超时后,同一宿主进程无法恢复遗留工作锁 — releaseWorkLock() 超时后保留 ${lockDir} 及当前进程 PID owner;锁句柄随后丢失。后续即使 admiss...(truncated) · lib/runtime/store/file-lock.js · advisory_53f59a70d1f769fa3721d14f
  • [P3] 进程身份探测可通过 PATH 劫持执行任意程序 — Unix 分支使用未限定绝对路径的 ps,spawnSync 会按调用进程的 PATH 查找程序;同时完整传...(truncated) · lib/runtime/store/file-lock.js · advisory_0d78d10cf6a58a7048b86a48
  • [P3] 释放异常会覆盖工作阶段的原始异常 — JavaScript 的 finally 异常会替换此前正在传播的异常,因此释放阶段的 ELOCKED 会使 work() ��...(truncated) · lib/runtime/store/file-lock.js · advisory_4f25fb88553416e200d5c8e9

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

由 Sentinel 审核 · 目标提交 a638041595b4

@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

The process-start-time ("birth") check is a good approach and I agree it is race-safe: a slow live holder keeps its guard because its start time matches, and the 10 s age only gates when the check runs, so clock skew / GC pauses can't cause a steal. The orphaned work-lock cleanup is also fixed and race-safe. 17/17 tests pass over 3 runs.

Major — a subprocess spawn on every process's first lock

  • lib/runtime/store/file-lock.js:244: ownBirth = processBirth(process.pid) runs ps (Unix) or powershell.exe (Windows, 2.5 s timeout) the first time any process takes admission. Every hook invocation is a fresh process that calls updateState, so every hook pays this. Measured first updateState ≈0.9 ms on main vs ≈4.1 ms here (macOS); PowerShell cold start on Windows is typically hundreds of ms per hook event. reclaimAdmission (~L227) also spawns on each 20 ms retry, so acquire can overrun its 2 s deadline.
  • Fix: stamp our own start time without spawning (Date.now() - process.uptime() * 1000), spawn only on the reclaim path for a foreign PID, and compare with a tolerance (e.g. ±2 s) instead of hashing the exact ps/PowerShell string. The start-time lookup belongs in lib/runtime/process/owner.js, not file-lock.js.

Still open from round 1

  • file-lock.js grew from 340 to 383 LOC (soft limit 300). Please extract admission into its own module — it now has its own liveness rule, identity check and abandoned-guard map.
  • ['EPERM','EBUSY','EACCES'] still duplicated; await lock.release() in finally still masks the work's error; refresh timer still mostly dead; admissionOf naming.
  • Test harness (until, spawn/marker helpers) still copied between file-lock.test.js and state-lock.test.js.

Minor

  • No protection when ps/PowerShell is missing or blocked (slim containers, busybox, AppLocker) — falls back to round-1 behaviour. Fine if documented.
  • If the cleanup's own read fails (ownsLock throws, ~L369), that error replaces ELOCKED and the work lock is orphaned again.
  • The new test only exercises the own-PID branch and fails if ps is unavailable.

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 48a7f8312b0c

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P3] 释放超时会遗留同一进程永远无法回收的工作锁 — releaseWorkLock() 超时后保留 ${lockDir},其中 owner token 仍包含当前存活 PID,但锁句柄随 withL...(truncated) · lib/runtime/store/file-lock.js·advisory_ed2187847f163002208f8704`

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

由 Sentinel 审核 · 目标提交 48a7f8312b0c

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 d1fc44ffe2c5

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] PID 复用会阻止已死亡 owner 的过期锁回收 — 新工作锁 token 只保存 PID 和随机值,不保存进程启动时间。过期锁回收只要发现该 PID 当前�...(truncated) · lib/runtime/store/file-lock.js · advisory_2490e1a7cdf9bce194b1e034
  • [P2] Windows 进程探测信任可控的 SystemRoot 并执行其中程序 — 新代码直接从环境变量读取 SystemRoot,只验证它是绝对路径,随后把该路径下的 PowerShell ��...(truncated) · lib/runtime/process/owner.js · advisory_77338f37e2ad3ac27743267b
  • [P3] 保留活动 admission guard 后立即断言可重新获取锁 — 测试故意让 admission owner 的 unlinkSync 失败,使 ${lock}.admission 及其 owner 文件保留;随后没�...(truncated) · test/runtime/file-lock.test.js · advisory_56534c752e469cc409e04cee
  • [P3] 工作已成功但释放失败会触发重试并重复执行 — work() 已成功后,新增异步释放仍可能抛出 ELOCKED,使 withLock() 整体表现为失败。调用方...(truncated) · lib/runtime/store/file-lock.js · advisory_0778d4c10f66b2be822205bf
  • [P3] reset/clear 后可能缺少 in-flight completion 防护 — 状态链探针:reset/clear path touches async state but no abort/generation fence is visible for in-flight completion...(truncated) · lib/runtime/store/admission.js · slice:release_integrity_01:state_chain_11c554fecb0b8815
  • [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/helpers/lock-contenders.js · slice:tests_01:state_chain_02236084a6cc60ba
  • [P3] 释放锁失败会覆盖工作阶段的原始异常 — releaseWorkLock() 在超时后抛出 ELOCKED。withLock() 的异步释放位于 finally 路径时,释放异常...(truncated) · lib/runtime/store/file-lock.js · advisory_eeaa15b66dc887b233327152

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

由 Sentinel 审核 · 目标提交 d1fc44ffe2c5

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 a0e143e6362f

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] Windows 进程探测信任 SystemRoot 并执行其中的 PowerShell — 新代码直接信任继承环境中的 SystemRoot;只检查路径是否为绝对路径,随后以宿主进程权��...(truncated) · lib/runtime/process/owner.js · advisory_166ea1001ad4295900e5f982
  • [P2] Windows 进程身份探测会执行 SystemRoot 指向的程序 — 新代码将进程环境中的 SystemRoot 当作可信可执行文件根目录,只检查它是否为绝对路径。�...(truncated) · lib/runtime/process/owner.js · advisory_a0ce34ee9de637ce7b2979dd
  • [P3] 超时清理只终止根子进程,可能遗留其后代进程 — watchdog 只杀掉 spawn() 返回的根 Node 进程,没有建立进程组或递归终止其后代。若 contender ��...(truncated) · test/helpers/lock-contenders.js · advisory_38fe8a840ae9027f17723d18
  • [P3] reset/clear 后可能缺少 in-flight completion 防护 — 状态链探针:reset/clear path touches async state but no abort/generation fence is visible for in-flight completion...(truncated) · lib/runtime/store/admission.js · slice:release_integrity_01:state_chain_11c554fecb0b8815
  • [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/helpers/lock-contenders.js · slice:tests_01:state_chain_02236084a6cc60ba

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

由 Sentinel 审核 · 目标提交 a0e143e6362f

@evomap-aiqa-bot

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

Copy link
Copy Markdown

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

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

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

由 Sentinel 审核 · 目标提交 0490c99a6062

@evomap-aiqa-bot

Copy link
Copy Markdown

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

  • [P2] Windows 进程探测执行 SystemRoot 指向的 PowerShell — 新代码直接读取继承环境中的 SystemRoot,只验证其为绝对路径,随后以当前宿主权限执行��...(truncated) · lib/runtime/process/owner.js · advisory_3fe36bdf4a00a6793c3c897e
  • [P3] 超时清理只终止根进程,可能遗留后代进程 — watchdog 只持有并终止 spawn() 返回的根 Node 进程,没有进程组或递归子进程清理。若 contender...(truncated) · test/helpers/lock-contenders.js · advisory_2e2a5b48a59e71930f4fff22
  • [P3] Admission 清理失败测试保留活动 guard,却断言下一次获取成功 — 测试通过替换 fs.unlinkSync,使 ${lock}.admission 下当前进程的 owner 文件无法删除;随后恢复�...(truncated) · test/runtime/file-lock.test.js · advisory_7ddd161c1eaba78458fad640
  • [P3] 测试错误地要求存活的原 admission owner 被其他进程回收 — 测试先在当前进程中创建 admission owner,owner 文件名使用 process.pid;随后故意让该 admission �...(truncated) · test/runtime/file-lock.test.js · advisory_b380994e3d703593b22524c8
  • [P3] 进程身份探测可能执行不可信路径下的 PowerShell — processStartTime() 直接读取继承环境中的 SystemRoot,只验证其为绝对路径,随后拼接并执行 ...(truncated) · ``lib/runtime/process/owner.js`` · advisory_197b0fd4913695b589c5a5be`
  • [P3] PowerShell 身份探测风险重复出现,合并时不能丢失安全审查结论 — scope_release_integrity 与 release_integrity_01 都指出 Windows 进程探测会执行由 SystemRoot 指向的 P...(truncated) · lib/runtime/process/owner.js · advisory_e3be3f04edae5c58189047fa
  • [P3] reset/clear 与异步完成回调可能重新污染状态 — 多个 slice 同时指出 reset/clear 后缺少 in-flight completion 防护。若清理操作只重置当前状态,�...(truncated) · lib/runtime/process/owner.js`、`lib/runtime/store/admission.js`、`lib/runtime/store/file-lock.js · advisory_44a3d3490c330877fd5e0196
  • [P3] reset/clear 后可能缺少 in-flight completion 防护 — 状态链探针:reset/clear path touches async state but no abort/generation fence is visible for in-flight completion...(truncated) · lib/runtime/store/admission.js · slice:release_integrity_01:state_chain_11c554fecb0b8815
  • [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/helpers/lock-contenders.js · slice:tests_01:state_chain_02236084a6cc60ba
  • [P3] 存活 admission owner 的回收测试与 owner 生命周期契约冲突 — 测试 slice 指出测试要求“存活的原 admission owner 被其他进程回收”。这与基于进程存活状态...(truncated) · test/runtime/file-lock.test.js`、`lib/runtime/store/admission.js · advisory_ffa8e643877ef252da7f5e5a
  • [P3] 清理失败测试保留活动 guard,却断言下一次获取成功 — 测试在模拟 Admission 清理失败后仍保留活动 guard,却断言下一次获取成功。若 guard 是 admissio...(truncated) · test/runtime/file-lock.test.js`、`lib/runtime/store/admission.js · advisory_30729b8ef8843c0a41133e23

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

由 Sentinel 审核 · 目标提交 0490c99a6062

imxyanua added a commit to imxyanua/evolver-agent-plugin that referenced this pull request Nov 4, 2026
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