Repository navigation
feat(pr-pipeline): restore pr-refine as the refine stage for fix-docs - #9332
Conversation
pr-refine.yml takes fix-docs, its subscription fallback and its push job out of pr-unblock.yml, and pr-pipeline.yaml gains lanes.pr-refine (stage refine: fix-docs, then apply-patch). pr-unblock-dispatch.yml dispatches pr-refine.yml once per PR; a pr-unblock / fix-docs run counts as done. The person-only filter goes: every PR is tidied except Dependabot's, the release App's and the standards-sync App's, excluded by account id. Both runners pick the dispatched workflow by lane, and refire-refused covers dispatched pr-refine runs again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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: #9332 restore
|
|
claude-security-review reviewed Security review: PR #9332 (head f0f6070)I found no security issues in this change. I read the full diff (all 23 files) and the PR context. critical-findings: 0 No plugin manifest changed ( What I checked:
The instruction-exception register was not consulted. No standing instruction ( |
|
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=9332 -f activity=resolve-conflicts |
# Conflicts: # .github/actions/resolve-config/callers.test.mjs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reply to the claude-review summary on
The security review reported no findings, and Codex's code review reported none either. The head moved since the review. Besides the fix, |
… refire A pr-refine run is a workflow_dispatch on main, so an empty commit on the PR cannot make it pass; it only restarts CI and the review lanes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix-docs-subscription started on fix-docs's lane-class and credential-present outputs, which its head-code run job can forge. A fix-docs-handoff job now runs fix-ci-handoff's jobs-API read, and the fallback starts only when the broker allowed fix-docs and its report posted no check. Refs: #8890 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reply to the claude-review summary on
|
# Conflicts: # .github/actions/resolve-config/callers.test.mjs # docs/conventions/pr-pipeline/pr-run-activity.md
fix-docs-subscription no longer reads a fix-docs output anywhere, so the run-job-output test drops its pending entry and lists the leg under pr-refine.yml. Refs: #8890 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
claude-review holds this pull request for a person (cost) at
claude-lane: claude-review |
apply-docs-patch took patch-state, patch-sha256, patch-attempt, reply-attempt and the head from fix-docs run-job outputs, which head code can forge. It now takes one leg and that leg's scan-* outputs, and the head from fix-docs-head, as fix-ci's apply-patch does. Refs: #8890 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .github/lane-funding.json
|
claude-review holds this pull request for a person (cost) at New workflow .github/workflows/pr-refine.yml adds model-run jobs (fix-docs, fix-docs-subscription), and .github/scripts/pr-unblock/fix-docs-dispatch.mjs removes the person-only author filter, so fix-docs now also runs on lanes App PRs and other bot PRs, excluding only Dependabot, the release App and the standards-sync App. This widens model spend. The PR cites owner decisions Q38, Q42 and D8 and says azure-iac#80 is deployed; a person should confirm both before merge. claude-lane: claude-review |
A hold comment can be edited or deleted by anyone with write access, so a trust-gate hold edited to read `criteria=cost` would have been cleared. The step now reads every hold from the `claude-lane-hold` notice each lane's status job records, keeps the label when the lanes App commented or a comment was deleted in the window, and needs `checks: read`. It also accepts a decision on an issue the body names on a `Refs:` line, which is how #9332 cites #9306. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s-on-run-claude-cli Compose callers.test.mjs: keep main's move of fix-docs to pr-refine.yml (#9332), with fix-docs in SCAN_ONLY and HANDOFF, and this branch's resolve-conflicts read-runner, scan-only and handoff entries. Compose pr-pipeline/README.md: main's takeover-set HIGH floor (#9413) with this branch's merge-base path and blob caps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs: #9306
Refs: #8890
Depends on melodic-software/azure-iac#80 (deploy first)
Summary
The owner restored Refine as its own stage, which tidies every PR, lane-App PRs included (Q38, Q42; D8 accepted the model spend at the existing cap of 2 per push).
fix-docsmoves out ofpr-unblockinto a restoredpr-refinelane, dispatched by the existingpr-unblock-dispatch.yml. The broker change that admits a dispatchedpr-refine.ymlrun is melodic-software/azure-iac#80. Until that is deployed, the broker refuses everypr-refinemint asuntrusted-actor, so it must deploy before this merges.Fix
.github/workflows/pr-refine.yml(new):workflow_dispatchonly, with inputspr-number,activity(choice:fix-docs) anddispatcher-run-id. Run-namepr-refine <activity> #<pr>, concurrency per activity and PR. It takesfix-docs-head,fix-docs,fix-docs-subscriptionandapply-docs-patchfrompr-unblock.ymlunchanged exceptlane: pr-refine; the write queue stayspr-pipeline-write-<pr>..github/workflows/pr-unblock.yml: drops thefix-docsoption, its header text and those four jobs.docs/conventions/pr-pipeline.yaml: addslanes.pr-refine(stagerefine, slotsfix-docs, thenapply-patchwithneeds: [fix-docs]).pr-unblock'sapply-patchnow needs onlyfix-ci. The cap stays atlimits.fix-docs-per-run: 2, once per PR.pr-run-activity-read.ymlandpr-run-activity-write.yml:dispatched-workflowispr-refine.ymlwheninputs.lane == 'pr-refine', elsepr-unblock.yml..github/scripts/pr-unblock/fix-docs-dispatch.mjs:pr-refine.ymlwith check namepr-refine / fix-docs, the<lane> / <activity>namereport-check-run/decide.mjs:68posts.pr-refine / fix-docsandpr-unblock / fix-docs: on the head's checks, in the 50-commit history query (two aliasedcheckRunsfields) and in the dispatch record. A head recorded under the old name is re-recorded under the new one.runTitlealways producedpr-unblock …, so it would never have matched apr-refinerun.databaseId, and skips an author with no id:pr-unblock-dispatch.ymlanddispatch.mjs: prose, theactions: writecomment, and the new history-query variable..github/scripts/pr-merge/refire-refused.mjsis unchanged. It still leavespr-refine.ymlout: apr-refinerun is aworkflow_dispatchon main, so an empty commit on the PR cannot make it pass. After aworkflow-modifiedrefusal, a listed person re-dispatchespr-refine(review finding, fixed in 38a39ad).lane-funding.json(the fix-docs rows namepr-refine.yml),docs/conventions/pr-pipeline/README.mdandpr-run-activity.md(the trailer is nowLane-Activity: pr-refine/fix-docs),docs/conventions/loop-lane/posting-lanes.md(pr-refinerows; review finding, fixed in 808cdc5), and a fragment under.changes/pr-pipeline/.plugins/harness-ops/skills/morning-brief/scripts/morning-brief.sh: listspr-refine.ymlamong the default lane workflows again (removed in chore(pr-pipeline): drop pr-refine.yml leftovers from pr-merge refire and morning brief #9039), with a fragment under.changes/harness-ops/.morning-brief.test.sh: 450 cases pass.fix-docs-subscriptionstarted onfix-docs'slane-classandcredential-presentoutputs, and the head-code run job can forge both.pr-refine.ymlgains afix-docs-handoffjob (onlyactions: read, no checkout, no secret). It runs fix(pr-pipeline): derive fix-ci's fallback, restart count and head binding from trusted jobs #9363's jobs-API read, the same step text asfix-ci-handoff, and a test pins the two equal.fix-docsand its report job posted no check.fix-docsposts nothing on a decline (post-decline: false), so the broker's allow keeps a kill switch or refusal from starting a second leg.fix-docs-dispatch.mjsdispatches the PR again.fallback, the lane record's label, is still chosen fromlane-class, so a forged value only mislabels the record.callers.test.mjsfailed before the change. pr-unblock: derive fix-ci-subscription's start and the restart cap from trusted values #8890 stays open, since fix(pr-pipeline): start the address-feedback and review-dependency subscription legs from trusted values #9365 covers the other lanes.fix-docs-subscriptionpassesfallback: handoff, as the other lanes do since fix(pr-pipeline): start the address-feedback and review-dependency fallback calls from trusted values #9368, so no part of it reads afix-docsoutput.apply-docs-patchno longer takespatch-state,patch-sha256,patch-attempt,reply-attemptandpatch-head-shafromfix-docsrun-job outputs, which head code can forge.apply-patch, it takes one leg (the fallback call when it ran, else the first) and that leg'sscan-*outputs. The head comes fromfix-docs-head.writtenpatch.babysit_risk.pyHIGH_FLOOR.Verification
Stray stash pop, cleaned up. While merging main for fix(pr-pipeline): start the address-feedback and review-dependency fallback calls from trusted values #9368, a failed
git stash pushwas followed by astash pop, which applied an older, unrelated local stash (a numpy bump)..changes/{animation,playwright}/bump-numpy-2-5-4.md,.github/requirements-ci-animation.txtandplugins/playwright/skills/demo-video/requirements.inare absent (checked withgit diff origin/main...HEAD --name-only).TDD. New and changed cases failed before the code change:
fix-docs-dispatch.test.mjs: workflow, check names, author ids, old-name history and record.Suites, all passing:
node --test .github/actions/resolve-config/*.test.mjs.github/scripts/pr-unblock,pr-merge,apply-patch,request-lane-token,check-trusted-triggerfix-docs-dispatch.test.mjsactionlinton the six changed workflows: clean.scripts/check-affected.sh --testson the head after mergingorigin/main: 11 passed, 3 skipped, 0 failed. The first run caughtscripts/read-runner-dispatcher-gate.test.sh, which pinneddispatched-workflowtopr-unblock.yml; it now asserts the lane expression.Broker compatibility. The deployed broker's pinned resolver (azure-iac
resolve-config.pin39fed34) was run on this head'spr-pipeline.yamland trust files.pr-refine/fix-docsresolves toread(contents, pull-requests and issues read).pr-refine/apply-patchresolves tomutate-branch(contents write).pr-unblockslot grants the same as onorigin/main; the only difference is thatfix-docsmoved lanes.BROKER_PATHSfile changed, so no broker pin PR is needed.Account ids:
gh api users/<login>: dependabot[bot] 49699333, melodic-plugin-release[bot] 337859524, melodic-standards-sync[bot] 300666570..github/standards/trusted-actors/trusted-actors.json.author { ... on Bot { databaseId } }returns them on open PRs build(deps): Bump ip-address from 10.7.2 to 10.7.4 in /plugins/miro/server #9131, chore(release): release 2 plugins #9304 and chore: sync standards components #9305.feat(pr-pipeline): restore Refine as its own stage that tidies every PR before review #9306 stays open after merge: its last criterion, one live
apply-docs-patchcommit on a canary PR, can only run oncepr-refine.ymlis on main, since apr-refinerun is dispatched from main's tip. Record that commit's SHA on the issue (feat(pr-pipeline): restore Refine as its own stage that tidies every PR before review #9306) when it lands, then close it.Not yet run: the sandbox canaries in the plan. These are a manual dispatch on a person's PR, a lane-App PR picked up, the skips for Dependabot, release, draft and held PRs, and no re-dispatch where a
pr-unblock / fix-docsrun exists.Related
pr-refine.ymlas a dispatched workflow; merged and deployed.🤖 Generated with Claude Code