tempo de leitura : 20 minutes

A engenharia de prompts é frágil. Com 80.000 tokens, suas regras de alinhamento estão afogadas no ruído, e o LLM esquece o que você pediu no início da conversa. Minha solução? Não alinhar por texto, mas por l'espaço. Estruturei meu workspace de desenvolvimento em quatro círculos de confiança concêntricos — do jardim secreto íntimo até as forjas públicas — e cada círculo é uma área física do sistema de arquivos. O LLM não precisa que se lhe lembre das regras: o caminho do arquivo as contém. Veja como funciona, e por que essa arquitetura de alinhamento por espaço é mais resiliente do que um`system prompt`de 500 linhas

É um artigo longo.
Acomode-se confortavelmente.

toc

[]

O Constato : Prompt Engineering é um Castelo de Areia

Durante três semanas, desenvolvi plugins Gradle com Opencode, usando três LLMs diferentes — Kimi K2.6, GLM-5.1, e DeepSeek-V4-Pro (o único sobrevivente, mas isso é outra históriaJá coberta aqui.) Meu método de governança agentEu a documentei em detalhes em um artigo anterior. baseia-se em arquivos AsciiDoc —AGENT.adoc, INDEX.adoc, PROMPT_REPRISE.adoc— que carregam ~30 000 tokens de regras, de backlog e de histórico no início de cada sessão.

E apesar dessa infraestrutura documental, duas coisas me chamaram a atenção:

  1. O LLM esquece. Mesmo com as regras absolutas na cabeça de cada arquivo EAGER, além de 60 000 tokens acumulados (contexto inicial + conversa), Kimi K2.6 começou a proposer`Write`esmagadores em arquivos de configuração. GLM-5.1 confundiu um token Firebase com um placeholder a ser substituído. As regras estavam escritas — o LLM não as via mais.

  2. A governança em si se torna um problema. Depois de ter implementado o mecanismo Hot/Warm/ColdArticle sur la rotation de backup. para evitar a explosão do contexto, meus arquivos EAGER ainda pesavam 1414 linhasJ’ai documenté cet audit ici.. A governança — projetada para proteger o LLM da saturação — saturava o LLM.

Eu precisava de um mecanismo de alinhamento que não dependesse do número de tokens no prompt.

A resposta: parar de alinhar pelo texto, e começar a alinhar peloespaço.

Os Quatro Círculos de Confiança : uma Ontologia Espacial

Meu dossiê`workspace/(em~/workspace/`) não é um repositório Git. É a raiz de todo o meu trabalho — código, documentação, formação, infraestrutura. E está estruturado em quatro áreas que não são convenções de arrumação, mas decírculos de confiança concêntricos:

Nível

Label

Zona física

CVS

Visibilidade

0

Jardim secreto

`workspace/`raiz

Nenhum

Íntimo — pensamento livre, sem commit, sem publicação

1

Cofre forte

configuration/

Git privado (solo)

Segredos, tokens, arquivo de visão. Uma única pessoa.

2

Biblioteca

office/

Git privado(ampliado)

Dados pedagógicos, SPG/SPD, esquemas JSON. Círculo de confiança identificado.

4

Forjas (públicas)

foundry/

Git público (Apache 2.0)

Código fonte, plugins, testes, documentação técnica.

NOTA: Não há nível 3 na tabela. O nível 3 é um nível transitório: é conteúdo de`office/`que foi anonimizado e está pronto para ser publicado em open data. Não tem uma zona física própria — é um estado do dado, não um local.

Cada nível responde a uma pergunta específica :

  • Onde depositar uma ideia que ainda não está pronta para ser compartilhada, mesmo com um círculo restrito? → Jardim secreto. Sem Git. Sem pressão.

  • Onde armazenar um token API sem que ele vaze ? → O cofre (configuration/). Fisicamente isolado. Nenhum outro depósito pode referenciá-lo por engano.

  • Onde co-construir um catálogo de formação com um OF piloto? → A biblioteca`office/`). Versionado, colaborativo, mas privado.

  • Onde industrializar um plugin Gradle open source? → As forjas`foundry/`Público, forkável, testado em CI.

Esta ontologia éconsumível por um LLM. Quando ele lê um arquivo dentro`foundry/plantuml-gradle/src/`, ele sabe implicitamente: "estou no círculo 4 — código público, testes obrigatórios, sem segredos, sem dados pedagógicos". Ele não precisa de um prompt que o lembre.

O Jardim Secreto: o Espaço Fora-CVS

Este é o conceito mais importante — e o mais contra-intuitivo.

A raiz`workspace/não tem.git/. Os documentos que vivem lá (`WORKSPACE_VISION.adoc, WORKSPACE_AS_PRODUCT.adoc, WORKSPACE_ORGANIZATION.adoc— e aquele que você está lendo neste momento, que dele provém, não são destinados a serem versionados, compartilhados ou mesmo relidos por alguém além de mim. Sãopensamentos em germinação.

O jardim secreto é out-of-CVS por natureza. A ausência de versionamento é a condição da liberdade de pensar. Não se escreve para ser lido — escreve-se para esclarecer a própria visão.

Mas esta liberdade tem um custo: um`rm`acidental, e são meses de reflexão estratégica que desaparecem. A solução não é versionar o jardim (isso seria destruí‑lo) — é de leespelharno círculo mais restrito

O .gitignore como Configuração de Governança

Na raiz de`workspace/, um arquivo.gitignore`minimal declara opolítica de historicizaçãoalguns ficheiros do jardim secreto :

.goosehints
.goose

Ce .gitignore`não tem uma função Git clássica (não há.git/`à raiz). ele age como umarquivo de configuração de governançaque responde a uma pergunta específica: quais artefatos do jardim secreto merecem ser historizados, e quais são puramente transitórios?

  • Os arquivos listados em`.gitignore`—.goosehints, .goose— são artefatos efêmeros gerados pelos agentes. Sem valor estratégico. Sem historicização.

  • Os arquivos`.adoc` da raiz —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— não sãonãono`.gitignore`. Estes são os artefatos a serem historicizados.

Le `.gitignore`é oesquema de governança: tudo o que não está listado lá é um candidato ao snapshot. E o LLM, ao ler esse arquivo, sabe exatamente o que deve ser arquivado e o que pode ser ignorado — sem que seja necessário lembrá-lo nisso em um prompt.

O Mecanismo de Snapshot

Eu criei`configuration/vision-archive/: instantâneos datados de todos os.adoc`da raiz, commits no repositório privado`configuration/`Cada sessão de brainstorming produz um 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"

O procedimento é acionado no final da sessão pelo próprio LLM, que executa essa tarefa global de roteamento. Cada snapshot captura o estado completo do pensamento estratégico em um instante T.

O histórico Git de`configuration/`torna-se abiografia de meu pensamento estratégico. Eu posso fazer um`git log — vision-archive/`e ver a evolução da minha visão, sessão por sessão, data por data.

Exemplo real do histórico após um dia de trabalho :

$ 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

Cinco snapshots em um dia. Cada um é um ponto de restauração. Cada um é um marco na gênese da estratégia.

O dossier`configuration/vision-archive/latest/`contém continuamente umacópia de trabalhodo último snapshot, servindo como referência rápida sem precisar navegar no histórico do Git.

E para o LLM, é umoráculo de coerência: quando ele observa uma contradição entre a implementação atual e a visão arquivada em uma data anterior, ele pode sinalizá-la.

O Cofre-Fort : configuration/ como Spring Cloud Config

`configuration/`ne contém apenas o arquivo da visão. Sua função primária — e futura — é ser umservidor Spring Cloud Config. Todos os segredos, tokens, credenciais e descritores de infraestrutura vivem aqui, em um repositório Git privado acessível apenas ao proprietário.

Por que um repositório separado em vez de um arquivo`.env`em cada projeto?

  • Push acidental de um segredo: impossível. Os segredos estão em um repositório privado que os projetos públicos não podem referenciar por engano.

  • Audit : o histórico do Git fornece o rastro de cada modificação de configuração. Quem mudou o quê, quando, com qual hash SHA.

  • Reverter :`git revert`Em uma configuração quebrada. Instantâneo, sem backup manual.

A Biblioteca: office/ como Dados Consumíveis

`office/`o contrapartida documental do trabalho de desenvolvimento. Contém os artigos de blog, as especificações técnicas, os materiais de formação (38 diretórios de cursos FPA, SPG/SPD, esquemas JSON, taxonomias Bloom/Harrow/Krathwohl) — tudo o que constitui omaterial didático.

Mas`office/`Não é apenas uma gaveta de documentos. É umafonte de dados estruturadosque os plugins Gradle de`foundry/`consumem. Um artigo de blog em`office/`é uma entrada que um plugin transformará em HTML. Um SPG AsciiDoc dentro`office/metiers/FPA/`é um artefato que um orquestrador analisará para gerar slides, quiz e cápsulas de vídeo.

Et le `build.gradle.kts`na raiz de`office/`não é código de negócio — é umscript de consumo do ecossistema de plugins. Ele diz : "aqui estão os plugins Gradle que eu uso, aqui está o contexto do meu workspace".

As Forjas: foundry/ como implementação

foundry/`contém ocódigo industrializado. 54 repositórios Git, dos quais 7 atualmente governados por.agents/`. É aqui que a visão se torna executável — plugins Gradle, CI/CD, testes JUnit5 + Cucumber.

A relação com`office/`é bidirecional :

  • office/→foundry/: os dados pedagógicos são a matéria-prima que os plugins consomem.

  • foundry/(empty)office/: os plugins produzem dados que enriquecem`office/` — le `graph.json`do graphify-gradle, os decks slider compilados, os relatórios de build.

Prós/Contras : Alinhamento Espacial vs Alinhamento por Prompt

Comparemos as duas abordagens.

Abordagem Clássica: Alinhamento por Pré-Prompt

✅ Pro

Contra

Simples de implementar. Um bloco de texto no system prompt.

Frágil ao contexto longo : a regra se perde após 80K tokens.

Funciona para regras gerais (tom, formato).

Não verificável : nada impede o LLM de violar a regra.

Não é necessário repensar a arquitetura do projeto.

Não transferível: cada repositório redefine as regras.

Puramente declarativo: o LLM sabe que ele deveria, mas nada o impede.

Esta Abordagem : Alinhamento por Ontologia Espacial

✅ Pro

contra

Resiliente a contextos longos : a regra está no caminho do arquivo, não em um prompt distante.

Custo de infraestrutura inicial : estruturar o workspace em círculos leva tempo.

Verificável mecanicamente: um segredo em`foundry/é detectável por`git check-ignore.

Exige disciplina : um novo contribuidor deve entender os círculos.

Transferível : um`AGENT.adoc`O padrão expõe os círculos a todo novo projeto.

Cobre apenas as restrições espaciais — o estilo de código permanece no prompt.

Segurança por design : um`git push`desde`foundry/não pode expor`configuration/.

Consumível por agentes não-LLM : um orquestrador Gradle pode rotar de acordo com o círculo.

O ganho principal não é defensivo (segurança, visibilidade) — ele écriativo. Quando o LLM trabalha em um espaço estruturado por uma ontologia, ele pode fazer o que nenhum prompt lhe permite: observar o delta

Álgebra Relacional do Workspace e o Observável Delta

Quando o LLM percorre`foundry/, ele dispõe de umtreliça de dados estruturados: nós (plugins, arquivos, testes, dependências), arestas tipadas (`import, depends_on, generates, tests), relações de composição e ordem (`training-gradle`extrai o repositório`slider-gradle`gera os slides →`capsule-gradle`reproduz o vídeo).

Esta álgebra não está escrita em nenhum lugar em texto claro — mas ela é observável. Cada`build.gradle.kts`expõe dependências. Cada`INDEX.adoc`expõe referências cruzadas.

O LLM observa esta álgebra e detecta odelta: a diferença entre o que o sistema já sabe produzir e o que a visão descreve.

A partir desse delta, ele pode definir algunscartografias de especialistas de negócio— CDA (Designer e desenvolvedor de aplicações, Kotlin/Gradle/JHipster) e FPA (Formador Profissional de Adultos, Pedagogie/Qualiopi/Bloom) — e identificar o que falta para cada especialista.

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

O LLM não precisa que se lhe diga o que fazer. O delta emerge da estrutura.

O Vetor Composto do Contexto: RAG + pgvector + Graphify

A álgebra relacional não é uma construção teórica. Ela é materializada por três componentes que formam umvetor composto de contextopara o LLM.

Componente 1 — RAG LangChain4j + PostgreSQL pgvector

Já tenho LangChain4j em produção em dois plugins :`slider-gradle`(4 provedores LLM) e`plantuml-gradle`(7 fornecedores). Os embeddings ONNX (AllMiniLmL6V2) indexam os dados de`office/`e o código fonte de`foundry/`no PostgreSQL + pgvector

Este RAG opera em duas dimensões :

  • Dados de dimensão : os documentos`office/`(SPG, artigos, formações, esquemas JSON)

  • Código de dimensão : as codebases`foundry/`(fontes Kotlin, testes Cucumber, AGENT.adoc)

A interseção cobre tanto o o quê (o domínio de negócio) quanto o como (a implementação).

Componente 2 — Knowledge Graph Graphify

Graphify está integrado em`plantuml-gradle`(109 testes, 380/380 PASS) e produz um`graph.json`— um knowledge graph estruturado com nós, arestas e comunidades detectadas automaticamente.

Ao contrário do RAG, que opera por similaridade vetorial (difuso), o knowledge graph opera porrelações exatas(determinista) :`graphify query`para as interrogações semânticas (~50 tokens),`graphify path`para navegar,`graphify explain`para explicar

Componente 3 — Graphify Incremental : Esparso, Agregável, Consumível

Esta é a decisão arquitetônica-chave.

Graphify não deve viver em um único repositório. Ele deve viver de formaesparsaem cada plugin:

  1. Cada plugin embarca uma tarefa Gradle`updateKnowledgeGraph`que chama Graphifysobre o seu próprio scopee produz um`graph.json`local.

  2. O script de build de`office/ consome`graphify-gradle`com`rootDir = /home/cheroliv/workspace`e produz um`graph.json globalque agrega os grafos locais.

  3. O RAG de cada plugin injeta o`graph.json`global comofiltro de contextopara as consultas 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

Resultado: o LLM não está procurando no vazio — ele navega em um espaço estruturado pelo knowledge graph. Uma consulta sobre gerar um diagrama consegue alcançar os nós relevantes do grafo.

Classificação Automática do RGPD : o LLM como Roteador

A ontologia espacial não se contente apenas de alinhar o LLM — ela lhe dá umagrade de classificação GDPRpara encaminhar cada dado para sua zona legítima

Critério

Detecção LLM

Ação

Nível máximo

Dado pessoal (nome, e-mail, IP)

padrão`@`, IP, nomes próprios

Anonimizar →`[OF_PILOTE]`ou router nível 2

2

Token / Segredo / Credencial

padrão`sk-…​, `ghp_…​, ya29…​

Roteador →configuration/. Referenciar por`${VAR}`no código.

1

URL interna

Contém`localhost`, IP privado

anonimizar →${API_URL}

2

Dado pedagógico (SPG, aula)

Estrutura Bloom/Qualiopi

roteador`office/`(nível 2). Versão dupla se exportar.

3

Código fonte / teste

Extensão`.kt`, .kts`em`foundry/

roteador →`foundry/`Verificar ausência de segredos

4

No final da sessão, o LLM executa umatarefa global:

  1. Leitura do`.gitignore`raiz para identificar os artefatos efêmeros (a excluir do instantâneo) vs os artefatos estratégicos (a historizar)

  2. Inventário de todos os arquivos`.adoc`da raiz`workspace/`

  3. Filtragem : exclusão dos arquivos listados em`.gitignore`, inclusão de todos os outros

  4. Copia em`configuration/vision-archive/$DATE/e atualização do symlink`latest/

  5. Commit no repositório`configuration/`com uma mensagem estruturada

  6. Classificação automática do RGPD de cada arquivo modificado (todos os círculos)

  7. Roteamento: dados`office/→ commit privado, código`foundry/→./gradlew check, configuração → commit

  8. Relatório estruturado com alertas RGPD e confirmação de arquivamento

Le `.gitignore`raiz não é um arquivo de configuração Git — é umarquivo de governança da historicização. Define o esquema que o LLM consome para decidir quais arquivos do jardim secreto entram na biografia estratégica e quais são descartáveis.

O LLM não é mais um simples gerador de texto. Ele é ogerente de informaçãodo ecossistema — produtor, classificador, roteador.

Roadmap : do AsciiDoc ao LangGraph4j

Hoje, esta governança é determinista: o LLM aplica um procedimento descrito em arquivos AsciiDoc. É afase 1— o prompt engineering com memória LLM

La fase 2extrairá cada etapa do procedimento em umatarefa Gradle tipada:

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

La fase 3modelará o processo de término da sessão como umgrafo de estadocomhttps://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]

Este grafo será versionado no CI/CD, executado pelo Gradle, configurado via os GitHub Secrets dos plugins. O LLM não precisará mais decidir o roteamento — o grafo fará isso.

O que Esta Arquitetura Resolve (e o que ela não Resolve)

A ontologia espacial não cobre tudo. As convenções de estilo de código, a nomenclatura, as escolhas de design arquitetural — tudo isso permanece no prompt. O que a ontologia espacial resolve é acamada de segurança e de visibilidade: onde cada byte deve viver, e quem pode vê-lo.

Aqui está o que ela traz concretamente:

  1. Não`git push`acidental de um segredo: os segredos são em`configuration/(cercle 1). Os projetos públicos estão em`foundry/(círculo 4). Nenhum caminho atravessa os dois.

  2. Sem código de negócio nos dadosoffice/`contém.adoc`, alguns YAML, alguns JSON Schemas — mas não há`.kt`. Le `build.gradle.kts`que lá vive é um script de consumo, não é código de negócio.

  3. Sem pensamento estratégico exposto : Os documentos de visão vivem no jardim secreto (raiz fora-CVS). Os snapshots estão em`configuration/`(cofre privado). Ninguém, mesmo num círculo de confiança alargado, lê a gênese da estratégia.

  4. Auto-priorização : o LLM observa o delta entre a álgebra relacional (o que existe) e os mapeamentos de especialistas (o que é necessário). A próxima tarefa de desenvolvimento surge desse delta.

Conclusão: a Arquitetura como Discurso

Não coloco manifesto político no rodapé do meu site. Não coloco regras éticas nos meus prompts. O alinhamento não está no texto — está nosistema de arquivos.

Quando um LLM trabalha neste espaço, ele não pode vazar um segredo (o caminho o impede). Ele não pode confundir um dado pedagógico com código-fonte (a zona física é diferente). Ele não pode esquecer uma regra de segurança de 80 000 tokens — porque a regra não está no prompt, ela está no`workspace/` → configuration/→office/→`foundry/`que cada leitura de arquivo seja reativa

É o princípio do secure by design aplicado ao alinhamento do agente: não pedir ao LLM para se lembrar das regras. Fazer com que a arquitetura torne o erro estruturalmente impossível.

E a propósito, isso dá ao LLM o que nenhum prompt pode lhe dar: a capacidade deperceberonde ele está, o que existe, o que falta — e disso deduzir o que ele deve fazer.

Referências

Articles connexes