CI runners consistently exceed the 1ms threshold (1.06ms on GitHub
Actions). This is a timing-sensitive micro-benchmark, not a regression.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Workflow was contributed by accident and has had 100% failure rate
since 2026-03-15 due to broken e2e tsconfig. Removes CI blocker.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- witness-chain.ts: LIMIT/OFFSET now use parameterized ? bindings instead
of string interpolation (SQL injection fix). Handle offset-without-limit
via LIMIT -1, and limit=0 correctly returns zero rows.
- Replace @faker-js/faker imports in 7 generator files with lightweight
test-value-helpers.ts using only node:crypto — eliminates ~6MB runtime
dependency for npm consumers.
- Add range guards in test-value-helpers (int/float swap on inverted range).
- Add 17 unit tests for test-value-helpers and 3 pagination edge case tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hook commands using relative paths (node ./dist/...) or git rev-parse
broke when invoked from subfolders. Adopted the CLAUDE_PROJECT_DIR
pattern (sh -c 'exec node "${CLAUDE_PROJECT_DIR:-.}/..."') which
Claude Code sets to the project root.
Also: removed ruflo/claude-flow permissions from _aqePermissions
injected by aqe init — only AQE-specific entries belong in user
settings. Fixed init-wizard-hooks.ts missing union-merge for
permissions (#362 parity).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Delete dead MCP server.ts (911 lines, never used in production — entry.ts
imports MCPProtocolServer). Add legacy aliases in index.ts for backwards compat.
- Fix ESLint: rename .eslintrc.js to .eslintrc.cjs (CommonJS in ESM project)
- Fix hardcoded version '3.0.0' in protocol-server.ts and http-server.ts —
now reads dynamically from package.json
- Fix vitest process hang: add worker-level afterAll force-exit (setup-worker.ts)
and global teardown safety net. Native modules (better-sqlite3, hnswlib-node)
held open handles preventing fork worker exit.
- Add test gate to npm-publish.yml — 194 unit test files must pass before publish
- Disable benchmark.yml release trigger (benchmarks/suite.ts doesn't exist)
- Remove continue-on-error from test steps in optimized-ci.yml (was masking failures)
- Add getToolDefinitions() to MCPProtocolServer for test introspection
- Update e2e and integration tests to use production server API
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Most users still rely on MCP and not all tools have CLI parity yet.
MCP was made opt-in (--with-mcp) in v3.8.8 but should be default.
Now aqe init configures .mcp.json by default; use --no-mcp to skip.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements R4 (GraphMAE), R5 (Modern Hopfield), R6 (Cold-Tier GNN) with
full integration wiring into pattern-store and code-intelligence domains.
R4 GraphMAE Self-Supervised Learning:
- SPSA optimizer for gradient-free training of masked graph autoencoders
- Decoder head reconstructs features from embeddings (SCE loss, γ=2)
- Per-epoch lossHistory for convergence analysis
- Wired into coordinator-gnn.ts:generateGraphMAEEmbeddings()
- 21 tests including 1K-node scale test
R5 Modern Hopfield Networks:
- Exponential-capacity exact pattern recall (Ramsauer 2020)
- L2-normalized patterns for consistent softmax attention
- Dimension-aware singleton, zero-vector rejection
- Wired into pattern-store.ts store()/search() as exact-recall tier
- 28 tests including 10K capacity and <2ms benchmark
R6 Cold-Tier GNN Training:
- LRU-cached mini-batch trainer with memory cap enforcement
- FileBackedGraph for real disk-backed larger-than-RAM graphs
- Unbiased Fisher-Yates shuffle (rejection sampling)
- Wired into coordinator-gnn.ts:trainWithColdTier()
- 25 tests including FileBackedGraph round-trip and mode equivalence
Shared:
- Extracted Xorshift128 PRNG to src/shared/utils/xorshift128.ts
- 3 feature flags (default false) with documented activation criteria
- Barrel exports for all types, classes, and factories
74 new tests, 0 type errors, 0 regressions across 1030 existing tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds 4 new capabilities with production wiring, 148 tests, and performance baselines:
- R1: HDC Pattern Fingerprinting — 10K-bit binary hypervectors with O(1) XOR binding,
wired into PatternStore search as Hamming-distance pre-filter
- R2: CUSUM Drift Detection — two-sided statistical change-point detection across all
4 coherence gate types (retrieve/write/learn/act), auto-enabled via feature flag
- R3: Delta Event Sourcing — pattern version history with rollback via SQLite
pattern_deltas table, wired into PatternStore store/recordUsage paths
- EWC++ Activation — three-loop protocol (instantAdapt→recordOutcome→backgroundConsolidate)
wired in quality-assessment, test-generation, and contract-testing coordinators
with double-flag guard (useSONAThreeLoop && useEwcPlusPlusRegularization)
Extracts coherence-gate.ts (930 lines) into 4 modules under 500-line limit.
All feature flags default true (opt-out) per amended ADR-087 policy.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Imp-15: Session Reuse for Repeated Operations
Adds a SHA-256 fingerprint-based operation cache as layer 0 before HNSW
early exit. Exact-match lookups run in O(1) before O(log n) similarity
search, catching repeated operations instantly.
- SessionOperationCache with TTL, capacity eviction, and kv_store persistence
- Wired into TokenOptimizerService.checkEarlyExit() as first check
- cacheOperationResult() stores results after successful LLM execution
- session_cache_stats MCP tool for monitoring hit rates
- CLI: aqe token-usage --cache-stats for cache performance
- Cross-session persistence via existing kv_store table
- 26 new tests covering fingerprinting, TTL, eviction, stats, degradation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three strategic features from Issue #334 with full CLI-MCP parity:
Imp-9: YAML Deterministic QE Pipelines
- Approval gate step type with auto-approve timeout and cancel cleanup
- 4 deterministic actions (quality-gate, coverage, pattern-health, routing)
with real SQL queries and graceful DB degradation
- 7 CLI commands (aqe pipeline load/validate/run/list/status/approve/reject)
- YAML loader validation for approval fields
Imp-10: Token-Free Heartbeat CLI & MCP
- 6 CLI commands (aqe heartbeat status/run-now/history/log/pause/resume)
- 3 MCP tools (heartbeat_status/trigger/log)
- History persistence, date validation, timeout support
Imp-18: Economic Routing Model
- EconomicRoutingModel with quality-per-dollar scoring and EMA estimates
- Budget-aware tier selection with fallback strategies
- Cost-adjusted rewards for neural router (opt-in)
- CLI commands (aqe routing economics/accuracy/metrics)
- routing_economics MCP tool with kv_store persistence
Security: path traversal fix on CLI log reader, config weight validation
71 new tests across 6 test files, all passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Coverage data never reached quality assessment because of fragmented key
conventions, fabricated fallback values, and missing --coverage flags in
test commands. This commit fixes the entire coverage data pipeline:
- Remove fabricated coverage (up to 95%) when no real data exists
- Unify 5 orphaned key conventions into consistent coverage:latest,
coverage:previous, and coverage:file:{path} keys
- Add --coverage flags to vitest/jest test commands
- Read coverage from disk (coverage-summary.json) when not in stdout
- Store per-file coverage via memory.set() (not storeVector) so
quality-analyzer can read it
- Rotate coverage:previous only in coverage-analyzer (canonical writer)
to prevent double-rotation race conditions
- Fix defect-predictor and defect-investigation orphaned key reads
- Replace hardcoded fake data in coverage-tracker worker with real reads
- Use safeJsonParse and path sanitization in disk coverage reader
- Report coverage: -1 (not 0) when no data available to avoid
false 25-point quality score penalty
Closes#385
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
W-2: Replace hardcoded 'agentic-qe-default-key' in proof-envelope
with crypto.randomBytes(32) when no explicit key is provided.
The previous default provided no meaningful signing security.
W-3: Add governance chain bridge to CoherenceGate. The coherence
gate now accepts an optional GovernanceWitnessChain (or
PersistentWitnessChain) via setGovernanceChain(). When attached,
every validation decision is persisted to the existing
witness_chain_receipts SQLite table in addition to the in-memory
witness array.
No new tables needed — uses existing witness_chain_receipts from
governance/witness-chain.ts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Security audit findings:
F-1 (CRITICAL): witness-adapter.ts used a 32-bit djb2 non-cryptographic
hash for witness records. Replaced with SHA-256 via Node.js crypto.
The previous implementation provided no tamper-evidence.
W-1 (WARN): Blake3 was referenced in 15+ code comments but never
implemented — SHA-256 is the actual algorithm used everywhere.
Updated all misleading references to accurately state SHA-256:
- coherence-gate.ts module JSDoc and method comments
- witness-adapter.ts module JSDoc
- ruvector-commands.ts flag description
Audit verdict: SHA-256 is sufficient for current use. Ed25519 is
already fully implemented in witness-key-manager.ts. Blake3 would
be a performance optimization, not a security requirement.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixes from devil's advocate review:
- Wire `language` param through MCP coverage tools to parseCoverage()
and include detected language/format in CoverageAnalyzeResult
- Add language-to-format inference map (LANGUAGE_FORMAT_HINTS) for
format detection when only language is specified
- Use language hint to distinguish JaCoCo vs Kover XML
- Replace void template literals with console.log in benchmarks
so data is actually recorded for cross-release comparison
- Add Swift and C# to KG matchesLanguage(), Swift to getFileType()
- Create #383 tracking remaining dropped items transparently
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 6 multi-language coverage format parsers:
- JaCoCo XML (Java/Kotlin) with line/branch/method/instruction counters
- dotcover XML (C#/.NET) with statement-level coverage
- Tarpaulin JSON (Rust) with trace-based line coverage
- Go cover text format with block-level statement tracking
- Kover XML (Kotlin/JVM) via JaCoCo-compatible parsing
- xcresult JSON (Swift/iOS) with function-level detail
Add language-aware agent routing:
- New `languages` field on AgentCapabilityProfile
- 0.15 score boost for agents matching request language
- Configurable language weight in RoutingWeights
- Case-insensitive, backward-compatible
Update MCP tool schemas:
- Add `language` and `coverageFormat` params to coverage analyze/gaps tools
- Auto-detect format from filename and content signatures
- Extended findAndParseCoverage with multi-language file paths
24 new tests, all passing. 30 existing routing tests unaffected.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Integrate tree-sitter WASM as the default parser for 5 languages, replacing
regex-only parsing (~97-98%) with AST-based parsing (~100% accuracy).
- Add TreeSitterWASMParser implementing ILanguageParser for 5 languages
- Bundle only needed WASM grammars in assets/grammars/ (8.5MB vs 50MB)
- Add FallbackParser with 3-retry logic before permanent regex degradation
- Add per-call parser instances to prevent concurrency races across await
- Add cyclomatic complexity computation from AST branching nodes
- Add property extraction from class/struct AST nodes
- Add AQE_PARSER_REGEX_ONLY=1 env var for opt-out to regex
- Replace require() with ESM-compatible dynamic import() in registry
- Mark web-tree-sitter as external in CLI/MCP esbuild configs
- Amend ADR-076 with decision rationale and alternatives evaluated
Alternatives evaluated and rejected:
- @ast-grep/napi: npm package only ships JS/TS/CSS/HTML, others need native .so
- node-tree-sitter: requires native C compilation via node-gyp
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The cve-prevention test asserted on the old `.*` regex source string.
Updated to match the new `[^`]*` negated character class.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The lockfile was regenerated locally with missing private registry
packages, causing npm ci to fail in all CI jobs. Restored the
complete lockfile from main and only bumped the version to 3.8.6.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>