tempo di lettura : 20 minutes

L’ingegneria del prompt è fragile. A 80 000 token, le tue regole di allineamento si perdono nel rumore, e il LLM dimentica ciò che gli hai chiesto all’inizio della conversazione. La mia soluzione? Non allineare tramite il testo, ma tramite l'spazio. Ho strutturato il mio workspace di sviluppo in quattro cerchi di fiducia concentrici — dal giardino segreto intimo fino alle forge pubbliche — e ogni cerchio è una zona fisica del sistema di file. L’LLM non ha bisogno che gli si ricordino le regole: il percorso del file le contiene. Ecco come funziona, e perché questa architettura di allineamento attraverso lo spazio è più resiliente di un`system prompt`di 500 righe.

È un articolo lungo.
Mettiti comodo.

La constatazione: il Prompt Engineering è un castello di sabbia

Durante tre settimane ho sviluppato plugin Gradle con Opencode, utilizzando tre LLM diversi — Kimi K2.6, GLM-5.1 e DeepSeek-V4-Pro (l’unico sopravvissuto, ma è un’altra storia)Déjà couverte ici.) Il mio metodo di governance agentJe l’ai documentée en détail dans un précédent article. repose sur des fichiers AsciiDoc —AGENT.adoc, INDEX.adoc, PROMPT_REPRISE.adoc— che caricano ~30 000 token di regole, di backlog e di storico all’inizio di ogni sessione.

E nonostante questa infrastruttura documentale, due cose mi hanno colpito :

  1. Il LLM dimentica. Anche con le regole assolute in testa a ogni file EAGER, oltre i 60 000 token cumulati (contesto iniziale + conversazione), Kimi K2.6 ha iniziato a proporre`Write`schiaccianti sui file di configurazione. GLM-5.1 ha confuso un token Firebase con un placeholder da sostituire. Le regole erano scritte — il LLM non le vedeva più.

  2. La governance stessa diventa un problema. Dopo aver implementato il meccanismo Hot/Warm/ColdArticolo sulla rotazione di backup. per evitare l’esplosione del contesto, i miei file EAGER pesavano ancora 1414 righeHo documentato questo audit qui.. La governance — progettata per proteggere il LLM dalla saturazione — saturava il LLM.

Avevo bisogno di un meccanismo di allineamento che non dipenda dal numero di token nel prompt.

La risposta : smettere di allineare in base al testo e iniziare ad allineare in base all'spazio.

I Quattro Cerchi di Fiducia: un' ontologia spaziale

Il mio dossier`workspace/(dentro~/workspace/`) non è un deposito Git. È la radice di tutto il mio lavoro — codice, documentazione, formazione, infrastruttura. E è strutturato in quattro zone che non sono convenzioni di archiviazione, macerchi di fiducia concentrici:

Livello

Etichetta

Zona fisica

CVS

Visibilità

0

Giardino segreto

`workspace/`radice

nessuno

Intimo — pensiero libero, nessun commit, nessuna pubblicazione

1

cassaforte

configuration/

Git privato (solo)

Segreti, token, archivio di visione. Una sola persona.

2

Biblioteca

office/

Git privato (ampliato)

Dati pedagogici, SPG/SPD, schemi JSON. Cerchio di fiducia identificato.

4

Forge (pubbliche)

foundry/

Git pubblico (Apache 2.0)

Codice sorgente, plugin, test, documentazione tecnica.

Non c’è livello 3 nella tabella. Il livello 3 è un livello transitorio : è del contenuto di`office/`che è stato anonimizzato e pronto per essere pubblicato in open data. Non ha una zona fisica propria — è uno stato del dato, non una posizione.

Ogni livello risponde a una domanda precisa :

  • Dove depositare un’idea che non è ancora pronta per essere condivisa, anche con un ristretto cerchio ? → Il giardino segreto. Niente Git. Niente pressione.

  • Dove memorizzare un token API senza che trapelisca? → La cassaforte (configuration/). Fisicamente isolato. Nessun altro deposito può referenziarlo per errore.

  • Dove co-costruire un catalogo di formazione con un OF pilota ? → La biblioteca (office/). Versionato, collaborativo, ma privato.

  • Dove industrializzare un plugin Gradle open source ? → le forge`foundry/`). Pubblico, forkabile, testato in CI.

Questa ontologia èconsumabile da un LLM. Quando legge un file in`foundry/plantuml-gradle/src/`, sa implicitamente : "sono nel cerchio 4 — codice pubblico, test obbligatori, niente segreti, niente dati pedagogici". Non ha bisogno di un promemoria che gli ricordi questo.

Il Giardino Segreto : lo Spazio Extra-CVS

È il concetto più importante — e il più controintuitivo.

La radice`workspace/non ha.git/. I documenti che vi vivono (`WORKSPACE_VISION.adoc, WORKSPACE_AS_PRODUCT.adoc, WORKSPACE_ORGANIZATION.adoc— e quello che stai leggendo in questo momento, che ne deriva) non sono destinati a essere versionati, condivisi, o anche riletti da qualcun altro oltre me. Sonopensieri in germinazione.

Il giardino segreto è out-of-CVS per natura. L’assenza di versionamento è la condizione della libertà di pensare. Non si scrive lì per essere letti — si scrive lì per chiarire la propria visione.

Ma questa libertà ha un costo: un`rm`accidentale, e sono mesi di riflessione strategica che scompaiono. La soluzione non è di versionare il giardino (sarebbe distruggerlo) — è dirifletterenel cerchio più ristretto.

Il .gitignore come Configurazione di Governance

Alla radice di`workspace/, un file.gitignore`minimo dichiara lapolitica di storicizzazionefile del giardino segreto :

.goosehints
.goose

Ce .gitignore`non ha una funzione Git classica (non c’è.git/`alla radice). agisce come unfile di configurazione della governanceche risponde a una domanda precisa: quali artefatti del giardino segreto meritano di essere storicizzati, e quali sono puramente transitori?

  • I file elencati in`.gitignore`—.goosehints, .goose— sono artefatti effimeri generati dagli agenti. Nessun valore strategico. Nessuna historicizzazione.

  • I file`.adoc`della radice —WORKSPACE_VISION.adoc, WORKSPACE_ORGANIZATION.adoc, WORKSPACE_AS_PRODUCT.adoc, WHAT_THE_GAMES_BEEN_MISSING.adoc, depots_implementes_strategie.adoc, synthese-LLMs-long-contexte.adoc— non sonononnel`.gitignore`. Sono gli artefatti da storicizzare.

Le `.gitignore`è ilschema di governance: tutto ciò che non è elencato qui è un candidato per lo snapshot. E il LLM, leggendo questo file, sa esattamente cosa deve essere archiviato e cosa può essere ignorato — senza che sia necessario ricordarglielo in un prompt.

Il Meccanismo di Snapshot

Ho creato`configuration/vision-archive/: degli snapshot datati di tutti i.adoc`della radice, commesso nel repository privato`configuration/`.Ogni sessione di brainstorming produce un snapshot:

DATE=$(date +%Y-%m-%d)
mkdir -p /home/cheroliv/workspace/configuration/vision-archive/$DATE
cp /home/cheroliv/workspace/*.adoc /home/cheroliv/workspace/configuration/vision-archive/$DATE/
cd /home/cheroliv/workspace/configuration && git add vision-archive/ && \
  git commit -m "vision-archive: snapshot $DATE"

La procedura viene avviata alla fine della sessione dal LLM stesso, che esegue questa attività globale di routing. Ogni snapshot cattura lo stato completo del pensiero strategico in un istante T.

La cronologia Git di`configuration/`diventa labiografia del mio pensiero strategico. Posso fare un`git log — vision-archive/`e vedere l’evoluzione della mia visione, sessione dopo sessione, data dopo data.

Esempio reale della cronologia dopo una giornata di lavoro :

$ git -C configuration log --oneline -- vision-archive/
1089d1b vision-archive: fin de session finale 2026-05-03
6b21eaf vision-archive: fin de session 2026-05-03-1300
1690f82 vision-archive: post-article 2026-05-03
28e6593 vision-archive: post-migration 2026-05-03
3707b78 vision-archive: snapshot 2026-05-03 — jardin secret initial

Cinque snapshot in una giornata. Ognuno è un punto di ripristino. Ognuno è una pietra miliare nella genesi della strategia.

Il dossier`configuration/vision-archive/latest/`contiene permanentemente unacopia di lavorodell’ultimo snapshot, che funge da riferimento rapido senza dover navigare nella cronologia di Git.

E per il LLM, è unoracolo di coerenza: quando nota una contraddizione tra l’implementazione corrente e la visione archiviata in una data precedente, può segnalarla.

La Cassaforte: configuration/ come Spring Cloud Config

`configuration/`non contiene soltanto l’archivio della visione. La sua funzione primaria — e futura — è di essere unserver Spring Cloud Config. Tutti i segreti, token, credenziali e descrittori dell’infrastruttura vivono qui, in un repository Git privato accessibile solo al proprietario.

Perché un deposito separato anziché un file`.env`in ogni progetto ?

  • Push accidentale di un segreto : impossibile. I segreti sono in un repository privato che i progetti pubblici non possono fare riferimento per errore.

  • Audit : la cronologia Git fornisce la traccia di ogni modifica della configurazione. Chi ha modificato cosa, quando, con quale hash SHA.

  • Rollback:`git revert`su una configurazione guasta. Istantaneo, senza backup manuale.

La Biblioteca : office/ come Data Consumabile

`office/`è la controparte documentaria del lavoro di sviluppo. Contiene gli articoli del blog, le specifiche tecniche, i materiali di formazione (38 directory di corsi FPA, SPG/SPD, schemi JSON, tassonomie Bloom/Harrow/Krathwohl) — tutto ciò che costituisce ilmateriale didattico.

Ma`office/`non è solo un cassetto per documenti. È unafonte di dati strutturatiche i plugin Gradle di`foundry/`consumono. Un articolo di blog in`office/`è una voce che un plugin trasformerà in HTML. Un SPG AsciiDoc dentro`office/metiers/FPA/`è un artefatto che un orchestrator parserà per generare slide, quiz e capsule video.

Et le `build.gradle.kts`alla radice di`office/`non è codice di business — è unscript di consumo dell’ecosistema di plugin. Ha detto : "Ecco i plugin Gradle che utilizzo, ecco il contesto del mio workspace

Le forge : foundry/ come Implementazione

foundry/`contiene ilcodice industrializzato. 54 repository Git, dei quali 7 attualmente governati da.agents/`. Qui la visione diventa eseguibile — plugins Gradle, CI/CD, test JUnit5 + Cucumber.

La relazione con`office/`è bidirezionale :

  • office/→foundry/: i dati pedagogici sono la materia prima che i plugin consumano.

  • foundry/→office/: i plugin producono dati che arricchiscono`office/` — le `graph.json`di graphify-gradle, i deck slider compilati, i rapporti di build

Pro/Contro : Allineamento Spaziale vs Allineamento per Prompt

Confrontiamo le due approcci.

Approccio Classico: Allineamento tramite Pre-Prompt

✅ Pro

❌ Contro

Semplice da attuare. Un blocco di testo nel prompt di sistema.

Fragile al contesto lungo : la regola è affogata dopo 80K token

Funziona per regole generali (ton, formato).

Non verificabile : nulla impedisce al LLM di violare la regola.

Non è necessario ripensare l’architettura del progetto.

Non trasferibile : ogni repo ridichiara le regole.

Puramente dichiarativo : il LLM sa che dovrebbe, ma nulla lo impedisce.

Questa Approccio: Allineamento per Ontologia Spaziale

✅ Pro

❌ contra

Resistente al contesto lungo : la regola si trova nel percorso del file, non in un prompt distante.

Costo iniziale dell’infrastruttura : strutturare l’area di lavoro in cerchi richiede tempo.

Verificabile meccanicamente : un segreto in`foundry/è rilevabile da`git check-ignore.

Richiede disciplina: un nuovo contributore deve capire i cerchi.

Trasferibile : un`AGENT.adoc`lo standard espone i cerchi a qualsiasi nuovo progetto

Copre solo i vincoli spaziali — lo stile del codice rimane nel prompt.

Sicurezza per progettazione : un`git push`da`foundry/non può esporre`configuration/.

Consumabile da agenti non LLM : un orchestratore Gradle può instradare secondo il cerchio.

Il guadagno principale non è difensivo (sicurezza, visibilità) — ècreativo. Quando il LLM lavora in uno spazio strutturato da un’ontologia, può fare ciò che nessun prompt gli permette: osservare il delta.

L’algebra relazionale del workspace e il delta osservabile

Quando l’LLM percorre`foundry/, dispone di unreticolo di dati strutturati: nodi (plugins, fichiers, tests, dépendances), archi tipate (`import, depends_on, generates, tests), relazioni di composizione e di ordine (`training-gradle`estrae il repository →`slider-gradle`genera le slide →`capsule-gradle`monta il video).

Questa algebra non è scritta da nessuna parte in chiaro — ma è observable.`build.gradle.kts`espone delle dipendenze. Ogni`INDEX.adoc`esporre riferimenti incrociati.

Il LLM osserva questa algebra e rileva ildelta: la differenza tra ciò che il sistema sa già produrre e ciò che la visione descrive.

A partire da questo delta, può definire dellecartografie di esperti di settore— CDA (Progettista Sviluppatore di Applicazioni, Kotlin/Gradle/JHipster) e FPA (Formatore Professionale per Adulti, Pedagogia/Qualiopi/Bloom) — e identificare cosa manca per ogni esperto.

Expert CDA (Kotlin/Gradle/JHipster)
  ├── Plugins : jhipster-gradle-plugins, plantuml-gradle,
  │   codebase-gradle
  ├── Delta : pas encore de SPG CDA formalisé,
  │   pas de fine-tuning expert CDA

Expert FPA (Pédagogie/Qualiopi/Bloom)
  ├── Plugins : training-gradle, slider-gradle,
  │   school-backoffice/forms, capsule-gradle
  ├── Matériel : 38 modules cours, SPG/SPD, taxonomies
  └── Delta : parser AsciiDoc→JSON à créer,
      orchestrateur à coder

Il LLM non ha bisogno che gli si dica cosa fare. Il delta emerge dalla struttura.

Il Vettore Composito di Contesto : RAG + pgvector + Graphify

L’algebra relazionale non è una costruzione teorica. È materializzata da tre componenti che formano unvettore composito di contestoper il LLM.

Componente 1 — RAG LangChain4j + PostgreSQL pgvector

Ho già LangChain4j in produzione in due plugin:`slider-gradle`(4 providers LLM) e`plantuml-gradle`(7 fornitori). Gli embedding ONNX (AllMiniLmL6V2) indicizzano i dati di`office/`e il codice sorgente di`foundry/`in PostgreSQL + pgvector.

Questo RAG opera su due dimensioni :

  • Dimension data : i documenti`office/`(SPG, articoli, formazioni, schemi JSON)

  • Codice di dimensione : le basi di codice`foundry/`(fonti Kotlin, test Cucumber, AGENT.adoc)

L’intersezione copre sia il cosa (il dominio di business) sia il come (l’implementazione).

Componente 2 — Knowledge Graph Graphify

Graphify è integrato in`plantuml-gradle`(109 test, 380/380 PASS) e produce un`graph.json`— un knowledge graph strutturato con nodi, archi e comunità rilevate automaticamente.

Contrariamente al RAG che opera per similarità vettoriale (sfocato), il knowledge graph opera perrelazioni esatte(deterministico) :`graphify query`per le interrogazioni semantiche (~50 tokens),`graphify path`per navigare,`graphify explain`per spiegare.

Componente 3 — Graphify Incrementale : Sparso, Aggregabile, Consumibile

È la decisione architettonica chiave.

Graphify non deve vivere in un unico deposito. Deve vivere in modosparsain ogni plugin :

  1. Ogni plugin incorpora una task Gradle`updateKnowledgeGraph`chi chiama Graphifysul suo proprio ambitoe produce un`graph.json`locale.

  2. Il build script di`office/ consuma`graphify-gradle`con`rootDir = /home/cheroliv/workspace`e produce uno`graph.json globaleche aggrega i grafi locali.

  3. Il RAG di ogni plugin inietta il`graph.json`globale comefiltro di contestoper le richieste LLM.

TÂCHE GRADLE (dans chaque plugin)
    ↓
graphify → graph.json (scope local)
    ↓
office/build.gradle.kts → graph.json (scope global)
    ↓
RAG pgvector (dans slider, plantuml, codebase...)
    ↓  ← injection du graph.json comme filtre
LLM (deepseek-v4-pro)
    ↓  ← observation algèbre relationnelle
    ↓  ← détection delta vs cartographies experts
PRIORISATION → prochaine tâche

Risultato : il LLM non cerca nel vuoto — esso naviga in uno spazio strutturato dal knowledge graph. Una query su “génère un diagramme” riesce a raggiungere i nodi pertinenti del grafo.

Classificazione GDPR Automatizzata: il LLM come Router

L’ontologia spaziale non si limita ad allineare il LLM — lei gli dà unagriglia di classificazione GDPRper instradare ogni dato verso la sua zona legittima.

criterio

Rilevamento LLM

Azione

Livello massimo

Dato personale (nome, email, IP)

modello`@`, IP, nomi propri

Anonimizzare →`[OF_PILOTE]`o router di livello 2

2

Token / Segreto / Credenziale

Modello`sk-…​, `ghp_…​, ya29…​

Router →configuration/. Riferito da`${VAR}`nel codice.

1

URL interno

contiene`localhost`, IP privata

anonimizzare →${API_URL}

2

Dato pedagogico (SPG, corso)

Struttura Bloom/Qualiopi

Router →office/(livello 2). Doppia versione per export

3

Codice sorgente / test

Estensione`.kt`, .kts`in`foundry/

router →foundry/. Verificare assenza di segreti.

4

Alla fine della sessione, il LLM esegue unacompito globale:

  1. Lettura di`.gitignore`radice per identificare gli artefatti effimeri (da escludere dallo snapshot) vs gli artefatti strategici (da storicizzare)

  2. Inventario di tutti i file`.adoc`della radice`workspace/`

  3. Filtraggio : esclusione dei file elencati in`.gitignore`, inclusione di tutti gli altri

  4. Copia in`configuration/vision-archive/$DATE/e aggiornamento del symlink`latest/

  5. Commit nel repository`configuration/`con un messaggio strutturato

  6. Classificazione automatica GDPR di ogni file modificato (tutti i cerchi)

  7. Routing: dati`office/→ commit privato, codice`foundry/→./gradlew check, configurazione → commit

  8. Rapporto strutturato con avvisi GDPR e conferma di archiviazione

Le `.gitignore`radice non è un file di configurazione Git — è unfile di governance dell’historizzazione. Definisce lo schema che il LLM consuma per decidere quali file del giardino segreto entrano nella biografia strategica e quali sono scartabili.

Il LLM non è più un semplice generatore di testo. È ilgestore dell’informazionedell’ecosistema — produttore, classificatore, instradatore.

Roadmap : dell’AsciiDoc a LangGraph4j

Oggi, questa governance è deterministico : l’LLM applica una procedura descritta in file AsciiDoc. È lafase 1— il prompt engineering con memoria LLM

La fase 2extrairà ogni fase della procedura in unaattività Gradle tipizzata:

./gradlew endSessionWorkspace    → snapshot vision-archive
./gradlew endSessionProject      → archive .agents/
./gradlew endSessionReport       → rapport multi-zones

La fase 3modellerà il processo di fine sessione come ungrafo di statoconhttps://github.com/langgraph4j/langgraph4j[LangGraph4j]:

[Start] → [Inventaire fichiers modifiés]
       → [Classification RGPD] (nœud ONNX)
       → [Branchement par cercle]
            ├→ cercle 0 → snapshot → commit
            ├→ cercle 2 → anonymisation → commit
            ├→ cercle 4 → archive → commit
            └→ cercle 1 → commit configuration/
       → [Rapport] → [End]

Questo grafo sarà versionato nella CI/CD, eseguito da Gradle, configurato tramite i GitHub Secrets dei plugin. Il LLM non dovrà più decidere il routing — il grafo lo farà.

Che cosa questa architettura risolve (e che cosa non risolve)

L’ontologia spaziale non copre tutto. Le convenzioni di stile di codice, la denominazione, le scelte di design architettonico — tutto questo rimane nel prompt. Ciò che l’ontologia spaziale risolve è lalivello di sicurezza e di visibilità: dove ogni ottetto deve vivere, e chi può vederlo.

Ecco cosa porta concretamente :

  1. Nessun`git push`accidentale di un segreto : i segreti sono in`configuration/(cerchio 1). I progetti pubblici sono in`foundry/(cerchio 4). Nessun sentiero attraversa entrambi.

  2. Nessun codice di business nei dati :`office/contiene dei.adoc`, dei YAML, dei JSON Schemas — ma nessun`.kt`. Le build.gradle.kts Chi ci vive è uno script di consumo, non codice di business.

  3. Nessun pensiero strategico esposto : i documenti di visione vivono nel giardino segreto (radice fuori-CVS). Gli snapshot sono in`configuration/`(cassaforte privata). Nessuno, anche in un cerchio di fiducia ampliato, legge la genesi della strategia.

  4. Auto-priorizzazione : l’LLM osserva il delta tra l’algebra relazionale (ciò che esiste) e le mappe degli esperti (ciò che è necessario). La prossima task di sviluppo deriva da questo delta.

Conclusione: l’Architettura come Discorso

Non metto un manifesto politico nel footer del mio sito. Non metto regole etiche nei miei prompt. L’allineamento non è nel testo — è nelsistema di file.

Quando un LLM lavora in questo spazio, non può trapelare un segreto (il percorso lo impedisce). Non può confondere un dato didattico con il codice sorgente (la zona fisica è diversa). Non può dimenticare una regola di sicurezza di 80 000 token — perché la regola non è nel prompt, è nel`workspace/→`configuration/→office/→`foundry/`che ogni lettura di file reattiva.

È il principio del secure by design applicato all’allineamento dell’agente: non chiedere al LLM di ricordarsi le regole. Far sì che l’architettura renda l’errore strutturalmente impossibile.

E per inciso, questo dà al LLM ciò che nessun prompt può dargli: la capacità dipercepiredove si trova, ciò che esiste, ciò che manca — e dedurre ciò che deve fare.

Riferimenti

Articoli correlati