fix: re-render the managed review workflows onto the Luna roster #50
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 five-slot review render, whose
approach-smart-2,approach-3, andcode-smart-2slots fail with validation 400s against the axrecipe 11 exchange endpoint — so reviews on every PR here have been partially failing. Re-rendering from released@j4k/alignv1.110.3 deploys the current eight-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, so the change only takes effect for PRs opened after it merges. That absence is expected and does not block merging.Approach review: Sound. Re-rendering the managed workflows from released
@j4k/alignv1.110.3 is the right move — hand-patching the three failing slot names in a generated artifact would be reverted by the next render, and the alternative of pinning the repo to the retired five-slot roster just keeps the 400s.I verified the render is internally consistent against the working tree rather than trusting the diff alone:
name:,SLOT:, andRECIPE:agree (approach-smart-1,approach-luna-1/2/3,code-smart-1,code-luna,code-luna-2,code-luna-3). The unsuffixedcode-lunais consistent everywhere it appears, so it reads as an intentional roster name, not a dropped-1.slotsallowlist in the context builder is identical in all 8 jobs and matches the roster; theobserve-review-writersslot/generatorNametable matches it too, so no generator can finalize into a slot the observer will not watch.@j4k/axrecipe@11.0.0 @j4k/axrun@12.0.0in all 8 install sites with no10.0.0/6.0.0left in the file.pr-review-post.ymlonly bumps the review-writer pin; it passesslotstraight through and carries no roster of its own, so nothing there needed updating.The PR body's note that this schedules zero
pr-reviewjobs against itself is correct —pull_request_targetresolves the workflow from the base branch — so the absent checks here are expected and not evidence of a broken render.One non-blocking observation, and it belongs upstream in
@j4k/align's renderer rather than in this PR: normalizing the slot string out, the 8 generator jobs are byte-identical bodies of ~620 lines each, which is why adding 3 slots grew this file by ~1,900 lines to 5,358. Astrategy.matrixover the slot list withname: ${{ matrix.slot }} generatorwould express the same roster once, and the observer's exact-name matching would still work since each matrix leg gets its own named check run. I am not suggesting that change here — this file is generated, so a hand-edit would be lost at the next render, and the duplication is inherited rather than introduced by this PR.No material alternative for the change as scoped.
Approach review by Claude Code Opus (opus)
Summary: No actionable defects found; 1 informational note.
This is a mechanical re-render of the two managed review workflows. I verified the render is internally consistent and that the new writer pin actually supports the new roster:
approach-smart-1,approach-luna-1/2/3,code-smart-1,code-luna,code-luna-2,code-luna-3) agree across every place they appear: the eightgenerate-*job ids, each job'sname:, each job'sSLOT/RECIPEenv pair, theslotsallowlist embedded in all eight context-builder scripts, and the coordinator'sslotsdispatch table inobserve-review-writers. No staleapproach-smart-2,approach-3, orcode-smart-2reference survives anywhere in the repository.if:(every same-repository update) while approach lanes keep thegithub.event.action == 'opened'gate. Nothing was hand-edited into the four new blocks.@j4k/axrecipe@11.0.0 @j4k/axrun@12.0.0is applied uniformly in all eight generators (eight occurrences, one per job); theprepare-review-toolsartifact build is untouched. I could not verify those versions exist or that their CLI surfaces are unchanged — the@j4kregistry returns 401 unauthenticated — so the unchangedaxrecipe forgejo-actions exchangeandaxrecipe runflag sets rest on the audit asserted in the PR description.forgejo-review-writer@2e31dcf54ddcf737be53712c5d60108dd65fd5ddresolves, is the current head of that repository'smain, and its commit is "feat: accept expanded Luna review slots". Itsaction.ymldeclares exactly the nine inputspr-review-post.ymlpasses, and itsREVIEW_SLOTSallowlist matches this roster byte-for-byte — including the asymmetricforgejo-review-code-lunawith no-1suffix, which is therefore intentional rather than a render slip.The PR description's claim that this schedules zero
pr-reviewjobs against itself is consistent with the workflow triggering onpull_request_target.Code review by Claude Code Opus (opus)
@ -3293,0 +5176,4 @@generatorName: "forgejo-review-code-luna-2 generator",},{slot: "forgejo-review-code-luna-3",ℹ️ Info: Growing the roster from five slots to eight tightens the finalized-writer publication margin, and nothing else in this change compensates.
pr-review-post.ymlserializes every writer for a PR throughconcurrency: pr-review-post-${number}withcancel-in-progress: false. Dispatch itself is not serialized —publishfires all eightworkflow_dispatchcalls concurrently — butwaitForRunthen holds each slot topublicationDeadline = generator finalization + 30 minuteswhile the queue drains onepost-reviewjob at a time. Because the four code lanes start together and finish at broadly similar times, their 30-minute windows overlap heavily, so the queue must retire roughly eight runs inside one window rather than five: about 3.75 minutes per run of budget, down from about 6. Each run carries a 3-minute job timeout plus runner queue time that the timeout explicitly excludes (see the comment atpr-review-post.yml:45-48).That still fits if writers land near their typical cold-start-plus-post duration, and the writer independently rejects expired work, so this is not a defect in the render — the failure mode is a coordinator
review writer did not finish inside the publication windowon the tail slot, not a bad review. Worth watching on the first few post-merge runs; if it bites, the fix belongs upstream in the@j4k/aligntemplate (a wider publication window or a partitioned concurrency group), not in this repository.