ci(town-crier): auto-resolve bus thread on 2-approval consensus#7
ci(town-crier): auto-resolve bus thread on 2-approval consensus#7jasperboerhof wants to merge 2 commits into
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Town Crier Review · 9/10 · PASS · 🔎 Independentkendo-report-tool #7 · AC anchor: PR description · head Tip Single-file CI-config PR adding a 2-approval consensus auto-resolve job (plus a No findings — clean against the review checklist. |
Goosterhof
left a comment
There was a problem hiding this comment.
✅ Approve-worthy
0 blockers · 0 concerns · 1 nit · 1 praise · 0 inline
Round 1. Bus thread round 2 — confirming @Jasper's independent PASS 9/10.
Single-file CI-config PR porting the 2-approval consensus auto-resolve job (plus the synchronize re-announce trigger) into this repo's town-crier producer, bringing it to parity with kendo's deployed announce-pr.yml. The byte-identity claim checks out: the head file hashes to eb9ccfe3b280577ae8a9f08c4afee134da8e9185d56e8cb1b97118636f3e3074, identical to origin/development:.github/workflows/announce-pr.yml on kendo. CI green (announce, check (8.4), check (8.5)); consensus/resolve skip correctly on this event.
Cross-file findings
Head-filter asymmetry (nit, not a defect). The consensus tally filters approvals to the current head (.state == "APPROVED" and .commit_id == $head) but counts CHANGES_REQUESTED head-blind. I walked the two regimes: with dismiss_stale_reviews on, a stale CR is DISMISSED and the latest-per-reviewer group_by | max_by(.submitted_at) drops it; with the setting off, a CR cast on an earlier head stays CHANGES_REQUESTED and blocks consensus even after the concern is fixed on a new head. That is the conservative direction — a stale CR holds the thread open rather than waving a regression through — so it is correct as written. Worth a one-line comment that the asymmetry is deliberate, since a future reader will ask why one side is head-filtered and the other is not.
Praise: the NDJSON-via---paginate --jq '.[]'-then-jq -s slurp explicitly avoids gh api --slurp (newer-gh only) — a real portability decision against the runner's gh version, not boilerplate, and the inline comment naming it earns its place.
Verified parity against kendo and re-simulated the head-filter edge that @Jasper already covered; nothing to add to the consensus correctness case. Clean port.
Automated war-room agent review — posted because this PR carries the Agent Review Requested label.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
The merge-base changed after approval.
Town Crier Review · 9/10 · PASS · 🤝 Confirmkendo-report-tool #7 · AC anchor: PR description (config-only parity port of kendo's announce-pr.yml 2-approval consensus auto-resolve job; no board issue) · head Tip Single-file CI-config PR porting kendo's deployed 2-approval consensus auto-resolve job (plus the synchronize re-announce trigger) into this repo's town-crier producer. Corroborates the prior reviews: byte-identity to kendo's origin/development verified independently (sha256 eb9ccfe3…), and the consensus jq holds across the off-happy-path cases — head-filtered approval tally, latest-per-reviewer dedup, and job-scoped pull-requests:read least-privilege all check out. The one nit raised on the thread (CHANGES_REQUESTED tally is head-blind, unlike the head-filtered approvals) is benign by direction — a stale CR can only block consensus, never cause a false auto-resolve. Clean parity port; nothing refuted. No findings — clean against the review checklist. Bus thread · 2 prior review(s):
|
Town Crier Review · 9/10 · PASS · 🔎 Independentkendo-report-tool #7 · AC anchor: PR description (task, no linked issue) · head Tip Single-file CI-config PR adding a No findings — clean against the review checklist. |
|
removed the file |
Adds the 2-approval consensus auto-resolve job to this repo's town-crier producer workflow, matching the version merged to kendo (
development, 2026-06-23).What it does: on an
approvedreview of anAgent Review RequestedPR, it tallies distinct current-head approvals; once ≥2 agree with no outstanding CHANGES_REQUESTED it POSTs/resolveto the bus to de-announce the thread (further review turns are churn once two independent approvals agree). Stale approvals cast on an earlier head are filtered out, so a regression pushed onto a reviewed head can't satisfy consensus.Also adds the
synchronizere-announce trigger (re-review on push) — this repo's workflow was missing it, bringing it to parity with the other producers.No new secrets — reuses the existing
TOWN_CRIER_URLvariable +TOWN_CRIER_TOKENsecret; the consensus job only adds in-workflowpull-requests: read.The
announce-pr.ymlis byte-identical to kendo's deployed version (sha256eb9ccfe3…).🤖 Generated with Claude Code