|
| 1 | +# KI-Softwareentwicklung mit GitHub Issues: vom Anforderungsgespräch zur fertigen macOS-App |
| 2 | + |
| 3 | +Dieses Tutorial zeigt einen vollständigen Spec-getriebenen Entwicklungszyklus: Eine grobe Idee wird mit der KI geklärt, als Spezifikation festgehalten, in priorisierte GitHub Issues mit Abhängigkeiten zerlegt und anschließend implementiert, getestet und geprüft. |
| 4 | + |
| 5 | +::: info Was ist anders als im vorherigen Kapitel? |
| 6 | + |
| 7 | +[Vom Vibe Coding zum Spec Coding](/de-de/stage-3/core-skills/spec-coding/) erklärt, warum Spezifikationen für die KI-Entwicklung zentral werden. Dieses Kapitel ist die praktische Fortsetzung: Ein echtes öffentliches Repository zeigt, wie aus einem Spec Issues, Commits, Tests und ein fertiges Produkt werden. |
| 8 | + |
| 9 | +::: |
| 10 | + |
| 11 | +Der Ausgangspunkt war ein einziger Satz: |
| 12 | + |
| 13 | +> Ich möchte ein CRM für macOS entwickeln, das importierte Kontakte verwaltet und mir hilft, meine Beziehungen zu ordnen. Zunächst können wir Beispieldaten verwenden. |
| 14 | +
|
| 15 | +Das Ergebnis ist **Relationship Compass**, eine native macOS-App zum Suchen und Filtern von Kontakten, Bearbeiten von Beziehungsprofilen, Importieren von CSV-Dateien, Erfassen von Interaktionen und Berechnen des nächsten Kontakttermins. |
| 16 | + |
| 17 | + |
| 18 | + |
| 19 | +Das [öffentliche Beispiel-Repository](https://github.com/sanbuphy/relationship-compass-macos) enthält ausschließlich fiktive Daten sowie Spec, Issues, Commit-Verlauf, Quellcode und Tests. |
| 20 | + |
| 21 | +## 1. Was bedeutet Spec-getriebene Entwicklung? |
| 22 | + |
| 23 | +Ein typischer KI-Coding-Ablauf sieht so aus: |
| 24 | + |
| 25 | +```text |
| 26 | +Idee beschreiben → KI schreibt Code → Fehler entdecken → Anweisung ergänzen → erneut ändern |
| 27 | +``` |
| 28 | + |
| 29 | +Für eine kleine Seite kann das genügen. Mit wachsendem Projekt gehen frühere Anforderungen im Chat verloren, der Fortschritt wird schwer nachvollziehbar und eine Funktion kann laufen, ohne die ursprüngliche Absicht zu erfüllen. |
| 30 | + |
| 31 | +Matt Pococks Skills geben der KI einen wiederholbaren Arbeitsablauf. Ein Skill definiert, was geklärt wird, welches Artefakt entsteht und wann eine Bestätigung erforderlich ist – nicht nur, welcher Code geschrieben werden soll. |
| 32 | + |
| 33 | +| Umsetzung direkt aus dem Chat | Spec-getriebene Umsetzung | |
| 34 | +| --- | --- | |
| 35 | +| Der aktuelle Chat ist die Hauptquelle | Ein versionierter Spec ist die verbindliche Quelle | |
| 36 | +| Anforderungen werden spontan ergänzt | Spec und Aufgaben werden zuerst aktualisiert | |
| 37 | +| Fortschritt steht in KI-Zusammenfassungen | Fortschritt steht in Issues und Commits | |
| 38 | +| „Läuft“ gilt als fertig | Jedes Abnahmekriterium wird geprüft | |
| 39 | + |
| 40 | +### 1.1 Die drei Rollen von GitHub |
| 41 | + |
| 42 | +1. **Projektarchiv** für Spec, Begriffe und Architekturentscheidungen. |
| 43 | +2. **Aufgabenboard** für Issues, Prioritäten und Abhängigkeiten. |
| 44 | +3. **Fertigstellungsnachweis** durch Commits, Testergebnisse und geschlossene Issues. |
| 45 | + |
| 46 | +| GitHub-Artefakt | Bedeutung | Beispiel | |
| 47 | +| --- | --- | --- | |
| 48 | +| Spec | Was die fertige Software leisten muss | `specs/relationship-compass-mvp.md` | |
| 49 | +| Issue | Eine unabhängig abschließbare Aufgabe | `#2 Browse sample Contacts` | |
| 50 | +| Abhängigkeit | Was vorher fertig sein muss | `#3` wird durch `#2` blockiert | |
| 51 | +| Commit | Änderung eines Umsetzungsschritts | `feat: browse sample contacts` | |
| 52 | +| Tests | Nachweis des erwarteten Verhaltens | `swift test` | |
| 53 | +| ADR | Grund für eine wichtige Technikentscheidung | `docs/adr/0002-native-swiftui-macos.md` | |
| 54 | + |
| 55 | +```mermaid |
| 56 | +flowchart LR |
| 57 | + A["Bestätigte Entscheidungen"] --> B["Spec im Repository"] |
| 58 | + B --> C["Übergeordnetes Issue #1"] |
| 59 | + C --> D["Umsetzungs-Issues #2–#6"] |
| 60 | + D --> E["Priorität + Abhängigkeiten"] |
| 61 | + E --> F["Commits + Tests"] |
| 62 | + F --> G["Abschlussprüfung"] |
| 63 | + G --> H["Übergeordnetes Issue schließen"] |
| 64 | +``` |
| 65 | + |
| 66 | +### 1.2 Der Hauptablauf |
| 67 | + |
| 68 | +```text |
| 69 | +grill-with-docs → to-spec → to-tickets → implement → code-review |
| 70 | +``` |
| 71 | + |
| 72 | +- `grill-with-docs` klärt Produktumfang und technische Grenzen. |
| 73 | +- `to-spec` schreibt die Vereinbarung als formale Spezifikation. |
| 74 | +- `to-tickets` erzeugt priorisierte Issues mit Abhängigkeiten. |
| 75 | +- `implement` bearbeitet jeweils das nächste freie Issue. |
| 76 | +- `code-review` prüft Codegesundheit und Anforderungsabdeckung getrennt. |
| 77 | + |
| 78 | +## 2. Vorbereitung |
| 79 | + |
| 80 | +Benötigt werden ein GitHub-Konto, eine angemeldete GitHub CLI, Node.js 18 oder neuer und ein KI-Coding-Werkzeug, das Projekt-Skills lesen kann. Zum Ausführen der App braucht man außerdem einen Mac mit Xcode. |
| 81 | + |
| 82 | +```bash |
| 83 | +npx skills@latest add mattpocock/skills -y |
| 84 | +gh auth status |
| 85 | +gh repo create relationship-compass-macos \ |
| 86 | + --public \ |
| 87 | + --source . \ |
| 88 | + --remote origin \ |
| 89 | + --push |
| 90 | +``` |
| 91 | + |
| 92 | +Das Beispiel ist öffentlich, weil alle Kontakte fiktiv sind. Für echte Kontaktdaten muss `--private` verwendet und vor dem Push geprüft werden, ob Beispiele, Logs oder Git-Historie persönliche Daten enthalten. Die wichtigsten Labels sind `ready-for-agent`, `priority:P0/P1/P2` und `completed-by-agent`. |
| 93 | + |
| 94 | +## 3. Produkt und MVP-Grenzen |
| 95 | + |
| 96 | +Die erste Version bietet: |
| 97 | + |
| 98 | +- sechs feste Beispielkontakte; |
| 99 | +- Suche nach Name, Organisation, Rolle, E-Mail und Kreis; |
| 100 | +- kombinierte Filter nach Beziehungsstärke und Kreis; |
| 101 | +- Bearbeitung von Profil, Notizen und Kontaktintervall; |
| 102 | +- sicheren UTF-8-CSV-Import mit Validierung und Deduplizierung; |
| 103 | +- Interaktionsverlauf und Berechnung des nächsten Kontaktdatums; |
| 104 | +- lokale JSON-Speicherung und Wiederherstellung beim Start. |
| 105 | + |
| 106 | +Cloud-Synchronisierung, KI-Beziehungsbewertung, Konten, Backend und Zugriff auf macOS Kontakte gehören nicht zum MVP. |
| 107 | + |
| 108 | +## 4. Anforderungen mit `grill-with-docs` klären |
| 109 | + |
| 110 | +<div class="workflow-chat"> |
| 111 | + <div class="workflow-message workflow-message--user"> |
| 112 | + <div class="workflow-message__speaker">🙋 Du</div> |
| 113 | + <div class="workflow-message__command">/grill-with-docs</div> |
| 114 | + <p>Ich möchte ein CRM für macOS entwickeln, das importierte Kontakte verwaltet und mir hilft, meine Beziehungen zu ordnen. Zunächst genügen Beispieldaten.</p> |
| 115 | + </div> |
| 116 | + <div class="workflow-message workflow-message--agent"> |
| 117 | + <div class="workflow-message__speaker">✨ Agent</div> |
| 118 | + <p>Bevor wir Code schreiben, einigen wir uns auf Umfang und Nicht-Ziele der ersten Version, Datenspeicherung, Technik und Nachweis der Fertigstellung. Bei Entscheidungen erkläre ich die Unterschiede und gebe eine Empfehlung.</p> |
| 119 | + </div> |
| 120 | +</div> |
| 121 | + |
| 122 | +Das Gespräch legt natives SwiftUI für macOS 14+, lokales JSON, UTF-8 CSV, sechs Beispieldatensätze, keinen Netzwerkzugriff und keine Kontakte-Berechtigung fest. `CONTEXT.md` definiert `Contact`, `Interaction` und `Follow-up`; zwei ADRs dokumentieren Local-first-Daten und die Wahl von SwiftUI. |
| 123 | + |
| 124 | +::: info GitHub in dieser Phase |
| 125 | + |
| 126 | +Der bestätigte Kontext wird als `CONTEXT.md` und `docs/adr/*` committet. Umsetzungs-Issues werden noch nicht erstellt. |
| 127 | + |
| 128 | +::: |
| 129 | + |
| 130 | +## 5. Mit `to-spec` die Spezifikation schreiben |
| 131 | + |
| 132 | +<div class="workflow-chat"> |
| 133 | + <div class="workflow-message workflow-message--user"> |
| 134 | + <div class="workflow-message__speaker">🙋 Du</div> |
| 135 | + <div class="workflow-message__command">/to-spec</div> |
| 136 | + <p>Formuliere unsere bestätigte Diskussion als vollständigen Spec, speichere ihn im Repository und veröffentliche ihn als übergeordnetes GitHub Issue mit dem Label ready-for-agent.</p> |
| 137 | + </div> |
| 138 | +</div> |
| 139 | + |
| 140 | +[`specs/relationship-compass-mvp.md`](https://github.com/sanbuphy/relationship-compass-macos/blob/main/specs/relationship-compass-mvp.md) enthält Problem, MVP, 24 User Stories, technische Entscheidungen, Prüfstrategie und ausdrückliche Nicht-Ziele. [Issue #1](https://github.com/sanbuphy/relationship-compass-macos/issues/1) ist der sichtbare Projekteinstieg. |
| 141 | + |
| 142 | +Ein guter Spec beschreibt Verhalten statt Dateinamen. „Kontakte ohne bisherige Interaktion erscheinen ebenfalls in Follow-ups“ bleibt auch nach einer Umstrukturierung des Codes gültig. |
| 143 | + |
| 144 | +## 6. Mit `to-tickets` geordnete Issues erstellen |
| 145 | + |
| 146 | +<div class="workflow-chat"> |
| 147 | + <div class="workflow-message workflow-message--user"> |
| 148 | + <div class="workflow-message__speaker">🙋 Du</div> |
| 149 | + <div class="workflow-message__command">/to-tickets</div> |
| 150 | + <p>Zerlege den Spec in GitHub Issues. Jedes Ticket soll einen eigenständig vorführbaren vertikalen Funktionsausschnitt liefern und Priorität, Abnahmekriterien und Voraussetzungen nennen. Zeige mir Liste und Abhängigkeiten vor der Veröffentlichung.</p> |
| 151 | + </div> |
| 152 | +</div> |
| 153 | + |
| 154 | +| Issue | Priorität | Sichtbares Ergebnis | Blockiert durch | |
| 155 | +| --- | --- | --- | --- | |
| 156 | +| [#2 Browse sample Contacts](https://github.com/sanbuphy/relationship-compass-macos/issues/2) | P0 | Start, Beispiele, Suche, Details | – | |
| 157 | +| [#3 Import and persist](https://github.com/sanbuphy/relationship-compass-macos/issues/3) | P0 | CSV-Deduplizierung, JSON-Speicherung | #2 | |
| 158 | +| [#4 Organize Profiles](https://github.com/sanbuphy/relationship-compass-macos/issues/4) | P1 | Profil, Stärke, Kreise, Filter | #2 | |
| 159 | +| [#5 Interactions and Follow-ups](https://github.com/sanbuphy/relationship-compass-macos/issues/5) | P1 | Verlauf und Follow-ups | #4 | |
| 160 | +| [#6 Polish and verify](https://github.com/sanbuphy/relationship-compass-macos/issues/6) | P2 | Fehler, Doku, Paket, Gesamtprüfung | #3, #5 | |
| 161 | + |
| 162 | +Modelle, Store, UI und Tests werden nicht horizontal getrennt. Jeder **vertikale Ausschnitt** verbindet die nötigen Schichten, sodass nach jedem geschlossenen Issue ein neues Ergebnis vorführbar ist. |
| 163 | + |
| 164 | +## 7. Mit `implement` jeweils ein freies Issue umsetzen |
| 165 | + |
| 166 | +<div class="workflow-chat"> |
| 167 | + <div class="workflow-message workflow-message--user"> |
| 168 | + <div class="workflow-message__speaker">🙋 Du</div> |
| 169 | + <div class="workflow-message__command">/implement</div> |
| 170 | + <p>Implementiere alle ready-for-agent Issues nach Priorität und Abhängigkeit. Bearbeite jeweils nur ein unblocked Ticket, schreibe zuerst einen fehlschlagenden Verhaltenstest, führe Build und Tests aus und committe jedes Ticket separat.</p> |
| 171 | + </div> |
| 172 | +</div> |
| 173 | + |
| 174 | +Beim CSV-Ticket beweist zuerst ein fehlschlagender Test, dass derselbe Import nicht zu doppelten Kontakten führen darf. Nach der Implementierung stellt ein weiterer Test sicher, dass ein ungültiger Header bestehende Daten nicht beschädigt. |
| 175 | + |
| 176 | +```bash |
| 177 | +swift test --filter RelationshipStoreTests |
| 178 | +swift build |
| 179 | +swift test |
| 180 | +``` |
| 181 | + |
| 182 | +Am Ende bestehen alle 13 öffentlichen Verhaltenstests. |
| 183 | + |
| 184 | + |
| 185 | + |
| 186 | + |
| 187 | + |
| 188 | +Danach vermerkt der Agent Commit und Testergebnis im Issue, entfernt `ready-for-agent`, setzt `completed-by-agent` und schließt das Issue. |
| 189 | + |
| 190 | +## 8. Zwei Prüfungen mit `code-review` |
| 191 | + |
| 192 | +Die erste Prüfung betrachtet Benennung, Duplikate, übergroße Views, Kopplung und die Regeln aus `AGENTS.md`. Die zweite liest Spec und alle Issues erneut und vergleicht jedes erwartete Verhalten mit dem Ergebnis. |
| 193 | + |
| 194 | +Im Beispiel wurden doppelte CSV-Header, Deduplizierung von Kontakten ohne E-Mail, Filter der Follow-up-Liste, automatische Wiederherstellung beim Start und die Anzeige des nächsten Kontaktdatums als Lücken gefunden. Zuerst kamen Tests hinzu, dann die Korrekturen und anschließend beide Prüfungen erneut. |
| 195 | + |
| 196 | +Grüne Tests beweisen nur die darin beschriebenen Verhaltensweisen. Sie beweisen nicht automatisch, dass jeder Punkt des ursprünglichen Specs getestet wurde. |
| 197 | + |
| 198 | +## 9. Die fertige Anwendung |
| 199 | + |
| 200 | +| Lieferung | Ergebnis | |
| 201 | +| --- | --- | |
| 202 | +| GitHub-Planung | Ein übergeordnetes und fünf Umsetzungs-Issues, alle geschlossen | |
| 203 | +| Verlauf | Neun fokussierte Commits in Abhängigkeitsreihenfolge | |
| 204 | +| Automatische Prüfung | 13/13 Tests und vollständiger Build erfolgreich | |
| 205 | +| Abschlussprüfung | Codegesundheit und Spec-Abdeckung bestanden | |
| 206 | +| Laufbares Produkt | `Relationship Compass.app` kann erzeugt werden | |
| 207 | +| Datenschutz | Nur lokale Daten, kein Kontakte-Zugriff, kein Upload | |
| 208 | + |
| 209 | +### 9.1 Suche und kombinierte Filter |
| 210 | + |
| 211 | +Die Suche nach `Founder` lässt nur Maya Chen stehen; Beziehungsstärke und Kreis lassen sich kombinieren. |
| 212 | + |
| 213 | + |
| 214 | + |
| 215 | +### 9.2 Beziehungsprofil bearbeiten |
| 216 | + |
| 217 | +Organisation, Rolle, E-Mail, Beziehungsstärke, Kreise, Rhythmus und Notizen können bearbeitet werden. |
| 218 | + |
| 219 | + |
| 220 | + |
| 221 | +### 9.3 Interaktion und nächster Kontakt |
| 222 | + |
| 223 | +Aus einer Interaktion am 9. August 2026 und einem Rhythmus von 30 Tagen ergibt sich der 8. September 2026. |
| 224 | + |
| 225 | + |
| 226 | + |
| 227 | + |
| 228 | + |
| 229 | +```bash |
| 230 | +git clone https://github.com/sanbuphy/relationship-compass-macos.git |
| 231 | +cd relationship-compass-macos |
| 232 | +swift build |
| 233 | +swift test |
| 234 | +./scripts/package-app.sh |
| 235 | +open "dist/Relationship Compass.app" |
| 236 | +``` |
| 237 | + |
| 238 | +## 10. Kopierbarer Ablauf |
| 239 | + |
| 240 | +```text |
| 241 | +/grill-with-docs |
| 242 | +Kläre mit mir Umfang und Nicht-Ziele, Datenhaltung, Technik und Prüfung. Schreibe keinen Code vor meiner ausdrücklichen Bestätigung. |
| 243 | +
|
| 244 | +/to-spec |
| 245 | +Erstelle aus der Vereinbarung einen Spec mit Nutzerverhalten, Abnahmekriterien und Nicht-Zielen sowie ein übergeordnetes GitHub Issue. |
| 246 | +
|
| 247 | +/to-tickets |
| 248 | +Zerlege den Spec in vertikale Issues mit Priorität, Abschlusskriterien und Abhängigkeiten. |
| 249 | +
|
| 250 | +/implement |
| 251 | +Implementiere freie Issues einzeln nach Priorität mit TDD, Prüfung und separatem Commit. |
| 252 | +Prüfe anschließend Codegesundheit und Spec-Abdeckung und behebe alle Befunde. |
| 253 | +``` |
| 254 | + |
| 255 | +## 11. Wann kontinuierliche KI-Umsetzung passt |
| 256 | + |
| 257 | +Der Ablauf eignet sich für klar abgegrenzte MVPs, Websites, Apps und Backends mit beobachtbarem Verhalten und verlässlichen Test- oder Build-Befehlen. Er eignet sich nicht für stündlich wechselnde Anforderungen, nicht prüfbare Ergebnisse oder direkte Änderungen an Produktionsdaten. |
| 258 | + |
| 259 | +Menschen bestätigen weiterhin Umfang, Ticketabdeckung und Reihenfolge, Zahlungen, Deployments, Löschungen, Berechtigungen, Datenschutz sowie Oberfläche und Endprodukt. Der Mensch verantwortet Ziel, Grenzen und Abnahme; die KI führt die vereinbarte Arbeit zuverlässig aus. |
| 260 | + |
| 261 | +## Zusammenfassung |
| 262 | + |
| 263 | +```text |
| 264 | +Grobe Idee |
| 265 | + ↓ grill-with-docs |
| 266 | +Bestätigter Umfang, Begriffe und Technikentscheidungen |
| 267 | + ↓ to-spec |
| 268 | +Versionierte, prüfbare Anforderungen |
| 269 | + ↓ to-tickets |
| 270 | +Priorisierte GitHub Issues mit Abhängigkeiten |
| 271 | + ↓ implement |
| 272 | +Test, Umsetzung und Commit pro Ticket |
| 273 | + ↓ code-review |
| 274 | +Codegesundheit + Spec-Abdeckung |
| 275 | + ↓ |
| 276 | +Baubare und überprüfbare Software |
| 277 | +``` |
| 278 | + |
| 279 | +Nach dem Chat bleiben Spec, Issues, Abhängigkeiten, Commits und Testnachweise auf GitHub. Die nächste Sitzung setzt beim dokumentierten Projektzustand statt bei Vermutungen an. |
| 280 | + |
| 281 | +## Quellen |
| 282 | + |
| 283 | +- [Skills to Spec](https://www.aihero.dev/skills-to-spec) |
| 284 | +- [AI Skills for Real Engineers](https://www.aihero.dev/skills) |
| 285 | +- [Skills-v1.1-Änderungen](https://www.aihero.dev/skills/skills-changelog-v1-1-wayfinder-to-spec-to-tickets-grilling-improvements) |
| 286 | +- [OpenAI: Wiederholbare Abläufe als Skills speichern](https://learn.chatgpt.com/codex/use-cases/reusable-codex-skills) |
| 287 | +- [Öffentliches Relationship-Compass-Beispiel](https://github.com/sanbuphy/relationship-compass-macos) |
0 commit comments