Skip to content

ci: call the canonical agent jury instead of a local copy - #135

Open
todie wants to merge 3 commits into
mainfrom
ci/agent-jury-canonical-caller
Open

ci: call the canonical agent jury instead of a local copy#135
todie wants to merge 3 commits into
mainfrom
ci/agent-jury-canonical-caller

Conversation

@todie

@todie todie commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Replaces this repo's local jury workflow(s) with a thin caller of cerebral-work/.github/.github/workflows/agent-jury.yml@v1.

Removed: `.github/workflows/agent-jury.yml` `.github/workflows/code-review.yml`
Added: .github/workflows/agent-jury.yml (12 lines)

Why

A census on 2026-08-16 found the jury copy-pasted into 39 repositories in 11 distinct versions across two filename families — agent-jury.yml (22 copies) and code-review.yml (20 copies), frequently both in the same repo. A fix landed in one repo reached none of the others.

The canonical implementation is the most advanced of those variants and carries:

  • the three-tier pass/fail/error split, so a gateway failure stops reading as a rejection
  • the 60000-byte diff budget that fixed confident false blockers caused by the reviewer describing its own truncated input
  • the verdict enum whitelist, closing GITHUB_OUTPUT forgery via newline injection from model output
  • dual key sourcing (Actions secret, or the ARC runner environment)

Note for reviewers

The check name gains a job prefix: jury / GLM-5.2 code review. No branch protection in either org referenced the old bare name — verified across all 13 jury repos, and on the Free plan private repos cannot have required checks at all.

todie added 3 commits August 16, 2026 05:56
Replaces this repo's local jury workflow(s) with a caller of
cerebral-work/.github/.github/workflows/agent-jury.yml@v1.

A census on 2026-08-16 found the jury copy-pasted into 39 repositories in 11
distinct versions across two filename families (agent-jury.yml and
code-review.yml, frequently both in the same repo). Fixes landed in one repo
reached none of the others, so most repos were running a version months behind
and nobody could tell which.

The canonical workflow is the most advanced of those variants, carrying the
three-tier pass/fail/error split, the 60000-byte diff budget that fixed the
truncation false-blockers, the verdict enum whitelist that closes GITHUB_OUTPUT
forgery, and dual key sourcing.

No behaviour is lost. The check name gains a job prefix and becomes
"jury / GLM-5.2 code review"; no branch protection in either org referenced the
old bare name.
The self-hosted default cannot reach the LLM gateway from this org. The
cerebral-work-runners base NetworkPolicy permits DNS, public 443 with RFC1918
explicitly excluded, traefik:8443 and apiserver:6443 — nothing else. The
gateway is a ClusterIP on :4000 inside 10.0.0.0/8, so jury jobs scheduled
there fail HTTP 000 (transport) rather than reaching the gateway at all.

Measured on terrarium#206: three-tier split correctly reported
'error — review not delivered, HTTP 000' rather than a false rejection.

arc-runners/reverie carries the matching pair (reverie-llm-egress plus
allow-arc-runners-ingress in ns llm) and works today, so this is a pin to a
working pool rather than a workaround.

The durable fix is to give cerebral-work-runners the same policy pair that
unsigned-gg-runners 0.2.8 already ships and 0.1.5 lacks; this override comes
out when that lands.
The canonical reusable workflow lives in cerebral-work/.github, so
`secrets: inherit` silently delivers NOTHING to a caller in unsigned-gg.

Measured today across four conversions using the identical caller:
  cerebral-work/cortex  #65   -> verdict delivered, approved
  cerebral-work/reverie #1671 -> verdict delivered
  unsigned-gg/vilicus   #21   -> 401 'Authentication Error, No api key passed in'
  unsigned-gg/soma      #98   -> 401, same body

The 401 body is the tell: 'No api key passed in' means the value was EMPTY,
not wrong. The repo secrets were seeded 21 seconds before those runs started,
so staleness is ruled out; the difference is purely which org the caller is in.

Explicit passing works same-org and cross-org, so all callers use one shape
rather than branching on org.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant