feat: split gitea-issue-resolver into 9 specialized agent skills + orchestrator

- gitea-analyse-architektur (Phase 1)
- gitea-implementierung (Phase 2)
- gitea-code-review (Phase 3)
- gitea-test-qa (Phase 4)
- gitea-fix-refactoring (Phase 5, on demand)
- gitea-merge-release (Phase 6)
- gitea-deployment (Phase 7)
- gitea-abnahme-validierung (Phase 8)
- gitea-dokumentation-closing (Phase 9)
- gitea-issue-resolver updated as pipeline orchestrator
- Only issues tagged KI + ReadyForDev are processed
This commit is contained in:
OpenClaw
2026-05-10 20:18:24 +00:00
parent aa10d148ec
commit db82c851b5
13 changed files with 1100 additions and 28 deletions

88
memory/2026-05-10-1853.md Normal file
View File

@@ -0,0 +1,88 @@
# Session: 2026-05-10 18:53:14 UTC
- **Session Key**: agent:main:telegram:direct:2138015302
- **Session ID**: 4e7ef9bc-9734-42f9-9f23-3150718f83e8
- **Source**: telegram
## Conversation Summary
assistant: Ein offenes Issue gefunden:
**Repo:** `greggy/landingpage-haus-schleusingen`
**#2 Korrigiere die Flächenangaben**
> Auf der Seite findest du die Flächen aller Zimmer. Die Summen stimmen nicht überall. Korrigiere diese.
Soll ich das angehen? Ich klone dann das Repo, prüfe die Flächenangaben anhand der Notar-Belege aus MEMORY.md und fixe sie.
user: ja
assistant: Jetzt prüfe ich die Flächen gegen die Notar-Belege aus MEMORY.md:
assistant: Let me check the areas systematically. From MEMORY.md (Notarvertrag):
**EG (Wohnfläche):** Flur 20,1 + WC 0,8 + Abstellraum 1: 9,9 + Abstellraum 2: 7,8 = **38,6 m²**
**EG (Nutzfläche):** Garage/Partykeller 42,6 + Heizungskeller 18,3 = **60,9 m²**
**1. OG (Wohnfläche):** Flur 20,1 + Wohnzimmer 42,6 + Gästezimmer 11,5 + Bad 9,8 + Küche 18,4 + Schlafzimmer 18 = **120,4 m²**
**2. OG (Wohnfläche):** Flur 13,9 + Spielzimmer 6,3 + Ankleide 1,4 + Kinderzimmer 1: 21,7 + Kinderzimmer 2: 15,7 + Dachterrasse 9 (25% v. 35,8) = **68,0 m²**
**Dachboden (Nutzfläche):** unten 52 + mitte 31 + oben 11 = **94 m²** (but HTML says 52 m²)
Now let me check what the HTML shows:
**EG in HTML (line 182):** Summe 99,4 m² — rooms: 20,1 + 0,8 + 42,6 + 9,9 + 7,8 + 18,3 = 99,5 → should be 99,5 (mixed Wohn+Nutz)
Wait — the EG mixes Wohnfläche and Nutzfläche. Let me re-read the HTML structure.
assistant: Jetzt hab ich alle Daten. Hier die Analyse:
**EG:** 20,1 + 0,8 + 42,6 + 9,9 + 7,8 + 18,3 = **99,5** → HTML sagt **99,4**
**1. OG:** Laut Notar: Wohnzimmer **42,6** m², aber HTML sagt **24,7** m². Summe laut HTML: 20,1 + 24,7 + 11,5 + 9,8 + 18,4 + 18,0 = **102,5** → HTML sagt **100,3**
- Laut Notar wäre die 1.OG-Summe: 20,1 + 42,6 + 11,5 + 9,8 + 18,4 + 18,0 = **120,4**
**2. OG:** 13,9 + 21,7 + 15,7 + 6,3 + 1,4 + 35,8 = **94,8** → HTML sagt **68**
- Laut Notar: Dachterrasse wird nur zu 25% gezählt = 9 m², also: 13,9 + 21,7 + 15,7 + 6,3 + 1,4 + 9 = **68,0** ✓ (Summe stimmt, aber die Dachterrasse zeigt 35,8 statt 9)
**Dachboden:** Laut Notar: 52 + 31 + 11 = **94 m²** → HTML sagt **52 m²**
assistant: **Gesamt-Wohnfläche laut Notar:** EG (38,6 Wohn) + 1.OG (120,4) + 2.OG (68,0) = **227,0 m²**
Also die 227 m² Gesamt stimmen! Aber die Einzelaufteilung hat Fehler. Lass mich die Korrekturen zusammenfassen und anwenden:
**Korrekturen:**
1. **EG:** 99,4 → **99,5** (Summe der Einzelräume)
2. **1. OG:** Wohnzimmer 24,7 → **42,6**, Summe 100,3 → **120,4**
3. **2. OG:** Dachterrasse 35,8 → **9** (25% von 35,8), Einzel-Chip sollte "(25% von 35,8 m²)" oder ähnlich zeigen, Summe 68 bleibt ✓
4. **Dachboden:** Nur 52 → **94 m²** (52+31+11), braucht 3 Einträge statt einem
Warte beim 2.OG: wenn die Dachterrasse als 9 m² geändert wird, stimmt die Chip-Anzeige nicht mehr mit dem sichtbaren "35,8 m²" überein. Und beim 1.OG Wohnzimmer: 24,7 vs 42,6 das ist ein großer Unterschied. Das könnte auch am Grundriss-Bild liegen. Mal überlegen ob das Notar-Dokument die korrekte Quelle ist.
Laut MEMORY.md sind die Notar-Daten die Quelle der Wahrheit. Ich korrigiere jetzt:
assistant: Jetzt noch die Info-Bereiche oben und die Galerie prüfen:
assistant: Noch mehr Stellen mit 24,7 und 113:
assistant: Warte woher kommt die 113 m²? Laut Notar: Nutzfläche gesamt = 196,5 m², Wohnfläche gesamt = 184,4 m². Lass mich den Kontext prüfen:
assistant: Die 113 m² Nutzfläche: laut Notar EG Nutzfläche (60,9) + Dachboden Nutzfläche (94) = 154,9 m². Oder ist die 113 nur für EG? EG Nutz = 42,6 + 18,3 = 60,9. Das passt auch nicht zu 113.
Vielleicht war das ursprünglich EG (60,9) + Dachboden (52) = 112,9 ≈ 113. Mit dem korrigierten Dachboden (94): 60,9 + 94 = **154,9 m²**.
assistant: Jetzt Branch erstellen und committen:
assistant: Fertig! 🐾 Branch ist gepusht. Hier die Zusammenfassung:
**Issue #2 Korrigiere die Flächenangaben**
| Bereich | Vorher | Nachher (laut Notarvertrag) |
|---------|--------|-----|
| EG | 99,4 m² | 99,5 m² |
| 1. OG Wohnzimmer | 24,7 m² | 42,6 m² |
| 1. OG Gesamt | 100,3 m² | 120,4 m² |
| 2. OG Dachterrasse | 35,8 m² | 9,0 m² (25% von 35,8) |
| Dachboden | 52 m² | 94 m² (52+31+11) |
| Nutzfläche gesamt | 113 m² | 154,9 m² |
Branch: `feature/issue-2-korrigiere-flaechenangaben`
PR erstellen: https://git.home.kies-media.de/greggy/landingpage-haus-schleusingen/pulls/new/feature/issue-2-korrigiere-flaechenangaben
Du kannst mergen und das Issue schließen wenn alles passt.
user: ergänze den skill:
- nachdem die entwicklung abgeschlossen ist, lege einen pull request an
assistant: Und gleich den PR für das aktuelle Issue nachholen:
assistant: Skill ist aktualisiert und der PR existiert bereits (wurde durch den Push automatisch erstellt von Gitea):
👉 https://git.home.kies-media.de/greggy/landingpage-haus-schleusingen/pulls/3
Ab jetzt läuft der Workflow automatisch: Issue finden → Branch → Fix → Commit → Push → PR erstellen → dich informieren. 🐾

57
memory/2026-05-10-2004.md Normal file
View File

@@ -0,0 +1,57 @@
# Session: 2026-05-10 20:04:06 UTC
- **Session Key**: agent:main:telegram:direct:2138015302
- **Session ID**: 126e6bf8-284a-4832-8a68-3e517248a34d
- **Source**: telegram
## Conversation Summary
assistant: Läuft... warte auf die KI:
assistant: Läuft jetzt 4.7 Sekunden (statt 100ms)! Die KI-Node hat funktioniert, aber "KI Antwort parsen" crasht — `choices[0]` ist undefined. Das liegt daran dass die KI-Node jetzt ein Code-Node ist und die AI-Antwort in `aiResponse` gespeichert hat. Der Parse-Node erwartet aber `$input.first().json.choices`. Fix:
assistant: Kein Error! Aber "No item to return" — Daten kommen nicht durch. Prüfe:
assistant: **Alle Nodes bis KI Antwort parsen sind erfolgreich!** 🎉 Aber danach kommt nichts mehr. "Dateien committen" wird nicht ausgeführt. Das liegt daran dass "KI Antwort parsen" für **2 Issues** Files ausgibt, aber die nachfolgenden HTTP-Request Nodes für PR/Kommentar erwarten nur 1 Item pro Issue.
Die Pipeline bricht ab weil "Dateien committen" ausgeht aber kein Output zum nächsten Node kommt. Prüfe ob Dateien committed wurden:
assistant: Es gibt `feature/issue-` ohne Nummer — das kommt vom "Keine Issues" Dummy-Item. Und die Dateien wurden nicht committed. Der "Dateien committen" Code-Node ist nicht gelaufen.
Problem: Nach "KI Antwort parsen" kommt nichts weil die `responseMode: "lastNode"` den Workflow beendet sobald der letzte verbundene Node fertig ist. Der letzte verbundene Node ist "KI Label setzen" aber "Dateien committen" hat Items die weitergehen sollen.
Eigentlich sollte es fließen: KI Antwort parsen → Dateien committen → Pull Request erstellen → Issue kommentieren → KI Label setzen. Lass mich prüfen ob die Verbindungen stimmen:
assistant: Verbindungen stimmen. Aber "Dateien committen" lief nicht. Der Code-Node braucht `$input.all()` — vielleicht gibt "KI Antwort parsen" ein leeres Array zurück?
Das Problem: **2 Issues (6 und 8) werden verarbeitet**, die KI gibt für jedes Files zurück, "KI Antwort parsen" gibt alle Files als Items zurück. "Dateien committen" müsste die alle verarbeiten.
Eigentlich: Execution hat `status: success` und 7 Nodes liefen. "Dateien committen" ist nicht in der Liste. Das heißt der Workflow **ist durch** ohne Error, aber "Dateien committen" wurde einfach nicht getriggert.
Ich vermute das Problem ist dass "KI Antwort parsen" `0` Items zurückgibt (leerer Array) weil die KI-Antwort leer ist (GLM-5.1 Reasoning). Die `responseMode: lastNode` beendet dann.
Lass mich den Parse-Output checken indem ich die Execution-Daten genauer anschaue:
assistant: Da ist das Problem! Der "Issues aufbereiten" Code gibt nur **1 Item** zurück (das Dummy "Keine Issues" mit issueNumber 0) statt der echten Issues. Die Gitea API gibt ein Array zurück, aber `$input.first().json` ist das ganze Array, und der Code prüft `Array.isArray(issues)` — das müsste stimmen...
Warte — "Issues laden" hat **2 items**. Das heißt n8n spaltet das Array automatisch auf! Jedes Item ist ein einzelnes Issue. `$input.first().json` ist dann nur das erste Issue, kein Array. Daran scheitert die `Array.isArray` Prüfung nicht, aber der Code-Node wird pro Item aufgerufen.
Fix: Der Code-Node muss alle Items nehmen, nicht nur das erste:
assistant: Syntax-Fehler im "Issues aufbereiten" Code! Die Backtick-Escapes haben sich zerschossen. Fixe es ordentlich:
assistant: Diesmal dauert es länger weil 2 Issues verarbeitet werden (2x KI-Call):
assistant: 🎉🎉🎉 **Fast komplett durch!** Alle Nodes bis "Issue kommentieren" laufen erfolgreich! Dauer: 62.7 Sekunden.
Das Problem: "Issue kommentieren" benutzt die falsche URL-Expression — `$json.issueNumber` kommt nicht mehr an weil der PR-Node die PR-Daten übergibt. Fix:
assistant: 504 Timeout vom n8n-Proxy. Workflow läuft zu lange. Prüfe was passiert ist:
assistant: Das ist noch die alte Execution 4636! Der neue Workflow-Lauf ist noch am Laufen (oder timed out). Prüfe ob Issue #11 bearbeitet wurde:
assistant: **Es funktioniert! 🎉🎉🎉**
Issue #11 wurde gelöst — **PR #13 erstellt** (und #12 ist ein Duplikat vom vorherigen Lauf). Auch Issue #6 und #8 wurden vorher bearbeitet (PR #10 und #9).
Der 504 war nur der Webhook-Timeout weil die Antwort zu lange gedauert hat. Der Workflow läuft asynchron weiter.
Ergebnis:
- ✅ Issues geladen
- ✅ Branch erstellt
- ✅ KI (z.ai GLM-5.1) löst Issue
- ✅ Dateien committet
- ✅ Pull Request erstellt
- ✅ Issue kommentiert + KI-Label gesetzt
Workflow ist **aktiv** und bereit 🐾
user: kannst du n8n updaten?
assistant: Kein direkter SSH-Zugang. Läuft n8n auf dem TrueNAS (Docker/Podman) oder irgendwo anders? Wie kommt man da dran?

View File

@@ -2609,3 +2609,34 @@ ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set
ERROR: AGENTMAIL_API_KEY not set