Ein KI-Agent mit AsciiDoc steuern: Meine Eager/Lazy-Strategie für Opencode-Sessions ohne Kontextverlust
Publié le 24 April 2026
Zusammenfassung
Wenn man mit einem KI-Agenten wie Opencode an komplexen Projekten über mehrere Sitzungen arbeitet, steht man vor einem grundlegenden Problem:Kontextverlust. Der Agent erinnert sich nicht an die vorherige Sitzung. Alles, was ihm erklärt wurde — Architektur, Konventionen, Zustand des Backlogs — ist verloren. Die Wiederherstellung dieses Kontexts bei jeder Sitzung ist kostenintensiv, langsam und fehleranfällig.
Dieser Artikel legt die handwerklich konstruierte Strategie dar, die ich zur Lösung dieses Problems entwickelt habe: ein beständiges Governance-System, basierend auf AsciiDoc-Dateien, mit einer Dichotomiebegierig/faulum den Verbrauch des Kontext-Tokens zu optimieren, und eineUnverzichtbare Sitzungsabschlussprozedurum die Kontinuität zu gewährleisten.
Die Szene: Montag, 21. April, 9:00
Ich öffne Opencode erneut, um mein Gradle-Plugin fortzusetzen.plantuml-plugin. Gestern Abend habe ich drei Stunden damit verbracht, mit dem Agenten der Architektur des API-Schlüsselpools zu diskutieren — Round-Robin-Rotation, Quotenverwaltung, automatisches Failover. Heute Morgen schaut mich der Agent mit Goldfischaugen an.
_ — Guten Tag, ich bin Ihr Opencode-Assistent. Wie kann ich Ihnen heute behilflich sein? _
Kein — Ach ja, der API-Schlüssel-Pool, wir waren bei der YAML-Struktur. Kein — Achtung,PlantumlManager`ist ein Singleton-Objekt in Kotlin, keine Klasse. Nicht — Nein, wir haben gestern beschlossen dass`SyntaxValidationResult`blieb eine sealed class nested in`PlantumlService.
Alles muss neu gemacht werden. Oder eher: Alles muss neu erklärt werden. Ich werde die ersten zwanzig Minuten meiner Sitzung damit verbringen, einen Kontext wiederherzustellen, den der Agent gestern bereits in den Händen hatte. Zwanzig Minuten verbrannter Tokens. Zwanzig Minuten, in denen ich programmieren könnte, aber in denen ich verpflichtende pädagogische Arbeit leiste.
Das ist kein Bug von Opencode. Es ist die eigentliche Natur konversationaler LLMs: zwischen zwei Sitzungen ist das Arbeitsgedächtnisvollständig gelöscht. Der Agent erinnert sich nicht an die vorherige Mission, an die getroffenen Entscheidungen, an die identifizierten Fallen, an den Code, den wir gemeinsam geschrieben haben.
Ich habe das Dutzend Mal erlebt. Bei vier Projekten gleichzeitig. Mit Sitzungen, die sich über Wochen aneinanderreihen. Ich habe ausgerechnet: im Durchschnitt,30 bis 40 % der Sitzungszeitwar der Rekontextualisierung des Agents gewidmet. In Sitzung 87 des Projekts`plantuml-plugin`, ich habe aufgegeben. Ich konnte mir nicht mehr leisten, das zum zehnten Mal zu erklären, dass`AttemptEntry`ist eine Top-Level-Datenklasse in`DiagramProcessor.kt`.
Ich brauchte ein System. Kein Hack. Eine echte Governance.
Die Genesis: Von Chaos zur Methode
Die ersten Sitzungen: Das Zeitalter der Dunkelheit
Mein erstes Projekt mit Opencode,plantuml-plugin, hat gestartet ohne jegliche Governance. Ich stelle eine Frage, der Agent antwortet, wir iterieren, die Sitzung endet, und am nächsten Tag fangen wir von vorne an. Es war Sitzung 1, dann 2, dann 3… bis zur Sitzung 62, wo ich erkenne, dass ich kumulierte Stunden damit verloren habe, die gleiche Architektur immer wieder zu erklären.
Bei Sitzung 62 sind die Zahlen da:198 Unit-Tests bestehen, 42 validierte Funktionstests, das Plugin funktioniert. Aber die kognitive Belastung ist unerträglich. Jede neue Sitzung beginnt mit einem zwanzigminütigen Monolog über die Projektstruktur.
Die Episode des site.yml zerstört (Sitzung 2, bakery-plugin)
Die Methode entsteht auch aus einer Katastrophe. Über das Projekt`bakery-gradle`, in der Sitzung 2, ich bitte den Agenten, die Datei zu ändern.site.yml. Der Agent, ohne zu überprüfen, ob die Datei versioniert ist, macht ein`Write`vollständig, das den Inhalt überschreibt. Ergebnis: Die echten Tokens (Firebase-API-Schlüssel, Deploy‑Secrets) werden durch gefälschte Platzhalter ersetzt. Die Datei war nicht im Git‑Repository — sie war in`.gitignore`um die Geheimnisse zu schützen.
Ohne Sicherung. Ohne`git restore`möglich. Ich bin blockiert. Ich muss die Konfigurationsdatei manuell wiederherstellen, die Tokens in meinen Passwort-Managern finden, alles wieder zusammenfügen.
Aus dieser Frustration entsteht dieAbsolute Regel 1b:
_ NIE zerdrückeneine Konfigurationsdatei mit einem`Write`vollständig wenn ein`Edit`teilweise reicht.NIE ERSETZENsensible Werte durch Dummywerte.Überprüfen git check-ignore und `git ls-filesvor jeder Änderung. _
Diese Regel ist heute in allen meinen Dateien eingemeißelt.AGENT.adoc et `INDEX.adoc`Bei vier Projekten ist sie aus einem realen Fehler entstanden, der mich eine Stunde manuelle Arbeit gekostet hat.
Die Migration Markdown → AsciiDoc (Sitzung 1, cheroliv.com)
Am 25. April 2026, auf`cheroliv.com`, ich treffe eine radikale Entscheidung: die gesamte Governance von Markdown auf AsciiDoc umzustellen. Das ist nicht ästhetisch. Es ist funktional. AsciiDoc bietet eine semantische Struktur, die LLMs besser lesen: hierarchische Abschnitte, typisierte Tabellen, Warnungen (NOTE, WARNING, CAUTION), maschinenlesbare Dokumentattribute.
Sitzung 1 von`cheroliv.com`Formalisiere die Struktur :
-
Konvertierung von`AGENTS.md` en
AGENT.adoc -
Erstellung der spezialisierten Agenten:`CODER.adoc`,
SCRUM_MASTER.adoc,PLANTUML_DESIGNER.adoc -
Erstellung der Eager/Lazy-Struktur:`INDEX.adoc`,
SESSIONS_HISTORY.adoc,AGENT_SESSION_MANAGER.adoc,SESSION_CHECKLIST.adoc,PROCEDURES.adoc
Nur ein Commit:`90975e9 refactor: migrate agent governance from Markdown to AsciiDoc`. Und die Seite läuft weiter.
Failed to generate image: PlantUML preprocessing failed: [From <input> (line 18) ]
@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
title Entwicklung der Sessions — Von der Session 1 bis 150+
legend top
|= Couleur |= Projet |
| <#4CAF50> | cheroliv.com |
| <#2196F3> | plantuml-plugin |
| <#FF9800> | bakery-plugin |
| <#9C27B0> | magic-stick |
endlegend
concise "Aktive Sitzungen" as S
@S
0 is ".md roh"
1 is "Migration
^^^^^
Syntax Error? (Assumed diagram type: timing)
@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
title Entwicklung der Sessions — Von der Session 1 bis 150+
legend top
|= Couleur |= Projet |
| <#4CAF50> | cheroliv.com |
| <#2196F3> | plantuml-plugin |
| <#FF9800> | bakery-plugin |
| <#9C27B0> | magic-stick |
endlegend
concise "Aktive Sitzungen" as S
@S
0 is ".md roh"
1 is "Migration
AsciiDoc"
10 is "Eager/Lazy
formalisiert"
62 is "Sicherheitsregel
(site.yml)"
87 is "Knacken\nKontext"
109 is "Optimierung
-60% Tokens"
133 is "133 Sitzungen\n240 Tests bestanden"
S@0 -> S@1 : Session 1\n(cheroliv.com)
S@1 -> S@10
S@10 -> S@62 : Session 62\n(plantuml-plugin)
S@62 -> S@87 : Session 87\n(Cry 4 help)
S@87 -> S@109 : Session 109\n(API Key Pool)
S@109 -> S@133 : Session 133\n(Aujourd'hui)
@enduml
Der Zeitstrahl oben zeigt den tatsächlichen Fortschritt. Der Wendepunkt ist die Sitzung 87: dort, wo die Frustration durch wiederholte Rekontextualisierung die Toleranzgrenze überschreitet, und die Eager/Lazy-Methode aufhört, nur eine Idee zu sein, und zur Pflicht wird.
Die Strategie: Eager/Lazy im Detail
Philosophie: Angewendeter Informatikkache für die Kognition
Mein Ansatz lässt sich direkt von der Computer-Cache-Verwaltung inspirieren. Alles, waskritisch und häufig verwendetmuss sofort zugänglich seinEifrig) Alles, was istkontextbezogen oder voluminösmuss auf Anfrage geladen werden (faul).
Eager (Dashboard) |
Faules (Bedienungsanleitung) |
Größe |
< 100 Zeilen, < 10k Tokens |
Unbegrenzt, detailliert |
Ladevorgang |
Auto, am Anfang der Sitzung |
Auf Anfrage des Agenten |
Inhalt |
Absolute Regeln, laufende Mission, kritischer Zustand |
Sitzungsarchive, vollständiger Verlauf, detaillierte Verfahren, technische Referenzen |
Rolle |
Den Agent sofort orientieren |
Beantworten Sie tiefgründige Kontextfragen |
Die Eager-Dateien : Das Dashboard
Diese Dateien leben im Stammverzeichnis jedes Projekts und werden automatisch vom Agenten am Anfang jeder Sitzung geladen. Sie bilden dasdashboard-- kritische Information, unmittelbar zugänglich.
Failed to generate image: PlantUML preprocessing failed: [From <input> (line 7) ]
@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200
package "Projekt-Root (Eager - automatisch geladen)" {
component "<b>AGENT.adoc</b>\nAbsolute Regeln\nStruktur & Konventionen" as AGENT
component "<b>PROMPT_REPRISE.adoc</b>
^^^^^
Syntax Error? (Assumed diagram type: component)
@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200
package "Projekt-Root (Eager - automatisch geladen)" {
component "<b>AGENT.adoc</b>\nAbsolute Regeln\nStruktur & Konventionen" as AGENT
component "<b>PROMPT_REPRISE.adoc</b>
Mission der Sitzung N
Zusammenfassung N-1" as PROMPT
component "<b>INDEX.adoc</b>
Einstiegspunkt
Regeln + Sitzungen" as INDEX
component "<b>*_ESSENTIALS.adoc</b>\nGeschäftskontext\nkritisch" as ESS
}
package ".agents/ (Lazy - bei Bedarf geladen)" {
component "<b>sessions/N-*.adoc</b>\nDetaillierte Archive\nEntscheidungen & Ausgabe" as SESS
component "<b>SESSIONS_HISTORY.adoc</b>\nZusammenfassungstabelle\nDatum/Typ/Punktzahl" as HIST
component "<b>PROCEDURES.adoc</b>
Vorlagen für das Ende der Sitzung
6 Schritte" as PROC
component "<b>*_REFERENCE.adoc</b>\nVollständige Architektur\nTechnische Referenzen" as REF
component "<b>COMPLETED_TASKS_ARCHIVE</b>\nErledigte Aufgaben\nPro Monat" as ARCH
component "<b>AGENT_MODUS_OPERANDI.adoc</b>\nStrategiedokumentation\nMethodik" as MOD
component "<b>*_REFERENCE.adoc</b>
Boot tests, A/B partition
Spezifische Kontexte" as SPEC
}
AGENT --> PROMPT : "Referenzen"
AGENT --> INDEX : "Referenzen"
INDEX --> SESS : "indexiert"
INDEX --> HIST : "indexiert"
INDEX --> PROC : "Referenz"
INDEX --> ARCH : "Referenz"
INDEX --> REF : "Referenz"
PROMPT --> SESS : "Archiv N-1"
PROMPT --> ESS : "Fachkontext"
@enduml
AGENT.adoc-- Die Hauptdatei. Auf`cheroliv.com`, es sind 200 Zeilen und enthält :
-
Die absoluten Regeln des Projekts (kein Commit ohne Erlaubnis, kein`rm`ohne Bestätigung)
-
Die Struktur des Projekts und die Codekonventionen
-
Die essentiellen Befehle(
./gradlew serve,./gradlew test) -
Die Epics und das Product Backlog (priorisierte User Stories)
-
Quer-schnittliche Qualitätskriterien (Barrierefreiheit, Responsivität, Kompatibilität)
Auf`bakery-plugin`, die Regel 0 ist verschieden :./gradlew -q publishToMavenLocal` erforderlich nach jeder Änderung des Quellcodes. Weil das Testen des Plugins ohne erneutes Veröffentlichen des lokalen JARs mich eine Stunde gekostet hat, um einen Code zu debuggen, der noch nicht verpackt war.
PROMPT_REPRISE.adoc-- Die Aufgabe der laufenden Sitzung. Am Ende jeder Sitzung aktualisiert, enthält es:
-
Die Sitzungsnummer und die Prioritätsmission
-
Zusammenfassung der vorherigen Sitzung (was erledigt wurde, was noch zu tun bleibt)
-
Die Akzeptanzkriterien der aktuellen Sitzung
-
Spezifische technische Hinweise
.agents/INDEX.adocDer Einstiegspunkt. Er fasst die absoluten Regeln, die jüngsten Sitzungen und vor allem das.Projektportfoliogérés avec la même méthodologie. À ce jour, cinq projets y figurent : translates to:
mit der gleichen Methodologie verwaltet. Bis heute sind fünf Projekte darin aufgeführt:
----
----
| magic-stick | Session 23 | SCRIPT_VERIFICATION.adoc | 2026-04-27 |
| bakery-gradle | Session 11 | TEST_COVERAGE_ANALYSIS | 2026-04-27 |
| cheroliv.com | Session 9 | TEST_COVERAGE_ANALYSIS | 2026-04-27 |
| plantuml-gradle| Session 133| TEST_COVERAGE_ANALYSIS | 2026-04-23 |
| jhipster-gradle-plugins | Session 1 | TEST_COVERAGE_ANALYSIS | 2026-04-28 |
----
**`*_ESSENTIALS.adoc`** -- Ein kürzlich hinzugefügter Beitrag (Session 109, plantuml-plugin) zur weiteren Optimierung des Eager-Kontextes. Anstatt 200 Zeilen des Geschäfts-Kontexts im API-Schlüssel-Pool zu laden, lade ich 50 Zeilen des Wesentlichen und die übrigen 150 Zeilen bleiben im LAZY-Modus in`*_REFERENCE.adoc`.
Gemessenes Ergebnis: Übergang von**~25k tokens EAGER zu ~10k tokens**(Gewinn von 60%). Der Agent braucht keine energieintensiven Erinnerungen mehr.
==== Das fehlende Glied:`opencode.json
Ich muss Ihnen gestehen, dass ich fast vergessen hätte, es zu dokumentieren. Über allen diesen Dateien `.adoc` befindet sich eine winzige JSON-Datei, ohne die nichts funktioniert. Es heißt`opencode.json`und er ist sechs Zeilen lang. Wörtlich sechs Zeilen.
[source,json]
----
{
"$schema": "https://opencode.ai/config.json",
"instructions": [
"AGENT.adoc"
]
}
----
Diese Datei sagt Opencode: « Beim Start laden`AGENT.adoc` automatisch. » Ohne ihn ist der Agent ein leeres Blatt genau wie ich es zu Beginn des Artikels beschrieben habe. Mit ihm hat der Agent bereits die absoluten Regeln, die Projektarchitektur und die essentiellen Befehle in der Hand — bevor ich überhaupt Guten Tag gesagt habe.
Ich habe die Bedeutung dieser Datei zufällig entdeckt. Auf`bakery-plugin`, es existierte nicht. Ich fragte mich, warum der Agent auf diesem Projekt systematisch mehr « verloren » war als bei den anderen. Die absoluten Regeln waren gut in`AGENT.adoc`— aber`AGENT.adoc`war nie geladen. Der Agent las nur das, was ich ihm sagte zu lesen, manuell, bei jeder Sitzung. Es war die Sitzung 11 von`bakery-plugin`Als ich die Abwesenheit des bemerkte`opencode.json`. Ich habe es erstellt — und die Sitzung 12 begann wie die anderen.
Diese Datei ist für mich jetzt so offensichtlich, dass ich überhaupt nicht mehr daran denke. Ein klassischer Fehler eines Entwicklers, der sein Werkzeug zu gut kennt. Heute erstelle ich es systematisch *avant`AGENT.adoc`. Das ist der erste Stein.
==== Die Dualität von `INDEX.adoc
Eine weitere Subtilität, die es wert ist, ausdrücklich benannt zu werden:`INDEX.adoc`lebt in`.agents/`— Dieses Dokument habe ich als LAZY angegeben. Trotzdem führe ich es in all meinen Tabellen als EAGER auf. Hier besteht eine erkennbare Spannung.
Die Realität vor Ort: die Dateien`.agents/INDEX.adoc`werden automatisch zu Beginn der Sitzung gut geladen, ebenso wie`AGENT.adoc` et `PROMPT_REPRISE.adoc`. Sie sind in`.agents/`aus organisatorischen Gründen — nicht das Root-Verzeichnis bevölkern — aber ihr Verhalten ist EAGER
Auf`plantuml-plugin`, `INDEX.adoc`Es hat 200 Zeilen und enthält die absoluten Regeln *vollständig* mit ihrer Historie (die Lehren aus den vergangenen Sitzungen), die EPICs mit Punktzahlen, und das Projektportfolio. Das ist das Dokument, das der Agent konsultiert, um zu wissen « wo wir stehen ». Auf`bakery-plugin`, er hat 150 Zeilen mit der Roadmap und den neuesten Sitzungen
Die freiwillige Redundanz zwischen`AGENT.adoc` et `INDEX.adoc`kann überraschend sein. Absolute Regeln sind in beiden vorhanden. Warum? Weil sie zwei verschiedene Rollen erfüllen: in`AGENT.adoc`, sie sind *explicatives* (das Storytelling der Regel, die gelernte Lektion); in`INDEX.adoc`, sie sind *ausführend* (die nackte Regel, ohne Begründung, für eine schnelle Konsultation). Der Agent liest`AGENT.adoc`einmal zum Verstehen ; er liest es noch einmal`INDEX.adoc`zu jeder Sitzung für *anwenden*. Zwei Verwendungen, zwei Formate.
[plantuml, format=svg, id=diag-dualite-agent-index, alt="Comparaison entre AGENT.adoc (narratif) et INDEX.adoc (exécutif)"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
title Dualität AGENT.adoc ←→ INDEX.adoc
left to right direction
rectangle "AGENT.adoc
(Wurzel — EAGER)" as AGENT #E3F2FD {
rectangle "�📖 **Narratives Format**
Das Storytelling der Regel
die gelernte Lektion, der Kontext" as NARR
rectangle "🏗️ **Vollständige Architektur**
Projektstruktur, Komponenten
Detaillierter Backlog US" as ARCHI
rectangle "📋 **Erklärende Regeln**
Warum existiert die Regel?
Verlauf des Vorfalls" as EXPL
}
rectangle "INDEX.adoc\n(.agents/ — EAGER)" as INDEX #E8F5E9 {
rectangle "⚡ **Ausführendes Format**
Die nackte Regel, ohne Begründung
Schnelle Konsultation" as EXEC
rectangle "�📊 **Roadmap & EPICs**\nZusammenfassungstabelle\nFortschritt, Score, Priorität" as ROAD
rectangle "�🌐 **Projektportfolio**
Queransicht
5 synchronisierte Projekte" as PORT
}
AGENT --> INDEX : "Agent liest AGENT.adoc\n1 Mal zum **verstehen**"
INDEX --> AGENT : "Agent liest INDEX.adoc erneut
für jede Sitzung zum **anwenden**"
note bottom of AGENT
Taille max : 200 lignes
end note
note bottom of INDEX
Taille max : 200 lignes
Source de vérité en cas de divergence
end note
@enduml
----
Diese akzeptierte Redundanz ist eine Designentscheidung. Sie verbraucht etwa 50 zusätzliche Zeilen von EAGER‑Tokens — aber sie gewährleistet, dass der Agent stets die Regeln vor Augen hat, einschließlich im knappen Format, das sofortige Gehorsam erleichtert.
=== Die LAZY-Dateien: Das Handbuch des Eigentümers
Diese Dateien leben in`.agents/`und werden nur gelesen, wenn der Agent sie benötigt. Sie bilden den wahren Reichtum der Methode, denn sie sammeln das Projektwissen, ohne den aktuellen Kontext zu verunreinigen.
[plantuml, format=svg, id=diag-agents-tree, alt="Arborescence complète du dossier .agents/"]
----
@startuml
skinparam folderBackgroundColor #E3F2FD
skinparam folderBorderColor #1565C0
skinparam fileBackgroundColor #FFF3E0
skinparam fileBorderColor #EF6C00
folder ".agents/" as ROOT {
file "INDEX.adoc
(EAGER -- 200 Zeilen)" as IDX #E8F5E9
file "AGENT_SESSION_MANAGER.adoc
(Vorlagensitzung)" as ASM
file "SESSION_CHECKLIST.adoc\n(Wann ändern)" as CHK
file "PROCEDURES.adoc
(6 Schritte + LAZY/EAGER)" as PRO
file "SESSIONS_HISTORY.adoc
(Alle Sitzungen)" as HIS
folder "Sitzungen/" as SESS {
file "1-chore-migration.adoc" as S1
file "109-Formalisierung-lazy.adoc" as S109 #FFECB3
file "133-epic11-artikel.adoc" as S133
file "... +130 andere" as SMORE
}
folder "Archive/" as ARCH {
file "COMPLETED_TASKS_2026-04.adoc" as CTA
file "SESSIONS_HISTORY_83-95.adoc" as SHIST
folder "sessions_zusammenfassungen/" as SUM {
file "SESSION_64_SUMMARY.adoc" as SU64
file "SESSION_73_SUMMARY.adoc" as SU73
file "..." as SUMORE
}
folder "prompts_archive/" as PARCH {
file "PROMPT_REPRISE_S65.adoc" as PR65
file "PROMPT_REPRISE_S75.adoc" as PR75
file "..." as PMORE
}
}
}
IDX --> SESS : "indiziert"
IDX --> HIS : "indiziert"
IDX --> ARCH : "Referenz"
note right of S109
Session 109 =
Formalisation stratégie
LAZY/EAGER
Token : ~25k → ~10k
end note
@enduml
----
Die obige Baumstruktur zeigt die tatsächliche Ordnerstruktur`.agents/`auf`plantuml-plugin`, das reifste Projekt. Beachte die Tiefe in drei Schichten: Stammdateien (Metadaten), Ordner`sessions/`(chronologische Archive), und Akte`archives/`(Aggregationen und Zusammenfassungen). Diese Tiefe verwandelt die Governance einer einfachen TODO-Datei in eine**vollständiges organisatorisches Gedächtnis**.
**.agents/sitzungen/{N}-{titel}.adoc**Die detaillierten Aufzeichnungen jeder Sitzung. Derzeit:
* `plantuml-plugin` : **133 archivierte Sitzungen**(von der Sitzung 1 bis 133)
* `bakery-plugin`:**11 Sitzungen**
* `magic-stick` : **23 Sitzungen**
* `cheroliv.com`:**9 formelle Sitzungen**+ 7 Sitzungen vor dem System wurden rückwirkend rekonstruiert
Jedes Archiv enthält den vollständigen Kontext der Sitzung, die getroffenen Entscheidungen, die aufgetretenen Probleme und deren Lösung, die ausgeführten Befehle und ihre Ausgabe.
**.agents/SESSIONS_HISTORY.adoc**-- Eine Zusammenfassungstabelle aller Sitzungen mit einem Score. Beispiel auf`cheroliv.com` :
----
| -6 | 2025-05 | chore | Initialisation projet Gradle/JBake | 7/10 | 1 | 2026-04-25 | chore | Migration gouvernance agent | 8/10 | 7 | 2026-04-27 | debug/fix | Correction publishSite | 9/10 | 8 | 2026-04-27 | analyse | Analyse article 0108 | 7/10
**.agents/COMPLETED_TASKS_ARCHIVE_{mois}.adoc**Abgeschlossene Aufgaben werden monatlich archiviert, um den aktiven Backlog nicht zu überladen. Wenn eine User Story abgeschlossen ist, wird sie hierhin verschoben. Der Backlog bleibt übersichtlich: maximal 10 aktive Elemente.
**.agents/PROCEDURES.adoc**-- Detaillierte Vorlagen des Sitzungsende-Verfahrens. Lang, aber nur einmal vom Agenten gelesen, wenn er die Methode lernt. Dann wird das Verfahren mechanisch.
**.agents/AGENT_MODUS_OPERANDI.adoc**-- Die vollständige strategische Dokumentation. Auf`plantuml-plugin`, Diese Datei macht**900+ Zeilen**und er/sie heißt tatsächlich`AGENT_METHODOLOGIES.adoc`— Ich habe den Namen zwischen dem Schreiben dieses Artikels und der praktischen Implementierung geändert. Diese Art von Namensabweichung ist in einem sich entwickelnden handwerklichen System unvermeidlich. Wichtig ist die Namenskonvention: Wenn die Datei die *Methode* dokumentiert, beginnt sie mit`AGENT_`oder ein explizites Präfix. Es dokumentiert die Eager/Lazy-Methodik, die zu befolgenden Muster, die zu vermeidenden Anti-Muster. Es ist LAZY, weil ein Agent nicht die gesamte Strategie in jeder Sitzung nachlesen muss, nur wenn es Unklarheit gibt.
**`*_REFERENCE.adoc`** -- Die projektspezifischen technischen Referenzen. Auf`magic-stick`, zwei dichte LAZY Dateien:
* `AB_PARTITION_REFERENCE.adoc`(147 Zeilen) -- Architektur Partition A/B GPT, Skripte`update-system.sh`, geschätzte Größen, Rollback-Mechanismus
* `BOOT_TEST_REFERENCE.adoc`(144 Zeilen) -- Verfahren QEMU + VNC zum Testen des Boots der ISO ohne physische Hardware, Checkliste BIOS/UEFI, Einschränkungen CI/CD
Auf`plantuml-plugin`:
* `ARCHITECTURE.adoc`(134 Zeilen) -- Struktur der 11 Data-Klassen, Aufmerksamkeitspunkte (zu vermeidende Fallstricke), optimierte Testbefehle
* `API_KEY_POOL_REFERENCE.adoc`-- Vollständige Details des Schlüsselpools (LAZY während`ESSENTIALS`ist EAGER)
== Die Spezialagenten: Ein virtuelles Team
Die Governance beschränkt sich nicht auf passive Dateien. Ich habe formalisierte**Rollen spezialisierter Agenten**in dedizierten LAZY-Dateien, die den erwarteten Workflow je nach Aufgabentyp definieren.
|===
|Agent |Datei |Rolle |Projekt |**kodieren** |`CODER.adoc` |Implementierung FTL/CSS/JS, semantische Tags, Zugänglichkeitskriterien |cheroliv.com |**Scrum-Master** |`SCRUM_MASTER.adoc` |US-Planung, Aufteilung in Unteraufgaben, Erkennung der Abhängigkeiten |cheroliv.com |**PlantUML-Designer** |`PLANTUML_DESIGNER.adoc` |Erstellung von Diagrammen, PUML-Syntax, JBake-Integration |cheroliv.com
|===
Die Datei`CODER.adoc`auf`cheroliv.com`enthält konkrete Regeln: _einzige`<h1>`pro Seite_, _Pfade mit Präfix versehen`${content.rootpath}`_, _Die Sprache deklarieren`<html lang="${content.lang!"fr"}">`_. Diese Konventionen, einmal geschrieben, werden vom Agenten seit Sitzung 1 automatisch eingehalten.
Die Datei`SCRUM_MASTER.adoc`Vorgibt eine Lieferstruktur :**Ziel**, **Aufgaben**(Koordinaten mit Zuweisung)**Akzeptanzkriterien**, **Risiken**. Wenn ich einen Aktionsplan anfordere, erstellt der Agent diese Struktur, ohne dass ich sie verlangt habe. Die Governance**Programm**der Agent.
==== Wenn die Spezialagenten unverzichtbar werden
Die Erstellung der spezialisierten Agenten folgt einer natürlichen Kurve. Zu Beginn eines Projekts brauchen Sie sie nicht —`AGENT.adoc`reicht völlig aus. Aber wenn das Projekt wächst (sagen wir, über 20 Sitzungen), sollten zwei Signale Sie alarmieren:
1. Der Agent mischt die Konventionen zweier unterschiedlicher Bereiche (z.B. PlantUML-Syntax und CSS-Regeln)
2. Du verbringst mehr Zeit damit, den Agenten wegen Konventionen zu korrigieren, die du ihm bereits fünfmal erklärt hast.
Auf`cheroliv.com`, es ist in der Sitzung passiert... 1. Ja, von Anfang an. Weil dieses Projekt eine Website mit drei Sprachen (FTL, CSS, JS) ist, AsciiDoc-Inhalt und PlantUML-Diagramme enthält — drei Bereiche, die nichts gemeinsam haben. Der Agent CODER muss die Schriftgrößen und Media Queries kennen; der Agent PLANTUML_DESIGNER muss die Syntax kennen.`@startuml`. Ohne Trennung bot mir der CODER-Agent Diagramme an, und umgekehrt. Das Chaos.
auf`jhipster-gradle-plugins`, ich habe zwei spezialisierte Agenten für die Entwicklung von Gradle-Plugins erstellt:`PLUGIN_DEVELOPER.adoc` et `BACKLOG_MANAGER.adoc`. Der erste kodiert alle Kotlin/Gradle-Konventionen (keine`!!`, Datenklassen für die Modelle,`@TaskAction`pour die Aufgaben). Der Zweite weiß, dass`persistence`muss stabil sein bevor`assistant`startet seine Entwicklung nicht — eine kritische Abhängigkeit in einem Monorepo.
Der Fehler, den man nicht machen sollte: zu viele Agenten zu früh erstellen.`plantuml-plugin`hat die Session 108 abgewartet, bevor ein spezialisierter Agent für den Pool von API-Schlüsseln formalisiert wurde. Bis dahin lag der fachliche Kontext in`AGENT.adoc`. Die Faustregel: Ein spezialisierter Agent ist gerechtfertigt, wenn sein Fachgebiet mehr als 100 Dokumentationszeilen umfasst.
==== Die Namenskonvention der Sitzungen
Ein Detail, das trivial erscheint, aber kritisch wird, wenn man 100 Sitzungen erreicht hat. Wie sollen die Archivdateien benannt werden?
Ich habe auf die harte Tour gelernt, dass eine Konvention notwendig ist — vier Projekte, vier unterschiedliche Formate zu Beginn, und ich habe den Überblick verloren. Heute ist die Konvention, die ich festgelegt habe, :
{N}-{type}-{sujet-kebab-case}.adoc
Konkrete Beispiele: * `1-chore-migration-gouvernance-agent.adoc`— Sitzung 1, Typ Aufgabe * `10-solidification-tests.adoc`— Sitzung 10, ohne expliziten Typ (das Subjekt reicht aus) * `036-debug-graphify-symlink-epic9.adoc`— Sitzung 36 mit dreistelliger Nummer für die Sortierung Die Sitzungsnummer ist das Hauptkriterium für die Sortierung. Projekte, die Nummern mit drei Stellen (001, 036, 133) verwenden, vermeiden Probleme bei der lexikografischen Sortierung, wenn man über 99 hinausgeht. Das ist, was ich jetzt auf`magic-stick`(Note: The user provided no text to translate after the colon, so the output is empty.)`001-init-projet.adoc`, `036-debug-graphify-symlink-epic9.adoc`. Der Typ ist optional und wird aus den Session-Schlüsselwörtern abgeleitet (debug, feature, refactor, docs, chore, test). Der Betreff im kebab-case ist der wichtigste Teil: Er muss es ermöglichen, eine Sitzung ohne Öffnen der Datei wiederzufinden. Wenn du dich fragst, welche Sitzung das war, in der wir den Timeout der Integrations-Tests behoben haben, lautet die Antwort`124-fix-timeout-integration-test.adoc`. Für die historisch rekonstruierten Sitzungen (Projekte, die vor der Governance entstanden sind), verwende ich negative Zahlen. Auf`cheroliv.com`, die Sitzungen -6 bis 0 decken die gesamte Vor-Governance-Geschichte des Projekts ab. Und für die Sitzungen « nicht dokumentiert » oder verloren, erstelle ich einen Eintrag in`SESSIONS_HISTORY.adoc`Ohne entsprechendes Archiv, mit einer Punktzahl`?`. Es ist ehrlicher als vorzutäuschen. [plantuml, format=svg, id=diag-naming-convention, alt="Arbre de décision pour le nommage des fichiers de session"]
@startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam wrapWidth 200
title Namenskonvention für Sitzungen start
:Une session se termine; note right: Trigger "Ende der Sitzung"
if (Session antérieure\nà la gouvernance ?) then (oui) :Numéro NÉGATIF\n-6, -5 … 0; note right: Historique\nreconstitué :Suffixe : reconstitution; else (non) :Numéro POSITIF\nsur 3 chiffres si > 99; note right: 001, 036, 133\npour le tri lexicographique
:Détecter le **TYPE**; if (Mots-clés trouvés ?) then (oui) :debug / feature / refactor\ndocs / chore / test; else (non) :Omettre le type\n(le sujet suffit); endif
:Formuler le **SUJET** en kebab-case;
note right
Ex: fix-timeout-integration-test
Doit permettre de retrouver
sans ouvrir le fichier
end note
endif
note right • 1-chore-migration-gouvernance.adoc • 036-debug-graphify-symlink.adoc • 124-fix-timeout-integration-test.adoc • 133-epic11-article-blog-kg.adoc end note
if (Session documentée ?) then (oui) :Créer archive dans sessions/; :Ajouter ligne SESSIONS_HISTORY\navec score X/10; else (non) :Ajouter ligne SESSIONS_HISTORY\navec score ?\nsans archive; note right: L’honnêteté\nplutôt que le vide endif
stop @enduml
==== TEST_COVERAGE_ANALYSIS.adoc` — Der Schritt 5 im Detail Schritt 5 des Verfahrens zur Sitzungsbeendigung ist das Geheimnisvollste. Sie sagt « Aktualisieren`TEST_COVERAGE_ANALYSIS.adoc`Wenn Tests hinzugefügt oder geändert wurden. » Wie sieht diese Datei aus? auf`plantuml-plugin`, er hat sich von einigen Zeilen zu einer vollständigen Struktur entwickelt. Hier ist seine stabile Form : [source]
Analyse de Couverture de Tests
Suivi des Tests
Classe de test |
Type |
Tests |
Statut |
Dernière MAJ |
PlantumlServiceTest |
unit |
45/45 |
✅ PASS |
2026-04-23 |
ApiKeyPoolTest |
integration |
15/15 |
✅ PASS |
2026-04-20 |
Historique par Session
| Session | Tests ajoutés | Tests modifiés | Couverture | 133 | 0 | 2 | 100% | 132 | 5 | 0 | 100%
---- Das Interesse liegt nicht in der Datei selbst — es besteht darin, zu notieren, was sich geändert hat. Ohne diesen Schritt wissen Sie nach 50 Sitzungen nicht mehr, welche Tests was abdecken. Der Agent weiß es auch nicht. Die Datei wird zur einzigen Quelle der Wahrheit über die Testabdeckung des Projekts. Für Projekte ohne traditionelle Tests (wie`magic-stick`der Bash-Skripte testet), Schritt 5 wird ersetzt durch`SCRIPT_VERIFICATION.adoc`. Der Mechanismus ist derselbe: Eine Datei, die den Validierungszustand der Skripte verfolgt. Passen Sie Schritt 5 an Ihr Projekt an, aber überspringen Sie sie niemals. Sie ist das Sicherheitsnetz, das eine stille Regression verhindert. Wenn Ihr Projekt keinen Test hat — weder unitär, noch funktional, noch ein Skript — erstellen Sie trotzdem die leere Datei mit einem Abschnitt « To do: Eine Teststrategie definieren. » Das ist ein Lesezeichen, das Ihrem zukünftigen Selbst erinnern wird, dass dieses Thema noch nicht behandelt wurde. [plantuml, format=svg, id=diag-session-flow, alt="Flux d’une session type avec Eager/Lazy et agents"] ---- @startuml skinparam backgroundColor #FEFEFE start :Début session; note right: L’agent est une page blanche :Chargement EAGER auto; note right * AGENT.adoc (règles absolues) * PROMPT_REPRISE.adoc (mission N) * INDEX.adoc (état projet) end note if (Mission claire ?) then (oui) :Exécution directe; else (non) :Charge LAZY sur demande; note right * SESSIONS_HISTORY.adoc (contexte passé) * sessions/{N-1}-.adoc (décisions) * *REFERENCE.adoc (architechture) end note endif :Délégation agent spécialisé ?; if (CODER ?) then (oui) :Lit CODER.adoc; :Suit conventions FTL/CSS; elseif (SCRUM Master ?) then (oui) :Lit SCRUM_MASTER.adoc; :Structure livrable imposée; elseif (PlantUML ?) then (oui) :Lit PLANTUML_DESIGNER.adoc; :Syntaxe PUML + intégration; else (non) endif :Travail de la session; :Fin de session (trigger utilisateur); :Procédure 6 étapes; note right 1. Archive sessions/N-.adoc 2. Maj PROMPT_REPRISE.adoc (N+1) 3. Maj SESSIONS_HISTORY.adoc 4. Maj INDEX.adoc 5. Maj TEST_COVERAGE (si applicable) 6. Maj COMPLETED_TASKS_ARCHIVE.adoc end note :Checklist [✅] x 6; stop @enduml ---- Das Diagramm oben zeigt den vollständigen Lebenszyklus einer Sitzung. Der wesentliche Punkt ist die Verzweigung nach dem EAGER-Laden: Entweder ist die Mission klar genug, um sie direkt auszuführen (80% der Fälle), oder der Agent lädt das LAZY, um eine Mehrdeutigkeit zu lösen (20% der Fälle). Es ist diese Unterscheidung, die Tokens spart. == Die Prozedur des Sitzungsendes: Die Goldene Regel === Warum sie unverzichtbar ist Ohne diese Prozedur ist die Eager/Lazy‑Strategie sinnlos. Sie ist es, die die Arbeit der Sitzung in persistente Informationen umwandelt. Sie wird ausgeführtauf explizite Anforderung des Benutzers(Schlagwörter: "Ende der Sitzung", "Ich verlasse", usw.), und sie istobligatorisch-- keine Ausnahme, keine Auslassung. Die Datei`SESSION_CHECKLIST.adoc`definiert ideale Sitzungsmetriken : * Dauer: 15-30 Minuten * Geänderte Dateien: bis zu 3 * LLM-Austausch : 5-10 Nachrichten * Kontexttokens: < 50k Und Anzeichen, dass man die Sitzung wechseln sollte: _Der LLM wiederholt bereits korrigierte Fehler, Mehr als 3 gleichzeitig geänderte Dateien, Konversation > 50 Nachrichten. Die goldene Regel:Besser sind fünf Sitzungen à 20 Minuten als eine Sitzung von zwei Stunden mit chaotischem Debugging. === Der Fluss der 6 Schritte (stillschweigend) [plantuml, format=svg, id=diag-end-session-flow, alt="Flux de la procédure de fin de session"] ---- @startuml skinparam defaultTextAlignment center skinparam wrapWidth 200 skinparam activityBackgroundColor #E3F2FD start :L’utilisateur dit "Ende der Sitzung"; note right: Mots-clés déclencheurs :Agent détecte le trigger; :Étape 1\nCréer archive\n`.agents/sessions/N-.adoc`; note right: Tout le contexte de la session :Étape 2\nMettre à jour\n`PROMPT_REPRISE.adoc`; note right: Mission N + critères d’acceptation N+1 :Étape 3\nMettre à jour\n`SESSIONS_HISTORY.adoc`; note right: Ligne récap : # / Date / Type / Sujet / Score :Étape 4\nMettre à jour\n`INDEX.adoc`; note right: État courant, roadmap, fichiers modifiés :Étape 5\nMettre à jour\n`TEST_COVERAGE_ANALYSIS.adoc`; note right: Si tests ajoutés ou modifiés :Étape 6\nMettre à jour\n`COMPLETED_TASKS_ARCHIVE.adoc`; note right: Archiver tâches terminées :Afficher la checklist de confirmation; note right: Vérifier que chaque [✅] est mérité stop @enduml ---- === Die Ergebnisse von 150+ Sitzungen Hier ist das Ergebnis dieses Verfahrens, das systematisch auf meine vier Projekte angewendet wird. plantuml-plugin : * 133 Sitzungenseit Beginn des Projekts * 240/240 Tests bestanden(100% Abdeckung) — EPICs 1-7 abgeschlossen * 57 Szenarien Cucumber BDDvalidiert * Sicherheitsregel für Konfigurationsdateien, die aus einem realen Fehler entstanden ist (Session 2 bakery-plugin) bakery-plugin: * 11 Sitzungenin zwei Wochen * Migration Supabase → Firebase abgeschlossen (9 Tests korrigiert) * EPIC 6 (publishProfile) funktionsfähig in der Produktion * Regel 0 erstellt:`publishToMavenLocal`obligatorisch nach jeder Änderung Zauberstab: * 23 SitzungenUm ein Live-Xubuntu-System mit A/B-Partition zu erstellen * Erste ISO in Sitzung 10 generiert * Formalisierte Boot-Tests von QEMU + VNC (LAZY-Dokumentation von 144 Zeilen) * Funktionierendes CI/CD SourceForge cheroliv.com: * 9 formelle Sitzungen+ Rekonstruktion von 7 Vorsystem-Sitzungen * Artikel 0101 (OpenCode PATH) veröffentlicht * Artikel 0108 (dieser) wurde nach Analyse seiner Lücken überarbeitet. * Vollständig migrierte Governance von Markdown nach AsciiDoc === Die finale Checkliste Nach der stillen Ausführung der 6 Schritte muss der Agent eine Bestätigungs-Checkliste anzeigen: ---- ✅ Procédure de fin de session exécutée 📋 Checklist : Absolute Regel: kein Schritt kann markiert werden`[✅] == Der Bootstrap-Leitfaden: Tag 1, Sitzung 0 Sie sind von der Methode überzeugt. Sie wollen sie auf ein neues Projekt anwenden. Wo sollen Sie anfangen? Ich habe diesen Moment am 28. April 2026 erlebt. Ich öffne Opencode auf`jhipster-gradle-plugins, mein Mono-Repo aus zwei Gradle-JHipster-Plugins. Das ist ein Projekt, das bereits existiert — der Code ist dort, die Gradle-Tasks funktionieren. Aber die Agenten-Governance? Null. Leere Seite. Wie`plantuml-plugin`Bei seiner Sitzung 1, es gibt Monate. Hier ist das exakte Verfahren, das ich befolgt habe, und das ich für jedes neue Projekt befolgen werde. Achten Sie genau auf die Reihenfolge — sie ist wichtig. [plantuml, format=svg, id=diag-bootstrap, alt="Flux de bootstrap en 6 étapes pour initialiser la gouvernance agent sur un nouveau projet"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam wrapWidth 250 skinparam activityBackgroundColor #E8F5E9 title Bootstrap Governance — Tag 1, Session 0 start :Étape 0\nCréer opencode.json\n(6 lignes, instructions: AGENT.adoc); note right: Le pont qui charge\nAGENT.adoc automatiquement :Étape 1\nCréer les dossiers\nmkdir -p .agents/sessions/ .agents/archives/; note right: Les conteneurs vides\navant que l’agent écrive dedans :Étape 2\nCréer AGENT.adoc\n(200 lignes, règles absolues); note right: Le fichier maître\nStructure minimale v1 :Étape 3\nCréer PROMPT_REPRISE.adoc\nMission session 1 (max 70 lignes); note right: Ce que l’agent doit\nfaire à la prochaine session :Étape 4\nCréer .agents/INDEX.adoc\nRègles exécutives + roadmap; note right: Point d’entrée EAGER\ndans le dossier LAZY :Étape 5\nCréer les fichiers LAZY structurants\n6 fichiers : SESSIONS_HISTORY, CHECKLIST, etc.; note right • SESSIONS_HISTORY.adoc • SESSION_CHECKLIST.adoc • PROCEDURES.adoc • AGENT_SESSION_MANAGER.adoc • TEST_COVERAGE_ANALYSIS.adoc • Agents spécialisés (si besoin) end note :Étape 6\nAjouter le projet au Portefeuille\nMettre à jour TOUS les INDEX.adoc existants; note right: Maintenance transverse\nObligatoire mais fastidieuse :✅ Bootstrap terminé\nSession 1 prête; note right: 20 minutes investies\nDes centaines économisées stop @enduml ---- === Schritt 0: Es ist die erste Datei. Nicht`AGENT.adoc`, nicht`INDEX.adoc`. === Schritt 1 : Ordner erstellen [source,bash] ---- mkdir -p .agents/sessions .agents/archives ---- Zwei leere Ordner. === Schritt 2: Erstellen `AGENT.adoc — Die Hauptdatei Minimalstruktur für die erste Version (sie wird wachsen) : [source] ---- = {NOM_PROJET} — Directives Agent [CAUTION] ---- Obligatorischer Haltvor rm, Write, Löschung : 1. Die Datei vollständig lesen 2. git ls-files überprüfen 3. FORDERN bestätigung 4. WARTEN "ja == Projekt Name… Stapel: … Dokumentation: AsciiDoc == Absolute Regeln === 0. Entwicklungsumgebung Wesentliche Befehle… === 1. COMMITS/GIT Formelles Verbot… === 1b. KONFIGURATIONSDATEIEN — ABSOLUTE SICHERHEITSREGEL Niemals zerquetschen… === 2. TESTS AM ENDE DER SITZUNG Formelles Verbot… === 3. Verfahren zum Abschluss der Sitzung Die 6 obligatorischen Schritte… == Kontextverwaltung — LAZY/EAGER Dateien EAGER / Dateien LAZY… Dieses minimale Template ermöglicht es dem Agenten, zu starten. Die reiche Version — mit der Projektstruktur, den Schlüsselkomponenten, den EPICs und dem Backlog — wird in Sitzung 1 kommen, wenn der Agent bereits die Grundregeln in der Hand hat und dir dabei helfen kann, das Dokument zu bereichern. === Schritt 3 : Erstellen Eine Datei, die explizit sagt: « Ceci est la session 1, mission à définir. » Maximum 70 lignes, avec une section Session 0 (résumé du bootstrap) et une section Session 1 (priorités à définir avec l’utilisateur). === Schritt 4: Erstellen Die Datei, die die absoluten Regeln (executive Version) und die Sitzungstabelle enthalten wird. Für das Bootstrap listet sie die Regeln 0 bis 3 in ihrer kompakten Form, das Projektportfolio (einschließlich des neuen Projekts mit dem Emoji 🆕) und die leere Roadmap, bereit zur Auffüllung. === Schritt 5: Erstellen der LAZY strukturierenden Dateien In der Reihenfolge: 1. Wenn Ihr Projekt ein komplexes Geschäftsfeld hat (wie`jhipster-gradle-plugins`mit seinem Mono-Repo persistence/assistant), stellt die spezialisierten Agenten jetzt : 1. Erstelle keine Agenten, die du nicht verwenden wirst. Ein Agent ohne konkrete Konventionen für das Codieren ist eine tote Datei, die verschmutzt. === Schritt 6 : Das Projekt zum Portfolio aller Projekte hinzufügen Das ist der Schritt, den wir systematisch vergessen. Jede`INDEX.adoc`Für jedes Projekt enthält ein Tabelle « Projektportfolio », die alle Projekte mit derselben Methodik auflistet. Wenn Sie ein neues Projekt erstellen, müssen Sie: 1. Eine Zeile im Portfolio des neuen Projekts (logisch) hinzufügen 2. Füge eine Zeile in das Portfolio ALLER vorhandener Projekte ein — ja, alle Über meine vier (jetzt fünf) Projekte, bedeutet das öffnen die`INDEX.adoc` de |
Session 1 |
… |
2026-04-28 🆕 Es ist mühsam. Es ist manuell. Es ist auch die einzige Möglichkeit, sicherzustellen, dass der Agent weiß, welche anderen Projekte existieren und welchen Status sie haben, unabhängig davon, an welchem Projekt Sie arbeiten. In der Sitzung 012 von`magic-stick, der Agent hat zwei Unstimmigkeiten im Portfolio festgestellt — [plantuml, format=svg, id=diag-portfolio-graph, alt="Graphe du portefeuille de projets — références croisées entre INDEX.adoc"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam nodeBackgroundColor #E3F2FD title Projektportfolio — Kreuzverweise INDEX.adoc node "magic-stick Session 037 SCRIPT_VERIFICATION" as MS #E1BEE7 node "bakery-gradle Sitzung 11 TEST_COVERAGE" as BG #FFE0B2 node "cheroliv.com Sitzung 10 TEST_COVERAGE" as CH #C8E6C9 node "plantuml-gradle Session 133 TEST_COVERAGE" as PG #BBDEFB node "jhipster-gradle Session 1 🆕 TEST_ABDECKUNG" as JG #FFCDD2 MS -→ BG : INDEX.adoc référence MS -→ CH : INDEX.adoc référence MS -→ PG : INDEX.adoc référence MS -→ JG : INDEX.adoc référence 🆕 BG -→ MS : INDEX.adoc référence BG -→ CH : INDEX.adoc référence BG -→ PG : INDEX.adoc référence BG -→ JG : INDEX.adoc référence 🆕 CH -→ MS : INDEX.adoc référence CH -→ BG : INDEX.adoc référence CH -→ PG : INDEX.adoc référence CH -→ JG : INDEX.adoc référence 🆕 PG -→ MS : INDEX.adoc référence PG -→ BG : INDEX.adoc référence PG -→ CH : INDEX.adoc référence PG -→ JG : INDEX.adoc référence 🆕 JG -→ MS : INDEX.adoc référence JG -→ BG : INDEX.adoc référence JG -→ CH : INDEX.adoc référence JG -→ PG : INDEX.adoc référence note bottom of JG Quand on ajoute un projet : • 4 INDEX.adoc à mettre à jour • 1 ligne par portefeuille • Coût : 5 minutes end note legend bottom |
= Couleur |
= Projet |
<#E1BEE7> |
|
magic-stick — ISO Linux live |
<#FFE0B2> |
bakery-gradle — Plugin JBake |
|
<#C8E6C9> |
cheroliv.com — Site personnel |
||
<#BBDEFB> |
plantuml-gradle — Plugin IA |
<#FFCDD2> |