fix(reference): rebuild pre-index artifacts

This commit is contained in:
jb
2026-09-19 09:57:48 -04:00
parent 0c03a59b02
commit 0ff3e67568
2 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ export const MANIFEST_FILE = 'manifest.json';
export const DATABASE_DIRECTORY = 'databases'; export const DATABASE_DIRECTORY = 'databases';
export const CACHE_DIRECTORY = 'sources'; export const CACHE_DIRECTORY = 'sources';
export const LOCK_DIRECTORY = '.reference-build.lock'; export const LOCK_DIRECTORY = '.reference-build.lock';
const DEFAULT_IMPORTER_VERSION = `reference-compiler/${SCHEMA_VERSION}-5`; const DEFAULT_IMPORTER_VERSION = `reference-compiler/${SCHEMA_VERSION}-6`;
const emptyManifest = (): ReferenceManifest => ({ format: 1, sources: {} }); const emptyManifest = (): ReferenceManifest => ({ format: 1, sources: {} });
const iso = (date: Date): string => date.toISOString(); const iso = (date: Date): string => date.toISOString();
+22
View File
@@ -321,6 +321,28 @@ describe('fixture reference compiler', () => {
} finally { await rm(root, { recursive: true, force: true }); } } finally { await rm(root, { recursive: true, force: true }); }
}); });
test('rebuilds a prior 3-5 artifact missing the verified-station index', async () => {
const { root, sources } = await fixtureDirectory();
const directory = join(root, 'reference');
try {
const first = await new ReferenceCompiler({ directory, profile: 'fixture', importerVersion: 'reference-compiler/3-5', sources: fixtureSources(sources) }).compile();
expect(first.status).toBe('success');
if (first.status !== 'success' || !first.version) throw new Error('initial fixture build did not publish a version');
const databasePath = join(directory, 'databases', `${first.version}.sqlite`);
const malformed = new Database(databasePath);
malformed.run('DROP INDEX stations_source_verified_idx');
malformed.close();
const rebuilt = await new ReferenceCompiler({ directory, profile: 'fixture', sources: fixtureSources(sources) }).compile();
expect(rebuilt.status).toBe('success');
expect(rebuilt.status).not.toBe('noop');
const rebuiltManifest = await readReferenceManifest(directory);
expect(rebuiltManifest.active?.importerVersion).toBe('reference-compiler/3-6');
const rebuiltDb = new Database(join(directory, 'databases', `${rebuiltManifest.active!.version}.sqlite`), { readonly: true });
try { expect(rebuiltDb.query<{ n: number }, []>("SELECT COUNT(*) AS n FROM sqlite_master WHERE type='index' AND name='stations_source_verified_idx'").get()?.n).toBe(1); }
finally { rebuiltDb.close(); }
} finally { await rm(root, { recursive: true, force: true }); }
});
test('rejects incomplete PREVIOUS count metadata before rollback', async () => { test('rejects incomplete PREVIOUS count metadata before rollback', async () => {
const { root, sources } = await fixtureDirectory(); const { root, sources } = await fixtureDirectory();
const directory = join(root, 'reference'); const directory = join(root, 'reference');