diff --git a/scripts/seed-bundle-resilience-recovery.mjs b/scripts/seed-bundle-resilience-recovery.mjs index f6529c5e9..cea878c6a 100644 --- a/scripts/seed-bundle-resilience-recovery.mjs +++ b/scripts/seed-bundle-resilience-recovery.mjs @@ -7,4 +7,10 @@ await runBundle('resilience-recovery', [ { label: 'External-Debt', script: 'seed-recovery-external-debt.mjs', seedMetaKey: 'resilience:recovery:external-debt', canonicalKey: 'resilience:recovery:external-debt:v1', intervalMs: 30 * DAY, timeoutMs: 300_000 }, { label: 'Import-HHI', script: 'seed-recovery-import-hhi.mjs', seedMetaKey: 'resilience:recovery:import-hhi', canonicalKey: 'resilience:recovery:import-hhi:v1', intervalMs: 30 * DAY, timeoutMs: 1_800_000 }, { label: 'Fuel-Stocks', script: 'seed-recovery-fuel-stocks.mjs', seedMetaKey: 'resilience:recovery:fuel-stocks', canonicalKey: 'resilience:recovery:fuel-stocks:v1', intervalMs: 30 * DAY, timeoutMs: 300_000 }, + // PR 2 §3.4 — feeds the forthcoming `sovereignFiscalBuffer` dimension. + // 30-day interval matches the CACHE_TTL_SECONDS (35 days) in the seeder + // and the quarterly revision cadence documented in the manifest. Longer + // timeout than peers because Tier 3b (per-fund Wikipedia infobox) is N + // network round-trips per manifest fund the list article misses. + { label: 'Sovereign-Wealth', script: 'seed-sovereign-wealth.mjs', seedMetaKey: 'resilience:recovery:sovereign-wealth', canonicalKey: 'resilience:recovery:sovereign-wealth:v1', intervalMs: 30 * DAY, timeoutMs: 600_000 }, ]); diff --git a/tests/seed-bundle-resilience-recovery.test.mjs b/tests/seed-bundle-resilience-recovery.test.mjs index 69b0fe2c5..6892c221c 100644 --- a/tests/seed-bundle-resilience-recovery.test.mjs +++ b/tests/seed-bundle-resilience-recovery.test.mjs @@ -15,12 +15,15 @@ const EXPECTED_ENTRIES = [ { label: 'External-Debt', script: 'seed-recovery-external-debt.mjs', seedMetaKey: 'resilience:recovery:external-debt' }, { label: 'Import-HHI', script: 'seed-recovery-import-hhi.mjs', seedMetaKey: 'resilience:recovery:import-hhi' }, { label: 'Fuel-Stocks', script: 'seed-recovery-fuel-stocks.mjs', seedMetaKey: 'resilience:recovery:fuel-stocks' }, + { label: 'Sovereign-Wealth', script: 'seed-sovereign-wealth.mjs', seedMetaKey: 'resilience:recovery:sovereign-wealth' }, ]; describe('seed-bundle-resilience-recovery', () => { - it('has exactly 5 entries', () => { + it(`has exactly ${EXPECTED_ENTRIES.length} entries`, () => { const labelMatches = bundleSource.match(/label:\s*'[^']+'/g) ?? []; - assert.equal(labelMatches.length, 5, `Expected 5 entries, found ${labelMatches.length}`); + assert.equal(labelMatches.length, EXPECTED_ENTRIES.length, + `Expected ${EXPECTED_ENTRIES.length} entries, found ${labelMatches.length}. ` + + `If you added a new seeder, update EXPECTED_ENTRIES above.`); }); for (const entry of EXPECTED_ENTRIES) { @@ -38,7 +41,8 @@ describe('seed-bundle-resilience-recovery', () => { it('all entries use 30 * DAY interval', () => { const intervalMatches = bundleSource.match(/intervalMs:\s*30\s*\*\s*DAY/g) ?? []; - assert.equal(intervalMatches.length, 5, `Expected all 5 entries to use 30 * DAY interval`); + assert.equal(intervalMatches.length, EXPECTED_ENTRIES.length, + `Expected all ${EXPECTED_ENTRIES.length} entries to use 30 * DAY interval`); }); it('imports runBundle and DAY from _bundle-runner.mjs', () => {