Files
Pit Friedrich ed399cec6c chore: harden gitea autofix workflow, ignore dev.bundle
fix-issue/next-issue had unresolved placeholders (<dein Testkommando>,
<owner>/<repo>) and no explicit branch-creation step, so a run that
skipped the CLAUDE.md convention could commit straight to main. Adds a
CI-gate before setting ai-review (actions_run_read against the
existing .gitea/workflows/ci.yml) instead of trusting self-reported
test results, plus a /work-queue command to chain next-issue -> fix-issue.

dev.bundle is Vaadin-regenerated and was tracked+dirty, so every
autofix commit would have swept in unrelated binary diffs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0114SVTvBYjLBt3TTxhzJttd
2026-07-28 22:50:49 +02:00

55 lines
3.0 KiB
Markdown

---
description: Behebt ein einzelnes Gitea-Issue Ende-zu-Ende.
argument-hint: <issue-nummer>
allowed-tools: >
Bash, Edit, Read, Write, Grep, Glob,
mcp__gitea__issue_read, mcp__gitea__issue_write,
mcp__gitea__label_read,
mcp__gitea__pull_request_write, mcp__gitea__pull_request_read,
mcp__gitea__actions_run_read
model: opus
---
Bearbeite Gitea-Issue #$1 im aktuellen Repo. Schritt für Schritt:
**Label-Regeln (wichtig):** Die Gitea-Label-API arbeitet mit numerischen
Label-IDs, nicht mit Namen. Hole daher ZUERST einmalig die Label-Liste über
`label_read` (`method: list_repo_labels`) und merke dir die Zuordnung
Name → ID für die gesamte Bearbeitung. Verwende ausschließlich `add_labels`
(mit `labels: [<id>]`) und `remove_label` (mit `label_id: <id>`).
Niemals `replace_labels` oder `clear_labels` benutzen — das löscht alle
übrigen Labels des Issues (z.B. `prio/*`).
0. Vorbedingungen: Wenn Issue #$1 bereits `ai-wip` oder `ai-blocked` trägt,
abbrechen (kein Doppelstart). Prüfe `git status --porcelain` — ist der
Baum nicht sauber, abbrechen statt fremde Änderungen mitzucommitten.
1. Lies Issue #$1 (Titel, Beschreibung, Kommentare) über `issue_read`.
Notiere die aktuell gesetzten Labels, damit du sie nicht verlierst.
2. Hole die Label-Liste via `label_read`. Setze Label `ai-wip`
(`add_labels`), entferne `ai-ready` (`remove_label`).
3. Analysiere das Repo und finde die Ursache. Wenn der Scope zu groß/unklar
ist (siehe CLAUDE.md), brich ab: kommentiere das Issue mit einer kurzen
Begründung, setze `ai-blocked`, entferne `ai-wip`, und beende ohne
Codeänderung.
4. Lege den Branch an: `git checkout main && git pull --ff-only`, dann
`git checkout -b ai/issue-$1-<kurz-slug>` (Slug aus dem Issue-Titel,
kleingeschrieben, Bindestriche statt Leerzeichen).
5. Implementiere den Fix. Halte den Diff minimal und fokussiert.
6. Führe die Tests aus (`./mvnw test`). Bei Rot: bis zu 2x nachbessern.
Wenn danach immer noch rot → `ai-blocked`, `ai-wip` entfernen, Issue
kommentieren, abbrechen. Hinweis: `e2e/*PlaywrightTest` überspringt sich
selbst per JUnit-Assumption, wenn der Browser-Download fehlschlägt —
übersprungen zählt nicht als rot und ist kein Abbruchgrund.
7. Commit mit Message: `fix: <kurze Beschreibung> (#$1)`.
8. Push den Branch zum Remote.
9. Öffne via `pull_request_write` einen PR gegen `main`. Die
PR-Beschreibung MUSS `Closes #$1` enthalten.
10. Warte den CI-Lauf des PR-Branches ab (`actions_run_read`, PR läuft
automatisch gegen `.gitea/workflows/ci.yml`).
- Grün: kommentiere am Issue mit dem PR-Link, setze Label `ai-review`
(`add_labels`), entferne `ai-wip` (`remove_label`).
- Rot: setze `ai-blocked`, entferne `ai-wip`, kommentiere das Issue mit
einem kurzen Auszug aus dem CI-Log. Kein `ai-review`.
Wenn du in einem Schritt `ai-blocked` setzt, entferne ebenfalls `ai-wip`.
Existiert ein benötigtes Label nicht im Repo, kommentiere das am Issue statt
zu raten — erfinde keine Label-IDs.