Commit Graph

1836 Commits

Author SHA1 Message Date
Dragan Spiridonov 0a98f6a1ba fix(memory): scope semantic search before limiting 2026-08-03 18:15:22 +02:00
Dragan Spiridonov c547283f1a Merge pull request #599 from proffesor-for-testing/working-july
chore(release): prepare v3.13.5
v3.13.5
2026-08-03 13:29:21 +02:00
Dragan Spiridonov 0453350d72 chore(release): prepare v3.13.5 2026-08-03 11:07:00 +00:00
Dragan Spiridonov faae6e9bc5 Merge remote-tracking branch 'origin/main' into working-july 2026-08-03 10:06:55 +00:00
Dragan Spiridonov 5f4db8850e Merge pull request #598 from proffesor-for-testing/dependabot/npm_and_yarn/dot-agents/skills/ruflo/ruflo/src/ruvocal/npm_and_yarn-fb2876c505
chore(deps): bump the npm_and_yarn group across 2 directories with 14 updates
2026-08-03 12:06:53 +02:00
Dragan Spiridonov a29985f00c feat(quality): require measured gate evidence 2026-08-03 09:08:17 +00:00
Dragan Spiridonov 0d06a8e840 feat(init): add status line opt-out 2026-08-03 08:58:13 +00:00
Dragan Spiridonov 0325f779b1 fix(learning): align batch embedding semantics 2026-08-03 08:55:57 +00:00
Dragan Spiridonov 16b952dbcf fix(embeddings): load HNSW dependencies in ESM 2026-08-03 08:55:09 +00:00
Dragan Spiridonov 5bfe5eb301 test(learning): isolate engine database fixtures 2026-08-03 08:53:41 +00:00
dependabot[bot] 26bc6e1c76 chore(deps): bump the npm_and_yarn group across 2 directories with 14 updates
Bumps the npm_and_yarn group with 13 updates in the /.agents/skills/ruflo/ruflo/src/ruvocal directory:

| Package | From | To |
| --- | --- | --- |
| [hono](https://github.com/honojs/hono) | `4.12.0` | `4.12.34` |
| [postcss](https://github.com/postcss/postcss) | `8.5.4` | `8.5.25` |
| [qs](https://github.com/ljharb/qs) | `6.14.2` | `6.15.3` |
| [sharp](https://github.com/lovell/sharp) | `0.33.5` | `0.35.0` |
| [undici](https://github.com/nodejs/undici) | `7.18.2` | `7.28.0` |
| [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit) | `2.52.2` | `2.70.2` |
| [dompurify](https://github.com/cure53/DOMPurify) | `3.3.0` | `3.4.12` |
| [js-yaml](https://github.com/nodeca/js-yaml) | `4.1.1` | `5.2.3` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `6.3.5` | `8.2.0` |
| [@hono/node-server](https://github.com/honojs/node-server) | `1.19.9` | `2.0.12` |
| [body-parser](https://github.com/expressjs/body-parser) | `2.2.2` | `2.3.0` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.0` | `3.1.5` |
| [ws](https://github.com/websockets/ws) | `8.18.2` | `8.21.1` |

Bumps the npm_and_yarn group with 4 updates in the /.agents/skills/ruflo/v3/goal_ui directory: [postcss](https://github.com/postcss/postcss), [js-yaml](https://github.com/nodeca/js-yaml), [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and [ws](https://github.com/websockets/ws).


Updates `hono` from 4.12.0 to 4.12.34
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.0...v4.12.34)

Updates `postcss` from 8.5.4 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.25)

Updates `qs` from 6.14.2 to 6.15.3
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.2...v6.15.3)

Updates `sharp` from 0.33.5 to 0.35.0
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.33.5...v0.35.0)

Updates `undici` from 7.18.2 to 7.28.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.18.2...v7.28.0)

Updates `@sveltejs/kit` from 2.52.2 to 2.70.2
- [Release notes](https://github.com/sveltejs/kit/releases)
- [Changelog](https://github.com/sveltejs/kit/blob/version-3/packages/kit/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/kit@2.70.2/packages/kit)

Updates `dompurify` from 3.3.0 to 3.4.12
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.3.0...3.4.12)

Updates `js-yaml` from 4.1.1 to 5.2.3
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.1...5.2.3)

Updates `vite` from 6.3.5 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite)

Updates `brace-expansion` from 1.1.12 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v2.0.2)

Updates `@hono/node-server` from 1.19.9 to 2.0.12
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](https://github.com/honojs/node-server/compare/v1.19.9...v2.0.12)

Updates `body-parser` from 2.2.2 to 2.3.0
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0)

Updates `fast-uri` from 3.1.0 to 3.1.5
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.5)

Updates `ws` from 8.18.2 to 8.21.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.2...8.21.1)

Updates `postcss` from 8.5.4 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.25)

Updates `vite` from 6.3.5 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite)

Updates `js-yaml` from 4.1.1 to 5.2.3
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.1...5.2.3)

Updates `undici` from 7.18.2 to 7.28.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.18.2...v7.28.0)

Updates `brace-expansion` from 1.1.12 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v2.0.2)

Updates `ws` from 8.18.2 to 8.21.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.2...8.21.1)

Updates `postcss` from 8.5.6 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.25)

Removes `js-yaml`

Updates `vite` from 5.4.19 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite)

Updates `brace-expansion` from 1.1.12 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v2.0.2)

Updates `ws` from 8.18.3 to 8.21.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.2...8.21.1)

Updates `postcss` from 8.5.6 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.25)

Updates `vite` from 5.4.19 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite)

Updates `js-yaml` from 4.1.0 to 5.2.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.1...5.2.3)

Updates `brace-expansion` from 1.1.12 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v2.0.2)

Updates `ws` from 8.18.3 to 8.21.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.2...8.21.1)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.34
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: qs
  dependency-version: 6.15.3
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: sharp
  dependency-version: 0.35.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: undici
  dependency-version: 7.28.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: "@sveltejs/kit"
  dependency-version: 2.70.2
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: dompurify
  dependency-version: 3.4.12
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: js-yaml
  dependency-version: 5.2.3
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 8.2.0
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: "@hono/node-server"
  dependency-version: 2.0.12
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: body-parser
  dependency-version: 2.3.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: fast-uri
  dependency-version: 3.1.5
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-version: 8.21.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 8.2.0
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: js-yaml
  dependency-version: 5.2.3
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: undici
  dependency-version: 7.28.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-version: 8.21.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: js-yaml
  dependency-version:
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 8.2.0
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-version: 8.21.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 8.2.0
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: js-yaml
  dependency-version: 5.2.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-version: 8.21.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-03 08:05:31 +00:00
Dragan Spiridonov a3f546f6df Merge pull request #594 from proffesor-for-testing/dependabot/npm_and_yarn/dot-agents/skills/ruflo/ruflo/src/ruvocal/esbuild-0.25.12
chore(deps): bump esbuild from 0.25.5 to 0.25.12 in /.agents/skills/ruflo/ruflo/src/ruvocal
2026-08-03 09:58:10 +02:00
Dragan Spiridonov 92261267c4 chore(helpers): update bundled helpers to 3.32.34 2026-08-03 07:55:12 +00:00
Dragan Spiridonov 5933c62ac8 fix(aqe): complete trustworthy execution follow-ups 2026-08-03 07:44:31 +00:00
Dragan Spiridonov 678f5bcda0 Merge pull request #592 from stuinfla/fix/node-test-cli-adapter 2026-08-03 07:36:56 +00:00
Dragan Spiridonov 4e95304ba0 Merge pull request #577 from stuinfla/fix/aqe-trustworthy-generation-execution
fix(aqe): make generation and execution evidence trustworthy
2026-08-03 09:34:34 +02:00
dependabot[bot] 8e53d014f9 chore(deps): bump esbuild in /.agents/skills/ruflo/ruflo/src/ruvocal
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.25.5 to 0.25.12.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2025.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.5...v0.25.12)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.25.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-03 06:10:26 +00:00
Dragan Spiridonov 2e6e3361fc Merge pull request #590 from proffesor-for-testing/dependabot/npm_and_yarn/dot-agents/skills/ruflo/v3/npm_and_yarn-24d14aee4f
chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates
2026-08-03 08:04:10 +02:00
Stuart Kerr 9d73fb831c fix(test-execution): bound retry confidence and filter node tests 2026-08-02 15:14:55 -04:00
Stuart Kerr 9f5735841c fix(test-execution): honor node test framework 2026-08-02 08:25:07 -04:00
dependabot[bot] 354ff6b78b chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates
Bumps the npm_and_yarn group with 1 update in the /.agents/skills/ruflo/v3 directory: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.6 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.25)

Updates `vite` from 7.3.0 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 8.2.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-02 11:19:52 +00:00
Dragan Spiridonov a4df292b69 Merge pull request #589 from proffesor-for-testing/working-july
chore(release): v3.13.4
v3.13.4
2026-08-02 13:15:27 +02:00
Dragan Spiridonov e90b1ea482 fix(init): make Codex Ruflo integration opt-in 2026-08-02 10:43:14 +00:00
Dragan Spiridonov 193971d339 chore(release): prepare v3.13.4 2026-08-02 09:17:12 +00:00
Dragan Spiridonov ee0e176cd3 feat(init): strengthen Codex fleet setup 2026-08-02 08:48:01 +00:00
Dragan Spiridonov bcc90cf81c Merge branch 'main' into working-july 2026-08-02 08:02:44 +00:00
Dragan Spiridonov fb91f03f48 Merge pull request #579 from proffesor-for-testing/dependabot/npm_and_yarn/npm_and_yarn-8fe9ee001e
chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
2026-07-30 08:47:46 +02:00
dependabot[bot] df47ffde02 chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
Bumps the npm_and_yarn group with 4 updates in the / directory: [@hono/node-server](https://github.com/honojs/node-server), [fast-uri](https://github.com/fastify/fast-uri), [js-yaml](https://github.com/nodeca/js-yaml) and [postcss](https://github.com/postcss/postcss).


Updates `@hono/node-server` from 1.19.14 to 2.0.12
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](https://github.com/honojs/node-server/compare/v1.19.14...v2.0.12)

Updates `fast-uri` from 3.1.3 to 3.1.4
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.3...v3.1.4)

Updates `js-yaml` from 4.2.0 to 4.3.0
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0)

Updates `postcss` from 8.5.15 to 8.5.25
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.15...8.5.25)

---
updated-dependencies:
- dependency-name: "@hono/node-server"
  dependency-version: 2.0.12
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: js-yaml
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.25
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 19:07:51 +00:00
Dragan Spiridonov efc6596928 Merge pull request #578 from proffesor-for-testing/release/v3.13.3
chore(release): v3.13.3
v3.13.3
2026-07-29 21:05:48 +02:00
Dragan Spiridonov 8f91c6e227 chore(release): bump version to v3.13.3 2026-07-29 15:08:25 +00:00
Dragan Spiridonov 3bd03ba2cc fix(memory): stop AQE_DISABLE_WAL from silently killing all learning capture
Learning capture froze for six days (2026-07-23 .. 2026-07-29) while every hook
kept reporting success: true. Root cause chain:

  AQE_DISABLE_WAL=1
    -> safe-db ran `journal_mode = DELETE` on EVERY writable open
      -> that switch needs an EXCLUSIVE lock (busy_timeout does not help)
        -> a stale `npm exec agentic-qe mcp` held memory.db + -wal open
          -> SQLITE_BUSY -> openDatabase threw -> UnifiedMemoryManager init
             aborted -> ALL persistence died, silently

It could not self-heal: the switch can never succeed while any reader exists.

safe-db.ts now:
- reads the current journal_mode first and attempts the switch ONLY if it
  differs, so the steady state takes no lock at all and the one-time migration
  leaves the hot path;
- catches ONLY SQLITE_BUSY / SQLITE_LOCKED and rethrows everything else
  unchanged, so I/O errors and corruption are no longer misreported as contention;
- FAILS CLOSED on contention rather than writing anyway. AQE_DISABLE_WAL=1 is the
  operator declaring WAL unsafe on this mount, so continuing in WAL would trade a
  loud outage for silent corruption;
- verifies the switch actually took effect before allowing writes;
- names the real database file and the command that finds the actual holder.

The hook shim's health-log guidance named "concurrent AQE processes (MCP server /
daemon)". Operators checked exactly those and found nothing, because the culprit
was an npx-cache process matching neither "aqe" nor .mcp.json — that wrong hint is
most of why this ran six days. It now prints a /proc scan that finds ANY holder,
and only claims contention when the failure really was a lock error.

Also raises the statusline refresh from 5s to 60s; it reopened the 158MB DB on
every tick, which was constant added pressure on the same lock.

11 tests covering fail-closed, the non-lock rethrow, the skip-when-already-correct
path, durable write across reopen, and the diagnostic contents. Verified live:
journal_mode=delete, integrity_check=ok, captured_experiences growing again after
freezing at 21157.
2026-07-29 14:46:48 +00:00
Dragan Spiridonov ff2bf6a5ea fix(qe-court): enforce the writerIsNeverJuror invariant on the shipped panel (#576)
The shipped qe-court config violated the court's own anti-collusion invariant
the moment it was copied into a project: `defense: cognitum-low` and
`jury: cognitum-high` are different tiers but the SAME coarse vendor, which is
exactly what `writerIsNeverJuror` forbids.

The deeper defect was that the rule could never have fired. `validatePanel` had
one caller in the whole repo — its own unit test. Nothing converted
`config.routing` into a panel, and the `options` block was inert: `PanelPolicy`
accepted only `minVendors`, while the config declares `minDistinctVendors` and
`writerIsNeverJuror`. An invariant with no caller is not enforced.

- move `defense` to `claude-code` rather than the jury to `codex`: the
  deeperReviewer is already `codex`, so re-seating the jury there would put the
  jury and the overturn reviewer on one vendor and weaken the escalation the
  court rests on. `claude-code` was already a documented defense option.
- add `panelFromRouting()` and `validateCourtConfig()` — the missing config to
  panel link, and the symbol downstream tooling already expected.
- widen `PanelPolicy` so `minDistinctVendors` / `writerIsNeverJuror` actually bind.
- treat a jury-less routing map as `missing-jury` instead of silently valid.
- SKILL.md: validation is now a mandatory, abort-on-failure step before seating.

Regression guard validates the real shipped config files on disk (both copies,
plus a drift check between them), so a future routing edit fails in CI rather
than in a user's court. Mutation-verified: restoring the old provider turns it
red. Suite 6 -> 15 tests.

Reported by @pacphi against agentic-qe@3.13.2.

Closes #576
2026-07-29 14:46:48 +00:00
Stuart Kerr be2f8e2f71 fix(aqe): make generation and execution evidence trustworthy 2026-07-28 22:25:29 -04:00
Dragan Spiridonov d8262656bc agentic-kit setup of ruflo+aqe 2026-07-26 08:38:47 +00:00
Dragan Spiridonov ac9df69883 fix(hooks): normalize Codex lifecycle output 2026-07-26 07:55:16 +00:00
Dragan Spiridonov 1c7a089eaa Merge pull request #575 from proffesor-for-testing/agent/release-v3.13.2
chore(release): v3.13.2
v3.13.2
2026-07-24 12:20:06 +02:00
Dragan Spiridonov 3c70b2c8f3 fix(test): stabilize v3.13.2 release gates 2026-07-24 11:43:55 +02:00
Dragan Spiridonov c71efaaeab chore(release): bump version to v3.13.2 2026-07-24 10:19:19 +02:00
Dragan Spiridonov 7f63abc120 fix(hooks): close RVF stores after each invocation 2026-07-24 10:11:35 +02:00
Dragan Spiridonov d3e4dd13bf Merge branch 'working-july' of https://github.com/proffesor-for-testing/agentic-qe into working-july 2026-07-24 09:19:42 +02:00
Dragan Spiridonov 3216fb6919 Merge pull request #571 from proffesor-for-testing/dependabot/npm_and_yarn/npm_and_yarn-14b05f5ef5
chore(deps-dev): bump brace-expansion from 1.1.14 to 1.1.16 in the npm_and_yarn group across 1 directory
2026-07-23 18:54:21 +02:00
dependabot[bot] f464a78c1e chore(deps-dev): bump brace-expansion
Bumps the npm_and_yarn group with 1 update in the / directory: [brace-expansion](https://github.com/juliangruber/brace-expansion).


Updates `brace-expansion` from 1.1.14 to 1.1.16
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.14...v1.1.16)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.16
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-23 16:43:46 +00:00
Dragan Spiridonov 1751132561 Merge pull request #570 from proffesor-for-testing/working-july
chore(release): v3.13.1
v3.13.1
2026-07-23 18:42:28 +02:00
Dragan Spiridonov 4876c9ee57 chore(release): bump version to v3.13.1
Version bumped in all four places that carry it: package.json,
.claude-plugin/plugin.json, and the fleetVersion in both the .claude/ and
assets/ skills manifests (the assets mirror drifts easily and is shipped).

Adds the v3.13.1 changelog entry and release notes covering the four fixed
issues (#565, #567, #568, #569) plus the Codex QE skills and lifecycle hooks
from a parallel session (763ea385), and draft issue-closing comments to post
once the release is published.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 16:14:34 +00:00
Dragan Spiridonov 980d9e58e6 fix(#569): close the last three routes for unmeasured data to look measured
Cross-vendor (Codex/GPT) review of the finished work. Three of its five findings
reproduced; one did not, and is recorded below so the review stays calibrated.

CONFIRMED — a report containing only test files reported them as production
coverage. `productionOnly` filtering fell back to the UNFILTERED file list when
no production files survived, so an LCOV whose only entry was
`tests/verifier_matrix.rs` came back as a measured 79% coverage target. That is
issue #569's third contradiction, verbatim, on a path the original fix did not
touch. An empty production set now yields no production coverage and says why.

CONFIRMED — the aggregate was carried over from the unfiltered set. Filtering
test files out of `files` while keeping `existing.summary` meant the headline
figure still blended test coverage in. In practice `CoverageAnalyzerService.analyze`
recomputes the summary from `files`, so the emitted number was already correct —
but the handler was relying on a downstream accident. The summary is now
recomputed where the filtering happens.

CONFIRMED — saved LCOV presented estimates as instrumented output. LCOV has
nowhere to record provenance, so `generateLcov` turned a `null` into
`DA:1,0 / LF:100 / LH:0` — a measured 0% over 100 lines that nothing measured —
and a 78% estimate into an apparently instrumented 78%. LCOV is now written only
for `measured: true`; the JSON artifact continues to carry the full result with
its provenance. This was the reviewer's stated highest-value fix and its reason
for a do-not-ship verdict.

NOT CONFIRMED — the reviewer reported the headline figure as 55% for a
10%-production/100%-test fixture. Reproduced and measured: it returns 10. The
finding was derived statically and missed the downstream recomputation. Fixed the
underlying fragility anyway, but the defect as described did not exist.

Also reverts three `.claude/helpers/` files (`.helpers-version`,
`helpers.manifest.json`, `statusline.cjs`) that a hook swept into 9b6de397. They
are unrelated to all four issues, and they shipped internally inconsistent
metadata — `.helpers-version` said 3.32.7 while the manifest said 3.32.4 — plus a
whole-file CRLF rewrite of the statusline. Restored to the 001c042a baseline.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 15:33:12 +00:00
Dragan Spiridonov 763ea3853a feat(init): add Codex QE skills and lifecycle hooks 2026-07-23 15:01:52 +00:00
Dragan Spiridonov b361bfa484 docs: changelog entry for #565, #567, #568, #569 incl. the breaking result shape
The nullable coverage metrics were a visible contract change with nothing a user
would ever read to discover it. Adds an Unreleased section covering all four
issues, the two new opt-ins (`agentOverrides`, `AQE_COVERAGE_NO_EXEC`), the
session-cache staleness fix, and — under Changed — the BREAKING note that
`lineCoverage`/`statementCoverage`/`branchCoverage`/`functionCoverage` are now
`number | null`, with `0` meaning a measured zero and `null` meaning unknown.

Written outcome-first: what the tool used to tell you that wasn't true, and what
it does now.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 14:49:04 +00:00
Dragan Spiridonov b6fd679254 fix(#569): stop the MCP layer laundering missing provenance into confident numbers
Found by the qe-devils-advocate session review, AFTER #569 was already committed.
The handler was producing honest provenance; `coverageAnalyzeConfig.mapToResult`
was converting it back into fabricated certainty on three paths.

1. Absent provenance was treated as "collected".
   `data.branchDataCollected !== false` — and `undefined !== false` is true. Any
   producer that supplies no provenance (notably the coverage-analysis domain
   plugin, whose handler returns a nested-`summary` CoverageReport) therefore
   surfaced issue #569's EXACT reported symptom: 100% branch coverage alongside
   0% function coverage, labelled `measured: true`, with `confidence: 0.7` on its
   gaps. Now requires an explicit `true`; absence means unknown, so an
   unprovenanced result reports `null`.

2. `measured` was derived as `!estimated`.
   These are not complements — there is a third state where nothing was collected
   at all. An empty project reported `lineCoverage: 0, measured: true`: "we
   measured 0%" when the truth was "we measured nothing". Verified through the
   real MCP server before and after. `measured` now requires an explicit claim.

3. `null` was coerced to `0`, and risk was graded off it.
   `?? 0` turned "no data" into a plottable 0%, and `null < 70` is `false` in JS,
   so an unguarded comparison graded "no data" as 'low' risk — the most dangerous
   possible default. Nulls now survive; risk grading requires a real number.

Also fixes the stale-result mystery that dogged verification all session.
`src/optimization/session-cache.ts` fingerprints on domain+action+input only, and
persists to kv_store with a 1-hour TTL, so entries survive package upgrades: a
project analyzed before a fix keeps replaying the old answer, making the fix look
broken. I twice mis-diagnosed this (first as a cache, then wrongly retracted that;
it WAS the cache). The fingerprint now includes the build identity, so an upgrade
misses cleanly and old entries age out. `AQE_SESSION_CACHE_SALT` forces a cold
cache without deleting anything.

This matters beyond #569: every fix in this release would have appeared not to
work for any user with a warm cache.

`CoverageAnalyzeResult.lineCoverage`/`statementCoverage` are now `number | null`,
joining `branchCoverage`/`functionCoverage`. `0` means a measured zero; `null`
means unknown.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 14:46:31 +00:00
Dragan Spiridonov e5a7719aa7 feat(#569): add AQE_COVERAGE_NO_EXEC opt-out; broaden credential stripping (#568)
Closes the two security questions raised by the adversarial review that the
prosecutors never returned a ruling on, so I settled them with evidence.

1. Coverage measurement executes the analyzed repository.
   Collecting real coverage means running the project's own tests: the JS/TS path
   runs `npx vitest|jest|nyc` (pre-existing), and the Rust path added in this
   release runs `cargo llvm-cov`, which compiles and runs test binaries, executes
   `build.rs`, and honors any `runner`/linker directive in that repo's
   `.cargo/config.toml`. For a trusted project that is exactly what the caller
   wants; it is surprising for an operation that reads like a static query, and an
   agent can be pointed at an untrusted checkout.

   Execution stays the default — requiring opt-in would make measured coverage the
   exceptional case and estimation the norm, inverting ADR-126's whole point — but
   is now opt-out via `AQE_COVERAGE_NO_EXEC=1`, which disables ALL build-tool
   execution. Existing coverage reports are still parsed; everything else degrades
   to clearly-labelled static estimation with guidance explaining why.

   Verified end-to-end through the real MCP server with a fake `cargo` shim on
   PATH: switch off -> cargo invoked; switch on -> not invoked. The unit test
   includes the same control, so it cannot pass vacuously.

2. Credential stripping in agentOverrides was already complete, but under-reported.
   `sanitizeAgentOverrides` builds its result as an ALLOW-LIST, so any field that
   is not provider/model/temperature/maxTokens/priority never survives — apiKey,
   token, password and friends were all dropped already. Only the *warning* was
   apiKey-specific, so a user who pasted a token got no feedback. The warning now
   covers all credential-shaped keys, and a test asserts no warning ever echoes a
   secret value.

ADR-126 gains a section recording the execution decision and what was rejected
(opt-in-by-default, sandboxing), plus the requirement that future language
delegations honor the same switch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 10:35:11 +00:00
Dragan Spiridonov de34913ab4 fix(#569): classify test paths relative to the analysis root, not the absolute path
Follow-up court charge, confirmed by reproduction.

`isTestPath()` checked every segment of the ABSOLUTE path against the test-directory
set. A project that merely *lives* under a directory called `tests`, `spec`, or
`examples` — a CI workspace at `/build/spec/proj`, `~/examples/myapp`, a monorepo
`packages/test-utils/` subtree — therefore had every one of its source files
classified as test code. `buildEstimatedCoverage()` then returned `null` and
coverage analysis reported nothing at all for the whole project.

Only directories *inside* the analyzed tree are meaningful, so classification now
takes the analysis root and evaluates the relative path. Threaded through all four
call sites (source walk, cargo LCOV filter, and both instrumented-report filters).

Verified: a crate at `<tmp>/tests/myapp` now analyzes its `src/lib.rs` instead of
returning null, while a `tests/` directory *inside* the project is still excluded.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 10:12:28 +00:00