import assert from 'node:assert/strict'; import {readFile} from 'node:fs/promises'; import test from 'node:test'; const project = await readFile(new URL('../docs/projects/aerosim.md', import.meta.url), 'utf8'); const packageJson = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8')); const lockfile = await readFile(new URL('../pnpm-lock.yaml', import.meta.url), 'utf8'); test('AeroSim portfolio roll-up reports the verified Wave 15 checkpoint', () => { assert.match(project, /## Delivery progress checkpoint — 2026-09-07/); assert.match(project, /Canonical `ToBeReleased` \| 49 \/ 114 \(43\.0%\)/); assert.match(project, /Repository-verified implementation pending reconciliation \| 6 \/ 114 \(5\.3%\)/); assert.match(project, /Canonical `InProgress` \| 7 \/ 114 \(6\.1%\)/); assert.match(project, /Canonical `ReadyForDelivery` \| 58 \/ 114 \(50\.9%\)/); assert.match(project, /Released \| 0 \/ 114 \(0\.0%\)/); assert.match(project, /Wave 15 is active/); assert.match(project, /6 of its 7 Tasks are repository-verified/); assert.match(project, /`TASK-0048`, `TASK-0061`, `TASK-0065`, `TASK-0077`, `TASK-0083`, and `TASK-0111`/); assert.match(project, /`TASK-0078` remains canonical `InProgress`[^\n]*PR #92 is closed without merge/); assert.match(project, /`09628fbb828380fbe159be7530da26f4bbf02129`/); assert.match(project, /`d8a45594c33efc3acbd1523955d4f235facc9a1f`/); assert.match(project, /PRs #85, #89, #90, #95, #96, and #97/); assert.match(project, /integrated tasks `2718`–`2720`/); assert.match(project, /Waves 9–11 and 16–30 remain ready but unclaimed/); assert.doesNotMatch(project, /Repository-verified implementation pending reconciliation \| 0 \/ 114/); assert.doesNotMatch(project, /`7f26eca79eadef3171564fc60035e9866c2c848e`/); assert.doesNotMatch(project, /Wave 3 is active/); }); test('portal pins patched audit dependencies without downgrading consumers', () => { assert.deepEqual(packageJson.pnpm?.overrides, { 'fast-uri': '3.1.6', 'serialize-javascript': '7.0.3', }); assert.match(lockfile, /fast-uri@3\.1\.6:/); assert.match(lockfile, /serialize-javascript@7\.0\.3:/); assert.doesNotMatch(lockfile, /fast-uri@3\.1\.5:/); assert.doesNotMatch(lockfile, /serialize-javascript@6\.0\.2:/); });