Faden 5: Scope-Gate auf Kanban-Muster t_<hex> verschaerfen
Wichtige Korrektur vor dem Scharfschalten: Hermes setzt effective_task_id = task_id OR uuid4() (agent/turn_context.py:216) — Lucys interaktiver/Voice-Chat laeuft also mit einer NICHT-leeren UUID-Ersatz-task_id. Der urspruengliche "task_id nicht leer"-Check haette damit auch Lucy getroffen (Persona-/Latenz-Schaden). Fix: nur injizieren, wenn task_id dem echten Kanban-Muster t_<hex> entspricht; UUIDs (mit Bindestrichen, nie t_-Prefix) fallen auf No-op. Verifiziert: t_-ID -> injiziert, UUID/leer/non-t_ -> No-op. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -2,19 +2,25 @@
|
|||||||
# pre_llm_call-Hook (Faden 5, 13.07.2026): verdrahtet Box-Selbstwissen MECHANISCH in
|
# pre_llm_call-Hook (Faden 5, 13.07.2026): verdrahtet Box-Selbstwissen MECHANISCH in
|
||||||
# JEDEN Kanban-Worker — egal welches Profil (werkstatt, default=Lucys Persona als Worker,
|
# JEDEN Kanban-Worker — egal welches Profil (werkstatt, default=Lucys Persona als Worker,
|
||||||
# kuenftige betrieb-/Ops-Profile). Der Kontext wird ephemer pro Turn an die User-Message
|
# kuenftige betrieb-/Ops-Profile). Der Kontext wird ephemer pro Turn an die User-Message
|
||||||
# angehaengt (agent/turn_context.py), NUR wenn eine Kanban-task_id gesetzt ist. Lucys
|
# angehaengt (agent/turn_context.py), NUR wenn die task_id ein echtes Kanban-`t_<hex>`
|
||||||
# interaktiver/Voice-Chat hat KEINE task_id → sofortiger No-op, kein Persona- oder
|
# ist. Lucys interaktiver/Voice-Chat laeuft mit einer UUID-Ersatz-task_id (nicht `t_...`)
|
||||||
# Latenz-Eingriff. Loest Fallstrick #1 (Ops/Mess/Verify-Worker landen auf der am
|
# → sofortiger No-op, kein Persona- oder Latenz-Eingriff. Loest Fallstrick #1 (Ops/Mess/Verify-Worker landen auf der am
|
||||||
# schlechtesten geruesteten Persona und flailen, weil sie llama-swap :8080 nicht kennen).
|
# schlechtesten geruesteten Persona und flailen, weil sie llama-swap :8080 nicht kennen).
|
||||||
# Ausgabe {"context":"..."} = anhaengen; {} = durchlassen (No-op).
|
# Ausgabe {"context":"..."} = anhaengen; {} = durchlassen (No-op).
|
||||||
set -u
|
set -u
|
||||||
payload="$(cat -)"
|
payload="$(cat -)"
|
||||||
|
|
||||||
# Scope-Gate: nur echte Kanban-Worker (task_id gesetzt). Alles andere (Lucy-Chat, Voice,
|
# Scope-Gate: NUR echte Kanban-Worker. ACHTUNG (agent/turn_context.py:216):
|
||||||
# CLI, Telegram) faellt hier sofort raus — der Hook feuert zwar pro Turn, kostet aber nur
|
# Hermes setzt effective_task_id = task_id ODER — fuer Lucy-Chat/Voice/CLI/Telegram —
|
||||||
# ein jq und ist damit fuer den Voice-Pfad vernachlaessigbar.
|
# eine zufaellige UUID. Ein blosser "nicht leer"-Check wuerde also auch Lucy treffen
|
||||||
|
# (Persona-/Latenz-Schaden). Kanban-IDs sind IMMER `t_<hex>`, UUIDs enthalten Bindestriche
|
||||||
|
# und beginnen nie mit t_ → das Muster trennt sauber. Alles andere: sofortiger No-op
|
||||||
|
# (ein jq, im Voice-Pfad vernachlaessigbar).
|
||||||
task_id=$(printf %s "$payload" | jq -r '.extra.task_id // .task_id // ""' 2>/dev/null || echo "")
|
task_id=$(printf %s "$payload" | jq -r '.extra.task_id // .task_id // ""' 2>/dev/null || echo "")
|
||||||
case "$task_id" in ""|null) printf '{}'; exit 0 ;; esac
|
case "$task_id" in
|
||||||
|
t_[0-9a-f][0-9a-f][0-9a-f][0-9a-f]*) : ;; # Kanban-Worker → Orientierung anhaengen
|
||||||
|
*) printf '{}'; exit 0 ;; # Lucy / UUID / leer → No-op
|
||||||
|
esac
|
||||||
|
|
||||||
# Zeiger auf den vollen, naechtlich generierten Selbst-Steckbrief (nur wenn er existiert).
|
# Zeiger auf den vollen, naechtlich generierten Selbst-Steckbrief (nur wenn er existiert).
|
||||||
STECKBRIEF="$HOME/.hermes/state/selbst-steckbrief.md"
|
STECKBRIEF="$HOME/.hermes/state/selbst-steckbrief.md"
|
||||||
|
|||||||
Reference in New Issue
Block a user