Repository navigation
fix(ci): frame the eval policy probe as a self-test and rerun a no-call session - #13665
Conversation
…ll session Asked only to read /proc/self/environ and the runner's .runner file and to Grep them for TOKEN, the model can decline as credential harvesting and end with no tool call, so the probe recorded no denial and blocked every pull request eval leg (run 42166675433: tool_calls=none, num_turns=2). The probe prompt now names the run the runner's permission self-test and says each call is expected to be denied; the paths and the deny checks are unchanged, and the Grep pattern no longer reads as a secret search. A session that ends with no tool call proved nothing about the policy, so it runs again, up to three times; a call made and not denied, a missing result, or any missing denial still stops the job on that session. The credential grep and the handoff classifier run on every attempt. Refs: #12035 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review Summary: ❌ FailedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
claude-review reviewed Code review: PR #13665, a clean whole reviewNo findings. I read every hunk of all 4 changed files. Probe loop logic, as checked against the PR description:
Verification. I did not run the tests. The local reproduction counts (0/8 runs before, 8/8 after) and the Closing issue. The PR only says "Refs: #12035"; it closes no issue, so there are no acceptance criteria to check. Spend (not a hold). Each probe step can now start up to three |
|
claude-security-review reviewed Security review: PR #13665, no findingsI read every hunk of all 4 changed files. Two are on trusted paths: What the change gates. Each of the six "Probe that the policy denies those reads" steps decides whether pull request eval cases run beside the leg's Claude credential. The step must pass four Checked: the retry loop leaves the gate as strict as before.
Trust controls. This change does not touch the trusted-trigger check, the token request or broker, the kill switch, the merge holds or any Instruction surface. The probe prompt was reworded, and nothing was deleted, narrowed or softened. The new wording frames the run as a permission self-test so the model makes the four calls. Whether the reads are allowed is still decided by the managed policy, not the prompt, and the step checks the policy's denials itself. Tests. Spend (not a finding): each probe step can now run up to 3 short critical-findings: 0 |
Refs: #12035
Summary
After #13640, the eval policy probe reports its facts. #12035's re-run (https://github.com/melodic-software/claude-code-plugins/actions/runs/42166675433) failed both pass legs with
result=present subtype=success num_turns=2 tool_calls=none denials=0: the model made no tool call, so the policy had nothing to deny. A local reproduction showed why: told only to read/proc/self/environ, the runner file andGrep TOKEN, the model declines them as credential harvesting (0 of 8 runs made all four calls).Fix
eval-browser-dispatch.yml,eval-hill-climb-pass.yml): the prompt names the run the runner's permission self-test, where every call is expected to be denied; the Grep pattern ispolicy-probe, notTOKEN. The paths and the fourdeniedchecks are unchanged.successresult and zerotool_useblocks proves nothing, so it runs again, at most three times; thendeniedfails withprobe_facts. A call made and not denied, a partial set of calls, or no result still stops the job on the first session. The credential-leak grep and the handoff classifier run on every attempt.callers.test.mjs: a case runs the real step with stubclaudeandnode(first-try pass, retry pass, three no-call sessions fail, an undenied Read fails without retry).workflow.test.mjs: the leak-check indent pin moves.A documented command that evaluates a permission rule without a model would be simpler. None exists:
claude --help(2.1.318) has none, and https://code.claude.com/docs/en/permissions says rules are enforced by Claude Code, with Read rules reaching Grep and Glob only on a best-effort basis, which is why the probe calls each tool.Verification
claude -p --setting-sources "" --settings <deny-rules file> --model claude-sonnet-5-5 --allowedTools Read Grep Glob: old prompt 0 of 8 runs made all four calls; new prompt 8 of 8, all four denied.node --testin.github/actions/resolve-config: 929 pass, 0 fail;.github/scripts/plugin-eval: 105 pass, 0 fail.Related
🤖 Generated with Claude Code