Merge published Strategy horizons into homepage embed candidate
Build and publish Eldorado documentation / build (pull_request) Successful in 46s

This commit is contained in:
jarvis-at-skic committed 2026-10-08 18:38:06 +00:00
commit 4e94ad24fd
46 files changed
+600 -303

No files matched your search

+1 -1
View File
@@ -3,6 +3,6 @@ const fs=require('node:fs');const assert=require('node:assert/strict');
(async()=>{
const base=process.argv[2]||'http://127.0.0.1:4173';const out=`.cache/journey-${process.argv[3]||'candidate'}`;fs.mkdirSync(out,{recursive:true});
const b=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']});const results=[];
const steps=[['target-operating-model','roadmap'],['roadmap','stage-01-skills-adoption'],['stage-01-skills-adoption','baseline'],['baseline','measurement'],['measurement','skills-quality'],['skills-quality','skills-governance'],['skills-governance','skills-quality'],['skills-quality','skills-adoption'],['skills-adoption','skills-maintenance'],['skills-maintenance','skills-quality'],['skills-quality','measurement/validated-task-success'],['measurement/validated-task-success','skills-quality'],['skills-maintenance','stage-02-autonomous-agent'],['stage-02-autonomous-agent','stage-01-skills-adoption']];
const steps=[['target-operating-model','roadmap'],['roadmap','six-months-target'],['six-months-target','six-months-roadmap'],['six-months-roadmap','stage-02-autonomous-agent'],['six-months-roadmap','stage-01-skills-adoption'],['stage-01-skills-adoption','baseline'],['baseline','measurement'],['measurement','skills-quality'],['skills-quality','skills-governance'],['skills-governance','skills-quality'],['skills-quality','skills-adoption'],['skills-adoption','skills-maintenance'],['skills-maintenance','skills-quality'],['skills-quality','measurement/validated-task-success'],['measurement/validated-task-success','skills-quality'],['skills-maintenance','stage-02-autonomous-agent'],['stage-02-autonomous-agent','stage-01-skills-adoption']];
try{for(const width of [1440,390]){const p=await b.newPage({viewport:{width,height:900}});for(const [from,to]of steps){await p.goto(`${base}/eldorado-v1/documentation/strategy/${from}/`,{waitUntil:'networkidle'});const href=`/eldorado-v1/documentation/strategy/${to}/`;const link=p.locator(`article a[href="${href}"]`).filter({visible:true}).first();assert(await link.count(),`${from} → ${to}`);await link.scrollIntoViewIfNeeded();await p.waitForLoadState('networkidle');await link.click();await p.waitForURL(`${base}${href}`);await p.locator('article h1').waitFor();results.push({width,from,to,clicked:true});fs.writeFileSync(`${out}/results.json`,JSON.stringify(results,null,2))}await p.close()}console.log(`PASS ${results.length} real reader handoffs and feedback links`)}finally{await b.close()}
})().catch(e=>{console.error(e);process.exitCode=1});
+1 -5
View File
@@ -13,8 +13,6 @@ const fs = require('node:fs');
const page = await context.newPage();
await page.goto(`${base}/eldorado-v1/documentation/strategy/`, {waitUntil: 'networkidle'});
await page.addStyleTag({content:'html {scroll-behavior:auto !important;}'});
await page.getByText('Conditional long-term Target operating model — not the six-month promise',{exact:true}).focus();
await page.keyboard.press('Enter');
const panel = page.locator('.archify-panel--story[data-diagram="strategy-target"]');
const iframe = panel.locator(width > 700 ? '.story-desktop' : '.story-mobile');
await iframe.scrollIntoViewIfNeeded();
@@ -140,9 +138,7 @@ const fs = require('node:fs');
await page.waitForURL('**/strategy/roadmap/');
await page.goBack({waitUntil:'domcontentloaded'});
await page.waitForURL('**/strategy/target-operating-model/');
await page.getByRole('heading', {name:'First six months as AI Architect', exact:true, level:1}).waitFor();
await page.getByText('Conditional long-term Target operating model — not the six-month promise',{exact:true}).focus();
await page.keyboard.press('Enter');
await page.getByRole('heading', {name:'Target', exact:true, level:1}).waitFor();
const next = page.locator(`.archify-panel--story[data-diagram="strategy-target"] > .story-${width > 700 ? 'desktop' : 'mobile'}`);
await next.scrollIntoViewIfNeeded();
await (await (await next.elementHandle()).contentFrame()).waitForFunction(() => document.documentElement.dataset.theme === 'dark');
+3 -3
View File
@@ -26,7 +26,7 @@ const views = {
const ids=views[name];
geometry.cards.sort((a,b)=>ids.indexOf(a.id)-ids.indexOf(b.id));
assert.deepEqual(geometry.cards.map(n => n.id), ids);
assert.deepEqual(geometry.cards.map(n => n.number), ids.length === 6 ? ids.map((_,i)=>`Step ${i+1}`) : name === 'strategy-roadmap' ? ['Proposed M1–4','Proposed M5–6'] : ['First','If justified']);
assert.deepEqual(geometry.cards.map(n => n.number), ids.length === 6 ? ids.map((_,i)=>`Step ${i+1}`) : name === 'strategy-roadmap' ? ['Stage 1','Stage 2'] : ['First','If justified']);
assert.equal(geometry.edges.length,ids.length===6?6:1);
if(ids.length===6) assert(geometry.edges.some(e=>e.id==='repeat'));
for(const edge of geometry.edges) assert(edge.box.left>=0 && edge.box.right<=geometry.width+1 && edge.box.top>=0 && edge.box.bottom<=geometry.height+1, `clipped edge ${name} ${edge.id}`);
@@ -63,7 +63,7 @@ const views = {
if(await frame.locator('html').getAttribute('data-theme')!==theme) {
await frame.locator('#btn-theme').focus(); await page.keyboard.press('Enter');
}
await page.waitForFunction(t=>document.documentElement.dataset.theme===t,theme);
await page.waitForFunction(t=>document.documentElement?.dataset.theme===t,theme);
const inline=await inspect(frame,name,width<1100);
await frame.locator('#btn-preset').focus();await page.keyboard.press('Enter');
await frame.locator('[data-preset-value="blueprint"]').focus();await page.keyboard.press('Enter');
@@ -93,7 +93,7 @@ const views = {
const close=panel.getByRole('button',{name:'Close full-screen diagram',exact:true});await close.waitFor({state:'visible'});
const fullIframe=panel.locator('dialog iframe');
const fullscreen=await (await fullIframe.elementHandle()).contentFrame();
await fullscreen.waitForFunction(t=>document.documentElement.dataset.theme===t,theme);
await fullscreen.waitForFunction(t=>document.documentElement?.dataset.theme===t,theme);
const expanded=await inspect(fullscreen,name,width<1000);
await page.screenshot({path:`${output}/${width}-${theme}-${name}-fullscreen.png`});
await close.focus();await page.keyboard.press('Escape');
+3 -3
View File
@@ -61,14 +61,14 @@ const fs = require('node:fs');
assert.equal(response.status(), 200);
assert.equal(await page.locator('h1').innerText(), 'Roadmap');
const headings = page.locator('.strategy-content > h2');
assert.deepEqual((await headings.allTextContents()).map(s => s.replace(/\u200b/g, '')), ['Six months, two investment decisions','Delivery first, replication only if earned','Keep one learning loop','Solo capacity and influence']);
assert.deepEqual((await headings.allTextContents()).map(s => s.replace(/\u200b/g, '')), ['Two stages toward the long-term Target','Stage 1: Delivery first','Improve within each phase','Delivery in practice']);
const text = await page.locator('.strategy-content').innerText();
for (const marker of ['Humans direct, guide and review throughout', 'Delivery keeps improving', 'system-logic source', 'baseline', 'Target operating model']) assert(text.includes(marker), marker);
assert(!text.includes('Supporting gate evidence and hold conditions\n\nThese are'));
if (width < 700) await page.getByRole('button', {name:'Toggle navigation bar'}).click();
const menu = page.locator('.theme-doc-sidebar-menu .menu__link').filter({visible:true});
await menu.first().waitFor({state:'visible'});
assert.deepEqual((await menu.allTextContents()).slice(0,2), ['Six-month strategy','Roadmap']);
assert.deepEqual((await menu.allTextContents()).slice(0,2), ['Target','Roadmap']);
if (width < 700) await page.getByRole('button', {name:'Close navigation bar'}).click();
const panel = page.locator('.archify-panel--story').first();
const iframe = panel.locator(width > 700 ? '.story-desktop' : '.story-mobile');
@@ -125,7 +125,7 @@ const fs = require('node:fs');
const [download] = await Promise.all([page.waitForEvent('download'), frame.locator('[data-format="svg"]').click()]);
assert.equal(await download.failure(), null);
await download.saveAs(`${output}/${width}.svg`);
assert(fs.readFileSync(`${output}/${width}.svg`, 'utf8').includes('Learn and test'));
assert(fs.readFileSync(`${output}/${width}.svg`, 'utf8').includes('Adopt skills'));
assert(fs.readFileSync(`${output}/${width}.svg`, 'utf8').includes('eldorado-roadmap-typography'));
for (const id of ['skills','autonomy']) {
await frame.locator(`svg[role="img"] [data-node-id="${id}"]`).screenshot({path:`${output}/${width}-${id}-card.png`});
+2 -4
View File
@@ -23,18 +23,16 @@ const fs = require('node:fs');
if (width < 700) await page.getByRole('button', {name:'Toggle navigation bar'}).click();
const menu = page.locator('.theme-doc-sidebar-menu .menu__link').filter({visible:true});
await menu.first().waitFor({state:'visible'});
assert.deepEqual(await menu.allTextContents(), ['Six-month strategy', 'Roadmap', 'One bounded experiment', 'Beyond six months']);
assert.deepEqual(await menu.allTextContents(), ['Target', 'Roadmap', '6 Months Target', '6 Months Roadmap', 'Beyond 6 Months']);
assert((await menu.nth(0).getAttribute('href')).endsWith('/strategy/target-operating-model/'));
assert((await menu.nth(1).getAttribute('href')).endsWith('/strategy/roadmap/'));
assert.equal(await menu.filter({hasText:/^Six-month strategy$/}).count(), 1);
assert.equal(await menu.filter({hasText:/^Target$/}).count(), 1);
await page.screenshot({path:`${output}/${width}-${route ? 'target' : 'landing'}-navigation.png`,fullPage:true,animations:'disabled'});
await menu.nth(1).click();
await page.waitForURL('**/strategy/roadmap/');
await page.getByRole('heading', {level:1,name:'Roadmap',exact:true}).waitFor();
await page.goBack({waitUntil:'domcontentloaded'});
await page.waitForURL('**/strategy/target-operating-model/');
await page.getByText('Conditional long-term Target operating model — not the six-month promise',{exact:true}).focus();
await page.keyboard.press('Enter');
const iframe = page.locator(`[data-diagram="strategy-target"] > .story-${width > 700 ? 'desktop' : 'mobile'}`);
await iframe.scrollIntoViewIfNeeded();
const frame = await (await iframe.elementHandle()).contentFrame();
+1 -1
View File
@@ -46,7 +46,7 @@ const fs = require('node:fs');
await page.waitForURL(`${base}/eldorado-v1/documentation/strategy/measurement/supported-bundle-coverage/`);
await page.getByRole('heading', {level:1, name:'Supported bundle coverage', exact:true}).waitFor();
assert((await page.locator('article').innerText()).includes('Supported bundle coverage'));
assert.equal(await page.locator('.breadcrumbs a').filter({hasText:'One bounded experiment'}).getAttribute('href'), '/eldorado-v1/documentation/strategy/stage-01-skills-adoption/');
assert.equal(await page.locator('.breadcrumbs a').filter({hasText:'6 Months Roadmap'}).getAttribute('href'), '/eldorado-v1/documentation/strategy/six-months-roadmap/');
assert((await page.locator('.breadcrumbs').innerText()).includes('Measurement'));
await open();
await menu.getByRole('link', {name:'Supported bundle coverage', exact:true}).waitFor({state:'visible'});
+1 -1
View File
@@ -28,7 +28,7 @@ const fs = require('node:fs');
const menu = page.locator('.theme-doc-sidebar-menu .menu__link').filter({visible:true});
await menu.first().waitFor({state:'visible'});
const metrics = JSON.parse(fs.readFileSync('research/ai-adoption/measurement-migration.json','utf8')).metrics;
assert.deepEqual(await menu.allTextContents(), ['Six-month strategy','Roadmap','One bounded experiment','Measurement',...metrics.map(m => m.title),'Collection and safeguards','Run the synthetic measurement example','Baseline','Governance','Quality','Adoption','Maintenance','Beyond six months']);
assert.deepEqual(await menu.allTextContents(), ['Target','Roadmap','6 Months Target','6 Months Roadmap','Skills lifecycle reference','Measurement',...metrics.map(m => m.title),'Collection and safeguards','Run the synthetic measurement example','Baseline','Governance','Quality','Adoption','Maintenance','Beyond 6 Months']);
if (width < 700) await page.getByRole('button', {name:'Close navigation bar'}).click();
const panel = page.locator('.archify-panel--story');
const iframe = panel.locator(width > 700 ? '.story-desktop' : '.story-mobile');
+1 -1
View File
@@ -9,7 +9,7 @@ const assert=require('node:assert/strict');
for(const topic of ['six-months','measurement','baseline','governance','quality','adoption','maintenance','stage01','stage02']) for(const width of [1440,1024,390,320]) {
console.log(`Checking ${topic} at ${width}px`);
const page=await browser.newPage({viewport:{width,height:900},colorScheme:'light'});const errors=[];page.on('pageerror',e=>errors.push(e.message));
const route=topic==='six-months'?'target-operating-model':topic==='stage01'?'stage-01-skills-adoption':topic==='stage02'?'stage-02-autonomous-agent':['measurement','baseline'].includes(topic)?topic:`skills-${topic}`;
const route=topic==='six-months'?'six-months-roadmap':topic==='stage01'?'stage-01-skills-adoption':topic==='stage02'?'stage-02-autonomous-agent':['measurement','baseline'].includes(topic)?topic:`skills-${topic}`;
assert.equal((await page.goto(`${base}/eldorado-v1/documentation/strategy/${route}/`,{waitUntil:'networkidle'})).status(),200);
const panel=page.locator('.archify-panel--skills');assert.equal(await panel.count(),1);
const iframe=panel.locator(width>1100?'.story-desktop':'.story-mobile');await iframe.scrollIntoViewIfNeeded();
+14 -14
View File
@@ -6,14 +6,14 @@ const fs = require('node:fs');
const output = `.cache/strategy-navigation-${process.argv[3] || 'local'}`;
fs.mkdirSync(output, {recursive:true});
const prefix = '/eldorado-v1/documentation/strategy/';
const first = 'One bounded experiment';
const second = 'Beyond six months';
const topics = ['Measurement','Baseline','Governance','Quality','Adoption','Maintenance'];
const first = '6 Months Roadmap';
const second = 'Beyond 6 Months';
const topics = ['Skills lifecycle reference','Measurement','Baseline','Governance','Quality','Adoption','Maintenance'];
const metrics = JSON.parse(fs.readFileSync('research/ai-adoption/measurement-migration.json','utf8')).metrics;
const childIds = [...metrics.map(m => m.docId),'measurement/collection-and-safeguards','measurement/synthetic-example'];
const childTitles = [...metrics.map(m => m.title),'Collection and safeguards','Run the synthetic measurement example'];
const ids = ['target-operating-model','roadmap','stage-01-skills-adoption','measurement',...childIds,'baseline','skills-governance','skills-quality','skills-adoption','skills-maintenance','stage-02-autonomous-agent'];
const titles = ['First six months as AI Architect','Roadmap',first,'Measuring real output',...childTitles,'Baseline','Skills governance','Skills quality','Skills adoption','Skills maintenance',second];
const ids = ['target-operating-model','roadmap','six-months-target','six-months-roadmap','stage-01-skills-adoption','measurement',...childIds,'baseline','skills-governance','skills-quality','skills-adoption','skills-maintenance','stage-02-autonomous-agent'];
const titles = ['Target','Roadmap','6 Months Target',first,'Skills lifecycle reference','Measuring real output',...childTitles,'Baseline','Skills governance','Skills quality','Skills adoption','Skills maintenance',second];
const browser = await chromium.launch({headless:true, executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE, args:['--no-sandbox']});
const results = [];
try {
@@ -35,26 +35,26 @@ const fs = require('node:fs');
assert.equal((await page.goto(`${base}${prefix}roadmap/`, {waitUntil:'networkidle'})).status(), 200);
let menu = await openMenu();
const visibleLabels = () => menu.locator('.menu__link').filter({visible:true}).allTextContents();
assert.deepEqual(await visibleLabels(), ['Six-month strategy','Roadmap',first,second]);
assert.deepEqual(await visibleLabels(), ['Target','Roadmap','6 Months Target',first,second]);
const category = menu.locator('.theme-doc-sidebar-item-category').filter({has:page.getByRole('link', {name:first, exact:true})});
const caret = category.locator(':scope > .menu__list-item-collapsible > button.menu__caret');
await caret.click();
await category.getByRole('link', {name:'Governance', exact:true}).waitFor({state:'visible'});
assert.deepEqual(await visibleLabels(), ['Six-month strategy','Roadmap',first,...topics,second]);
assert.deepEqual(await visibleLabels(), ['Target','Roadmap','6 Months Target',first,...topics,second]);
assert.deepEqual(await category.locator('ul .menu__link').filter({visible:true}).allTextContents(), topics);
const measurement = category.locator('.theme-doc-sidebar-item-category').filter({has:page.getByRole('link', {name:'Measurement', exact:true})});
const reference = measurement.locator(':scope > .menu__list-item-collapsible > button.menu__caret');
await reference.focus();
await page.keyboard.press('Enter');
await category.getByRole('link', {name:'Validated task success', exact:true}).waitFor({state:'visible'});
assert.deepEqual(await visibleLabels(), ['Six-month strategy','Roadmap',first,topics[0],...childTitles,...topics.slice(1),second]);
assert.deepEqual(await visibleLabels(), ['Target','Roadmap','6 Months Target',first,...topics.slice(0,2),...childTitles,...topics.slice(2),second]);
await reference.click();
await page.screenshot({path:`${output}/${width}-expanded.png`, animations:'disabled'});
await caret.click();
await category.getByRole('link', {name:'Governance', exact:true}).waitFor({state:'hidden'});
assert.deepEqual(await visibleLabels(), ['Six-month strategy','Roadmap',first,second]);
assert.deepEqual(await visibleLabels(), ['Target','Roadmap','6 Months Target',first,second]);
await menu.getByRole('link', {name:first, exact:true}).click();
await page.waitForURL(`${base}${prefix}stage-01-skills-adoption/`);
await page.waitForURL(`${base}${prefix}six-months-roadmap/`);
await page.getByRole('heading', {level:1, name:first, exact:true}).waitFor();
assert.equal(await page.locator('h1').innerText(), first);
assert((await page.locator('article').innerText()).includes('Delivery first'));
@@ -71,11 +71,11 @@ const fs = require('node:fs');
else assert.equal(await prev.count(), 0);
if (index < ids.length-1) assert.equal(await next.getAttribute('href'), `${prefix}${id === 'measurement' ? 'baseline' : ids[index+1]}/`);
else assert.equal(await next.count(), 0);
if (index >= 3 && index < ids.length - 1) {
assert.equal(await page.locator('.breadcrumbs a').filter({hasText:first}).getAttribute('href'), `${prefix}stage-01-skills-adoption/`);
if (index >= 4 && index < ids.length - 1) {
assert.equal(await page.locator('.breadcrumbs a').filter({hasText:first}).getAttribute('href'), `${prefix}six-months-roadmap/`);
menu = await openMenu();
const expectedTopics = id === 'measurement' || id.startsWith('measurement/') ? [topics[0],...childTitles,...topics.slice(1)] : topics;
assert.deepEqual(await visibleLabels(), ['Six-month strategy','Roadmap',first,...expectedTopics,second]);
const expectedTopics = id === 'measurement' || id.startsWith('measurement/') ? [...topics.slice(0,2),...childTitles,...topics.slice(2)] : topics;
assert.deepEqual(await visibleLabels(), ['Target','Roadmap','6 Months Target',first,...expectedTopics,second]);
if (id.startsWith('measurement/')) assert.equal(await page.locator('.breadcrumbs a').filter({hasText:'Measurement'}).getAttribute('href'), `${prefix}measurement/`);
await closeMenu();
}
-2
View File
@@ -132,8 +132,6 @@ function inspectTypography({mobile}) {
const page = await browser.newPage({viewport:{width,height:1000}});
await page.goto(`${base}/eldorado-v1/documentation/strategy/target-operating-model/`,{waitUntil:'networkidle'});
await page.addStyleTag({content:'html {scroll-behavior:auto !important;}'});
await page.getByText('Conditional long-term Target operating model — not the six-month promise',{exact:true}).focus();
await page.keyboard.press('Enter');
const panel = page.locator('[data-diagram="strategy-target"]');
const iframe = panel.locator(`:scope > .story-${width > 700 ? 'desktop' : 'mobile'}`);
await iframe.scrollIntoViewIfNeeded();