import assert from 'node:assert/strict'; import test from 'node:test'; import { evaluateMemoryV2PhaseAReadiness } from './memory-v2-phase-a-ready.mjs'; test('evaluateMemoryV2PhaseAReadiness passes aligned canary config', () => { const report = evaluateMemoryV2PhaseAReadiness({ MEMORY_ENABLED: '1', MEMORY_CANDIDATE_ENABLED: '1', MEMORY_CANDIDATE_MODE: 'canary', MEMORY_CANDIDATE_PERSISTENCE_ENABLED: '1', MEMORY_CANDIDATE_AUTO_ACCEPT_ALL: '0', MEMORY_AGENT_RESOLVE_ENABLED: '1', MEMORY_AGENT_INJECTION_MODE: 'canary', MEMORY_AGENT_CANARY_USER_IDS: 'user-a,user-b', MEMORY_LIFECYCLE_ENABLED: '1', MEMORY_LIFECYCLE_ROLLOUT_MODE: 'canary', MEMORY_LIFECYCLE_ROLLOUT_USER_IDS: 'user-a,user-b', MEMORY_PROMOTION_ENABLED: '1', MEMORY_LIFECYCLE_FORGETTING_ENABLED: '0', MEMORY_LIFECYCLE_DECAY_ENABLED: '0', MEMORY_PGVECTOR_DATABASE_URL: 'postgresql://local/memory', MEMORY_PGVECTOR_EMBEDDING_MODULE: './scripts/embed-memory-v2-local-hash.mjs', }); assert.equal(report.ok, true); assert.equal(report.warnings.length, 0); }); test('evaluateMemoryV2PhaseAReadiness blocks auto accept all and user mismatch', () => { const report = evaluateMemoryV2PhaseAReadiness({ MEMORY_ENABLED: '1', MEMORY_CANDIDATE_ENABLED: '1', MEMORY_CANDIDATE_MODE: 'active', MEMORY_CANDIDATE_AUTO_ACCEPT_ALL: '1', MEMORY_AGENT_CANARY_USER_IDS: 'user-a', MEMORY_LIFECYCLE_ROLLOUT_USER_IDS: 'user-b', }); assert.equal(report.ok, false); assert.ok(report.issues.some((item) => item.code === 'auto_accept_all')); assert.ok(report.issues.some((item) => item.code === 'canary_user_mismatch')); });