Automated Epistemic Compartmentalization — How the LLM Protects My Mental Garden
Published on 02 May 2026
My LLM doesn’t just execute my Gradle tasks. It is the guardian of the boundary between my private thought and my public expression. Every idea is classified — Vision, Opinion, Strategy — before being routed. Here is how this automated epistemic compartmentalization protects my mental garden without silencing me.
- toc
-
[]
The Problem: Thinking Freely without Publishing Just Anything
When a solo developer documents their thought process with an LLM, they encounter a paradox:
CAPTURE TOUT (Cercle 0, jardin secret)
├→ Brain dump libre, pas de censure
├→ Idées brutes, spéculations, intuitions non vérifiées
├→ Allers-retours LLM : challenger, itérer, raffiner
└→ Le LLM voit TOUT — le bon, le flou, l'embryonnaire
PUBLICATION SÉLECTIVE (Cercle 4, blog public)
├→ Uniquement les décisions actées
├→ Uniquement les patterns testés (>100 tests PASS)
├→ Uniquement ce qui a de la valeur pour le lecteur
└→ JAMAIS une spéculation présentée comme une vérité
Between these two extremes, there is afilter. The question is: who does it? A tired human at the end of a session? A naive regex script? Or the LLM itself, which has already read everything?
My answer: the LLM.
The STIMULUS Pattern — Born, Fixed, Diluted, Died
A STIMULUS is a`.adoc`temporary file at the root of the workspace (Circle 0). Its name follows an evocative convention —PICTURE_ME_ROLLIN.adoc, HOLD_MY_BEER.adoc, ONCE_UPON_A_TIME.adoc— which captures the exploratory intention of the moment.
Its life cycle is ruthless:
CRÉATION (Cercle 0)
├→ Fichier vide, brain dump libre
├→ Allers-retours LLM ← → développeur
└→ Aucune pression de structure ou de publication
MATURATION
├→ Le contenu se densifie
├→ Des sections émergent naturellement
└→ Le fichier devient une référence informelle de session
CLASSIFICATION ÉPISTÉMIQUE ← FAIT PAR LE LLM
├→ VISION → publiable, diluer dans les docs publics + blog
├→ OPINION → confiner au Cercle 0, pas de dilution externe
└→ STRATÉGIE → dilution restreinte (docs racine, PAS de blog)
DILUTION (Cascade vers Cercles légitimes)
├→ VISION → WORKSPACE_AS_PRODUCT.adoc + WHAT_THE_GAMES.adoc + blog
├→ STRATÉGIE → WORKSPACE_AS_PRODUCT.adoc (section business)
└→ OPINION → reste dans le stimulus, ne bouge pas
ARCHIVAGE + SUPPRESSION
├→ Snapshot dans configuration/vision-archive/ (trace historique)
└→ rm du stimulus — il a fini son travail
A stimulus that survives more than 2 sessions without dilution is an anti-pattern. Either the information is too important to rot in a temporary file (→ dilute), or it is too vague to deserve existence (→ delete).
Delegation to the LLM: Why the LLM is the one Filtering
I don’t hardcode the Vision/Opinion classification in Kotlin. I inject it into thesystem promptof the LLM via`AGENT_GOVERNANCE.adoc`:
----
Pour chaque dilution de stimulus ou session, tu es responsable de classifier
le contenu :
- VISION : décision architecturale actée, pattern testé en production (>100 tests PASS),
décision documentée dans BACKLOG ou ROADMAP
- OPINION : spéculation, hypothèse non validée par des tests, intuition
sans ancrage expérimental
- STRATEGIE : positionnement business, pricing, marché cible
Règles :
- Si OPINION, le contenu reste confiné dans son cercle d'origine
- Si VISION, tu procèdes à la dilution dans les documents racine
- Si STRATEGIE, dilution restreinte (docs racine, pas de blog public)
- Cette classification détermine aussi si un article de blog est publiable
sur cheroliv.com
----
The LLM reads this directive**before**processing the session. It is in its immediate context, not in a separate file. This is *deterministic prompt engineering*: the behavior emerges from the injected text, not from an external classifier.
=== Why It Works — and Why It's Counter-Intuitive
The standard reaction: "You entrust classification to the AI? What if it's wrong?"
Answer: humans don't do any better at 2 AM. The difference is that the LLM reads EVERYTHING. It has the full context of the session and the target documents. It knows that`VPS ECO-16 12€ HT`is an infrastructure decision (VISION) while`« le TTS ElevenLabs sonne plus naturel que Coqui »`is an opinion not verified by a benchmark.
The human, at the end of a session, skims and does their best. The LLM reads exhaustively and applies a systematic grid. The result is**more reliable**, not less.
And for the 20% of ambiguous cases — the gray zone where even the LLM hesitates — the answer is not "add more code." The answer is**LangGraph4j**(EPIC 13): a state graph that, for ambiguous cases, activates a Human-in-the-Loop node and escalates to the human for a decision. But for the 80% of clear cases, the LLM is sufficient.
== The Complete Pipeline: from Brain Dump to Blog Post
Here is the complete flow — from raw idea to published article — with the LLM as the sole filter:
[source]
----
CERCLE 0 (jardin secret)
PICTURE_ME_ROLLIN.adoc ← brain dump, allers-retours LLM
↓
[LLM classifie] → VISION / OPINION / STRATÉGIE
↓
VISION → dilution dans WORKSPACE_AS_PRODUCT.adoc
→ dilution dans WHAT_THE_GAMES_BEEN_MISSING.adoc
→ dilution dans WORKSPACE_VISION.adoc (session context)
→ RÉDACTION ARTICLE BLOG ← le LLM écrit, pas le dev
↓
CERCLE 4 (blog public)
0116_compartimentage_epistemique.adoc ← publié sur cheroliv.com
↓
./gradlew deploy (bakery-gradle → JBake → JGit → GitHub Pages)
↓
https://cheroliv.com/blog/2026/0116/ ← live
----
The developer doesn't write the article. They challenge, proofread, validate. The LLM writes. The loop is:
1. Free brain dump → no censorship
2. Epistemic classification by the LLM → no leaks
3. Drafting by the LLM → no procrastination
4. Human review → no errors
The historical bottleneck — "I don't have time to write" — is eliminated. The LLM does the bulk of the work. The human does what only a human can do: judge.
== The Three Root Documents — How Information Finds Its Place
Each target document has a precise role in the dilution cascade:
[cols="1,3,2"]
|===
|Document |What it receives |Content type |`WORKSPACE_AS_PRODUCT.adoc` |Architectural decisions, technical stack, roadmap, business model |VISION + STRATEGY |`WHAT_THE_GAMES_BEEN_MISSING.adoc` |Patterns, lessons, anti-patterns, ontology, formal rules |VISION (tested patterns) |`WORKSPACE_VISION.adoc` |Session context, decision history, infrastructure points |VISION + STRATEGY (context) |`AGENT_GOVERNANCE.adoc` |Governance rules, project portfolio, procedures |VISION (governance) |**Blog cheroliv.com** |Public articles, value for the external reader |VISION only
|===
A single stimulus can feed all 4 documents + the blog — each destination receives the portion that concerns it, without redundancy, without contradiction.
This is what happened for`PICTURE_ME_ROLLIN.adoc`(May 3, 2026):
| Information | Classification | Destinations | | Inventory of 13+ foundry/ projects | VISION | WORKSPACE_AS_PRODUCT | | VPS-2 OVH, edster.cloud, 8.49€/month | VISION | WORKSPACE_AS_PRODUCT + WORKSPACE_VISION | | "The African market is ready for mobile money" | STRATEGY | WORKSPACE_AS_PRODUCT (business section) | | "DeepSeek > Kimi > GLM for long context" | OPINION → VISION | Confined then promoted after benchmark (article 0112) | | Synthetic Employee as final product | STRATEGY | WORKSPACE_AS_PRODUCT (no blog) |
== The Baby-Step + TestContainer + Living Doc Pattern — Code that Tests Itself
The STIMULUS/Dilution pattern manages thought. Its equivalent for code is the Baby-Step/TestContainer/Living Doc pattern, validated by plantuml-gradle (380/380 tests PASS, 137 sessions without Docker leaks):
[cols="1,3"]
|===
|Principle |Rule |**Baby-step** |Never more than 3 pts per US. If a US is intimidating, break it down. A 1 pt US that passes > an 8 pt US that drags on. |**TestContainer first** |Before business code, the container. Infra test passes → stable environment guaranteed. |**Committed dataset** |Minimal but representative subset in`src/test/resources/`, without PII. Clonable, runnable. |**Living documentation** |Each Cucumber test = one sentence in natural language. The source code IS the executable spec. Zero Markdown docs to maintain. |**Automatic cleanup** |Zero resource leaks. Orphaned containers,`/tmp/gradle-test-*`: everything is cleaned up.
|===
This pattern is the reason why plantuml-gradle has never had a Docker regression in 138 sessions. It ensures that code talking to an external infra (PostgreSQL, Redis, Kafka) is always tested in an environment identical to production — versioned, reproducible, runnable in one command.
== Conclusion: The Freedom to Think without the Fear of Publishing
Automated epistemic compartmentalization is not a tool for censorship. It is a**liberator**. It allows for thinking freely, speculating without a filter, brain-dumping everything that comes to mind — without ever fearing that an embryonic idea ends up on the blog.
The LLM is the guardian of this boundary. It reads everything. It classifies. It dilutes what deserves to survive. It confines what must remain private. It drafts what is publishable.
And the developer keeps the final word: proofread, challenge, validate. Judge.
This is the division of labor that was missing for the solo developer: a synthetic employee who handles the mental paperwork, so that the human can focus on what they do best — design, architect, decide.
== References
* Article on Eager/Lazy agent governance:link:../2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[Governing an AI Agent with AsciiDoc]
* Article on spatial ontology and trust circles:link:../2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html[Spatial Ontology as an Alignment Mechanism]
* Article on the MVP0 Anonymizer:link:../2026/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html[Our First Hire: the Dataset Anonymizer]
* Article on long-context LLM comparison:link:../2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html[DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1]
* Article on the agent backup mechanism:link:../2026/0110_mecanisme_backup_contexte_agent_post.html[Sliding Window and Cold Wave]