Bump models (GLM-5.2 / MiniMax-M3 / DeepSeek-V4-Pro), add route preference, + GitHub Pages KB site#23
Conversation
… route preference
Update reviewer model versions and add a single knob to choose OpenRouter
vs each provider's own API for dual-route reviewers.
Models:
- glm-5.1 -> glm-5.2 (z.ai direct + OR dual route)
- minimax-m2.7 -> minimax-m3 (MiniMax direct + OR dual route)
- deepseek-v4-pro is now the default DeepSeek (v3.2 demoted to custom_only);
add api.deepseek.com direct route + new `deepseek` aichat client
- profiles repointed; new `direct` profile (subs only, no Gemini)
Routing:
- defaults.route_preference: openrouter (public default) | direct
- _common.resolve_routes / resolve_route_preference reorder the
{direct, openrouter} pair only; CLI reviewers are never reordered
- --route-pref / --prefer-direct / --prefer-openrouter on
dispatch/verify/benchmark/estimate_cost, plus ARGUS_ROUTE_PREF env
(precedence: CLI flag > env > config)
- OR-balance pre-flight only fires when OR is the resolved primary
Docs (README/SKILL/CLAUDE/DEVELOPMENT/CONTRIBUTING) updated; new
tests/test_routes.py (resolve_routes + preference precedence).
Constraint: keep paid CLI subs primary; OR stays a true fallback for them
Confidence: high
Scope-risk: moderate
Not-tested: live provider dispatch (no network/keys in CI)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011HG8Axfxjf6rv2mKKDEMxv
Static KB site under docs/, generated by a stdlib-only Python generator (docs/build.py + docs/build_content.py). - Pages: Home, Getting Started (beginner + advanced), Configuration, Reviewers, Profiles, Architecture, Benchmarks, Contributing, FAQ, Glossary, 404 - Collapsible sidebar (mobile-collapsed / desktop-open, persisted, mobile overlay + backdrop), dark/light toggle (system default + persisted override, no flash) - Mermaid diagrams (pipeline, dispatch sequence, merge, cost gate, history.db ERD) + Chart.js benchmark leaderboard, both re-theme on toggle - Per-page "View as Markdown / on GitHub" links, copy buttons, llms.txt, meta/OG tags, .nojekyll - .github/workflows/pages.yml: build docs/ -> upload-pages-artifact -> deploy-pages (pages: write, id-token: write; push to master/main + workflow_dispatch) Reflects the bumped models + route_preference feature from the prior commit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011HG8Axfxjf6rv2mKKDEMxv
…red OR-primary helper
Addresses two findings from a self code-review of this branch:
1. hermes-4.3 is also a {direct, openrouter} dual-route reviewer and is
reordered by route_preference — docstring + README + KB site claimed only
glm-5.2/minimax-m3/deepseek-v4-pro. Behavior was already correct (and benign:
under the openrouter default it now skips a guaranteed-fail nous-direct
attempt); docs corrected to match.
2. Deduplicate the 3-line "is the resolved primary OpenRouter?" helper that was
copy-pasted in benchmark.py and estimate_cost.py into
_common.primary_is_openrouter (single source of truth).
No behavior change; 37 tests still pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011HG8Axfxjf6rv2mKKDEMxv
🔍 Self code-review (round 1)Copilot review is unavailable (quota), so this is a manual self-review of the branch diff — covered correctness (line-by-line, removed-behavior, cross-file), reuse/simplification/efficiency, altitude, and CLAUDE.md conventions. No correctness bugs. The route-resolution refactor is sound — the fallback flow is preserved in all four scripts ( Findings & fixes (both addressed in
|
| # | Severity | Finding | Fix |
|---|---|---|---|
| 1 | low (accuracy) | hermes-4.3 is actually a 4th dual-route reviewer (Nous-direct ↔ OpenRouter), so it's reordered by route_preference too — but the docstring, README, and KB site claimed only glm-5.2/minimax-m3/deepseek-v4-pro. Behavior was already correct and benign (under the openrouter default it now skips a guaranteed-fail nous-direct attempt, since NOUSRESEARCH_API_KEY is unset). |
Corrected the resolve_routes docstring, README routing section, and docs/ site content to list hermes-4.3 (custom-only) as dual-route. |
| 2 | low (duplication) | The 3-line "is the resolved primary OpenRouter?" check was copy-pasted into benchmark.py and estimate_cost.py. |
Extracted to _common.primary_is_openrouter() and called from both. |
No behavior change from the fixes. 37 unit tests pass, the site rebuilds cleanly, and there are no stale model names in docs/.
CI (lint-and-test 3.12/3.13 + fixture-integrity) is green on the prior commit and re-running on c978931.
(The copilot-pull-request-reviewer check showing "failure" is the unavailable Copilot bot, not this repo's CI.)
Generated by Claude Code
The deploy workflow uploaded the whole docs/ folder, so build.py, build_content.py, and a CI-generated __pycache__ were served as static files. Stage the rendered output into _site/ (HTML + assets + .nojekyll + llms.txt) and drop *.py / __pycache__ before upload, using portable cp (rsync isn't guaranteed on the runner). Published tree is now just the site. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011HG8Axfxjf6rv2mKKDEMxv
The Pages workflow stages the rendered site into _site/ before upload; ignore it so a local run of the staging steps can't be committed by accident. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011HG8Axfxjf6rv2mKKDEMxv
🔍 Self code-review — Pages-artifact tidy (
|
| # | Severity | Finding | Fix |
|---|---|---|---|
| 1 | low (tidiness) | The workflow creates _site/ at the repo root. It's never committed in CI, but a maintainer running the staging steps locally would get an untracked _site/ not covered by .gitignore — a footgun for an accidental commit of a generated tree. |
Added _site/ to .gitignore (5868ff7). |
Net: one low-severity fix; no behavior change. The repo CI (lint-and-test 3.12/3.13 + fixture-integrity) runs on the push; the Pages deploy runs after merge to master.
(Reminder: the copilot-pull-request-reviewer "failure" is the unavailable Copilot bot — quota — not this repo's CI.)
Generated by Claude Code
Summary
Updates reviewer models to the latest versions, adds an easy OpenRouter↔direct-API routing switch, and (incoming) a hosted GitHub Pages knowledge-base site.
Models
glm-5.1→glm-5.2(z.ai direct + OpenRouter dual route)minimax-m2.7→minimax-m3(MiniMax direct + OpenRouter dual route)deepseek-v4-pro(V3.2 demoted tocustom_only, kept for benchmark-history continuity)deepseekaichat client (api.deepseek.com) for the direct routedirectprofile (direct-API subs only, no Gemini)Routing — OpenRouter vs direct API
A single knob decides which provider a dual-route reviewer (
glm-5.2,minimax-m3,deepseek-v4-pro) tries first; the other becomes the automatic fallback.defaults.route_preference: openrouter(public default — oneOPENROUTER_API_KEYcovers most reviewers) |direct--route-pref {openrouter,direct}, shorthands--prefer-direct/--prefer-openrouter, orARGUS_ROUTE_PREFenv. Precedence: CLI flag › env › configdispatch.py,verify.py,benchmark.py,estimate_cost.pyvia the single resolver_common.resolve_routes/resolve_route_preferencedirect-preference run with a depleted OR balance isn't gatedThis covers the "depleted OR balance → fall back to direct API for all but Gemini (skipped)" workflow: set
route_preference: direct(or--prefer-direct) and use thedirectprofile.Docs
DEEPSEEK_API_KEY, flags, profiles, dual-route guidance)docs/— responsive, collapsible sidebar (mobile-collapsed / desktop-open), dark/light toggle (system default + persisted override), Mermaid diagrams, benchmark chart, onboarding (beginner + advanced), contributing/FAQ/glossary, per-page "View as Markdown" links,llms.txt, plus a Pages deploy workflow. (Landing in a follow-up commit on this branch.)Tests
tests/test_routes.py(route classification, preference reordering, CLI-never-reordered invariant, precedence)py_compileclean, config validates (15 reviewers, 8 profiles)🤖 Generated with Claude Code
Generated by Claude Code