Build and publish Eldorado documentation / build (pull_request) Successful in 39s
37 lines
2.5 KiB
JavaScript
37 lines
2.5 KiB
JavaScript
import {test} from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {readFileSync} from 'node:fs';
|
|
const read = path => readFileSync(path, 'utf8');
|
|
|
|
test('Roadmap visibly assesses code and real delivery before adoption', () => {
|
|
const page = read('docs/strategy/roadmap.mdx');
|
|
const visible = page.split('<details>')[0];
|
|
const headings = [...visible.matchAll(/^## (.+)$/gm)].map(match => match[1]);
|
|
assert.deepEqual(headings, ['1. Understand code quality and delivery', '2. Fix critical readiness gaps', '3. Run a bounded pilot', '4. Expand only on evidence', '5. Sustain and improve']);
|
|
assert(visible.indexOf(' story />') < visible.indexOf('## 1.'));
|
|
for (const marker of ['representative repositories', 'tests and CI', 'maintainability', 'technical debt', 'security findings', 'actual SDLC', 'ownership', 'review and release', 'bottlenecks', 'baseline findings', 'process map', 'prioritized gaps', 'alongside the pilot', './measurement.mdx', './target-operating-model.mdx']) assert(visible.includes(marker), marker);
|
|
assert.equal((visible.match(/\*\*Output:/g) || []).length, 5);
|
|
assert.match(visible, /Recommended sequence/);
|
|
assert(!page.includes('### Foundation'));
|
|
for (const marker of ['revocation', 'exact-artifact approvals', 'idempotency', 'human takeover', 'sensitive decisions']) assert(page.includes(marker), marker);
|
|
});
|
|
|
|
test('both roadmap diagrams make assessment and readiness prerequisites to the pilot', () => {
|
|
const ids = ['assessment', 'readiness', 'pilot', 'expansion', 'sustain'];
|
|
for (const suffix of ['', '-mobile']) {
|
|
const diagram = JSON.parse(read(`diagrams/strategy-roadmap${suffix}.workflow.json`));
|
|
assert.equal(diagram.schema_version, 2);
|
|
assert.equal(diagram.diagram_type, 'workflow');
|
|
assert.deepEqual(diagram.mainPath, ids);
|
|
assert.deepEqual(diagram.nodes.map(n => n.id), ids);
|
|
assert.deepEqual(diagram.nodes.map(n => n.label), ['Understand today', 'Prepare foundations', 'Pilot', 'Expand', 'Sustain']);
|
|
assert.deepEqual(diagram.edges.map(e => [e.from,e.to]), ids.slice(1).map((id, i) => [ids[i],id]));
|
|
assert.match(diagram.nodes[0].sublabel, /code quality and real delivery/);
|
|
assert.match(diagram.nodes[0].sublabel, /baseline, process map, prioritized gaps/);
|
|
assert.match(diagram.nodes[1].tag, /Critical gaps closed/);
|
|
assert(diagram.nodes.every(n => n.sublabel.includes('Output:') && n.tag.startsWith('Exit:')));
|
|
assert.deepEqual(diagram.nodes.map(n => n.col), suffix ? [0,0,0,0,0] : [0,1,2,3,4]);
|
|
assert.equal(diagram.lanes.length, 1);
|
|
}
|
|
});
|