fix: align presentation with complete Strategy narrative
Build and publish Eldorado documentation / build (pull_request) Successful in 48s

This commit is contained in:
jarvis-at-skic committed 2026-10-08 19:21:27 +00:00
1 parent eea14bf00f
commit c88f4dbc25
8 files changed
+505 -73

No files matched your search

+10 -3
View File
@@ -9,14 +9,21 @@ for(const weight of [400,700,900]) await copyFile(`node_modules/@fontsource/lato
await copyFile('node_modules/@fontsource/lato/LICENSE',`${out}/assets/LATO-LICENSE`);
await copyFile(`${root}/theme.css`,`${out}/theme.css`);
const esc=s=>s.replaceAll('&','&amp;').replaceAll('<','&lt;').replaceAll('>','&gt;').replaceAll('"','&quot;');
await writeFile(`${out}/index.html`,`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="The AI Architect’s First Six Months: a proposed, evidence-led strategy."><title>Less Prompting, More Shipping | Eldorado</title><link rel="icon" href="data:,"><link rel="stylesheet" href="./assets/reveal.css"><link rel="stylesheet" href="./theme.css"></head><body>
await writeFile(`${out}/index.html`,`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="The autonomous SDLC destination and an evidence-led first-six-month contribution."><title>Less Prompting, More Shipping | Eldorado</title><link rel="icon" href="data:,"><link rel="stylesheet" href="./assets/reveal.css"><link rel="stylesheet" href="./theme.css"></head><body>
<nav class="toolbar" aria-label="Presentation tools"><a href="../../">Portal</a><a href="../../strategy/target-operating-model/">Strategy</a><button id="overview" type="button">Overview</button><button id="notes" type="button">Notes</button><button id="fullscreen" type="button">Fullscreen</button><a href="?print-pdf">Print</a><span class="help">← → navigate · Esc overview · S notes · F fullscreen</span></nav>
<div class="reveal deck"><div class="slides">${slides.map((s,i)=>`<section id="${s.id}" class="${s.kind}" data-timing="${s.minutes*60}" ${s.kind==='dark'?'data-background-color="#1f1f29"':''}><p class="eyebrow">ELDORADO / ${i===17?'DISCUSSION':i===18?'REFERENCE':'AI STRATEGY'}</p><${i?'h2':'h1'}>${s.title}</${i?'h2':'h1'}>${s.body}<aside class="notes"><p><strong>${s.minutes} minutes.</strong> ${esc(s.notes)}</p><p>Sources: ${esc(s.sources.join('; '))}.</p></aside></section>`).join('\n')}</div></div>
<div class="reveal deck"><div class="slides">${slides.map((s,i)=>`<section id="${s.id}" class="${s.kind}" data-timing="${s.minutes*60}" ${s.kind==='dark'?'data-background-color="#1f1f29"':''}><p class="eyebrow">ELDORADO / ${esc(s.section.toUpperCase())}</p><${i?'h2':'h1'}>${s.title}</${i?'h2':'h1'}>${s.body}<aside class="notes"><p><strong>${s.minutes} minutes.</strong> ${esc(s.notes)}</p><p>Sources: ${esc(s.sources.join('; '))}.</p></aside></section>`).join('\n')}</div></div>
<script src="./assets/reveal.js"></script><script src="./assets/notes.js"></script><script src="./runtime.js"></script></body></html>`);
await copyFile(`${root}/runtime.js`,`${out}/runtime.js`);
const sourceDocuments = await Promise.all([...new Set(slides.flatMap(s=>s.sources).filter(s=>!s.startsWith('PDF:')))].sort().map(async id=>{
const path=`docs/strategy/${id==='measurement'?'measurement/index':id}.mdx`;
return {id,path,route:`/strategy/${id}/`,sha256:createHash('sha256').update(await readFile(path)).digest('hex')};
}));
await writeFile(`${out}/source-map.json`,JSON.stringify({version:'1.0.1',strategyRevision:'same-build; exact source hashes below; deployed revision in ../../revision.txt',strategyOrigins:{longTerm:'88a43757762114a506f57ed4b44484306cae1aaa',assignment:'fcaa84f3bf9058f4ede0a097d16d0e3571590a6b',horizonCorrection:'1557813737941901572'},sourceDocuments,assignment:'AI_Architect_Test_Task.pdf',talkMinutes:slides.slice(0,17).reduce((a,s)=>a+s.minutes,0),discussionMinutes:15,slides:slides.map(({id,title,minutes,sources},i)=>({number:i+1,id,title,minutes,sources:[...new Set(sources)]}))},null,2));
const assignmentQuestions = [
{question:'1. What you do',slides:['starting-point','influence','months-one-two','months-three-four','months-five-six','capacity']},
{question:'2. How you measure it',slides:['measures','misleading','qualification','experiment']},
{question:'3. What you achieve',slides:['six-month-target','month-six']},
{question:'4. What comes next',slides:['target','contributors','roadmap','learning-loop','beyond','authority']},
];
const diagramSources = await Promise.all(['diagrams/strategy-target.architecture.json','diagrams/strategy-target-mobile.architecture.json'].map(async path=>({path,sha256:createHash('sha256').update(await readFile(path)).digest('hex')})));
await writeFile(`${out}/source-map.json`,JSON.stringify({version:'1.1.0',assignmentQuestions,diagramSources,strategyRevision:'same-build; exact source hashes below; deployed revision in ../../revision.txt',strategyOrigins:{longTerm:'88a43757762114a506f57ed4b44484306cae1aaa',assignment:'fcaa84f3bf9058f4ede0a097d16d0e3571590a6b',horizonCorrection:'1557813737941901572'},sourceDocuments,assignment:'AI_Architect_Test_Task.pdf',talkMinutes:slides.filter(s=>s.track==='main').reduce((a,s)=>a+s.minutes,0),discussionMinutes:slides.filter(s=>s.track==='discussion').reduce((a,s)=>a+s.minutes,0),appendixMinutes:0,timingNote:'Revised presentation allocation; PDF specifies 50 total, not the split. The six-month Strategy page retains its earlier proposed outline.',slides:slides.map(({id,title,minutes,sources,section,track},i)=>({number:i+1,id,title,minutes,section,track,sources:[...new Set(sources)]}))},null,2));
console.log(`Built ${slides.length} local Reveal.js slides at ${out}`);