Repository navigation
feat(pr-pipeline): let address-feedback edit any file the PR already changes - #9444
Conversation
…changes A finding anchored on one of a pull request's files whose fix lives in another of its files stalled the round as feedback-uncertain. The select job now records the PR's files (rename sources included) as pr_paths in the thread file and run.json, and thread-scope.mjs admits them in every kept thread's scope for an existing file. The model's tool, apply-patch's kept-threads rule and the reply job enforce the same set. Workflows, instruction paths, the HIGH floor and every apply-patch refusal still apply; a file the fix creates gets no scope from pr_paths. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A VALID reply now lands from a fix in another of the pull request's files only when its evidence cites that file, so each thread keeps its anchor. comments-ci.md tells the model to run check-paths before calling a file out of scope and to cite the changed line. The tool's pr_paths check relies on the select job's filtering. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-scope-pr-files # Conflicts: # docs/conventions/pr-pipeline/README.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the ready-phase reviews of this change: - the reply job counts a cited pr_paths file only when the cited line falls in a hunk of the fix commit, so one thread's fix cannot land another thread's reply; - the review-thread tool admits a pr_paths file only as a regular file at the gated head, never a symbolic link; - the docs name the instruction paths the code enforces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis 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. |
|
claude-review reviewed Code review: PR #9444 (head c33c7ea)Result: no findings. I found nothing a careful reviewer would block on. I read the full diff ( What I checked
Minor observation (not a finding)
|
|
claude-security-review reviewed Security review: PR #9444 (head c33c7ea)No security findings. critical-findings: 0 I read the full diff and the PR context, and checked What I checked:
Residual risk, not a finding: the scope now includes scripts and code files that the PR already changes, such as repo-level |
…pr_paths claude-security-review found that pr_paths put this pipeline's own scripts and actions, and agent-instruction files, in every thread's edit scope. pr_paths now leaves out anything under .github/, CLAUDE.md, AGENTS.md, .mcp.json, .lsp.json, a .claude or .claude-plugin directory, and a plugin's hooks/, monitors/ and bin/. A thread on such a file still reaches it through its own scope. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No related issue: lane stop F22 on PR #9418 (Issue Triage)
Summary
On #9418, claude-review raised a valid finding anchored on
converge.md:243. address-feedback confirmed it but stopped withfeedback-uncertain: the fix belonged inconverge-plan.shplus a test, outside the thread's editable scope, although both files were already in the PR's diff. Any finding on a doc whose fix lives in a script stalled the PR this way.address-feedback may now edit any file the pull request already changes, rename sources included. Every existing refusal still applies:
.github/workflows/**,settings*.json, symlinks, gitlinks and backslash or off-normal-form paths;CODEOWNERS,.gitmodulesand the other instruction pathsthread-scope.mjsnames;resolve-config;patch-rules.jsonis unchanged).The ready-phase and claude-security-review reviews also kept control-plane and agent-instruction surfaces out of the widened set:
.github/;CLAUDE.md,AGENTS.md,.mcp.jsonand.lsp.json;.claudeand.claude-plugindirectories;hooks/,monitors/andbin/.A thread on one of those files still reaches it through its own scope. The tool admits a
pr_pathsfile only as a regular file at the gated head, never a symbolic link.A file the fix creates gets no scope from the PR's files; new files keep the old per-thread rules. A
VALIDreply lands from a fix in another PR file only when its evidence cites a line inside one of the fix commit's hunks in that file, so each thread keeps its own anchor.Fix
thread-scope.mjscomputes the set in one place.prPathsOfturns the PR's file listing intopr_paths, andinThreadScopeadmits apr_pathsfile the fix does not add.address-feedback.mjsselect writespr_pathsintothreads.jsonandrun.json. Both are SHA-pinned from the select job, so every enforcer reads the same set.feedback-thread.shallowed(), admits apr_pathsfile that exists at the gated head;apply-patch.mjskeptThreadsFromwith thekept-threadspredicate, admits apr_pathsentry unless the patch adds it;publish-feedback.mjsfixesLanded, does the same for the range, refusing a file that isadded,renamedorcopied, and accepts a citedpr_pathsfile as the thread's touched path.comments-ci.mdtells the model to runcheck-pathsbefore calling a file out of scope, and to cite the line it changed.pr-run-activity.mdand the READMEallowrow. Changelog fragments for pr-pipeline and source-control.The write runner copies
thread-scope.mjsfrom the base, so the widened scope takes effect only after this merges.Verification
node --testonthread-scope,address-feedback,publish-feedbackandapply-patch: 330 pass. New cases:CODEOWNERS,resolve-config, settings, the HIGH floor);pr_pathslists it;feedback-thread.test.shpasses, with newpr_pathscases for check-paths and record.scripts/check-affected.sh --tests: every lint check passes.test_guards,test_skill_contract,test_verify_rules_syncandtest_check_contract_clause_coveragepass when run directly withunittest. CI runs the rest.Related
🤖 Generated with Claude Code