Closes #25 ui/category/: - CategoryListViewModel: StateFlow-based ViewModel with add/delete dialog state management, backed by CategoryRepository - CategoryListScreen: Material 3 Scaffold with LazyColumn, FAB for adding, delete confirmation dialog with CASCADE warning ui/location/: - LocationListViewModel: same pattern for LocationRepository - LocationListScreen: same UI pattern for location management Tests: - CategoryListViewModelTest: 11 tests covering init, add, delete, dialog state, blank name rejection - LocationListViewModelTest: 11 tests (same coverage) Dependencies: - Added lifecycle-runtime-compose for collectAsStateWithLifecycle - Added kotlinx-coroutines-test for ViewModel unit tests
71 lines
2.9 KiB
Markdown
71 lines
2.9 KiB
Markdown
---
|
||
description: "Autopilot – Arbeitet alle offenen Tickets iterativ ab: ruft nextstep für jedes Ticket als Sub-Agent (Claude Opus 4.6) auf, committet nach jedem erfolgreichen Abschluss und stoppt wenn keine Tickets mehr vorhanden sind oder ein Fehler nicht behoben werden kann."
|
||
agent: agent
|
||
model: Claude Opus 4.6 (copilot)
|
||
tools: [read, edit, search, execute, agent, web, todo, browser, vscode]
|
||
---
|
||
|
||
# Autopilot
|
||
|
||
Führt das Ticket-Backlog vollautomatisch ab. Jeder Zyklus besteht aus drei Phasen:
|
||
|
||
1. Nächstes offenes Ticket ermitteln → kein Ticket: fertig
|
||
2. nextstep-Workflow als Sub-Agent (Claude Opus 4.6) ausführen
|
||
3. Bei Erfolg: committen → nächste Iteration
|
||
|
||
---
|
||
|
||
## Schritt 1 – Nächstes Ticket prüfen
|
||
|
||
```powershell
|
||
& ".github/skills/gh-tickets/next-ticket.ps1"
|
||
```
|
||
|
||
- **Kein Ticket zurückgegeben:** Ausgabe `✅ Autopilot abgeschlossen – keine offenen Tickets mehr.` → **Stopp.**
|
||
- **Ticket vorhanden:** Ticket-Nummer und Typ merken → weiter mit Schritt 2.
|
||
|
||
---
|
||
|
||
## Schritt 2 – nextstep als frischer Sub-Agent ausführen
|
||
|
||
Lies `.github/prompts/nextstep.prompt.md` vollständig.
|
||
|
||
> ⚠️ **Pflicht pro Iteration:** Für jedes Ticket muss ein **eigener, isolierter Sub-Agent** gestartet werden – kein Kontext aus einer vorherigen Iteration darf übernommen werden. Der Sub-Agent startet jedes Mal mit leerem Zustand.
|
||
|
||
Starte einen **neuen Sub-Agent** (frische Instanz, kein geteilter Kontext) mit:
|
||
|
||
- **Modell:** `Claude Opus 4.6 (copilot)`
|
||
- **Aufgabe:** Den vollständigen nextstep-Workflow für das ermittelte Ticket aus Schritt 1 ausführen (Inhalt von `nextstep.prompt.md` als Prompt, Issue-Nummer als Parameter übergeben)
|
||
|
||
Warte auf die Rückmeldung des Sub-Agents und werte sie aus:
|
||
|
||
- **Workflow erfolgreich abgeschlossen** (Issue geschlossen, kein offener Fehler) → Weiter mit Schritt 3.
|
||
- **Nicht behebbarer Fehler aufgetreten** → Ausgabe:
|
||
```
|
||
❌ Autopilot gestoppt – nicht behebbarer Fehler bei Issue #<N>.
|
||
Bitte manuell eingreifen.
|
||
```
|
||
→ **Stopp.**
|
||
|
||
---
|
||
|
||
## Schritt 3 – Commit
|
||
|
||
Lies `.github/skills/git/SKILL.md`.
|
||
|
||
1. `git status` – geänderte Dateien ermitteln.
|
||
2. Stage alle relevanten Änderungen mit `git add` (Build-Artefakte wie `build/`, `.gradle/` ausschließen).
|
||
3. Commit-Message im **Conventional Commits**-Format:
|
||
- Typ (`feat`, `fix`, `chore`, …) passend zum abgeschlossenen Ticket wählen
|
||
- Kurzbeschreibung ≤ 72 Zeichen, im Imperativ
|
||
- Body: Issue-Nummer referenzieren (`Closes #<N>`)
|
||
4. `git commit` ausführen.
|
||
5. Bestätigung ausgeben: Commit-Hash + Zusammenfassung.
|
||
|
||
---
|
||
|
||
## Schritt 4 – Nächste Iteration
|
||
|
||
Wiederhole den Ablauf ab **Schritt 1**.
|
||
|
||
> Jede Wiederholung von Schritt 2 muss zwingend einen **neuen, unabhängigen Sub-Agent-Aufruf** erzeugen – also einen separaten `runSubagent`-Call mit eigenem Kontext-Scope. Keinesfalls den Sub-Agent der vorherigen Iteration weiterverwenden oder dessen Kontext referenzieren.
|