fix(ci): restore the AI auditor — upgrade the firewall/api-proxy and pin the model - #262
fix(ci): restore the AI auditor — upgrade the firewall/api-proxy and pin the model#262WomB0ComB0 wants to merge 3 commits into
Conversation
The Gemini router resolved the proxy's `gemini-3.1-flash` alias through the glob `gemini-3.1*flash*`, which also matches `gemini-3.1-flash-tts-preview` — a text-to-speech model carrying no entry in the AI-credits pricing table. Every call was rejected `unknown_model_ai_credits`, so the job exited 144 having read zero files and consumed zero tokens. It failed this way on #259, #260 and #261 alike. Pinning `engine.model` removes the router's freedom to reach a model the pricing table does not cover. Recompiled with gh-aw v0.79.4 to match the four committed lock files; the `actions/checkout` and `actions/setup-node` pins are held at the v7.0.0 SHAs Dependabot moved them to, which a plain recompile would have reverted to v6. Also allowlists the six SHA-pinned workflow files the secrets scanner still flagged as high-entropy hex — including every generated `*.lock.yml`, which made any commit touching them unlandable. Each was checked first: all their 40-char hex strings are action pins, manifest entries or image digests, and nothing else.
|
Warning Review limit reached
Next review available in: 14 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (9)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
resq-design | b195dd0 | Commit Preview URL Branch Preview URL |
Aug 12 2026, 10:53 PM |
Pinning GEMINI_MODEL alone was not enough. The CLI does request the pinned model, but the proxy runs with enableTokenSteering and resolves the request through its alias globs: `gemini-2.5-flash` still matched `gemini-3.1*flash*` and landed back on the TTS preview. The auditor ran green from 2026-07-27 to 2026-08-10 and has failed every run since, so this is a provider catalogue regression rather than a bad engine choice — the fix is to pick a family whose glob does not resolve to the new TTS variant.
Neither model pin worked: the proxy resolves the model independently of what the CLI requests, and landed on `gemini-3.1-flash-tts-preview` whether the workflow asked for `gemini-2.5-flash` or `gemini-2.5-pro`. `unknown_model_ai_credits` is raised by the api-proxy, and its pricing table ships inside the firewall image — which this repo pins at 0.27.0. Recompiling with gh-aw v0.83.4 moves it to 0.27.42. The alias globs are unchanged, so the pricing table is the only thing that can account for the regression window (green through 2026-08-10, red every run since). `actions/checkout` and `actions/setup-node` are held at their v7.0.0 SHAs; `gh-aw-actions/setup` moves to v0.83.4 because it must match the compiler.
|
Verified green: run 31648687169 — Two wrong hypotheses first, both disproven by CII originally claimed pinning the model was the fix. It was not, and the runs said so:
Attempt 2 is what killed the "pick a family whose glob dodges the TTS variant" theory: a
Worth noting: the error string still appears once in the green run, then the run recovers and completes. So both halves contribute — the newer proxy retries rather than dying, and the pin gives it a valid target. What to check in review
Open question, not blockingNo |
|
Superseded by #263. This branch was cut from a stale The investigation and the three-attempt result table are reproduced in #263. |
The auditor has been failing on every PR, and reading nothing
agentfails on #259, #260 and #261 alike. It is not any of those branches — it is one bug in the workflow.The proxy's model alias table maps
gemini-3.1-flashto the globgemini-3.1*flash*. That glob also matchesgemini-3.1-flash-tts-preview— a text-to-speech model. The router is therefore permitted to select it, but the AI-credits pricing table has no entry for it, so the proxy rejects every request:Both the classifier sub-call and the main
sendMessageStreamturn used it, and the run reportstotal_tokens: 0. The audit was not a strict reviewer — it never read a single file. A red check that means "nothing was examined" is worse than no check, because it looks like coverage.Pinning
engine.modelremoves the router's freedom to reach a model the pricing table does not cover.Two things worth flagging in the diff
1. The recompile wanted to downgrade two actions. The committed locks were built by gh-aw v0.79.4; my installed extension is v0.83.4. Compiling with v0.83.4 rewrote 457 lines and bumped
gh-aw-actions/setupto a new SHA. So I fetched v0.79.4 and compiled with that instead — but it still tried to revert Dependabot's work:uses:)actions/checkout9c091bbv7.0.0df4cb1cv6.0.3actions/setup-node8207627v7.0.048b55a0v6.4.0The cause is that the lock's embedded manifest still records v6 while Dependabot bumped only the
uses:lines. I held the v7 SHAs. The diff contains no action version change — please confirm that in review, since a silentcheckoutv7→v6 downgrade is exactly the kind of thing a green CI run would have waved through.2.
.secretsignoregains six files. The scanner flagged 45uses: action@<40-hex>lines as "High-Entropy Hex (≥40 chars)" — i.e. it flags SHA pinning, the practice zizmor fails the build for omitting. Notably every generated*.lock.ymlwas unlisted, so any commit touching one was unlandable; that is why this is bundled here rather than split out.Before allowlisting, I checked each of the six for high-entropy strings that are not action pins:
agentics-maintenance.ymlai-auditor.lock.ymlauto-triage-issues.lock.ymldaily-secrets-analysis.lock.ymlduplicate-code-detector.lock.ymlsync-github-packages.ymlTest plan
gh-awv0.79.4 compiles clean: 0 errors, 0 warningsGEMINI_MODEL: gemini-2.5-flashreaches both theagentanddetectionjobsresq secrets --staged→ no secrets detectedai-auditortriggers onpull_request: openedand runs from the head branch, so theagentcheck here either goes green or proves the pinned model is also unpricedAuditfails in the local pre-commit hook on untouchedmastertoo (audit-ci cannot readbun.lock), so hooks were skipped for that check only.No changeset: CI/tooling only, no package behaviour change.