From 0453350d72aa18ffe6012c8a54da64141113947a Mon Sep 17 00:00:00 2001 From: Dragan Spiridonov Date: Mon, 3 Aug 2026 11:07:00 +0000 Subject: [PATCH] chore(release): prepare v3.13.5 --- CHANGELOG.md | 48 +++++++++++++++ assets/skills/skills-manifest.json | 2 +- docs/releases/README.md | 1 + docs/releases/v3.13.5.md | 61 +++++++++++++++++++ package-lock.json | 4 +- package.json | 4 +- .../ruvector/native-hnsw-real-fixture.test.ts | 20 +++--- 7 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 docs/releases/v3.13.5.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 54bfd2c1..709eeda7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,54 @@ All notable changes to the Agentic QE project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.13.5] - 2026-08-03 + +Quality decisions and generated tests now carry evidence that reflects what AQE +actually measured or executed, while initialization and embedding workflows are +more reliable across supported environments. + +### Added + +- **Measured quality-gate evidence** ([#596]). CLI and MCP quality evaluation + now share canonical thresholds and require fresh, attributed measurements for + coverage, passing tests, critical bugs, code smells, security findings, + technical debt, and duplication. Missing, malformed, or stale evidence fails + closed instead of silently receiving a fabricated passing value. +- **Optional status-line installation** ([#591]). `aqe init --no-statusline` + skips AQE's status line, removes an existing AQE-owned status line during an + upgrade, and preserves a project-authored status line. + +### Fixed + +- **Generated tests are trustworthy and executable** ([#577]). Test generation + preserves framework imports, validates evidence before reporting success, and + no longer treats structurally incomplete output as a passing quality result. +- **Node's built-in test runner is honored end to end** ([#592]). Test discovery + filters Node test files correctly, execution uses the selected framework, and + retry confidence remains bounded. +- **Batch embedding semantics are consistent** ([#585]). Mixed batches send only + semantic content to the embedding provider, nonsemantic entries receive zero + vectors in their original positions, and all-nonsemantic batches avoid + provider initialization entirely. +- **HNSW initialization works in native ESM** ([#586]). Runtime dependency + loading no longer assumes a CommonJS global `require`. +- **Learning-engine tests use isolated persistence** ([#588]), preventing shared + worker databases from accumulating duplicate genesis data and causing long + test runs. + +### Changed + +- Refreshed bundled Claude helpers and development-only Ruflo dependencies, + including upstream security and compatibility fixes. + +[#577]: https://github.com/proffesor-for-testing/agentic-qe/issues/577 +[#585]: https://github.com/proffesor-for-testing/agentic-qe/issues/585 +[#586]: https://github.com/proffesor-for-testing/agentic-qe/issues/586 +[#588]: https://github.com/proffesor-for-testing/agentic-qe/issues/588 +[#591]: https://github.com/proffesor-for-testing/agentic-qe/issues/591 +[#592]: https://github.com/proffesor-for-testing/agentic-qe/issues/592 +[#596]: https://github.com/proffesor-for-testing/agentic-qe/issues/596 + ## [3.13.4] - 2026-08-02 Codex users now receive a complete, upgradeable Agentic QE workflow instead of diff --git a/assets/skills/skills-manifest.json b/assets/skills/skills-manifest.json index 69f33eb8..3f657762 100644 --- a/assets/skills/skills-manifest.json +++ b/assets/skills/skills-manifest.json @@ -940,7 +940,7 @@ }, "metadata": { "generatedBy": "Agentic QE Fleet", - "fleetVersion": "3.13.4", + "fleetVersion": "3.13.5", "manifestVersion": "1.4.0", "lastUpdated": "2026-04-13T00:00:00.000Z", "contributors": [ diff --git a/docs/releases/README.md b/docs/releases/README.md index 82c6b328..7c1a7eaf 100644 --- a/docs/releases/README.md +++ b/docs/releases/README.md @@ -4,6 +4,7 @@ All Agentic QE release notes organized by version. | Version | Date | Highlights | |---------|------|------------| +| [v3.13.5](v3.13.5.md) | 2026-08-03 | Measured quality gates and trustworthy cross-framework test execution. | | [v3.13.4](v3.13.4.md) | 2026-08-02 | Reliable Codex fleet setup, upgrades, hooks, and verification. | | [v3.13.3](v3.13.3.md) | 2026-07-29 | Learning capture no longer stops silently under `AQE_DISABLE_WAL` (it now refuses to write in an unsafe journal mode and names what is holding the DB), and QE-Court's shipped panel no longer violates its own `writerIsNeverJuror` rule (#576). | | [v3.13.2](v3.13.2.md) | 2026-07-24 | Stops hook-driven `brain.rvf`/`patterns.rvf` corruption loops by closing native stores after every hook and protecting same-process live locks (#574). | diff --git a/docs/releases/v3.13.5.md b/docs/releases/v3.13.5.md new file mode 100644 index 00000000..ec9301ef --- /dev/null +++ b/docs/releases/v3.13.5.md @@ -0,0 +1,61 @@ +# v3.13.5 Release Notes + +**Release Date:** 2026-08-03 + +## Highlights + +AQE now bases quality decisions on fresh, attributed measurements and produces +more trustworthy, executable tests across Jest, Vitest, and Node's built-in test +runner. Initialization and embeddings are also more reliable in real projects. + +## Added + +- Canonical quality evidence for coverage, passing tests, bugs, code smells, + security findings, technical debt, and duplication. +- Shared CLI and MCP quality thresholds that fail closed when measurements are + missing, malformed, or stale. +- `aqe init --no-statusline` for installations that do not want AQE's status + line, without disturbing a project-authored status line. + +## Fixed + +- Generated tests retain the correct framework imports and must satisfy + evidence-backed validation before AQE reports success. +- Node test discovery, execution, and retry behavior now honor the selected + framework consistently. +- Mixed embedding batches preserve output order while excluding nonsemantic + content from provider calls; entirely nonsemantic batches make no provider + call. +- HNSW runtime loading works when AQE is imported as native ESM. +- Learning-engine unit tests no longer share persistence across test cases. + +## Changed + +- Refreshed bundled Claude helpers. +- Updated development-only Ruflo UI and tooling dependencies, including upstream + security fixes. + +## Upgrade notes + +No configuration migration is required. Existing installations can upgrade and +refresh their managed assets normally: + +```bash +npx agentic-qe init --auto --upgrade +``` + +Projects that want to remove only AQE's managed status line can run: + +```bash +npx agentic-qe init --auto --upgrade --no-statusline +``` + +Project-authored status-line configuration is preserved. + +Tracking: [#577](https://github.com/proffesor-for-testing/agentic-qe/issues/577), +[#585](https://github.com/proffesor-for-testing/agentic-qe/issues/585), +[#586](https://github.com/proffesor-for-testing/agentic-qe/issues/586), +[#588](https://github.com/proffesor-for-testing/agentic-qe/issues/588), +[#591](https://github.com/proffesor-for-testing/agentic-qe/issues/591), +[#592](https://github.com/proffesor-for-testing/agentic-qe/issues/592), and +[#596](https://github.com/proffesor-for-testing/agentic-qe/issues/596). diff --git a/package-lock.json b/package-lock.json index 237c9b51..1e8d24c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "agentic-qe", - "version": "3.13.4", + "version": "3.13.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "agentic-qe", - "version": "3.13.4", + "version": "3.13.5", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 59776aac..5b4882ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agentic-qe", - "version": "3.13.4", + "version": "3.13.5", "description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration", "type": "module", "main": "./dist/index.js", @@ -71,7 +71,7 @@ "test:unit:fast": "vitest run --exclude='**/qe-reasoning-bank.test.ts' --exclude='**/qe-reasoning-bank-feedback-loop.test.ts' --exclude='**/aqe-learning-engine.test.ts' --exclude='**/aqe-learning-engine-patterns.test.ts' tests/unit/adapters tests/unit/shared tests/unit/cli tests/unit/learning tests/unit/kernel tests/unit/workers tests/unit/routing tests/unit/strange-loop tests/unit/sync tests/unit/feedback tests/unit/error-paths tests/unit/early-exit tests/unit/causal-discovery tests/unit/neural-optimizer tests/unit/test-scheduling tests/unit/logging tests/unit/validation tests/unit/memory tests/unit/performance tests/unit/scripts tests/unit/planning", "test:unit:heavy": "vitest run tests/unit/coordination tests/unit/domains tests/unit/integrations tests/unit/optimization tests/unit/init --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/vibium/**' --exclude='**/browser-swarm-coordinator.test.ts'", "test:unit:mcp": "vitest run tests/unit/mcp --exclude='**/mcp/handlers/domain-handlers.test.ts' --fileParallelism=false", - "test:ci": "vitest run --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/vibium/**' --exclude='**/integration/browser/**' --exclude='**/browser-swarm-coordinator.test.ts' --exclude='**/mcp/handlers/domain-handlers.test.ts'", + "test:ci": "vitest run --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/vibium/**' --exclude='**/integration/browser/**' --exclude='**/browser-swarm-coordinator.test.ts' --exclude='**/mcp/handlers/domain-handlers.test.ts' --exclude='**/fixtures/init-corpus/**'", "test:e2e": "vitest run tests/integration/browser --testTimeout=120000", "test:safe": "NODE_OPTIONS='--max-old-space-size=768 --expose-gc' vitest run --maxForks=1", "test:dev": "npm run test:unit:fast", diff --git a/tests/integration/ruvector/native-hnsw-real-fixture.test.ts b/tests/integration/ruvector/native-hnsw-real-fixture.test.ts index 412b6e74..e9854b37 100644 --- a/tests/integration/ruvector/native-hnsw-real-fixture.test.ts +++ b/tests/integration/ruvector/native-hnsw-real-fixture.test.ts @@ -13,7 +13,7 @@ * in production, written by sentence-transformers/all-MiniLM-L6-v2-style * models) and verifies: * - * 1. Self-query returns id=self with score 1.0 (exact-match recall) + * 1. Self-query returns an exact vector match with score 1.0 * 2. Top-10 recall vs brute-force ground truth = 100% * 3. Repeated for several random query vectors to rule out one-off luck * 4. Vectors persisted in memory.db deserialize correctly into the backend @@ -183,7 +183,7 @@ describe('NativeHnswBackend — real qe-kernel fixture (#399)', () => { ); it.runIf(fixture !== null && fixture.length >= 100)( - 'should hit recall@10 >= 0.9 and top-1 == self on real qe-kernel embeddings', + 'should hit recall@10 >= 0.9 with an exact top match on real qe-kernel embeddings', () => { const pool = fixture!; const backend = new NativeHnswBackend({ @@ -209,13 +209,12 @@ describe('NativeHnswBackend — real qe-kernel fixture (#399)', () => { // them based on entry-point luck. 90-100% recall@10 is the // standard approximate-HNSW guarantee. // - // The TOP-1 self-match assertion is the strict bug-detector — it's - // mathematically impossible to fail unless HNSW is fundamentally - // broken (which is exactly what @ruvector/router 0.1.28 was: it - // returned random non-neighbors with recall@10 = 0% to 10%). Anything - // above 0.5 recall@10 here would already be a clear pass. We hold - // the bar at 0.9 to catch tuning regressions while accepting the - // legitimate plateau-region behavior of real embeddings. + // The TOP-1 exact-vector assertion is the strict bug-detector. Several + // real fixture rows can contain byte-identical embeddings, so requiring + // the queried row's numeric id would make the result depend on arbitrary + // tie-breaking. @ruvector/router 0.1.28 returned random non-neighbors + // with recall@10 = 0% to 10%; requiring an exact top result still catches + // that failure while accepting indistinguishable duplicate vectors. const RECALL_FLOOR = 0.9; for (const queryIdx of [ @@ -234,7 +233,8 @@ describe('NativeHnswBackend — real qe-kernel fixture (#399)', () => { const recallAt10 = [...groundTruthIds].filter((id) => hitIds.has(id)).length / groundTruthIds.size; - expect(results[0].id).toBe(queryIdx); // self MUST be top-1 (exact-match guarantee) + expect(pool[results[0].id].vector).toEqual(queryVector); + expect(results[0].score).toBeGreaterThanOrEqual(0.999); expect(recallAt10).toBeGreaterThanOrEqual(RECALL_FLOOR); }