diff --git a/README.md b/README.md index b365111..bd3d542 100644 --- a/README.md +++ b/README.md @@ -388,7 +388,7 @@ Chat-Turn an die richtigen Patterns. ### Skill-Regeln (seed_rules) -`aria-brain/seed_rules.py` enthaelt 17 `type=rule, pinned=true, +`aria-brain/seed_rules.py` enthaelt 18 `type=rule, pinned=true, source=seed`-Memories, die bei jedem Brain-Start idempotent in die Vector-DB geschrieben werden (`migration_key`-basiert). Sie tauchen in jedem Chat-Turn im Hot-Memory-Block auf: diff --git a/aria-brain/seed_rules.py b/aria-brain/seed_rules.py index ad5097c..8f855ab 100644 --- a/aria-brain/seed_rules.py +++ b/aria-brain/seed_rules.py @@ -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",