import test from 'node:test' import assert from 'node:assert/strict' import { assertDetailGeneratorEvidence } from './safe-production-migrate.mjs' test('release refuses a missing generator schema instead of enabling a broken feature', () => { assert.throws(() => assertDetailGeneratorEvidence({ columns: [] }), /detail_generator_projects.id/) }) test('release refuses incorrectly typed private state/lease fields', () => { const columns = [] for (const [table, names] of Object.entries({ detail_generator_projects: ['id', 'owner_id', 'document', 'revision'], detail_generator_assets: ['id', 'project_id', 'owner_id', 'storage_key', 'byte_size', 'mime_type'], detail_generator_jobs: ['id', 'project_id', 'owner_id', 'status', 'idempotency_key', 'checkpoint', 'project_revision', 'lease_token', 'lease_expires_at'], detail_generator_brand_profiles: ['id', 'name', 'profile', 'revision'], })) for (const name of names) columns.push({ table_name: table, column_name: name, data_type: ['document','checkpoint','profile'].includes(name) ? 'jsonb' : ['revision','project_revision','byte_size'].includes(name) ? 'integer' : name === 'lease_expires_at' ? 'timestamp with time zone' : 'text' }) assert.doesNotThrow(() => assertDetailGeneratorEvidence({ columns })) columns.find(row => row.column_name === 'lease_expires_at').data_type = 'text' assert.throws(() => assertDetailGeneratorEvidence({ columns }), /lease_expires_at/) })