[verified] docs: update AeroSim Wave 15 roll-up
Build and publish Corp v1 Board portal / build (pull_request) Successful in 40s

This commit is contained in:
2026-09-07 04:40:52 +00:00
parent 5e2857e918
commit 61aa7d6454
5 changed files with 124 additions and 104 deletions
+56 -79
View File
@@ -85,8 +85,9 @@ for (const marker of ['corp-v1-dpvp', 'dpvp-maintainers', 'dpvp-skill-maintainer
}
const aerosimProject = read('docs/projects/aerosim.md');
const APP_SHA = 'efbf3967548f1cbf5e06f97fa9d659535e35a7b4';
const DOC_SHA = 'f686610a8b1b21825c66dc424f484fb2672933d7';
const APP_SHA = '09628fbb828380fbe159be7530da26f4bbf02129';
const DOC_SHA = 'd8a45594c33efc3acbd1523955d4f235facc9a1f';
const AEROSIM_CHECKPOINT_HEADING = 'Delivery progress checkpoint — 2026-09-07';
const markdownSection = (document, heading) => {
const marker = `## ${heading}`;
@@ -103,11 +104,7 @@ const uniqueLine = (text, predicate, description) => {
};
function verifyAeroSimProject(document) {
const requiredSectionHeadings = [
'Resources',
'Delivery progress checkpoint — 2026-09-03',
'Discord',
];
const requiredSectionHeadings = ['Resources', AEROSIM_CHECKPOINT_HEADING, 'Discord'];
const documentLines = document.split('\n');
const requiredSectionIndices = requiredSectionHeadings.map((heading) => {
const indices = documentLines.flatMap((line, index) => line === `## ${heading}` ? [index] : []);
@@ -119,28 +116,27 @@ function verifyAeroSimProject(document) {
'AeroSim required sections must follow Resources, checkpoint, Discord order',
);
for (const marker of [
'Delivery progress checkpoint — 2026-09-03',
'8 / 114',
'7.0%',
'0 / 114',
'TASK-0012',
'TASK-0015',
'TASK-0073',
'TASK-0114',
'TASK-0013',
'TASK-0016',
'TASK-0074',
'TASK-0115',
'PR #143',
'1760',
'1761',
'1762',
'1763',
'efbf3967548f1cbf5e06f97fa9d659535e35a7b4',
'f686610a8b1b21825c66dc424f484fb2672933d7',
'106 ReadyForDelivery',
]) {
const requiredMarkers = [
AEROSIM_CHECKPOINT_HEADING,
'49 / 114',
'43.0%',
'6 / 114 (5.3%)',
'7 / 114 (6.1%)',
'58 / 114 (50.9%)',
'PR #155',
'2581',
'2582',
APP_SHA,
DOC_SHA,
'Wave 15 is active',
'6 of its 7 Tasks are repository-verified',
'PRs #85, #89, #90, #95, #96, and #97',
'integrated tasks `2718`–`2720`',
'`TASK-0078` remains canonical `InProgress`',
'PR #92 is closed without merge',
'Wave 16 remains unclaimed',
];
for (const marker of requiredMarkers) {
assert.ok(document.includes(marker), `AeroSim progress checkpoint is missing: ${marker}`);
}
@@ -150,7 +146,7 @@ function verifyAeroSimProject(document) {
assert.match(applicationResource, new RegExp(`application.*\\b${APP_SHA}\\b`, 'i'), 'application repository must reference the application SHA');
assert.match(documentationResource, new RegExp(`documentation.*\\b${DOC_SHA}\\b`, 'i'), 'documentation repository must reference the documentation SHA');
const checkpoint = markdownSection(document, 'Delivery progress checkpoint — 2026-09-03');
const checkpoint = markdownSection(document, AEROSIM_CHECKPOINT_HEADING);
const checkpointLines = checkpoint.split('\n');
const checkpointTableHeader = '| Measure | Progress | Meaning |';
const checkpointTableHeaderIndices = checkpointLines.flatMap(
@@ -158,62 +154,43 @@ function verifyAeroSimProject(document) {
);
assert.equal(checkpointTableHeaderIndices.length, 1, 'AeroSim checkpoint table header must appear exactly once');
const checkpointTableHeaderIndex = checkpointTableHeaderIndices[0];
assert.equal(
checkpointLines[checkpointTableHeaderIndex + 1],
'|---|---:|---|',
'AeroSim checkpoint table separator must exactly preserve its three columns and progress alignment',
);
assert.equal(checkpointLines[checkpointTableHeaderIndex + 1], '|---|---:|---|', 'AeroSim checkpoint table separator must exactly preserve its three columns and progress alignment');
const expectedRows = [
'Canonical `ToBeReleased`',
'Repository-verified implementation pending reconciliation',
'Canonical `InProgress`',
'Canonical `ReadyForDelivery`',
'Released',
];
assert.deepEqual(
checkpointLines.slice(checkpointTableHeaderIndex + 2, checkpointTableHeaderIndex + 5).map(
(line) => line.match(/^\| (Canonical `ToBeReleased`|Repository-verified implementation|Released) \|/)?.[1],
checkpointLines.slice(checkpointTableHeaderIndex + 2, checkpointTableHeaderIndex + 7).map(
(line) => line.match(/^\| ([^|]+?) \|/)?.[1],
),
['Canonical `ToBeReleased`', 'Repository-verified implementation', 'Released'],
'AeroSim checkpoint rows must follow canonical, implementation, released order',
expectedRows,
'AeroSim checkpoint rows must preserve canonical, reconciliation, active, ready, and released order',
);
const canonicalRow = uniqueLine(checkpoint, (line) => line.startsWith('| Canonical `ToBeReleased` |'), 'canonical ToBeReleased row');
const implementationRow = uniqueLine(checkpoint, (line) => line.startsWith('| Repository-verified implementation |'), 'repository-verified implementation row');
const implementationRow = uniqueLine(checkpoint, (line) => line.startsWith('| Repository-verified implementation pending reconciliation |'), 'repository-verified pending-reconciliation row');
const inProgressRow = uniqueLine(checkpoint, (line) => line.startsWith('| Canonical `InProgress` |'), 'canonical InProgress row');
const readyRow = uniqueLine(checkpoint, (line) => line.startsWith('| Canonical `ReadyForDelivery` |'), 'canonical ReadyForDelivery row');
const releasedRow = uniqueLine(checkpoint, (line) => line.startsWith('| Released |'), 'released row');
const waveStatus = uniqueLine(checkpoint, (line) => line.startsWith('Wave 2 is complete:'), 'Wave 2/Wave 3 status paragraph');
const waveStatus = uniqueLine(checkpoint, (line) => line.startsWith('Wave 15 is active'), 'Wave 15 status paragraph');
assert.match(releasedRow, /\|\s*0\s*\/\s*114\s*\(0%\)/i, 'AeroSim must distinguish released progress');
assert.match(canonicalRow, /\|\s*8\s*\/\s*114\s*\(7\.0%\)/i, 'AeroSim must expose canonical delivery completion');
assert.match(implementationRow, /\|\s*8\s*\/\s*114\s*\(7\.0%\)/i, 'AeroSim must expose repository-verified implementation separately');
assert.match(
canonicalRow,
/Wave 2 Tasks `TASK-0012`, `TASK-0015`, `TASK-0073`, and `TASK-0114`/,
'AeroSim Wave 2 task group must remain on the canonical completion row',
);
assert.match(
implementationRow,
new RegExp('application `test` SHA `' + APP_SHA + '`; integrated publish task `1760` and validate task `1761` succeeded', 'i'),
'AeroSim implementation row must bind the application SHA, publish task 1760, and validate task 1761',
);
assert.match(waveStatus, new RegExp('final application head is `' + APP_SHA + '`'), 'Wave 2 status must bind the final application head to the application SHA');
assert.match(waveStatus, new RegExp('documentation `test` SHA `' + DOC_SHA + '`'), 'Wave 2 status must bind the documentation merge to the documentation SHA');
assert.match(
waveStatus,
/Documentation exact-head build task `1762` and integrated build task `1763` succeeded/,
'Wave 2 status must bind exact-head build task 1762 and integrated build task 1763',
);
assert.match(
waveStatus,
/Wave 3 is active: `TASK-0013`, `TASK-0016`, `TASK-0074`, and `TASK-0115` are claimed/,
'AeroSim Wave 3 task group must remain in the active Wave 3 clause',
);
assert.match(waveStatus, /Wave 3[^\n]*claimed[^\n]*not (?:yet )?implemented or merged/i, 'AeroSim must distinguish active Wave 3 claims from implementation');
assert.match(canonicalRow, /\|\s*49\s*\/\s*114\s*\(43\.0%\)/i, 'AeroSim must expose canonical ToBeReleased progress');
assert.match(implementationRow, /\|\s*6\s*\/\s*114\s*\(5\.3%\)/i, 'AeroSim must expose repository-verified pending reconciliation separately');
assert.match(inProgressRow, /\|\s*7\s*\/\s*114\s*\(6\.1%\)/i, 'AeroSim must expose canonical InProgress progress');
assert.match(readyRow, /\|\s*58\s*\/\s*114\s*\(50\.9%\)/i, 'AeroSim must expose canonical ReadyForDelivery progress');
assert.match(releasedRow, /\|\s*0\s*\/\s*114\s*\(0\.0%\)/i, 'AeroSim must distinguish released progress');
assert.match(waveStatus, new RegExp('documentation `test` SHA `' + DOC_SHA + '`[^\\n]*PR #155 exact-head build task'), 'Wave 15 status must bind PR #155 to the documentation SHA');
assert.match(waveStatus, /exact-head build task `2581`[^\n]*integrated build task `2582`/i, 'Wave 15 status must bind exact-head and integrated documentation tasks');
assert.match(waveStatus, new RegExp('application integration head is `' + APP_SHA + '`'), 'Wave 15 status must bind the current application SHA');
assert.match(waveStatus, /6 of its 7 Tasks are repository-verified[^\n]*PRs #85, #89, #90, #95, #96, and #97/i, 'Wave 15 status must enumerate repository-verified integration evidence');
assert.match(waveStatus, /`TASK-0078` remains canonical `InProgress`[^\n]*PR #92 is closed without merge/i, 'Wave 15 status must preserve the unmerged Task state');
assert.match(readyRow, /Waves 9–11 and 16–30 remain ready but unclaimed/i, 'ReadyForDelivery must identify both earlier and later unclaimed waves');
assert.match(waveStatus, /dated portfolio checkpoint, not a second task database/i, 'AeroSim must remain a non-authoritative portfolio checkpoint');
for (const [staleMarker, stalePattern] of [
['4 / 114', /(?<!\d)4\s*\/\s*114(?!\d)/],
['3.5%', /(?<![\d.])3\.5%(?![\d.])/],
['5 / 114', /(?<!\d)5\s*\/\s*114(?!\d)/],
['4.4%', /(?<![\d.])4\.4%(?![\d.])/],
['58d33ffbd3ca21ffdc5882a75de8fe71c25188b6', /58d33ffbd3ca21ffdc5882a75de8fe71c25188b6/],
['29d5e7810e63f3407f62730c1b2c71bc0644310b', /29d5e7810e63f3407f62730c1b2c71bc0644310b/],
]) {
assert.doesNotMatch(document, stalePattern, `stale AeroSim checkpoint marker must not remain: ${staleMarker}`);
}
assert.doesNotMatch(waveStatus, /Wave 2 is active/i, 'Wave 2 must not remain active');
assert.doesNotMatch(checkpoint, /Repository-verified implementation \|/i, 'ambiguous cumulative implementation row must not return');
assert.doesNotMatch(document, /8\s*\/\s*114\s*\(7\.0%\)/i, 'stale Wave 2 portfolio metrics must not remain');
assert.doesNotMatch(waveStatus, /Wave 3 is active/i, 'stale active-wave wording must not remain');
}
verifyAeroSimProject(aerosimProject);