Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.6 KiB
v3.7.3 Release Notes
Release Date: 2026-02-27
Highlights
This release completes the Phase 0 + Phase 1 CI/CD integration milestone, making AQE CLI fully CI-native. Any CI/CD pipeline (GitHub Actions, GitLab CI, Jenkins, CircleCI, Buildkite) can now consume AQE outputs natively — no special SDK, no MCP requirement, no platform lock-in.
The strategic decision: CLI-first, format-rich, platform-agnostic. aqe security --format sarif runs in ANY pipeline and brings 150K learned patterns to bear.
Phase 0: CLI/MCP Verification — 17 Bug Fixes
Ran 87 test cases across all 26 CLI commands and 59 MCP tools. Found and fixed 17 issues (5 critical, 6 high, 6 medium):
Critical Fixes
- CRIT-1: CLI process hangs after command completion — switched to
parseAsync()+cleanupAndExit() - CRIT-2: Auto-init messages pollute stdout in
--format jsonmode — routed to stderr - CRIT-3:
aqe qualitycalls wrong domain API method (evaluate→evaluateGate) — fixed with correct method signature and default metrics/thresholds - CRIT-4:
aqe security --compliancecalls wrong method (checkCompliance→runComplianceCheck) — fixed with Promise.all for multiple frameworks - CRIT-5: OpenRouter/Ollama providers crash on
undefineddefaultModel — added null coalescing
High-Priority Fixes
- HIGH-1:
aqe <nonexistent>hangs instead of showing help - HIGH-2:
aqe status/aqe healthauto-initializes in non-project dirs — addedensureInitializedStrict()checking for.agentic-qe/dir - HIGH-3: MCP
aqe_healthreports hardcoded version '3.7.0' — changed to build-time__CLI_VERSION__ - HIGH-4:
team_scaleignores requested size due to clamping —maxSize = Math.max(getMaxTeamSize, targetSize, maxActiveTeams) - HIGH-5:
test_execute_parallelthrows on failed tests instead of returning result — returns failed result object - HIGH-6:
infra_healing_statusshows "not initialized" — added inline default playbook YAML fallback
Medium-Priority Fixes
- MED-1: Test plan references non-existent CLI flags
- MED-2: Coverage percentages show too many decimals — added
.toFixed(1)formatting - MED-3:
aqe qualitywithout--gatesubmits async task instead of inline eval — always uses inline mode now - MED-4: Ghost coverage analyzer produces false positive security/integration gaps on math files — added
getApplicableCategories()file-context filtering - MED-5:
model_routealways returns tier 0 with complexity 0 — added minimum complexity floor, expanded keywords - MED-6: MCP
coverage_analyze_sublinearreturns 0% vs CLI ~80% — addedbuildHeuristicCoverage()fallback
Phase 1: CI-Native CLI — All 5 Items Complete
1.1 --format flag on all output-producing commands ✅
All 4 core commands support format-aware output:
aqe test execute --format json|junit|markdownaqe coverage --format json|markdownaqe security --format json|sarif|markdownaqe quality --format json|markdown
1.2 --output <path> for artifact generation ✅
All 4 core commands support --output <path> via shared writeOutput() utility. When used, writes full report to file and prints summary to stdout.
1.3 vitest JUnit XML generation ✅
Added JUnit reporter to vitest.config.ts. CI workflows now get junit.xml automatically.
1.4 Synchronous quality gate with direct pass/fail ✅
aqe quality now runs inline (no async task submission + polling). Returns structured JSON with criteria breakdown, per-criterion pass/fail, overall verdict, and exit code.
1.5 SARIF v2.1.0 output for aqe security ✅
toSARIF() fully implemented in ci-output.ts. Produces schema-compliant SARIF for GitHub Code Scanning / GHAS integration.
1.6 Exit codes: 0 / 1 / 2 convention ✅
| Exit Code | Meaning | CI Usage |
|---|---|---|
| 0 | Success | Pipeline continues |
| 1 | Failure | Pipeline fails |
| 2 | Warning | Pipeline can choose to continue or fail |
Per-command logic:
| Command | Exit 1 | Exit 2 |
|---|---|---|
security |
Critical/high vulnerabilities | Medium-only vulnerabilities |
quality |
Quality gate failed | Score within 5% of perfect |
coverage |
Below threshold | Within 5% above threshold |
test |
Any test failures | >20% tests skipped |
Bug fix: aqe coverage previously always exited 0 regardless of threshold — now correctly exits 1 when below threshold.
Additional Fixes
- concept_edges O(n^2) bloat — Prevented quadratic edge growth in knowledge graph and isolated test DB
- Crypto-secure randomness — Replaced
Math.random()withcrypto.randomUUID()in CI-sensitive paths - OpenCode skill tier validation — Fixed 9 skill configs with invalid
tier1-fast→tier1-any - Score calculator tests — Updated test assertions for MED-5 minimum complexity floor
CI Pipeline Example
After this release, a complete AQE quality gate in GitHub Actions looks like:
- name: Security scan
run: aqe security --sast --format sarif --output security.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: security.sarif
- name: Coverage check
run: aqe coverage --threshold 80 --format json --output coverage.json
- name: Quality gate
run: aqe quality --format json --output quality.json
- name: Test execution
run: aqe test execute --format junit --output results.xml
Exit codes 0/1/2 let pipelines distinguish pass/fail/warn without parsing output.