01
Contratti tra agenti
Un manifest, un insieme di ruoli e un file per ogni task definiscono chi fa cosa, dove può scrivere e quando deve fermarsi.
- Il manifest elenca lo stack, la proprietà delle sorgenti, i ruoli, i task e i gate in un unico posto.
- Ogni task indica i percorsi consentiti, i suoi comandi e le condizioni che fermano l’esecuzione.
- Un controllo valida il manifest, i ruoli, i task e le regole di marca prima che il lavoro inizi.
npm run agent:checknpm run agent:context
diagramma di architettura: Contratti tra agenti. Nodi: site.manifest.json, roles/*.md, tasks/*.json, agent:context, agent:check. Flusso: da site.manifest.json a roles/*.md (primario); da roles/*.md a tasks/*.json (primario); da tasks/*.json a agent:context (primario); da site.manifest.json a agent:check (di supporto); da agent:check a tasks/*.json (feedback, percorso di correzione).02
Copy e tono di voce
Il linting deterministico mantiene la scrittura nella mia voce; un passaggio opzionale di modello rende più naturali le bozze, e sono i gate a decidere cosa resta.
- Il controllo del copy applica regole a pattern singolo più un audit anti-slop pesato sulla densità, in inglese e italiano.
- Un passaggio di fix applica le sostituzioni sicure e deterministiche senza toccare il significato.
- Nella revisione AI un modello propone riscritture; copy-lint, frontmatter e parità decidono se tenerle.
npm run copy:checknpm run copy:ai-review -- --changed --write
diagramma di architettura: Copy e tono di voce. Nodi: copy:audit, copy:fix, OpenAI, copy:ai-review, copy:check, needs-human, PR. Flusso: da copy:audit a copy:fix (primario); da copy:fix a copy:ai-review (primario); da OpenAI a copy:ai-review (di supporto); da copy:ai-review a copy:check (primario); da copy:ai-review a needs-human (feedback, percorso di correzione); da copy:check a PR (primario).03
Loop di automazione completa
Job GitHub Actions schedulati aggiornano i contenuti, abbozzano articoli e propongono cambi SEO. Aprono pull request — mai commit diretti su main.
- Il refresh settimanale traduce gli articoli mancanti, compila le chiavi dell’interfaccia in italiano, genera FAQ e takeaway ancorati al testo, rende più naturali le bozze, rigenera i feed e controlla la salute dei contenuti sul sito buildato.
- I loop mensili abbozzano un articolo ancorato dietro gate di originalità e un giudice consultivo, e trasformano le query di Search Console in proposte SEO e brief sui temi mancanti.
- Un loop showcase propone schede progetto da repository pubblici e ne unisce una solo con tutti i gate verdi; il rescue CI tenta fix sulle issue ci-failure con Codex e non unisce mai il proprio lavoro.
- L’automazione pusha con un token GitHub App così Flash CI gira sulla PR; le esecuzioni sporche ricevono needs-human, e ogni PR di automazione porta needs-translation-review.
npm run content:mapnpm run copy:ai-review:full -- --writenpm run article:judge
diagramma di architettura: Loop di automazione completa. Nodi: cron, token App, generatori, gate, PR, Flash CI, needs-human, auto-merge. Flusso: da cron a token App (primario); da token App a generatori (primario); da generatori a gate (primario); da gate a PR (primario); da PR a Flash CI (primario); da Flash CI a auto-merge (primario); da PR a needs-human (di supporto, percorso di correzione).04
Pipeline di pubblicazione
Le release software archiviate vivono in un repository separato. Il sito consuma i DOI concetto Zenodo tramite un registry, uno script di sync e un gate di deriva — mai aggiornati in automatico in build.
- Il repository software pubblica una release GitHub, riserva un nuovo DOI versione Zenodo e sincronizza CITATION.cff da release.toml.
- publications.json è il registry del sito: DOI concetto per il copy pubblico, DOI versione e publishedVersion per i controlli di deriva.
- publication:sync aggiorna il registry da Zenodo e GitHub, propaga i DOI concetto nel catalogo e nel copy dei progetti, e rigenera il JSON-LD della landing.
- publication:check blocca la CI quando github-stats, i file consumer o i metadati Zenodo divergono; una persona revisiona la PR prima del merge.
npm run publication:syncnpm run publication:check
diagramma di architettura: Pipeline di pubblicazione. Nodi: publication:sync, Zenodo, GitHub, publications.json, catalogo + llms.txt, shell landing, publication:check, PR. Flusso: da publication:sync a Zenodo (primario); da Zenodo a publications.json (primario); da publication:sync a GitHub (di supporto); da GitHub a publications.json (di supporto); da publications.json a catalogo + llms.txt (primario); da publications.json a shell landing (di supporto); da catalogo + llms.txt a publication:check (primario); da shell landing a PR (di supporto); da publication:check a PR (primario).05
SEO e GEO
La sitemap e l’indice llms.txt derivano dal registro delle route. I dati strutturati combinano quei percorsi canonici con i registri di identità, pubblicazioni e progetti; controlli deterministici mantengono allineate le superfici.
- Le route statiche vivono in un’unica lista condivisa che alimenta sia la sitemap sia l’indice llms.txt.
- Ogni pagina porta con sé JSON-LD: una persona, la traccia di breadcrumb e un tipo adatto alla pagina.
- Un loop su Search Console e un report sui temi mancanti mi indicano cosa scrivere dopo; una baseline GEO manuale traccia menzioni e citazioni nelle risposte AI.
npm run seo:checknpm run topic:gap
diagramma di architettura: SEO e GEO. Nodi: site-routes, sitemap + llms.txt, JSON-LD, seo:check, GSC, seo:ledger, seo:optimize. Flusso: da site-routes a sitemap + llms.txt (primario); da sitemap + llms.txt a seo:check (primario); da site-routes a JSON-LD (di supporto); da JSON-LD a seo:check (di supporto); da GSC a seo:ledger (di supporto); da seo:ledger a seo:optimize (di supporto); da seo:optimize a sitemap + llms.txt (di supporto); da seo:optimize a GSC (loop).06
Gate di qualità
Un comando esegue l’intero gate pre-merge: tipi, lint, formato, test, salute dei contenuti, parità e deriva dell’output generato.
- Il controllo di qualità è l’equivalente locale del gate che la CI esegue a ogni modifica.
- I file generati vengono rigenerati e confrontati, così l’output vecchio blocca la build invece di passare inosservato.
- Un controllo di governance protegge la documentazione pubblica da affermazioni che non faccio più.
npm run quality:check
diagramma di architettura: Gate di qualità. Nodi: validazione, generated:check, typecheck + lint, layout · i18n · copy, audit:coherence, test:run. Flusso: da validazione a generated:check (primario); da generated:check a typecheck + lint (primario); da typecheck + lint a layout · i18n · copy (primario); da layout · i18n · copy a audit:coherence (primario); da audit:coherence a test:run (primario).07
Build deterministica
La build di produzione è pura: pre-renderizza ogni route, scrive mirror markdown per lettori e modelli, e non chiama alcun modello esterno.
- Vite costruisce l’app, poi un passaggio di prerender scrive HTML statico per ogni route localizzata.
- I mirror markdown di ogni articolo vengono pubblicati accanto all’HTML per i lettori automatici.
- Il container serve il risultato; niente su questo percorso dipende da una chiave API.
npm run build
diagramma di architettura: Build deterministica. Nodi: validazione, generatori, vite build, build SSR, prerender, mirror md, version.json, cv:check. Flusso: da validazione a generatori (primario); da generatori a vite build (primario); da vite build a build SSR (primario); da build SSR a prerender (primario); da prerender a mirror md (primario); da prerender a version.json (di supporto); da mirror md a cv:check (primario).08
CI e deploy
Flash CI builda il sito, scansiona le pagine renderizzate ed esegue i controlli browser; un run verde su main attiva un deploy in produzione con controllo di supersede.
- Dopo i gate pre-merge, la CI esegue una build di produzione, content:scan su dist/ e un controllo sul budget di bundle.
- Un job browser separato scarica quella build ed esegue controlli di contrasto e regressione visiva prima che il merge sia consentito.
- Il deploy segue un Flash CI riuscito su main, pubblica immagini arm64 su GHCR e verifica che la produzione serva il commit nuovo.
npm run buildnpm run content:scannpm run perf:budget
diagramma di architettura: CI e deploy. Nodi: quality, browser, deploy:manual, GHCR :sha, promote :latest, timer odroid, version.json, verify-live. Flusso: da quality a browser (primario); da browser a GHCR :sha (primario); da deploy:manual a GHCR :sha (di supporto, percorso di correzione); da GHCR :sha a promote :latest (primario); da promote :latest a timer odroid (primario); da timer odroid a version.json (primario); da version.json a verify-live (primario).