Repository navigation
Conversation
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 1 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 aa57d06ee986 |
|
Sentinel 保留了 1 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 aa57d06ee986 |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 2 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 94edc6aa3909 |
|
Sentinel 保留了 2 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 94edc6aa3909 |
forrestlinfeng
left a comment
There was a problem hiding this comment.
Code review — changes requested
Right direction, and it removes a real false positive (echo "npm test", quoted separators, heredocs, (cd app && npm test) all now behave). But it introduces new false negatives compared with main.
Major
#anywhere is treated as a comment —SHELL_DATAinlib/verification.js:36matches#[^\r\n]*. In shell,#only starts a comment at the start of a word, so these now return false:curl http://x/#f && npm test,git log --format=%h#%s; npm test,echo a#b; npm test. Match#only at line start or after whitespace/separator.- Any
$(rejects the whole command —lib/verification.js:44.cd $(git rev-parse --show-toplevel) && npm testwas true on main, now false; agents write this often. Blank the$(...)span as data instead of returning false. - Common wrappers/runners not recognised (only
envandnpxare unwrapped):timeout 60 npm test,sudo …,time …,nohup …,env -i …,yarn vitest,bunx vitest,python -m pytest,uv run pytest,poetry run pytest,{ npm test; },if …; then npm test; fi,bash -c "npm test". The cost is silent (no candidate, no L1 evidence). Suggest one table of known wrappers with a test for each.
Minor
- Windows paths:
C:\tools\make.exeis no longer recognised (backslash treated as escape,.exenot stripped). Either handle it or state it is out of scope. - The
__data__placeholder is a magic string a later rule could match by accident; as a regex tokenizer without nesting state this will need a single table of supported cases, tested in both directions, to avoid rotting.
Note: combined with #27 (fewer passes counted), this reduces L1 evidence more than either PR alone — please run the full suite on the combined branch.
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 3 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 61b5499fa7ce |
|
Sentinel 保留了 3 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 61b5499fa7ce |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 2 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 bdea3547473f |
|
Sentinel 保留了 2 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 bdea3547473f |
forrestlinfeng
left a comment
There was a problem hiding this comment.
Round 2 — close, one more small change before merge
Thanks — big improvement. Re-ran isVerificationCommand at 61b5499: the #-comment and $(...) cases are fixed, 16/17 of the previously missed commands are now recognised, and all true negatives (echo "npm test", # npm test, grep "npm test", heredoc, sudo echo npm test, echo "$(npm test)") stay false. Pathological 20–50k-char inputs finish in ≤3 ms.
Still false here but true on main (silent loss of L1 evidence / candidates):
bash -c "npm test"/sh -c "…"— please unwrap(?:ba)?sh -cand test it.sudo -u root npm test,timeout -s KILL 60 npm test,time -p npm test— thesudo/timeout/timetable entries need to skip their options.exec npm test,! npm test.gradlew.bat build,"./node_modules/.bin/jest"— only.exeis stripped; please strip\.(?:exe|cmd|bat)$, and a quoted executable path is blanked as data.
Nit (readability): the loop at lib/verification.js:75-81 juggles wrapper / executable / prefix and re-runs find after stripping the path; a single withoutWrapper(check) returning the stripped command or null would read better. :36 is ~150 columns of dense regex — splitting it into named parts would help.
Ready to merge once the cases above are covered with tests.
Bugbot is paused — on-demand spend limit reachedBugbot 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. |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 3 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 01a01e754223 |
|
Sentinel 保留了 3 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 01a01e754223 |
Bugbot is paused — on-demand spend limit reachedBugbot 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. |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 2 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 ec1270b8c8e3 |
|
Sentinel 保留了 2 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 ec1270b8c8e3 |
Bugbot is paused — on-demand spend limit reachedBugbot 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. |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 1 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 b12448d92438 |
|
Sentinel 保留了 1 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 b12448d92438 |
Bugbot is paused — on-demand spend limit reachedBugbot 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. |
|
Sentinel 已审核此变更,并发现 1 个已核验问题。 无法定位到 diff 的已核验问题转义空格后的
|
|
Sentinel 保留了 1 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 c3a2bbcf4da6 |
Summary
Printing a check name, such as
echo "npm test", currently creates a passing check, a distillation candidate and L1 reuse evidence. Recognize checks in command positions instead of matching names anywhere in shell text.Preserve supported direct checks, chains, pipelines, environment assignments, npx wrappers and heredoc handling. Dynamic substitutions are conservatively excluded; this does not evaluate arbitrary shell control flow.
Evidence
Before: a public turn lifecycle regression records a check for
echo "npm test".After: the same turn has no checks, no candidate and tier-none reuse evidence. Targeted verification/lifecycle tests: 36 passed on Windows Node 24.21.0.
Linux Node 22.23.4 and 26.13.0: each clean npm ci, full npm test 647/647, and packing passed. GitHub CI also passed for aa57d06.
Native Claude Code 2.1.316 with isolated profiles and loopback model/Proxy: a real PowerShell echo produced no candidate/L1; a real node --test fixture produced one passing test and retained candidate/L1. No external provider/account/Hub calls.
Wider Windows adapter tests exposed POSIX fixture/path limitations; those failed logs remain separate from Linux/native results. No workload, timeout or assertion was relaxed.
Follow-up head 94edc6a fixes the reviewed executable-path regression: ./gradlew, local .bin tools and absolute known-tool paths are recognized only as executable tokens, including through npx. New RED→GREEN regression plus verification/lifecycle/checks/reuse 67/67 and packing passed. The earlier 647/native results above predate this follow-up; CI reruns the final commit.
Merge Danger
Door: two-way
No state schema or migration. Unsupported command forms may stop contributing verification evidence.
Blast Radius: shared-runtime
The classifier is shared by native host adapters, candidate selection and reuse reporting. Real model/Proxy/Hub acceptance is separate from fixture tests.