You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: bring DE brownfield workflow to parity with EN (#471)
The German brownfield workflow had only a stub "Sicherheitsnetz aufbauen"
section where the EN version has the full Socratic Code-Theory Recovery
methodology. Translate the missing content:
- Replace stub Phase 0.5 with Socratic Code-Theory Recovery (Naur 1985)
explanation
- Add Phase 1: Question Tree (with the same copy-paste prompt in English so
LLM activation is consistent across UI languages)
- Add Between Phases: Team Answers the Open Questions (with category table)
- Add Phase 2: Synthesize Documentation
- Keep Establish Baseline Tests (renamed sub-section, now after Phase 2)
- Add What the LLM Can and Cannot Recover
- Add Spec Drift and Reconciliation
- Extend Prompt Cheat Sheet with Theory Recovery (Phase 1), Team Answers,
Theory Recovery (Phase 2), and Reconciliation rows
- Add Naur, Brownfield Experiment Report, Fair Comparison Report to
Weiterführende Literatur
The methodology name "Socratic Code-Theory Recovery" stays in English as
it's a proper noun / contract name. Prose is translated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Einen wählen, der klein, gut isoliert ist und eine anstehende Änderungsanforderung hat.
53
53
54
-
== Phase 0.5: Sicherheitsnetz aufbauen
54
+
== Phase 0.5: Socratic Code-Theory Recovery
55
55
56
-
Vor jeder Änderung braucht man zwei Dinge: Verständnis und Tests.
56
+
Vor jeder Änderung muss die "Theorie" des Bounded Context rekonstruiert werden -- das, was https://pages.cs.wisc.edu/~remzi/Naur.pdf[Peter Naur] das mentale Modell nannte, das in den Köpfen der ursprünglichen Entwickler lebt. In einem Brownfield-Projekt ist dieses Modell nicht dokumentiert. Der Code ist die einzige Quelle.
57
57
58
-
=== Bestehendes Verhalten als Use Cases extrahieren
58
+
Diese Phase nutzt *Socratic Code-Theory Recovery*: einen zweiphasigen Workflow, der Verständnis durch rekursive Frageverfeinerung aufbaut, bevor Dokumentation erzeugt wird.
59
59
60
-
Die KI den Code im Bounded Context lesen lassen und extrahieren, was das System aktuell tut.
61
-
Das Ergebnis sind Use Cases, die das *bestehende* Verhalten beschreiben -- nicht was man bauen will, sondern was bereits da ist.
60
+
=== Phase 1: Question Tree aufbauen
62
61
63
-
.Prompt
62
+
Mit fünf Top-Level-Fragen zum Bounded Context starten und sie rekursiv zerlegen. Semantic Anchors als Zerlegungs-Heuristiken einsetzen: *arc42* für Architektur, *Cockburn Use Cases* für Spezifikation, *ISO 25010* für Qualität, *Nygard ADRs* für Entscheidungen.
63
+
64
+
Jedes Blatt im Baum ist entweder `[ANSWERED]` (mit Code-Evidenz: Datei, Funktion, Zeile) oder `[OPEN]` (mit Category und Ask-Rolle). Der Output sind zwei AsciiDoc-Dateien: `QUESTION_TREE.adoc` (vollständige Begründungs-Spur) und `OPEN_QUESTIONS.adoc` (Handoff-Dokument, nach Rolle gruppiert).
65
+
66
+
Den Prompt unten 1:1 in eine Session kopieren, die Lesezugriff auf den Bounded Context hat. `[bounded context path]` und die Beispielfragen an die eigene Domäne anpassen; die Blatt-Klassifikation, das Q-ID-Schema und die Output-Dateien nicht verändern.
67
+
68
+
.Prompt: Phase 1 — Question Tree aufbauen
69
+
[source,txt]
64
70
----
65
-
Read the code in [bounded context path]. Extract the existing behavior as Use Cases.
66
-
For each Use Case: ID, Trigger, Actors, Preconditions, Main Flow, Alternative Flows, Postconditions, Business Rules.
67
-
Save as docs/specs/use-cases-[context-name].adoc.
71
+
You are performing Socratic Code-Theory Recovery on a brownfield bounded
72
+
context located at [bounded context path]. Phase 1 of two.
73
+
74
+
Goal: recover the program's theory (Naur, 1985) from source code through
75
+
recursive question refinement, before any documentation is written.
76
+
77
+
Process:
78
+
79
+
1. Start with five high-level questions about the bounded context:
80
+
Q1 What problem does this bounded context solve, and for whom?
81
+
Q2 What is the specification of this bounded context?
82
+
Q3 What is the architecture of this bounded context?
83
+
Q4 What quality goals drive the design?
84
+
Q5 What risks and technical debt exist?
85
+
86
+
2. Decompose each question recursively. Use these Semantic Anchors as
87
+
decomposition guides:
88
+
- arc42 — 12 sub-questions for architecture (Q3 branch)
89
+
- Cockburn Use Cases — Primary Actor, Trigger, Main Success Scenario,
90
+
Extensions, Postconditions for specification (Q2 branch)
- State precisely what cannot be answered, and why.
114
+
115
+
5. Output two files in AsciiDoc:
116
+
117
+
QUESTION_TREE.adoc
118
+
- Full hierarchical tree with all nodes and Q-IDs
119
+
- Each leaf marked [ANSWERED] (with evidence) or [OPEN] (with Category
120
+
and Ask role)
121
+
- Includes all reasoning, not only the leaves
122
+
123
+
OPEN_QUESTIONS.adoc
124
+
- Only the [OPEN] leaves, copied verbatim from QUESTION_TREE.adoc
125
+
- Grouped by Ask role (one section per role)
126
+
- Each question short enough to be answered in 1-3 sentences
127
+
128
+
Do not write any other documentation in this phase. Phase 2 will synthesize
129
+
the answered tree into PRD, specification, arc42, and ADRs — only after the
130
+
team has filled in the [OPEN] leaves.
68
131
----
69
132
70
-
Die extrahierten Use Cases gegen das laufende System prüfen.
71
-
Die KI kann implizites Verhalten übersehen oder Code falsch interpretieren.
72
-
Das ist der eine Schritt, bei dem Domänenwissen unersetzlich ist.
133
+
=== Zwischen den Phasen: Das Team beantwortet die offenen Fragen
134
+
135
+
Die Open Questions an die Personen weiterleiten, die sie beantworten können. In einem kontrollierten Experiment mit einer 13.000-Zeilen-Go-Codebasis reichten *11 gezielte Fragen* aus, um die Lücke zwischen reverse-engineerter Dokumentation und Original zu schließen. Die Fragen sind präzise, weil die rekursive Zerlegung sie spezifisch macht, nicht vage.
136
+
137
+
Typische Fragen, die das LLM nicht aus dem Code beantworten kann:
138
+
139
+
[cols="2,3",options="header"]
140
+
|===
141
+
| Category | Beispiel
142
+
143
+
| Business Context | Warum wurde das gebaut? Welche Alternativen gab es?
| Quality Goals | Welches Qualitätsziel hat Priorität? Welche Schwellwerte?
146
+
| Stakeholder Context | Wer nutzt das? Welches Erfahrungslevel?
147
+
| Future Direction | Was ist geplant, aber noch nicht umgesetzt?
148
+
|===
149
+
150
+
=== Phase 2: Dokumentation synthetisieren
151
+
152
+
Das LLM synthetisiert die beantworteten Fragen plus die Code-Evidenz aus Phase 1 zur Dokumentation gemäß dem Spec-Driven-Workflow:
153
+
154
+
* *PRD* aus den Antworten im Q1-Ast
155
+
* *Spezifikation* (Cockburn Use Cases, CLI-Spec, Datenmodelle, Gherkin-Akzeptanzkriterien) aus dem Q2-Ast
156
+
* *arc42* mit allen 12 Kapiteln aus dem Q3-Ast
157
+
* *Nygard-ADRs* mit Pugh-Matrix aus dem Q3.9-Ast
158
+
159
+
Jede Aussage referenziert eine Question-ID und markiert teamgegebene Information mit `(team answer)`. Diese doppelte Rückverfolgbarkeit (Code-Evidenz + Team-Input) ist der entscheidende Unterschied zu einem einfachen Reverse-Engineering-Prompt.
73
160
74
161
=== Basis-Tests aufbauen
75
162
76
-
Tests schreiben, die das bestehende Verhalten verifizieren.
77
-
Diese Tests sind das Sicherheitsnetz: Wenn eine Änderung etwas kaputt macht, fangen die Tests es ab.
163
+
Aus den synthetisierten Use Cases Tests schreiben, die das bestehende Verhalten verifizieren. Diese Tests sind das Sicherheitsnetz.
78
164
79
165
.Prompt
166
+
[source,txt]
80
167
----
81
168
Based on the Use Cases in docs/specs/use-cases-[context-name].adoc, write tests that verify the current behavior.
82
169
Use TDD, London School. Each test references its Use Case ID for traceability.
83
170
Do not change any production code. Only add tests.
84
171
----
85
172
86
-
Tests ausführen.
87
-
Jeder Test muss gegen den aktuellen Code bestehen.
88
-
Wenn ein Test fehlschlägt, war der extrahierte Use Case falsch -- Use Case korrigieren, dann Test korrigieren.
173
+
Tests ausführen. Jeder Test muss gegen den aktuellen Code bestehen. Wenn ein Test fehlschlägt, war der extrahierte Use Case falsch -- Use Case korrigieren, dann Test korrigieren.
89
174
90
175
[IMPORTANT]
91
176
====
@@ -94,6 +179,24 @@ Ohne sie kann man nicht unterscheiden zwischen "meine Änderung hat etwas kaputt
94
179
Das ist die geschlossene Schleife, die Brownfield-Änderungen sicher macht.
95
180
====
96
181
182
+
=== Was das LLM rekonstruieren kann -- und was nicht
183
+
184
+
Ein kontrolliertes Experiment (Dokumentation aus einem Greenfield-Projekt löschen und aus dem Code wieder erzeugen) zeigte:
185
+
186
+
*Aus dem Code ableitbar:* funktionale Anforderungen (21 vs. 7 im Original), Akzeptanzkriterien (69 vs. 40), Building-Block-Views, Glossar (31 Begriffe vs. 2 Platzhalter), Sicherheitsmechanismen, Crosscutting Concepts.
187
+
188
+
*NICHT aus dem Code ableitbar:* Business Context, Design Rationale (das ADR-"Warum"), *Priorisierung* von Qualitätszielen, Stakeholder-Belange, geplante Features, Performance-Budgets, Tutorials, Review-Ergebnisse.
189
+
190
+
Semantic Anchors haben in diesem Workflow eine doppelte Funktion: *Prompt-Kompression* (ein 69-Zeilen-Prompt erzeugte 3.850 Zeilen korrekt strukturierter Dokumentation) und *Zerlegungs-Heuristik* ("arc42" erzeugt 12 MECE-Subfragen ohne weitere Anweisungen).
191
+
192
+
=== Spec-Drift und Abgleich
193
+
194
+
Selbst in gut dokumentierten Projekten driftet die Spezifikation vom Code weg. Das Implementierungs-LLM ergänzt Security-Hardening, Validierungsregeln und Edge Cases, die nie in der ursprünglichen Spec standen. Das ist kein Disziplinproblem -- es ist eine strukturelle Eigenschaft des Workflows.
195
+
196
+
Die Lösung: regelmäßiger *Spec-Reconciliation*. Den Reverse-Engineering-Prompt gegen den aktuellen Code laufen lassen und gegen die bestehende Spec diffen. Der Diff zeigt neue Anforderungen (im Code, nicht in der Spec), verändertes Verhalten (auseinandergedriftet) und tote Spec (dokumentiert, aber entfernt).
197
+
198
+
Drei natürliche Trigger-Punkte: vor einem Release, nach einem Security-Review, vor einem Onboarding.
199
+
97
200
== Phase 1-12: Der Standard-Workflow
98
201
99
202
Sobald Use Cases und Basis-Tests für den Bounded Context vorhanden sind, greift der normale Workflow.
@@ -142,17 +245,29 @@ Stabiler Code, den niemand anfasst, braucht keine Specs.
142
245
|`Analyze the codebase in [path]. Identify bounded contexts using DDD. List name, responsibility, entities, interfaces.`
143
246
|link:#/anchor/domain-driven-design[DDD]
144
247
145
-
|Reverse-Engineering
146
-
|`Read the code in [path]. Extract existing behavior as Use Cases with Trigger, Main Flow, Alternative Flows, Postconditions, Business Rules.`
248
+
|Theory Recovery (Phase 1)
249
+
|`You have access to [bounded context path]. No documentation exists. Build a Question Tree by recursively refining 5 questions: Problem/Users, Specification, Architecture, Quality Goals, Risks. Each leaf: [ANSWERED] with code evidence or [OPEN] with Category and Ask role.`
|Ab hier dem link:#/spec-driven-development[Standard-Workflow] ab Schritt 3 (PRD) oder Schritt 8 (Implementierung) folgen, je nachdem ob neue Features oder Bugs bearbeitet werden.
155
266
|{empty}--
267
+
268
+
|Reconciliation
269
+
|`Compare existing spec in [path] against current code. Report: NEW (in code, not in spec), CHANGED (diverged), DEAD (in spec, not in code). Do not modify existing files.`
270
+
|{empty}--
156
271
|===
157
272
158
273
== Wann dieser Ansatz nicht passt
@@ -168,3 +283,6 @@ Wenn das System nicht gebaut oder gestartet werden kann, liegt ein anderes Probl
168
283
* Simon Martinelli, https://unifiedprocess.ai/[AI Unified Process] -- der Bounded-Context-Ansatz für Spec-Driven Development in bestehenden Systemen.
169
284
* Eric Evans, https://www.domainlanguage.com/ddd/[Domain-Driven Design] -- das grundlegende Werk zu Bounded Contexts und strategischem Design.
170
285
* Michael Feathers, _Working Effectively with Legacy Code_ -- Techniken zum Aufbau von Testabdeckung in Systemen ohne Tests.
286
+
* Peter Naur, "Programming as Theory Building" (1985) -- argumentiert, dass Programmieren der Aufbau eines mentalen Modells ("Theorie") ist, das sich nicht vollständig in Dokumentation einfangen lässt. Socratic Code-Theory Recovery prüft diese Behauptung im Kontext von LLM-generiertem Code.
287
+
* link:#/brownfield-experiment-report[Brownfield Experiment Report] -- kontrolliertes Experiment: Dokumentation aus einem Greenfield-Projekt löschen, aus Code regenerieren, vergleichen. Vollständige Methodik und Befunde.
288
+
* link:#/brownfield-fair-comparison[Fair Comparison Report] -- drei Ansätze (Direct, Socratic, Two-Phase) mit identischen Team-Antworten. Misst den strukturellen Wert des Question Tree.
0 commit comments