From 4ea13afe60972f2101f095f420954404817bf639 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 03:00:59 +0200 Subject: [PATCH] =?UTF-8?q?fix(brain):=2019.=20seed=5Frule=20=E2=80=94=20v?= =?UTF-8?q?or=20skill=5Fupdate=20lesen,=20API-Errors=20zitieren=20statt=20?= =?UTF-8?q?raten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beobachtung 30.05.2026 02:51-02:53: zwei verkettete Antipatterns beim Spotify-Test. 1. ARIA bekam 403 vom /pause-Endpoint, vermutete 'der 204-Bug ist zurueck' und patchte den Skill — zweimal hintereinander. Der 204-Fix war aber laengst im Code (haette sie durch skill_get in 5s gesehen). Symptome != Diagnose. 2. Bei den 403s antwortete sie 'war schon pausiert, daher der 403' und 'schon aktiv, daher der 403'. Beides war geraten basierend auf is_playing-Check, nicht aus den Daten gelesen. 403 'Restriction violated' kann viele Ursachen haben (NO_ACTIVE_DEVICE, ALREADY_PAUSED, PREMIUM_REQUIRED, MARKET_RESTRICTED, ...) — die wahre steht als error.reason im JSON-Body. Sie hat das verschluckt und plausibel-aber-geraten geantwortet. Eine Regel deckt beide Patterns ab, generisch fuer alle Skills: - Vor jedem skill_update: erst skill_get lesen, dann beurteilen - Bei HTTP-Errors: Body / error.reason zitieren, nicht raten - Wenn der Skill die wahre Ursache verschluckt: skill_update mit besserer Error-Extraktion (NACH skill_get, nicht davor) Wirkt fuer alle aktuellen + zukuenftigen API-Skills. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 2 +- aria-brain/seed_rules.py | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8cfce77..a4b0b90 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 18 `type=rule, pinned=true, +`aria-brain/seed_rules.py` enthaelt 19 `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 416d06a..da950ed 100644 --- a/aria-brain/seed_rules.py +++ b/aria-brain/seed_rules.py @@ -477,6 +477,50 @@ SEED_RULES: List[dict] = [ "werden muss (was meistens der Fall ist)." ), }, + { + "migration_key": "seed/skill-rule/patch-before-diagnose", + "type": "rule", + "title": "Skill-Regel: vor skill_update erst skill_get lesen + API-Errors zitieren statt raten", + "category": "skills", + "content": ( + "Zwei Antipattern die zusammenhaengen — beide am 30.05.2026 " + "live beobachtet:\n" + "\n" + "**1. Vor jedem `skill_update`: ZUERST `skill_get` lesen.** " + "Frag Dich: ist das vermutete Problem wirklich noch im Code? " + "Symptome != Diagnose. Vorfall: Spotify-Skill gab 403, ARIA " + "vermutete 'der 204-Bug ist zurueck' und patchte den Skill — " + "zweimal hintereinander. Der 204-Fix war aber laengst drin. " + "Sie hatte das durch `skill_get` in 5 Sekunden klaeren koennen.\n" + "\n" + "Vor jedem skill_update also der Reflex:\n" + " - `skill_get('')` -> Code anschauen\n" + " - Symptome durchdenken: ist mein vermuteter Bug ueberhaupt " + "der echte? Oder ist der Fehler woanders (Spotify-API, " + "User-Kontext, Tool-Args)?\n" + " - Nur dann patchen wenn der Code-Befund das wirklich " + "rechtfertigt.\n" + "\n" + "**2. Bei HTTP-Errors aus API-Skills (4xx/5xx): die echte " + "Response-Body ZITIEREN, nicht die Bedeutung raten.** " + "Vorfall: Spotify gab 403 'Restriction violated'. ARIA " + "antwortete 'war schon pausiert, daher der 403' — das war " + "geraten, nicht aus den Daten gelesen. 403 'Restriction " + "violated' kann viele Sachen heissen:\n" + " - NO_ACTIVE_DEVICE (kein Spotify-Geraet ausgewaehlt)\n" + " - ALREADY_PAUSED / ALREADY_PLAYING\n" + " - PREMIUM_REQUIRED\n" + " - MARKET_RESTRICTED / DEVICE_NOT_CONTROLLABLE\n" + "Spotify gibt die wahre Ursache als `error.reason` im JSON-" + "Body zurueck. Lies sie aus, sag sie Stefan 1:1. Wenn die " + "Skill-Output das verschluckt: skill_update mit error.reason-" + "Extraktion (nach skill_get!), damit Du beim naechsten Mal " + "die echte Info hast.\n" + "\n" + "Plausibel-aber-geraten ist schlimmer als 'ich weiss es nicht' " + "— Stefan verlaesst sich auf Deine Antworten." + ), + }, { "migration_key": "seed/skill-rule/external-api-auth-strategy", "type": "rule",