Releases: cgartlab/argus
Release list
v0.5.6
v0.5.5
Added
Changed
Fixed
- SkillHub Changelog Parsing —
tools/publish_skillhub.pynow correctly extracts the first bullet from CHANGELOG sections that use### Added,### Changed, or other subheadings.
Removed
v0.5.4
Added
- SkillHub Auto Publish —
release.ymlnow publishes the Argus skill package to SkillHub after the GitHub Release job succeeds, using the repositorySKILLHUB_API_KEYsecret. - SkillHub Publish Prep —
tools/publish_skillhub.pyvalidates SkillHub frontmatter, extracts the skill package into a publishable directory, and writes the current changelog summary. - SkillHub Frontmatter —
SKILL.mdnow includes the requiredslug,displayName,summary,license, andhomepagemetadata for SkillHub publishing.
Changed
- Release Docs — Release and development docs now document the SkillHub publishing step and the
make prepare-skillhubmaintainer check.
Fixed
Removed
v0.5.3
Fixed
- Site Lockfile for npm 10 — Regenerated
site/package-lock.jsonwith npm10.9.8so the GitHub Pages workflow can runnpm cisuccessfully and include the expectedcrossws@0.4.12lockfile entry.
v0.5.2
Added
- Release Gate —
tools/check_release.pynow verifies whether the currentVERSIONhas a matchingvX.Y.Ztag onorigin;make releaseuses it to refuse duplicate or older releases, and CI can use--expect-releasedto catch phantom version bumps. - Daily Release Check —
.github/workflows/release-check.ymlfails whenVERSIONis ahead of the latest release tag, making unreleased version bumps visible without waiting for a release attempt.
Changed
- Safer Release Flow —
make releasenow validates release state, requires version files to be committed atHEAD, refuses to run when localmainis behindorigin/main, creates an annotated tag, verifies the tag'sVERSION, then pushesmainand the tag. - Expanded Version Sync —
make bump-*and version validation now keepsite/src/data/site.tsandsite/src/content/docs/index.mdin sync withVERSION, alongsideCHANGELOG.md,AGENTS.md,SKILL.md, andmanifest.yaml. - CI Release Coverage — CI now validates
tools/check_release.py, compiles it, includesrelease-check.ymlin workflow YAML validation, and reports release status fromVERSIONvs origin tags.
Fixed
- Review Workflow Permissions —
Argus-Flash Reviewnow uses the repositoryGITHUB_TOKENfor PR comments, avoiding installation-token permission failures on bot-created PRs. - PR Automation Bot Assignment — PR automation no longer attempts to assign
argus-flash[bot], avoiding GitHub App installation-token assignee failures. - Model Refresh PR Creation — The scheduled model refresh workflow creates its PR with an argus-flash installation token, preventing
GITHUB_TOKENPR-creation permission failures. - Dependabot Check Context — Dependabot auto-merge explicitly runs
gh pr checks -R "${{ github.repository }}"so the check wait uses the correct repository context.
v0.5.1
Added
- Zen API Key Guidance — The composite action accepts a new
api-keyinput. When the review fails with an auth-class error (401/403/unauthorized/invalid key), it fails fast instead of walking the fallback queue (every zen model shares the same key, so retries would 401 identically) and prints a copy-ready 5-step fix guide: register at opencode.ai → create a key at opencode.ai/auth → add anOPENCODE_API_KEYActions secret → the workflow passes it viaapi-key: ${{ secrets.OPENCODE_API_KEY }}→ re-run. Guidance goes to stdout and, best-effort, as a PR comment. - API-First Model Refresh —
update_free_models.pynow fetches the live free model list from the public OpenCode Zen API (GET https://opencode.ai/zen/v1/models, no auth, stdliburllibonly). The opencode CLI is retained solely as a degradation path when the API is unreachable; the scheduled workflow no longer installs the CLI, and the cron is offset to23 */12 * * *.
Changed
-
Dynamic Primary Selection —
refresh()re-selects the primary on every run: the current primary is kept while it is still live, otherwise the highest-ranked live-freemodel is promoted (composite score desc, ties alphabetical) with a↻ Primary re-selected: X → Ylog. Default primary moved toopencode/deepseek-v4-flash-free(last-known-good); the action'smodelinput now defaults to empty and is resolved at runtime fromconfig/free-models.ymlprimary, with the same built-in default as final fallback.run_fixture_tests.pyandmake test-fixtures-llmno longer hardcode a model — they read the config primary too.Why deepseek is back: [0.4.0] moved the default to
opencode/hy3-free(deepseek was deprecated at that time).hy3-freewas subsequently delisted from the live model list (see Delisted Models Dropped below), so the default reverts toopencode/deepseek-v4-flash-freeas the last-known-good model. The "[0.4.0] deepseek deprecated" note is historical context for that release, not a statement about the current default. -
User-Decided Constraints — Only
-free-suffixed model IDs qualify for the fallback queue (big-pickle stays excluded); consumers must configure their own OpenCode Zen API key (OPENCODE_API_KEY, provider=opencode) — no bundled key; GitHub'sGITHUB_TOKENwithcontents: writeis sufficient for the auto-push, and the push does not re-trigger the workflow (accepted behavior). -
Delisted Models Dropped — Removed
opencode/hy3-freeandopencode/x-preview-f-freefromMODEL_SCORES; regeneratedconfig/free-models.ymlcontains only currently-live-freemodels. -
Auth Preflight (local) —
run_fixture_tests.pyprints a non-blocking hint when running anopencode/provider model withoutOPENCODE_API_KEY(opencode auth loginor set the env var; see https://opencode.ai/auth).
v0.4.1
Added
- CSS-in-JS / Responsive Design Patterns — New SKILL.md section covering hardcoded values in styled-components / CSS Modules, media-query breakpoint tokens, and the 44px touch target
Changed
- SKILL.md Stack Detection Expanded — Detection table adds UnoCSS and Tailwind CSS rows; the detection workflow adds an atomic-CSS check step
Fixed
- SKILL.md Anti-Patterns Accuracy — Removed the fabricated Angular API
destroyRegistry()in favor of the officialtakeUntilDestroyed()/inject(DestroyRef); fixed the unclosednew FormControl(')string (Angular #2), the mistypedonClick={{ handle }}(React #3), the dead link (Svelte #2), and the inventeduserStore.incrementAge()(Svelte #5); rewrote Astro #1 and General JS/TS #4 so WRONG/RIGHT examples are unambiguous - SKILL.md Vue Rules Modernized — Rewrote the doc-contradicting Vue #4 (reactive over ref) into a real anti-pattern: destructuring
reactive()drops reactivity → useref()/toRefs(); rewrote the Vue 2-era Vue #8 (push not reactive) into the Vue 3 rule: direct prop assignment →defineModel()/emit - action.yml Auth/Retry Tightening —
auth_reno longer matches bare401|403|api key(ordinary review prose and line numbers no longer trigger false auth failures or mislead users into configuring a key);retry_redrops bareunavailable; exhausted fallbacks with no primary output now emit explicit diagnostics (timeout / network / model hang) - action.yml Stale-Review Cleanup — The fallback loop calls
dismiss_stale_reviewsbetween failed attempts to avoid duplicate review comments; last-resort fallback queue literal synced withconfig/free-models.yml(4 → 6 models) - Fixture Runner Verification —
run_fixture_tests.pynow actually validatesline_hint(previously parsed but never checked); static heuristic mode uses tolerance=0 for exact matching (LLM mode keeps ±1) - Model Refresh CLI Fallback —
update_free_models.pyCLI fallback path accepts bare model IDs (noopencode/prefix); the[-prefixed line skip is narrowed to log-level lines only - Makefile Validate Hardening —
make validateno longer swallows SKILL.md trigger-phrase check failures (python3 present → fail on fail; missing → warn without blocking); added thevalidate_versioning.pyconsistency check; required-files list aligned with ci.yml (14 → 18) - Manifest & Docs Accuracy — Removed the non-existent
skills: [accessibility]reference frommanifest.yaml(name difference annotated); cleaned duplicate COMMANDS lines inAGENTS.md;docs/men-integration.mdclarifies that--men-context/--events-jsonare prompt-layer conventions, not CLI features;docs/argus-config-schema.mdaligns the max-findings promise with actual behavior (dropped the unsubstantiated "N more findings suppressed" claim)
v0.4.0
Added
- Marketing Site — New
site/(Astro 7 + UnoCSS) with a 60fps digital-water hero, frosted-glass header, 7 beginner-friendly docs,/legalpages, and a custom 404 page - Site Deployment — New
.github/workflows/deploy-site.ymlbuilds and deployssite/to GitHub Pages on push tomain(path-filtered onsite/**);site/public/CNAMEpoints toargus.cgartlab.com - Third-Party Notices — Added
NOTICEdeclaring OpenCode, GitHub, and other third-party trademarks; Argus remains independent and unaffiliated - Model Ranking —
update_free_models.pynow ranks free models by composite coding ability (SWE-bench et al.) viaMODEL_SCORES+rank_models(), replacing the hardcodedBUILTIN_FALLBACKconstant
Changed
- Primary Model — Default review model switched from
opencode/deepseek-v4-flash-freetoopencode/hy3-free(deepseek deprecated) - Fallback Refresh —
config/free-models.ymlfallback queue is now auto-refreshed every 12h, ordered by the coding-ability ranking - Release Notes Extraction —
release.ymlnow extracts the current version's CHANGELOG section withindex()instead of a regex, making version-header matching more robust
Fixed
- Fixture CI ImportError —
run_fixture_tests.pyimports aligned withupdate_free_models.py's new API (MODEL_SCORES,rank_models,_parse_config), fixing theImportErrorin thefixture-testsCI job
Removed
v0.3.3
Changed
- CI Fixture Tests — Added static heuristic scanner run to
fixture-testsjob inci.yml, validating actual review logic against expected finding counts (no API key required) - Release Notes —
release.ymlnow extracts only the current version's section from CHANGELOG instead of dumping the entire file - PR Automation —
pr-automation.ymlnow checks out the repo before runningghcommands, fixingfatal: not a git repositoryerror on every PR;add-to-projectstep made resilient withcontinue-on-error - AGENTS.md — Updated STRUCTURE with manifest.yaml, CLAUDE.md, src/, config/, and new workflows; WHERE TO LOOK with free model config/updater/PR automation; COMMANDS with bump/test-fixtures-llm/package-skill
Fixed
- Fixture runner LLM mode — Replaced invalid
--prompt-fileflag (non-existent in OpenCode CLI) with positionalmessageargument inrun_fixture_tests.py - Version sync — Updated version references in AGENTS.md, SKILL.md, and manifest.yaml to match VERSION=0.3.2
- Fallback model drift — Synced hardcoded fallback queue in
action.ymlandBUILTIN_FALLBACKinupdate_free_models.pywithconfig/free-models.yml(replaced delistedlaguna-s-2.1-freewithmuse-spark-1.2-contributor-free) - SKILL.md syntax — Fixed unclosed string literal in React
useStateexample (useState(')touseState('')) - Review trigger — Added
reopenedtopull_requesttrigger types inreview.ymlso reopened PRs get reviewed - Duplicate PR reviews — Added stale review dismissal via GitHub API before fallback model retry in
action.yml, preventing conflicting reviews on the same PR
v0.3.2
[0.3.2] — 2026-08-06
Added
- Fallback Model Queue — When the primary model (
opencode/deepseek-v4-flash-free) hits a 429 rate limit, the review automatically retries a fallback queue ordered by coding ability:nemotron-3-ultra-free→longcat-2.0-free→north-mini-code-free→ling-3.0-flash-free→laguna-s-2.1-free→mimo-v2.5-free. Configurable viafallback-modelsinput in the composite action. - Exit-Code Gate — Fallback only triggers on non-zero exit code AND rate-limit text, preventing false fallback on successful runs whose output happens to contain line numbers like
:429.
Changed
- Primary Model — Reverted to
opencode/deepseek-v4-flash-free(best coding ability). Fallback queue replaces the previous single-fallback design. _is_rate_limitedRegex — Tightened to429\s+(rate|too|exceeded|limit(?:ed|s)?)\bwith word-boundary anchors, eliminating false matches on ordinary prose (e.g. "limited to 50 findings") and review line numbers (e.g.file.css:429)._run_opencode— Now accepts the resolvedopencodepath as a parameter, removing redundant_find_opencode()probes during fallback queue iteration.- Composite Action —
run_with_fallback_queuebash function replaces the oldrun_with_fallback;fallback-models(comma-separated list) replacesfallback-model(single model).
Fixed
- PR Review Timeout (6h) — Root cause:
review.ymlreferences the composite action at@main, so the review used the old action (no fallback queue) until the PR was merged. After merge, the fallback queue is active and prevents future 6-hour cancellations. - PR Description Drift — Title and body updated to match the final design (deepseek primary + ordered fallback queue).
.pycLeak —tools/__pycache__/run_fixture_tests.cpython-312.pycremoved from VCS;__pycache__/and*.pycadded to.gitignore.- Verbose f-string —
--verboseoutput now correctly interpolates the model name instead of printing literal(model: {model}). - Fallback Exhaustion — When all fallbacks are rate-limited, the primary model's output (and exit code) is preserved instead of returning the weakest fallback's result.
- Dead Code — Removed
__STATIC_FALLBACK__sentinel in_run_opencode; redundantopencode is Noneguard returns(1, "")instead of(0, "")for consistency.
Removed
Changelog
All notable changes are documented here. Format follows Keep a Changelog.
[0.3.1] — 2026-08-02
Added
- Fixed Output Format — Added standardized, readable feedback format with summary header, severity groups (P0-P3), and consistent issue block structure
- Stack-Aware API Review — New framework detection (React, Vue, Angular, Svelte, Astro) with official documentation references for accurate syntax validation
- Framework Anti-Patterns Library — Comprehensive pattern catalog (React, Vue, Svelte, Angular, Astro, JS/TS) with detection rules, examples, and copy-ready fixes
- Release Automation — New
.github/workflows/release.ymltriggered byv*tag pushes: validates versioning, builds packages, and publishes a GitHub Release with full archive and skill package - Skill Package — New
make package-skilltarget createsdist/argus-skill-v{VERSION}.zipcontainingSKILL.md,AGENTS.md, andmanifest.yamlfor agent skill distribution - GitHub Release Workflow — Automated release publishing via
softprops/action-gh-releasewith CHANGELOG body and artifact uploads
Changed
- SKILL.md — Added Technology Stack Detection section, expanded Review Dimensions with 7th dimension (Framework API Usage), added Framework Anti-Patterns Library, updated Output Format with new fields
- AGENTS.md — Added OUTPUT FORMAT section; updated STRUCTURE with release workflow, WHERE TO LOOK with release automation entry, COMMANDS with
package-skilltarget, and NOTES with release workflow documentation - README.md — Updated project structure, version references, and added skill package documentation
- CONTRIBUTING.md — Updated version management section with bump-patch workflow and release process
- DEVELOPMENT-GUIDE.md — Updated version references, added release workflow documentation, and branch strategy for composite action
- manifest.yaml — New skill metadata file (name, version 0.3.1, capabilities, inputs/outputs)
- Makefile — Added
package-skilltarget, updatedpackageto depend on it, updatedclean, and refreshed version comments - .gitignore — Added
dist/exclusion pattern
Fixed
- Version consistency — All stale 0.2.0 references in documentation updated to 0.3.0/0.3.1
- SKILL.md corruption — Repaired escaped code fences and bash-quoting artifacts that broke YAML frontmatter and Markdown rendering
[0.3.0] — 2026-06-25
Added
Direction 2 — Consumer Configuration Layer
docs/argus-config-schema.md— Full.argus.ymlfield reference with schema, examples, and migration guidetools/load_config.py— Consumer config loader: reads.argus.ymlfrom consumer repo, deep-merges with built-in defaults, validates all fields, emitsGITHUB_ENVvariables for use in subsequent Action steps.argus.ymlsupport inaction.yml— newconfig-pathinput (default:.argus.yml);load-configstep runs before prompt build; consumer token-prefix, ignore rules/paths, fail-on thresholds, and max-findings are all injected into the LLM prompt at review time
Direction 3 — Fixture-Based Regression Testing
tests/fixtures/— Regression test suite with 4 categories and 8 fixture pairs (input +.expected):design-tokens/bad-hardcoded-colors.css— bareoklch/hex/rgbin component rules → 5 P0 findings expecteddesign-tokens/missing-dark-mode.css—:rootcolor tokens without[data-theme="dark"]override → 3 P0 findings expectedaccessibility/missing-aria.html— icon buttons, missingalt,<a>-as-button → 4 P1 findings expectedhardcoded-values/bad-magic-numbers.css— magicpxspacing/radii/font-size → 4 P1 findings expectedcss-quality/duplicate-rules.css— duplicate property declarations in same selector → 2 P2 findings expected
tests/fixtures/README.md—.expectedformat spec, how to add fixtures, CI integration notestools/run_fixture_tests.py— Fixture runner: parses.expectedfiles, invokes Argus (OpenCode CLI) or falls back to built-in static heuristic scanner (no API key required), validates severity counts (±1 tolerance), checksmust-not-flagrules, supports--verbose,--dry-run,--json,--category,--fixtureflags
CI & Tooling
ci.yml— Restructured into 3 jobs:lint— YAML syntax validation (now includesaction.yml) + 14 required file checksvalidate-tools— Python syntax check for all 4 tools +load_configdefault and example config validationfixture-tests—.expecteddry-run parse, fixture directory structure verification, artifact upload
action.yml— Newfixture-modeinput; when"true"runsrun_fixture_tests.pyinstead ofopencode github run(for Argus repo's own CI)
Changed
AGENTS.md— Updated to v0.3.0; expandedSTRUCTUREtree (addeddocs/,tests/, fulltools/listing); updatedWHERE TO LOOKtable (+6 rows); added fixture anti-pattern; updatedCOMMANDSsectionMakefile— New targets:test-fixtures(static heuristic mode),test-fixtures-llm(full LLM mode),test(= validate + test-fixtures);validateexpanded to 7 checks (now includes Python syntax andload_configvalidation);bump-*completion hint updated tomake test && make releaseVERSION— 0.2.0 → 0.3.0
Notes
- Backwards compatible — existing consumers with no
.argus.ymlcontinue to work unchanged; all new config fields use safe defaults - No API key required for CI —
run_fixture_tests.pyfalls back to static heuristic mode when OpenCode CLI is not installed, allowing fixture structure validation to run in any CI environment - Fixture count tolerance — severity count assertions allow ±1 variance to keep the suite stable across minor LLM updates
- Consumer config is additive — hard rules (P0 color violations, a11y baseline) cannot be fully disabled via
.argus.yml; severity can be downgraded but not silenced entirely for critical rules
[0.2.0] — 2026-06-17
Added
.github/actions/argus-review/action.yml— Reusable composite action wrapping OpenCode CLI + dynamic rule injection- Dynamic runtime rule loading:
action.ymlreadsAGENTS.md+SKILL.mdfrom the argus repo at review time and injects their contents into the LLM prompt argus-flashGitHub App (github.com/apps/argus-flash) — replaces the default OpenCode Agent App for PR review authentication- Workflow
use_github_token: truesupport — enables custom GitHub App token usage instead of OIDC exchange ci.yml— Rewritten with proper YAML syntax validation and required file checksreview.yml— Simplified to call the composite action; token generation viaactions/create-github-app-token@v1
Changed
AGENTS.md— Updated structure, added composite action andargus-flashApp to WHERE TO LOOK, added dynamic rule injection conventionSKILL.md— Updated to v0.2.0, added automated PR review workflow sectionREADME.md— Full rewrite with architecture diagram, cross-repo usage guide, and rule auto-sync explanationDEVELOPMENT-GUIDE.md— Updated for new architecture (composite action, argus-flash App, GitHub Actions integration)CONTRIBUTING.md— Added action.yml to pull request checklistMakefile— Added.github/actions/argus-review/action.ymlexistence check to validate targetVERSION— 0.1.1-test-2 → 0.2.0
Removed
opencode.jsonc— No longer needed; permissions are managed via GitHub App token.github/workflows/release.yml— Release process moved to loc...