fix(brain): 18. seed_rule — Side-Effect-Tools nicht blind retry'en
Beobachtung 30.05.2026 02:22: Stefan bat 'vorheriges lied'. ARIA hat POST /previous gemacht — Spotify gab 204 No Content zurueck (Erfolgs- Antwort ohne Body), aber der alte Skill-Code warf JSON-Parse-Error weil kein Body zum Parsen. ARIA interpretierte das als 'Skill kaputt', patchte ihn UND fuehrte previous nochmal aus. Folge: Stefan landete ZWEI Lieder zurueck statt eins. Aergerlich weil unerwartete Zustandsaenderung. Neue Regel adressiert das: - Side-Effect-Tools (POST/PUT/DELETE, next/previous/play/pause, send- message etc.) sind NICHT idempotent — Retry verdoppelt den Effekt. - Bei unklarem Result IMMER zuerst State pruefen (currently-playing, list-Endpoint etc.), dann beurteilen ob Wiederholung noetig. - HTTP 204 No Content ist KEIN Fehler bei POST/PUT — typische Spotify- Antwort. Skill darf 204 NICHT als Parse-Error werten. - GET-Calls / Search sind retry-safe, hier keine Sorge. ARIAs zweiter Skill-Patch ist uebrigens technisch korrekt (ARG_- Konvention zurueck, 204 handled, strukturierte Ausgabe fuer currently-playing). Nur das doppelte Side-Effect war das Problem. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -330,6 +330,43 @@ SEED_RULES: List[dict] = [
|
||||
"Beim ersten Versuch direkt XML-Tag ergibt 3-5s statt 30s+."
|
||||
),
|
||||
},
|
||||
{
|
||||
"migration_key": "seed/skill-rule/no-blind-retry-side-effects",
|
||||
"type": "rule",
|
||||
"title": "Skill-Regel: Side-Effect-Tools NIEMALS blind retry'en",
|
||||
"category": "skills",
|
||||
"content": (
|
||||
"Wenn ein Tool eine ZUSTANDS-Aenderung macht (POST, PUT, DELETE, "
|
||||
"next/previous/play/pause, send-message, transfer-funds, "
|
||||
"create-trigger, …) und das Result unklar ist (leer, "
|
||||
"merkwuerdig, scheinbar fehlerhaft): NIEMALS blind nochmal "
|
||||
"ausfuehren. Side-Effects sind nicht idempotent — zweimal "
|
||||
"POST /previous = zweimal zurueck, nicht einmal.\n"
|
||||
"\n"
|
||||
"Richtiger Reflex:\n"
|
||||
" 1. State pruefen (currently-playing fuer Spotify, GET fuer "
|
||||
"REST, list-Endpoint allgemein)\n"
|
||||
" 2. Vergleichen: ist die gewuenschte Aenderung schon "
|
||||
"passiert?\n"
|
||||
" 3. WENN ja → Stefan ehrlich sagen 'lief schon, hier der "
|
||||
"neue Zustand'\n"
|
||||
" 4. WENN nein → erst dann Aktion wiederholen\n"
|
||||
"\n"
|
||||
"Bei GET-Calls / List-Endpoints / Search ist Retry hingegen ok "
|
||||
"— die haben keine Side-Effects.\n"
|
||||
"\n"
|
||||
"HTTP 204 No Content ist KEIN Fehler. Bei Spotify POST/PUT "
|
||||
"(next/previous/play/pause/volume/seek) ist 204 die normale "
|
||||
"Erfolgsantwort. Wenn dein Skill bei 204 einen Parse-Error "
|
||||
"wirft: skill_update mit `if status == 204: print('OK')` "
|
||||
"VOR dem Retry, nicht erst die Aktion nochmal auslоsen.\n"
|
||||
"\n"
|
||||
"Antipattern (30.05.2026): ARIA hat POST /previous einmal "
|
||||
"gemacht (Spotify 204 OK → Skill-Parse-Error), dachte 'Skill "
|
||||
"kaputt', patchte ihn UND fuehrte das previous nochmal aus. "
|
||||
"Folge: Stefan landete zwei Lieder weiter hinten als gewollt."
|
||||
),
|
||||
},
|
||||
{
|
||||
"migration_key": "seed/skill-rule/arg-env-convention",
|
||||
"type": "rule",
|
||||
|
||||
Reference in New Issue
Block a user