Files
Profa 26908cb677 chore(release): v1.8.1 - Safety & Test Quality Improvements
## Fixed

- **P0: Simulation Mode Runtime Guards** (TestExecutorAgent)
  - Requires AQE_ALLOW_SIMULATION=true environment variable
  - Prevents silent simulation in production environments
  - Throws explicit error with clear instructions

- **P2: Explicit Error Handling** (RealAgentDBAdapter)
  - Replaced silent fallback (return 0) with explicit validation
  - Fails loudly with actionable error messages
  - Detects database corruption and schema mismatches

- **P1: Test Isolation with UUID** (Integration Tests)
  - Replaced Date.now() with randomUUID() for database paths
  - Eliminates race conditions in parallel test execution
  - Uses OS temp directory for proper cleanup

## Changed

- Updated CHANGELOG.md with v1.8.1 release notes
- Updated README.md version badge and What's New section
- Updated package.json version: 1.8.0 → 1.8.1

## Documentation

- Created docs/releases/v1.8.1-RELEASE-NOTES.md (comprehensive guide)
- Created docs/releases/v1.8.1-SUMMARY.md (quick reference)
- Created docs/releases/v1.8.1-VERIFICATION.md (test verification)
- Created docs/reviews/BRUTAL-HONESTY-ISSUE-52-CODE-REVIEW.md (code review)

## Issues

- Closes #52 (Technical Debt Remediation) - 6/8 fixes completed
- Addresses #55 P0, P1, P2 priorities
- Creates #57 for remaining work (performance optimization, adapter verification)

## Impact

- Build Status: ✅ Passing (0 errors)
- Runtime Safety: ✅ Improved (guards added)
- Error Handling: ✅ Improved (explicit errors)
- Test Isolation: ✅ Improved (UUID-based)
- Breaking Changes: ❌ None (fully backward-compatible)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 11:44:44 +00:00

4.1 KiB

Embedding Generation Consolidation (Issue #52)

Date: 2025-11-17 Issue: GitHub Issue #52 - Eliminate Duplicate Embedding Generation Status: ✅ Completed

Problem

Found 4 different implementations of the same hash-based embedding function across the codebase:

  1. /src/utils/EmbeddingGenerator.ts - Simple utility function (384 dimensions)
  2. /src/core/embeddings/EmbeddingGenerator.ts - Complex class with ML support
  3. /src/agents/BaseAgent.ts - Using utility ✓
  4. /src/agents/TestExecutorAgent.ts - Using utility ✓
  5. /src/core/neural/NeuralTrainer.ts - Duplicate simpleHashEmbedding() method

Solution

Single Source of Truth: /src/utils/EmbeddingGenerator.ts

Why This Choice?

  1. Already In Use: BaseAgent and TestExecutorAgent already import from this utility
  2. Simple & Clear: Straightforward implementation without unnecessary complexity
  3. Consistent Output: 384 dimensions (standard for sentence transformers)
  4. Well-Documented: Clear production replacement guidance

Changes Made

NeuralTrainer.ts Refactoring

Removed (34 lines):

private simpleHashEmbedding(text: string): number[] {
  const dimensions = 384;
  const embedding = new Array(dimensions).fill(0);

  for (let i = 0; i < text.length; i++) {
    const charCode = text.charCodeAt(i);
    const index = (charCode * (i + 1)) % dimensions;
    embedding[index] += Math.sin(charCode * 0.1) * 0.1;
  }

  // Normalize
  const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
  if (magnitude > 0) {
    for (let i = 0; i < dimensions; i++) {
      embedding[i] /= magnitude;
    }
  }

  return embedding;
}

Added:

import { generateEmbedding } from '../../utils/EmbeddingGenerator.js';

Refactored Methods:

  1. generateStateEmbedding() - Now uses generateEmbedding(stateStr)
  2. generateExperienceEmbedding() - Now uses generateEmbedding(expStr)

Benefits

Code Quality

  • -34 lines: Removed duplicate code
  • Single Source of Truth: One place to update embedding logic
  • Consistency: All agents use identical algorithm

Maintainability

  • Easier Updates: Change embedding algorithm in one place
  • Testing: Single function to test comprehensively
  • Production Migration: Replace utility once when upgrading to real embeddings

Backward Compatibility

  • ✅ 100% Compatible: Same 384-dimension output
  • ✅ Same Algorithm: Identical hash-based implementation
  • ✅ All Tests Pass: No breaking changes

Verification

TypeScript Compilation

npm run typecheck  # ✅ No new errors

Runtime Test

const { generateEmbedding } = require('./dist/utils/EmbeddingGenerator.js');
const embedding = generateEmbedding('test neural pattern');

// Results:
// - Dimensions: 384 ✅
// - Normalized: true ✅
// - Output: [-0.0173, 0.0000, 0.0000, ...] ✅

Future Work

The consolidated utility (/src/utils/EmbeddingGenerator.ts) includes guidance for production:

/**
 * In production, replace with:
 * - OpenAI embeddings API (text-embedding-ada-002)
 * - Cohere embeddings
 * - Local transformer models (sentence-transformers)
 * - Custom trained embeddings
 */

When upgrading, only this single file needs modification. All consumers (BaseAgent, TestExecutorAgent, NeuralTrainer) will automatically use the new implementation.

Files Modified

  1. /src/core/neural/NeuralTrainer.ts
    • Added import for generateEmbedding
    • Removed simpleHashEmbedding() method
    • Updated generateStateEmbedding()
    • Updated generateExperienceEmbedding()

Architecture Note

The /src/core/embeddings/EmbeddingGenerator.ts class remains unchanged. It provides advanced features (ML models, caching, batch processing) and is used for different purposes. The simple utility is for basic embedding needs.

Coordination

Task tracked through:

  • Memory namespace: aqe/swarm/issue52/embedding-consolidation
  • Pre-task hook: ✓ Executed
  • Post-task hook: ✓ Executed (database unavailable, expected)

Completed by: Claude Code Verified: Embedding generation working correctly (384D, normalized)