Repository navigation
feat(pr-pipeline): refine thin issues at intake triage - #9310
Conversation
refine.mjs decides whether an issue is thin, writes the context a read-only model run reads, and posts the run's structured output as a separate lanes App comment. admit.mjs counts the task list in that comment for criterion 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
refine-select picks a thin issue with the job's read token, refine-issue runs the model with contents read only, apply-refinement posts its output through the existing intake self-job mint, and redispatch-refined triages an exact refinement once more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… code span Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Only issues and pull requests a listed human or the lanes App opened reach the refinement model as duplicate candidates. - Refinement text cannot add a markdown link, a URL, or a GH-N reference. - Criterion 7 counts a refinement only when it is newer than the body's last edit, and the work lane's issue.json keeps it as refinement. 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-security-review needs no new review of No security issues in the incremental change ( critical-findings: 0
Manifest items: none touched in this increment. No instruction-surface deletions. No trust-gate paths touched. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3307ea3e6a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-review needs no new review of Incremental review of What changed. What I checked by reading the code. I did not run the tests.
Closing issue #9215. The incremental change does not alter how the three criteria are met. The refinement comment, the read-only run with a script-side write, and Hold. No hold class applies to these two files. The Manifests. The change touches no plugin manifest, so no |
…e labels - applyRefinement skips an issue whose title or body changed since the context the model read. - Labels change before the marker comment, so a failed label update leaves no marker and a later refinement can finish. - line() also breaks `www.` autolinks. - The admit doc comment sits above admit again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed add now leaves the issue at needs-decision instead of with neither label, so the sweep still reaches it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he labels Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The pr-unblock lane stopped on this pull request and needs a person: the merge stages a change under .github/workflows/, which the lane does not push.
To resume, deal with the reason above, remove the gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=9310 -f activity=resolve-conflicts |
Keeps both sides of admit.mjs: decide() takes the refinement comments, bodyEditedAt and webHosts, and the unrunnable check reads the refinement's task list with the body; noteUnrunnable passes comments to sayWhy. The refine-issue funding entry gains triggers and gate, and the gate test recognizes refine-select's author gate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An exact refinement of a status: ready issue without agent-ready or needs-decision adds needs-triage and asks for one more triage, so admission reads the new criteria. The marker still allows it once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
claude-review holds this pull request for a person (cost) at Adds a new model run: the claude-lane: claude-review |
…ritten line() breaks :// and www. with a zero-width space, which hid a refined criterion's outside-host page from unrunnableCriteria. decide() now strips the break before that check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
ci-status removed |
Closes #9215
Cost decision: #9215 (comment)
Summary
Intake triage now refines a thin issue: one whose verdict flags
intent, or whose body has no task list. A read-only model run explores the repository, searches issues and pull requests, and reads the allowed docs. The lanes App then posts one marked refinement comment. It never edits the issue body.- [ ]task list. Astatus: needs-decisionlabel that the lanes App set is lifted, and triage runs once more so the issue can be admitted. Aneeds-decisionlabel set by a person stays.status: needs-decision.Fix
.github/scripts/intake-triage/refine.mjs(new):selectRefinementpicks the issue and writes the model's context, including pre-fetched duplicate candidates.validateOutputchecks the model output against a closed schema and drops related work that is not a fetched candidate.renderkeeps model text from forging the marker, a mention, a task-list line or an extra line.applyRefinementposts the comment and sets labels.admit.mjsdecide(): criterion 7 also counts- [ ]lines from the lanes App's own refinement comment, matched by account id, not login.intake-triage.yml: four jobs:refine-select,refine-issue(the model, with contents read only),apply-refinement(App token) andredispatch-refined(dispatch grant only).applyRefinementwrites nothing on an issue the App already refined.line()also escapes[,],(and)and breaksGH-Nreferences and://. Criterion 7 counts a refinement only when it is newer than the body's last edit. The work lane'sissue.jsonkeeps the refinement asauthor_kind: refinement, so the lane sees the criteria that admission counted (/work-items:workdocuments the new kind).triage-issueroute, because the broker's pinned config resolver rejects a new route name. Config and funding entries and a changelog fragment are included.Verification
node --test .github/scripts/intake-triage/refine.test.mjs .github/scripts/intake-triage/admit.test.mjs: 75 passed. This includes a test that a second exact refinement re-runs no triage and writes nothing, and tests that look-alike refinement comments from another author are ignored.node --teston the intake-triage and write-issue suites: 172 passed. This includes new tests that fail without the fixes: an outsider's candidate is dropped, link and reference escaping holds, a refinement older than a body edit is refused, and the work lane keeps the refinement.check-affected --tests: 12 passed, 2 skipped. actionlint and zizmor are clean onintake-triage.yml.Related
🤖 Generated with Claude Code