v4.1.1
What's Changed
Bug Fixes
-
Integration tests now watched and passing: The integration tier had been completely unreachable from every gate, causing six E2E tests to fail unnoticed behind a dead
gemini-flashmodel alias. These tests now point to the livegeminialias and run in CI via a new keyless wrapper that guarantees no credentials leak and no money is spent. -
Claude review reports no longer show blank judge columns: The
--claude-reviewreport was incorrectly including Claude in the adjudication judge matrix even though Claude is only judged, never judges. This resulted in a blank column (or a false self-vote marker) in the report matrix. The judge roster is now filtered independently from the council roster. -
Debate-revote stage now correctly reports skipped status: When the re-vote wave never launches (nothing was defended or cost ceiling was hit), the stage was incorrectly marked
completeinstead ofskipped. This is now a consumer-visiblerun.jsonchange that correctly reflects the actual stage state. -
Report HTML files now written with secure permissions:
amicus council verdict --rendernow writesreport.htmlwith0o600permissions instead of falling back to the process umask, matching all other artifact writers and preventing unintended world-readability of model output. -
Removed false CLI
waitcommand documentation: Both docs and help text claimedamicus wait <councilRunId>existed as a CLI command when it does not. Users are now directed to the MCPamicus_waittool instead, which is the actual blocking primitive. -
Report matrix no longer grows Claude column: Fixed
toModel()in report generation reusing the street-cred universe as the judge roster, which incorrectly included Claude and created blank or misleading columns in the adjudication matrix. -
Model alias defaults now derive from live gateway routes: The
amicus doctorcommand and CI model-drift checks were incorrectly reporting shipped default aliases as stale due to using hand-stripped OpenRouter IDs instead of routed direct forms. Defaults now come fromtoGatewayRoutes()and match their authored direct forms when available. -
Keyless integration wrapper sandboxes all credential-path roots: The previous version only sandboxed
HOME/USERPROFILE, leavingXDG_DATA_HOMEandAPPDATAopen as escape hatches for credentials. The wrapper now sandboxes all credential-path roots simultaneously.
Features
-
Free keyless integration testing in CI: A new
integrationjob in.github/workflows/ci.ymlruns the integration tier on every push and PR with all credentials scrubbed, catching regressions at zero cost and ensuring the tier is permanently watched.npm run test:integrationguarantees no credentials leak by repointingHOME,USERPROFILE,XDG_DATA_HOME,XDG_CONFIG_HOME, andAPPDATAinto an empty sandbox before spawning jest. -
Paid integration tier split to on-demand workflow:
npm run test:integration:liveand.github/workflows/integration-live.ymlisolate the money-spending E2E suites to a manually dispatched workflow, preventing accidental billing and ensuring the keyless tier stays genuinely free.
Changed
- Curated
geminialias now points to Gemini 3.6 Flash: The defaultgeminialias moves from Gemini 3.5 Flash to Gemini 3.6 Flash on both gateways. This is a silent model change: users with nogeminioverride will start talking to a newer underlying model on next use after upgrading.
Documentation
-
Testing guide clarified for keyless and paid tiers: Updated
docs/testing.md,CLAUDE.md, andCONTRIBUTING.mdto explain the two-rail integration strategy, why the pre-push hook intentionally runs unit tests only, and which CI workflows run which tier at what cost. -
Release checklist now requires both integration rails: The publishing checklist in
docs/publishing.mdnow requires runningnpm run test:integration(free keyless) andnpm run test:integration:live(paid) before release, since keyless skips the money-spending suites entirely. -
Future plans flagged for de-rotting: v4.5, v4.6, and v4.7 implementation plans now include rotation warnings and guidance for re-grounding against merged main before execution.
Full Changelog: v4.1.0...v4.1.1