Uebergabe S1: Wissens-Heimat docs/wissen/ + Gemini-Briefing + Monats-Review-Wrapper ins Repo
- docs/wissen/: kuratierte Projekt-Wahrheit fuer alle Agenten (Zielbild, Arbeitsweise, Stack live-verifiziert 10.07., Verdikte, Betriebs-Fallen, offene Faeden) - docs/GEMINI_BRIEFING.md: Notfall+Review-Briefing (baut auf ANTIGRAVITY_REVIEW auf) - RUNBOOK: Seite "Wann Gemini rufen" + Automatik-Fahrplan/Werkstatt/sudo aktualisiert - deploy/radar-selbstkritik-wrapper.sh: lag NUR auf der Box (Monats-Review-Cron), jetzt versioniert + deploy.sh kopiert ihn - docs/memory/-Altkopien mit Veraltet-Banner auf docs/wissen/ verwiesen Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# Betriebs-Fallen — hart erarbeitet, nicht nochmal reintreten
|
||||
|
||||
_Kuratiert 10.07.2026. Jede Falle hat hier mindestens einmal real Zeit gekostet.
|
||||
Neue Fallen: hier eintragen, mit Datum und Symptom._
|
||||
|
||||
## Git & Deploy
|
||||
|
||||
- **deploy.sh resettet sich SELBST mitten im Lauf.** Es macht früh `git reset --hard
|
||||
origin/main`; bash liest aber aus dem alten File-Descriptor weiter → neue Install-Schritte
|
||||
(z. B. neue `cp`-Zeilen) greifen beim ERSTEN Deploy nach der Änderung NICHT.
|
||||
→ deploy.sh ein ZWEITES Mal laufen lassen oder Artefakte von Hand nachinstallieren.
|
||||
Danach IMMER verifizieren, dass die neuen Dateien/Units wirklich da sind.
|
||||
- **deploy.sh-enable-Zeilen können User-Entscheide zurückdrehen.** Beispiel mc2-autoupdate:
|
||||
„einmalig deaktiviert" wurde von jedem Deploy still re-enabled, bis die Zeile raus war.
|
||||
Bei Entscheiden der Form „X bleibt aus" immer deploy.sh gegenprüfen.
|
||||
- **Paralleler Git-Zugriff auf den Shared-Checkout:** Mehrere Agenten/Sessions arbeiten
|
||||
zeitweise im selben `F:\`-Verzeichnis — HEAD kann unter einem wandern, uncommittete Edits
|
||||
verschwinden. → Änderungen sofort committen; zum Landen auf main einen ISOLIERTEN Worktree
|
||||
nutzen: `git worktree add --detach <tmp> origin/main` → cherry-pick → rebase →
|
||||
`git push origin HEAD:main` → Worktree weg.
|
||||
- **Gitea-Push:** nur via PowerShell/GCM (Bash-Tool scheitert an der Credential-Auth);
|
||||
„Failed to authenticate user" heißt oft nur „3 s warten, Retry" — Auth ist flatterhaft.
|
||||
Wenn der nicht-interaktive Push hart scheitert: User pusht EINMAL interaktiv, danach geht's.
|
||||
- **CRLF:** Box-git hat `core.autocrlf false` + `.gitattributes` erzwingt LF für
|
||||
`*.sh/*.service/*.timer` — sonst `pipefail\r`-Abbrüche. Windows-Pipe auf die Box:
|
||||
CR-Falle (`sed 's/\r$//'`).
|
||||
- **Stale `index.lock`** im Box-Repo nach Deploy-Abbruch: Alter prüfen, dann löschen.
|
||||
- **`hermes` ist über SSH nicht im PATH** → immer `bash -lc 'hermes …'`.
|
||||
|
||||
## Box / systemd / llama-swap
|
||||
|
||||
- **User-Units über SSH:** erst `export XDG_RUNTIME_DIR=/run/user/$(id -u)`, sonst sieht
|
||||
`systemctl --user` nichts.
|
||||
- **llama-swap:** Schutz-Key heißt **`persistent:`** — `persist:` wird still ignoriert
|
||||
(dieser Tippfehler hat wochenlang den Verdrängungsschutz deaktiviert). `persistent`
|
||||
schützt NUR gegen Verdrängung, NICHT gegen ttl-Selbstentladen → **jedes brains-Mitglied
|
||||
braucht ttl:0.** Nach jedem Config-Reload (auch scp!) ist das Warm-Set LEER → Mini-Requests
|
||||
an hermes/embed(/reranker) schicken.
|
||||
- **`warmup.sh` liegt als Root-Kopie** unter `/usr/local/bin/llama-swap-warmup.sh` und wird
|
||||
vom sudo-freien deploy.sh NICHT aktualisiert → nach Änderung manuell `sudo install`.
|
||||
- **llama-swap NIE neustarten**, wenn es nicht sein muss (Warm-Set weg = Lucy-Latenz).
|
||||
- **Nie zwei ~70-GB-Benches direkt nacheinander** (OOM-Kill beim zweiten).
|
||||
- **Box ist deutschsprachig (de_DE):** jeder CLI-Output-Parser braucht `LC_ALL=C`
|
||||
(apt sagt sonst „aktualisierbar von:" statt „upgradable from:").
|
||||
- **`pkill -f` über SSH matcht die eigene Remote-Shell** → Muster als `'[g]en…'` klammern.
|
||||
- **Deploy restartet voice-service** → Übernacht-Jobs mit STT-QA-Gate brauchen
|
||||
Wiederanlauf-Logik (Backoff-Retry im hear()-Pfad).
|
||||
|
||||
## Hermes
|
||||
|
||||
- **Toolsets haben ZWEI Ebenen:** aktiv = NICHT in `agent.disabled_toolsets` UND in
|
||||
`platform_toolsets.<platform>`. api_server (Voice) hat eine bewusste Diät-Allowlist;
|
||||
MCP-Server sind namentlich allowlistbar (Key `mcp_servers`, snake_case).
|
||||
`hermes prompt-size` ist Allowlist-BLIND — echte Kontrolle nur per Live-Call.
|
||||
- **`MINIMUM_CONTEXT_LENGTH = 64000`:** Modelle mit kleinerem Kontext (heavy 32k, vision 32k)
|
||||
sind als delegate_task-Ziel tot — der Fehler kann STILL ausfallen. Fremd-Kritik deshalb via
|
||||
fremdblick.sh (Ein-Schuss), nie via Delegation.
|
||||
- **delegate_task läuft top-level IMMER background** → in `hermes -z`/Cron-Ein-Schuss stirbt
|
||||
das Kind mit dem Prozess. Nur langlebige Sessions (Chat/Desktop/Telegram) profitieren.
|
||||
- **Cron-Fallen:** kein TZ-Feld (next_run_at = System-TZ zum Anlege-Zeitpunkt; nach
|
||||
TZ-Wechsel `cron edit --schedule "<gleich>"` zum Neuberechnen) · Prompt/Positionsargumente
|
||||
MÜSSEN vor die Flags · `--script` allein reicht nicht (braucht Prompt oder Skill) ·
|
||||
Cron-Kontext hat `HERMES_CRON_SESSION=1` und `approvals.cron_mode: deny`.
|
||||
- **Feed-Skripte: Pipe + Heredoc gleichzeitig = Heredoc gewinnt stdin** → JSON via Temp-Datei
|
||||
übergeben. Außerdem ehrlichen Blind-Pfad einbauen (API kaputt → „AUSGEFALLEN", nicht „0 Funde").
|
||||
- **Hooks:** Consent persistiert NUR über CLI-/Gateway-Start mit `HERMES_ACCEPT_HOOKS=1`;
|
||||
`hermes hooks test` schreibt die Allowlist NICHT; Skript-Änderung invalidiert Consent (mtime).
|
||||
- **GLM-Modelle sind Reasoning-Modelle:** content kommt NACH reasoning_content →
|
||||
max_tokens großzügig (fremdblick: FREMDBLICK_MAXTOK bis 4500), sonst leeres Urteil.
|
||||
- **Manager-Konfabulation:** Das Hirn überspringt Delegation gern „aus Bequemlichkeit" mit
|
||||
erfundener Begründung („worker.sh existiert nicht"). Gegenmittel: worker.log als harter
|
||||
Nachweis + Skill-Regel „du baust NICHT selbst" + Transcript prüfen, nie der Erzählung glauben.
|
||||
- **Kritiker == Worker = blinder Fleck** („benotet eigene Hausaufgaben") → Zwei-Kritiker-Gate,
|
||||
Urteil REPRODUZIERT-ODER-ABGELEHNT.
|
||||
- **stage-vor-Diff:** untracked Dateien → `git diff origin/main` leer → Kritiker prüfen NICHTS.
|
||||
Erst `git add -A`, dann `git diff --cached`, „Diff leer → STOPP".
|
||||
- **Werkstatt-Gate:** `git -C ~/mission-control-v2 status --porcelain -uno` MUSS leer sein
|
||||
(curl /api/health allein ist ein Loch — alter Code läuft im RAM weiter).
|
||||
|
||||
## Mem0 / Gedächtnis
|
||||
|
||||
- `mem0_service/requirements.txt` ist GEPINNT (wir nutzen Interna: NoThink-Swap, Roh-Chroma) —
|
||||
blindes Upgrade bricht still; vorher/nachher `smoke_test.py`, Prozedur `docs/UPGRADE.md`.
|
||||
- Qwen3.6 ist ein Thinking-Modell: JSON-Extraktion nur mit `enable_thinking:false`
|
||||
(NoThinkLLM im Sidecar), sonst leere Extraktion.
|
||||
- **Delete-Resurrection:** gelöschter Fakt kann beim nächsten learn() wieder auftauchen,
|
||||
solange die Original-Nachricht in history.db liegt (mem0-Design, kein Bug).
|
||||
- `sync_turn` läuft im Hintergrund → in kurzlebigen Prozessen (`hermes -z`) verpufft das
|
||||
Lernen; nur langlebige Sessions lernen zuverlässig.
|
||||
- Frontend: `reagraph` auf 4.22.0 gepinnt (4.23+ zieht React 19 → Crash).
|
||||
|
||||
## Lucy / Windows-PC
|
||||
|
||||
- **file://-Fallen im Electron-Build:** Asset-Pfade relativ; `import()` verzeiht KEINE
|
||||
relativen Prefixe (onnxruntime-WASM brauchte `new URL("vad/", document.baseURI)`) —
|
||||
fetch täuscht, import() nicht.
|
||||
- **Lucy IMMER über `Lucy-Neustart.bat` neu starten** — hartes Kill hinterlässt
|
||||
pocket_server-Waisen auf :8130 („Stimme startet nicht"); die BATs killen Waisen mit.
|
||||
- `LUCY_WORKERS=2` (User-Env) — 4 Worker = ~4×1,9 GB Stimm-Modell-Kopien.
|
||||
- Gerade `"` in config.ts-Prompt-Strings zerschießen den String → immer „…" nutzen.
|
||||
- Zustands-Features IMMER mit sichtbarem Zustand + Sofort-Feedback bauen — der User testet
|
||||
blind per Produkt-Gefühl.
|
||||
- **Executor-Task** `HermesPCExecutor` läuft aus dem Repo mit pythonw → nach
|
||||
executor.py-Änderung Task neu starten; Logs in `%LOCALAPPDATA%\HermesPCExecutor\`.
|
||||
- **MSIX-Sandbox-Falle (Claude-Desktop-Tools):** Tools der Claude-App laufen im
|
||||
MSIX-Container — Writes nach `AppData\Local\<app>` landen in
|
||||
`AppData\Local\Packages\Claude_*\LocalCache\` (Merge-Read täuscht!). Windows-Apps NIE über
|
||||
Agent-Tools nach AppData installieren/verwalten; Installer startet der USER per Doppelklick.
|
||||
Die Packages-Kopie ist KEINE Dublette, sondern die virtualisierte echte Install.
|
||||
- **Hermes Desktop:** NIE „Update / Repair install" klicken (pullt main, desynchronisiert
|
||||
das Runtime-Repo → Boot-Fehler). Bei „tot": `git status -uno` im Runtime-Repo; Fehler
|
||||
stehen in `logs/bootstrap-*.log`, nicht in desktop.log.
|
||||
|
||||
## Colab / Training (Mini-Stimme)
|
||||
|
||||
- Live-Drive-Sync JE Epoche einbauen (Session-Tod frisst sonst das Training).
|
||||
- Notebook-Zellen vor Abgabe ast-prüfen; Colab-Patches nie durch Shell-Heredocs.
|
||||
- **QA-Gate für synthetische Datensätze:** jeden Clip durch STT-Roundtrip — der ungeprüfte
|
||||
XTTS-Datensatz war komplett unbrauchbar (sogar whisper-medium verstand ihn falsch).
|
||||
- Kokoro-Output peakt >1.0 → Peak-Normalisierung 0.95 + Onset-Trim/Fade-In gehören in
|
||||
JEDE künftige KokoroTtsEngine.
|
||||
Reference in New Issue
Block a user