'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const os = require('node:os'); const path = require('node:path'); const test = require('node:test'); const database = require('../../src/database'); const { createSqliteTrophyProgressionPlanRepository } = require('../../src/services/trophy-progression-planner-service'); test('production database stores immutable synthetic progression plans', async t => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'chimera-progression-')); t.after(() => { database.close(); fs.rmSync(root, { recursive: true, force: true }); }); database.configure({ dataDir: root, logger: { info() {}, warn() {}, error() {} } }); await database.initialize(); const repository = createSqliteTrophyProgressionPlanRepository({ db: database }); const plan = { id: `trophy-progression-${'a'.repeat(64)}`, planSha256: 'a'.repeat(64), schemaVersion: 1, mode: 'synthetic_unlock', synthetic: true, catalog: { key: 'np:11111111111111111111111111111111', revision: 'one', sha256: 'b'.repeat(64), title: 'Fixture' }, createdAt: 1_800_000_000_000, items: [{ trophyId: 1, proposedEarnedDateTime: '2026-01-01T00:00:00.000Z' }], }; const saved = repository.save(plan); assert.equal(saved.id, plan.id); assert.equal(repository.get(plan.id).catalog.title, 'Fixture'); assert.equal(repository.list({ limit: 10 }).length, 1); assert.throws(() => database.runMutatingSqlWithParams('UPDATE trophy_progression_plans SET mode=@mode', { mode: 'timestamp_edit' }), /immutable/); });