Skip to content

ci(permit): move the quorum to Gemini 3 Flash + GPT-5 mini (generation-3 candidate) - #72

Draft
peycheff-com wants to merge 2 commits into
mainfrom
ci/permit-reviewer-quorum-gen3
Draft

ci(permit): move the quorum to Gemini 3 Flash + GPT-5 mini (generation-3 candidate)#72
peycheff-com wants to merge 2 commits into
mainfrom
ci/permit-reviewer-quorum-gen3

Conversation

@peycheff-com

Copy link
Copy Markdown
Contributor

Draft on purpose — a generation-3 candidate, not a merge request. Same posture as #71 and
helm-ai-kernel#701: it amends the
authority and must not land under the generation it amends. Cut this way because
#57 was closed under the HELM-350 operator
disposition of 2026-07-23
, which puts moving the ruleset-pinned workflow SHA out of scope and
requires a successor model bump to carry its own operator decision.

Operator decision on record for this one: reduce reviewer cost, drop Anthropic and OpenAI flagships.

What it changes

before after per 1M in/out
lane 1 anthropic/claude-fable-5 google/gemini-3-flash $0.50 / $3.00
lane 2 openai/gpt-5.6-sol openai/gpt-5-mini $0.25 / $2.00

There is no zero-cost lane to move to: since the 2026-06-01 shift to usage-based billing every
Copilot model is metered per token, and Copilot code review consumes AI credits per review as well.
The lever is which models, and how much is sent to them (#70 covers the second).

--anthropic-model / --openai-model become a repeatable --reviewer PROVIDER/MODEL, validated
for distinct providers and a minimum of two. The vendor names were baked into the flag surface, so
changing reviewers was a code change. The Go verifier never knew them — it only requires each
reviewer object to carry provider and model — so nothing outside this repository moves.

Interaction with #71 / kernel#701

Those two fix the severity half of the same problem, with measurements this change does not
duplicate: deny rate 14% vs 64%, blocking findings 7 vs 39, and one lane using P2/P3 while the other
uses P1/P2. Changing the models without their rubric change would carry that scale divergence over
to a new pair. Sequence this after them, or the same unsatisfiable-by-iteration behaviour
returns under different names.

Known cost

Over eight rounds on helm-ai-kernel#693
the flagship pair found two real defects the author missed — an unprotected boundary configuration
and an unconditional commercial-gate failure. Cheaper reviewers may not. That is the trade being
bought, and it should be bought deliberately.

49 tests passing.

🤖 Generated with Claude Code

mindburnlabs and others added 2 commits July 26, 2026 23:30
Cost, measured on helm-ai-kernel#693: the review patch is 158,394 bytes, and
78KB of it — 74% — is tools/boundary/protected.manifest, a sorted SHA256 index
of the protected surface. That PR went through nine permit rounds with two
reviewers each, so the same generated hash list was sent to a metered model
eighteen times. It carries nothing a reviewer can act on: its content is a pure
function of the other files in the same patch, and `make verify-boundary`
regenerates and byte-compares it in the same run.

prepare gains --elide-derived PATH (repeatable, exact paths only). The named
file's diff body is withheld and the patch drops to 42,002 bytes, a 73%
reduction, with the reviewable changes untouched.

Nothing is hidden. Each elision is declared twice — as a stub in patch.diff
carrying the post-image SHA256, byte size and line counts, and as an entry in
context.json under elided_derived_paths, which is covered by context_sha256 and
therefore bound into the permit. The review protocol now tells the reviewer the
block exists, that its content is a claim rather than a fact, and that an
unjustified elision is a blocking finding.

The list lives in this SHA-pinned workflow repository and deliberately not in a
file the pull request can edit: a list the PR controls would let a change add
its own path and hide itself from review.

Guards: globs and directories are rejected, so an elision cannot widen; path
traversal is rejected; and a configured path that is not in the patch produces
no record at all, so a stale entry cannot become a licence to hide a future
file.

Six tests, three of them negative. prepare_args gains elide_derived=[] — without
it every existing prepare test raised AttributeError.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cost. Since the 2026-06-01 move to usage-based billing there is no 0x model tier
left to switch to — every model is metered per token, and Copilot code review
consumes AI credits per review as well. The lever is which models and how much
we send them.

claude-fable-5 and gpt-5.6-sol are flagships. gemini-3-flash ($0.50/$3.00 per 1M)
and gpt-5-mini ($0.25/$2.00) are the cheapest pair that keeps two DISTINCT
providers, which is the property the 2-of-2 quorum actually depends on.

The reviewer flags were named after vendors, so changing them was a code change.
--anthropic-model/--openai-model become a repeatable --reviewer PROVIDER/MODEL,
validated for distinct providers and a minimum of two. The Go verifier never
knew the vendor names — it only requires each reviewer object to carry provider
and model — so nothing outside this repository moves.

The elision declaration also moves out of context.json. The verifier calls
requireKeys(context, ..., optional=nil), which rejects any key it does not know,
so shipping a new context key would have failed every permit in every repository
until the kernel verifier and the pinned authority.kernel_sha were bumped in
lockstep. It now lives only in patch.diff, at the same artifact-chain trust level
as the patch it describes. Binding it to context_sha256 is strictly better and is
the follow-up, gated on that verifier change.

Note the quality trade: over eight rounds on helm-ai-kernel#693 the flagship pair
found two real defects the author missed — an unprotected boundary config and an
unconditional commercial-gate failure. Cheaper reviewers may not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

2 participants