fix: re-render managed review workflows for the Luna roster #9
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/luna-review-rerender"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This repo was still on the retired pre-Luna 5-slot review render, whose
approach-smart-2,approach-3, andcode-smart-2slots fail with validation 400s against the axrecipe 11 exchange endpoint — so every PR here has been getting a partially failing review. The re-render, from released@j4k/alignv1.110.3, deploys the current 8-slot Luna roster, the audited toolchain pins (@j4k/axrecipe@11.0.0,@j4k/axrun@12.0.0), and the audited review-writer pin bump.This PR schedules zero
pr-reviewjobs against itself:pull_request_targetreads the workflow from the base branch. That is expected and does not block merging — the roster runs on the next PR.Align withheld three visibility-dependent workflows in local-only
--fix-workflowsmode:checks.yml,dedupe-check.yml, andrelease.ymlare untouched here and unchanged from main. A follow-up forge-connectedj4k-align --fixrun reconciles them.Approach review: The approach looks good.
This is a mechanical re-render of two managed workflow files from a released generator (
@j4k/alignv1.110.3), replacing the retired 5-slot roster with the 8-slot Luna roster, bumping the toolchain pins to@j4k/axrecipe@11.0.0/@j4k/axrun@12.0.0, and moving the review-writer action to a new pinned commit. Regenerating rather than hand-patching is the right call for generated files, and the stated fix (slots that 400 against the axrecipe 11 exchange endpoint) matches what the diff actually changes.Checks on the rendered result:
generate-*jobs, theirname:values, theirSLOT/RECIPEenv pairs, the allowed-slotSetembedded in each context builder, and theslotsarray inobserve-review-writersall agree on the same eight names — no half-renamed lane.npm installlines carry the new pins; noaxrecipe@10.0.0/axrun@6.0.0remnants.github.event.action == 'opened', code lanes on any same-repository event), which is preserved from the previous render rather than introduced here.approach-smart-2/approach-3/code-smart-2references remain anywhere in the tree.The body's note that
pull_request_targetreads the workflow from the base branch is correct, so this PR exercising the old roster is expected and not evidence of a bad render.One observation, deliberately not filed as a comment: the file now carries roughly eight near-identical ~620-line job bodies, so per-lane edits scale linearly with roster size. Collapsing them into a matrix or reusable workflow is plausible in principle but constrained — the exact job
name:strings are load-bearing for the observer's name matching and for the per-recipe OIDC binding — and in any case that design belongs in the upstream generator, not in a hand-edit of generated output here. Nothing in this PR should change on that account.Approach review by Claude Code Opus (opus)
Summary: No blocking defects. The re-render is internally consistent; 1 low and 1 informational note.
What I verified mechanically against the working tree (both files are
@j4k/alignoutput, so any fix belongs upstream in the renderer, not as a hand edit here):pr-review.ymlhas 10 unique jobs (prepare + 8 generators + observer).forgejo-review-approach-smart-1block apart from the slot string, so the new lanes inherit the same OIDC-teardown, private-registry, setpriv, and supervisor handling.name:,SLOT:,RECIPE:, and the observer'sslot/generatorNamepair agree exactly; the observer matches on full string equality, soforgejo-review-code-lunacannot collide withforgejo-review-code-luna-2.Setin the context builder is identical across all 8 copies and in the observer, and lists exactly the 8 rendered slots.approach-smart-2/approach-3/code-smart-2/axrecipe@10.0.0/axrun@6.0.0references remain anywhere in the repo; the new pins appear 8 times, once per generator.opened-only, code lanes rerun on every same-repository update, and the observer'swaitForGeneratorreturns early on askippedgenerator, so the 3 new approach lanes do not hang the observer onsynchronize.observe-review-writersinherits the fork guard transitively vianeeds: prepare-review-tools, and its 95-minute timeout still covers the unchanged 60-minute generator wait plus the 30-minute publication window.The
forgejo-review-writerpin bump and the@j4k/axrecipe@11/@j4k/axrun@12bump are opaque here (network-pinned SHA and private registry); I took the PR body's audit claim at face value rather than verifying them.Code review by Claude Code Opus (opus)
@ -355,2 +355,3 @@"forgejo-review-approach-luna-3","forgejo-review-code-smart-1","forgejo-review-code-smart-2","forgejo-review-code-luna",ℹ️ Info: The code lanes render as
forgejo-review-code-luna,-luna-2,-luna-3, while the approach lanes render as-luna-1,-luna-2,-luna-3. The unsuffixed first code lane is used consistently in all six places it appears (allow-list, job key,name:,SLOT:,RECIPE:, observer entry), so nothing is internally inconsistent — butRECIPEis sent verbatim toaxrecipe forgejo-actions exchange --slotandaxrecipe run <recipe>.If the deployed axrecipe 11 roster actually names that recipe
forgejo-review-code-luna-1, this lane fails with exactly the validation 400 the PR is fixing, and the asymmetry is the kind of thing that hides such a typo. Worth a one-time confirmation against the server-side roster before this lands; no change needed ifforgejo-review-code-lunais the real recipe id.@ -3290,3 +5170,2 @@{slot: "forgejo-review-code-smart-2",generatorName: "forgejo-review-code-smart-2 generator",slot: "forgejo-review-code-luna",🟢 Low: The roster grows 5 → 8 slots, but the writer-side windows it feeds are unchanged, and
pr-review-post.ymlserializes every slot for one PR (concurrency.group: pr-review-post-<number>,cancel-in-progress: false, queue enabled) withtimeout-minutes: 3per run.publishanchors bothlatestSafeDispatchDeadline(27 min) andpublicationDeadline(30 min) at the moment its own generator finalizes. Generators start together and share a 30-minute cap, so simultaneous finalization is the normal case, not the pathological one: all 8 dispatches then land in one serialized queue. If runs approach their 3-minute budget, the 8th completes ~24 minutes after the first starts — inside the 30-minute window, but with ~6 minutes of headroom against runner queue latency, versus ~15 minutes of tail (and double the headroom) at 5 slots. The retry inpublishappends a 9th run to the same queue. Overrunning surfaces asreview writer did not finish inside the publication windowand fails the observer even though every generator succeeded.No action in this file (it is generated). Worth confirming upstream in
@j4k/alignthat the 27/30-minute constants were re-derived for an 8-slot roster, or that the writer concurrency group fans out per slot (pr-review-post-<number>-<slot>) so the tail no longer scales with roster size.