# Dossier technique MacLustr (PDF) Sortie : `cluster-skill/MACLUSTR-DOSSIER.pdf` (copie datée sur le Bureau). A4 paysage, couverture sombre + corps clair, ~14 pages. Sources : `../INVENTAIRE-MACLUSTR.md` (tables mesurées), `data.json` (export de `maclustr-www/public/data.js`), `live.json` (`https://www.maclustr.io/api/live`), `map.png` (capture de www.maclustr.io/map). ```bash cd ~/Desktop/cluster-skill/dossier curl -s https://www.maclustr.io/api/live > live.json node -e "const w={};require('vm').runInNewContext(require('fs').readFileSync(process.env.HOME+'/Desktop/Cluster/maclustr-www/public/data.js','utf8'),{window:w});require('fs').writeFileSync('data.json',JSON.stringify(w.MACLUSTR,null,1))" python3 build.py # → cover.html + body.html cd ~/Desktop/uqo-eval && cp ~/Desktop/cluster-skill/dossier/print.mjs _print.mjs && sed -i '' "s#const here = .*#const here = process.env.HOME + '/Desktop/cluster-skill/dossier';#" _print.mjs && node _print.mjs && rm _print.mjs # Playwright → cover.pdf + body.pdf cd ~/Desktop/cluster-skill/dossier && python3 -c "import fitz;o=fitz.open();[o.insert_pdf(fitz.open(f)) for f in ('cover.pdf','body.pdf')];o.save('../MACLUSTR-DOSSIER.pdf',garbage=3,deflate=True)" ``` Mettre à jour `INVENTAIRE-MACLUSTR.md` et `data.js` avant de régénérer après tout ajout/retrait de machine.