archiv: Messprotokoll des Referenzlaufs vom 23.08. gesichert

Die uncommittete SAVEPOINT.md aus dem Worktree mc2-referenz wird vor dem
Archivieren des Branches festgehalten, damit beim Aufraeumen nichts verloren geht.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 13:58:33 +02:00
co-authored by Claude Opus 5.5
parent 0b639870ff
commit 12e0d43052
+54 -159
View File
@@ -1,176 +1,71 @@
# Savepoint — Mem0-Ausbau (Referenzaufgabe) # Savepoint — Mem0-Ausbau (Referenzaufgabe)
**Stand:** 2026-08-22, Worktree `referenz/mem0-ausbau` in `F:\Coding Stuff\mc2-referenz`. **Stand:** 2026-08-23, Worktree `referenz/mem0-ausbau` in `F:\Coding Stuff\mc2-referenz`.
Branch wurde aus `d508a84` (A2's gesicherter Stand) erstellt und enthält dessen 5 bearbeitete Dateien. **Status: AUFTRAG FERTIG & BEWIESEN** — alle Messlatte-Punkte erfüllt, 3 neue Commits gesetzt, working tree clean.
## Auftrag ## Auftrag
`docs/aufgaben/referenzaufgabe-mem0-ausbau.md`: Mem0-Reste vollständig entfernen, ohne MC2/Frontend/Deployment zu brechen. `docs/aufgaben/referenzaufgabe-mem0-ausbau.md`: Mem0-Reste vollständig entfernen, ohne MC2/Frontend/Deployment zu brechen.
- Messlatte: `ruff` clean, Backend `import app` sauber, `grep -ril mem0 backend/ mcp/ deploy/ --include='*.py' --include='*.sh'` = 0 Dateien, `mem0_service/` entfernt, Box-Smoke/Health so weit wie möglich grün. - Messlatte: `ruff` clean, Backend `import app` sauber, `grep -ril mem0 backend/ mcp/ deploy/ --include='*.py' --include='*.sh'` = 0 Dateien, `mem0_service/` entfernt, Box-Smoke/Health so weit wie möglich grün.
- **Prüfstein:** API-Felder wie `mem0_ms` nicht einfach löschen — Frontend mit anpassen oder Feld sauber aus beiden Seiten entfernen. - **Prüfstein:** API-Felder wie `mem0_ms` nicht einfach löschen — Frontend mit anpassen oder Feld sauber aus beiden Seiten entfernen (→ `memory_ms` umbenannt, Frontend mitgenommen).
- Arbeitsweise: Datei für Datei, höchstens zwei vor der ersten Änderung. Nach jeder Änderung ein Satz. - Live-Deployment `~/mission-control-v2` ist TABU — war es auch (nur Worktree angefasst).
- Live-Deployment `~/mission-control-v2` ist TABU.
## Wichtig: A2-Vorgang (Commit d508a84 — bereits auf diesem Branch) ## Messlatte — ERREICHT (lokal bewiesen)
Diese 5 Dateien wurden vom abgebrochenen Lauf A2 bereits bearbeitet und im Commit `d508a84` gesichert: | Punkt | Ergebnis |
1. `backend/config.py``MEMORY_DB` und `MC_MEM_DEDUPE_ENABLED` entfernt, `MEM0_SERVICE_URL`-Kommentar bereinigt |---|---|
2. `backend/routers/system.py``_mem0_reachable()` entfernt, `mem0_reachable` aus Systeminfo | `ruff check .` (backend) | `All checks passed!` |
3. `backend/routers/voice.py``Mem0-Retrieve``Gedächtnis-Retrieve` | `import app` (venv + requirements installiert) | `import app: OK` |
4. `backend/routers/zeitmaschine.py``Mem0` in Docstrings/Kommentaren → `Gedächtnis` | `grep -ril mem0 backend/ mcp/ deploy/` (*.py,*.sh) | **0 Dateien** |
5. `backend/services/sentry.py``MC_MEM0_DASHBOARD_URL` in Docstring entfernt | `mem0_service/` entfernt | `git rm -r` + Commit |
| `frontend/dist` neu gebaut (`tsc` + `vite`) | 0 mem0-Treffer, `memory_ms` drin |
| `bash -n` auf alle geänderten deploy-Skripte | Syntax OK |
`git status` war nach d508a84 clean. Hinweis: Box-Smoke/Health läuft hier nicht (kein Box-Host am Dev-PC). Der objektive Abschluss-Beweis fährt auf der Box: `bash docs/aufgaben/referenz-check.sh`.
## Wichtig: Kahlschlag-Commit 1e68f62 (bereits auf main) ## Commits (diese Sitzung)
- `backend/services/memory.py` — gelöscht - `84b4643` fix(backend): Mem0-Reste aus Steward, Voice-Metrics und Backup entfernt
- `backend/routers/memory.py` — gelöscht (`/api/memory` existiert nicht mehr) - `084dd73` fix(deploy): Mem0-Logik aus Backup/Restore/Postchecks/Venv-Audit/Hooks entfernt, mem0_service/ gelöscht
- `deploy/mc2-steward.service` — gelöscht - `0b63987` fix(frontend): mem0_ms nach memory_ms umbenannt, Mem0-Texte zu Gedächtnis, dist neu gebaut
- `deploy/mem0-service.service` — gelöscht - (vorher) `41f2566` feat(mcp): Mem0-Reste in mcp_mc.py entfernt · `30ab2c0` savepoint · `d508a84` A2 (5 Dateien)
- `deploy/voice-service.service` — gelöscht
- `deploy/mem0-konsolidierung.*` — gelöscht
## Erledigt in dieser Sitzung ## Was geändert wurde (vollständige Liste)
### Backend (Commit `84b4643`)
1. `backend/steward.py` — toter `memory`-Import + `AUTO_DEDUPE_ENABLED`-Block + Mem0-Docstrings entfernt
2. `backend/services/voice_metrics.py``mem0_ms``memory_ms`, `mem0``memory`, Mem0-Texte→`Gedächtnis` (9 Treffer)
3. `backend/services/backup.py` — Docstring `mem0 +` entfernt
### 1. `backend/steward.py` ### Frontend (Commit `0b63987`)
- Toter Import `from services import memory as memory_svc` entfernt 4. `frontend/src/lib/api.ts``mem0_ms``memory_ms` + Kommentare
- Toter `memory_svc.AUTO_DEDUPE_ENABLED`-Block entfernt 5. `frontend/src/components/dashboard/LatencyCard.tsx` — alle `mem0_ms`-Reads→`memory_ms`, `Mem0``Gedächtnis`
- Docstring: `Mem0-Auto-Dedupe``Re-Warm-Wächter und Health-Wächter (sentry)` 6. `frontend/src/views/GuideView.tsx` — Card-8-Stack-Paragraph ehrlich umgeschrieben, Mem0-Anspruch entfernt
- Docstring: `memory.auto_dedupe_loop — Gedächtnis-Dubletten` entfernt 7. `frontend/dist/*` — neu gebaut (tsc + vite), committet
- Docstring: `MC_MEM_DEDUPE_ENABLED` entfernt
- Verifiziert: `memory.py` wurde in Kahlschlag gelöscht, `steward.py` hatte toten Import
### 2. `backend/services/voice_metrics.py` (alle 9 Treffer bereinigt) ### Deploy + Sidecar (Commit `084dd73`)
- **Docstring (3x):** `Mem0-Retrieve``Gedächtnis-Retrieve` 8. `deploy/backup.sh` — 8 Mem0-Teile entfernt (MEM0_DIR, Stage, cp, venv-freeze, for-Schleife, MANIFEST, Kommentare)
- **Line 10:** `Mem0-Retrieve` im Best-effort-Kommentar → `Gedächtnis-Retrieve` 9. `deploy/restore.sh` — MEM0_DIR, `mem0-service` aus SERVICES, dry-run-Zeile, Restore-`if`-Block entfernt
- **Line 39:** `Mem0-Retrieve` im docstring → `Gedächtnis-Retrieve` 10. `deploy/stack-postcheck.sh` — MEM0_URL, toter Sidecar-curl-Block, `(Mem0/…)`-Kommentare entfernt
- **Line 56:** `Geparkten Mem0-Retrieve``Geparkten Gedächtnis-Retrieve` 11. `deploy/hermes-postcheck.sh` — MEM0_URL + Sidecar-Check + toter `/api/memory`-Check entfernt; mc2-memory-Provider/-Plugin-Checks **BEHALTEN** (neue Hermes-native Architektur)
- **Line 106:** `Unter-Detail: mem0 (Teil VON hirn...``Unter-Detail: memory (Teil VON hirn...` 12. `deploy/venv-audit.sh` — mem0-Venv aus `VENVS` + Kommentar
- **Line 116:** `Agent + Mem0 + TTFT``Agent + Gedächtnis + TTFT` 13. `deploy/warmup.sh``für Mem0/Gedächtnis``für Gedächtnis`
- **Line 133:** `Agent-Overhead + Mem0 + LLM-TTFT``Agent-Overhead + Gedächtnis + LLM-TTFT` 14. `deploy/autoupdate.sh``Gehirn-Check (Mem0, …)``(Gedächtnis, …)`
- **Line 141:** `mem0 = _take_retrieve(...)` `memory = _take_retrieve(...)` (starker Kommentar) 15. `deploy/agent-hooks/box-steckbrief-inject.sh` `mem0-Gedaechtnis :8765` aus Worker-Orientierung entfernt
- **Line 154:** `"mem0_ms"``"memory_ms"` (API-Feld im JSON-Rückgabewort) 16. `mem0_service/` (app.py, migrate.py, smoke_test.py, requirements.txt) — **gelöscht**
### 3. `frontend/src/lib/api.ts` (3 Treffer) ### MCP (Commit `41f2566`, vorher)
- **Line 446:** `mem0 = Unter-Detail INNERHALB von hirn``memory = Unter-Detail INNERHALB von hirn` 17. `mcp/mcp_mc.py` — 3 Docstrings (list_services, restart_service, backup_now) bereinigt
- **Line 455:** `Agent + Mem0 + LLM-TTFT``Agent + Gedächtnis + LLM-TTFT`
- **Line 457:** `mem0_ms: number | null // ... (Mem0-Retrieve)``memory_ms: number | null // ... (Gedächtnis-Retrieve)`
### 4. `frontend/src/components/dashboard/LatencyCard.tsx` (4 Treffer) ## Bewusst NICHT touchen (out-of-scope, nicht in der Messlatte)
- **Line 5:** `Mem0 ist ein Unter-Detail` `Gedächtnis ist ein Unter-Detail` - `voice_service/app.py` + `install.sh` — nennen Mem0 im Kommentar, gehören zur voice_service
- **Line 42:** `t.mem0_ms` (2x) → `t.memory_ms` (2x) - `hermes/plugins/mc2-memory/` — Hermes-Plugin, ruft `/api/memory` auf (degradiert gracefully nach Kahlschlag)
- **Line 106:** `latest.mem0_ms` (2x) → `latest.memory_ms` (2x) - `deploy/*.service`, `deploy/llama-swap.config.yaml` — keine `.py`/`.sh`
- **Line 131:** `Agent + Mem0-Suche``Agent + Gedächtnis-Suche` - `docs/*`, `AGENTS.md` — Doku-Dateien (siehe Offene Fragen)
### 5. `frontend/src/views/GuideView.tsx` (1 Treffer, kompletter Paragraph) ## Offene Fragen / Stolpersteine
- Stack-Paragraph (Card 8 "Gedächtnis & RAG"): "Dein Gedächtnis ist Mem0-basiert: auto-lernend..." umgeschrieben zu "Dein Gedächtnis ist auto-lernend & semantisch: Der Agent lernt im Hintergrund nach jedem Turn..." 1. **Push:** Die 3 Commits liegen nur lokal auf `referenz/mem0-ausbau`. Push nach Gitea ist NUTZER-ENTSCHEIDUNG (ich pushe nie von selbst).
- Gotcha-Zeile (Mem0-extraktion) entfernt 2. **Box-Abschluss-Beweis:** `bash docs/aufgaben/referenz-check.sh` auf der Box fahren → objektiver „fertig"-Nachweis (lokal nur Teilmenge).
- Begründung: Gedächtnis-Tab existiert nicht mehr (Kahlschlag), Mem0 wurde durch Hermes-Nativ abgelöst 3. **Out-of-scope-Dokis veraltet:** `AGENTS.md` Zeile 15 + `docs/STACK.md`, `docs/UPGRADE.md`, `docs/DISASTER_RECOVERY.md`, `docs/ARBEITSWEISE.md`, `docs/ZEROCLAW_POC_BRIEF.md` nennen Mem0 noch als „aktiv". Ist jetzt veraltet. Bewusst in dieser Aufgabe nicht angefasst (outside Messlatte) — eigener kleiner Lauf, falls gewünscht.
4. **`/api/memory` toter Endpunkt (vorbestehend):** `frontend/src/lib/queries.ts` (`useMemory()`) + `hermes/plugins/mc2-memory` rufen `/api/memory` auf, das nach Kahlschlag `1e68f62` nicht mehr existiert. Nicht in dieser Runde eingeführt, aus Scope.
### 6. `backend/services/backup.py` (1 Treffer)
- Docstring: `Full state backup (mem0 + ...)``Full state backup (...)`
### 7. `deploy/backup.sh` (8 Treffer)
- **Line 6-7:** Kommentar `mem0 (Chroma + history.db)` aus Inhalt entfernt
- **Line 23:** `MEM0_DIR="${MC_MEM0_DIR:-/srv/models/mem0}"` — ganze Zeile gelöscht
- **Line 30:** `mkdir -p "$STAGE/mem0"` — aus mkdir entfernt
- **Line 32:** `[ -d "$MEM0_DIR" ] && cp -a "$MEM0_DIR/." "$STAGE/mem0/" || true` — ganze Zeile gelöscht
- **Line 63:** Kommentar `mem0-venv ist uv-managed``voice-venv ist uv-managed`
- **Line 71:** `freeze_venv "$HOME/.mem0/venv/bin/python" "$KG/pip-mem0.txt"` — ganze Zeile gelöscht
- **Line 82:** `$HOME/.mem0/venv/bin/python` aus for-Schleife entfernt
- **Line 95:** MANIFEST: `mem0 (chroma + history.db)` aus Inhalt entfernt
### 8. `mcp/mcp_mc.py` — **ERLEDIGT (3 Treffer)**
- **Line 219:** `list_services()` Docstring: "Engine, Gateway, Hermes, Mem0, Voice" → "Engine, Gateway, Hermes, Voice"
- **Line 229-231:** `restart_service()` Docstring: `mem0-service` entfernt, `hermes-terminal` korrigiert zu `hermes-builtin-ui` (matcht backend allowlist in maintenance.py)
- **Line 238:** `backup_now()` Docstring: "mem0 + Configs + Secrets" → "Configs + Secrets"
- Verifiziert: `rg -i mem0 mcp/mcp_mc.py` = 0 Treffer, `py_compile mcp/mcp_mc.py` OK
- **Achtung:** Der mc2-memory-Plugin (`hermes/plugins/mc2-memory/__init__.py`) ruft noch `/api/memory` und `/api/memory/learn` auf. Der Kahlschlag-Commit hat `backend/routers/memory.py` gelöscht → dieser API-Pfad existiert nicht mehr. Der Plugin degraded silently (prefetch="", learn fail). **Entscheidung:** Nicht bearbeiten, Plugin ist im `hermes/plugins/`-Ordner, nicht in der Messlatte.
### 9. `deploy/agent-hooks/box-steckbrief-inject.sh`
- Treffer: "mem0-Gedaechtnis :8765" in einer langen Agent-Injektionszeile (Zeile 31)
- Nur Text → mem0-Gedaechtnis :8765 entfernen
### 10. `deploy/autoupdate.sh`
- Treffer: "Gehirn-Check (Mem0, Tools, Voice)" → "Gehirn-Check (Tools, Voice)"
### 11. `deploy/hermes-postcheck.sh` — **HEIKEL: Enthält LOGIK, nicht nur Text**
- **Line 3:** Comment "(Mem0 + die mc2-memory-Integration) noch?" → muss aktualisiert werden
- **Line 8:** `MEM0_URL="${MEM0_SERVICE_URL:-http://127.0.0.1:8765}"` — Variable für Sidecar-Check (Zeilen 14-18)
- **Zeilen 14-18:** curl-Check auf `:8765/health`**wird immer FAILn**, da mem0_service stillgelegt
- **Zeilen 20-24:** curl-Check auf `/api/memory`**wird immer FAILn**, da memory.py in Kahlschlag gelöscht
- **Zeilen 26-31:** grep-Check für `memory.provider=mc2-memory` in config.yaml → das ist **neues** Hermes-nativ-Memory, kein Mem0-Rest. **NICHT entfernen** (gehört zur aktuellen Architektur).
- **Zeilen 52-58:** Plugin-Check für `mc2-memory` → ebenfalls **neue** Architektur, kein Mem0-Rest. **NICHT entfernen**.
- **Entscheidung:** Zeilen 8, 14-18, 20-24 entfernen (toter Sidecar + toter /api/memory-Endpunkt). Zeilen 26-31 und 52-58 behalten (gehören zur neuen Hermes-native Memory).
### 12. `deploy/restore.sh` — **LOGIK: Gegenstück zu backup.sh**
- **Line 18:** `MEM0_DIR="${MC_MEM0_DIR:-/srv/models/mem0}"` — Variable
- **Line 22:** `SERVICES="mem0-service mission-control-2 hermes-gateway"` → "mem0-service" entfernen
- **Line 101:** dry-run echo "mem0 → $MEM0_DIR" — mem0-Zeile entfernen
- **Line 122:** `if [ -d "$STAGE/mem0" ]; then rm -rf "$MEM0_DIR"; mkdir ...; cp ...; fi` — ganze Zeile entfernen
- Da backup.sh kein `$STAGE/mem0` mehr erstellt, ist diese Logik tot (würde nie feuern). Entfernen.
### 13. `deploy/stack-postcheck.sh` — **LOGIK: Enthält toten curl-Check**
- **Line 6:** Comment "prüft das Gehirn/Mem0" → "prüft das Gehirn"
- **Line 12:** `MEM0_URL="${MEM0_SERVICE_URL:-http://127.0.0.1:8765}"` — Variable
- **Line 14:** Comment "Embedding-Modell (Mem0/Gedächtnis)" → "Embedding-Modell (Gedächtnis)"
- **Line 51:** Comment "Embedding-Modell (für Mem0/Gedächtnis)" → "Embedding-Modell (für Gedächtnis)"
- **Line 58:** "(Mem0/Gedächtnis betroffen)" → "(Gedächtnis betroffen)"
- **Zeilen 88-93:** curl-Check auf `MEM0_URL/health`**wird immer FAILn**, da Sidecar tot. **Ganze Block entfernen.**
- Die Embedding-Checks (Zeilen 51-59) bleiben — sie prüfen das Embedding-Modell, das auch für die neue Memory-Architektur relevant ist.
### 14. `deploy/warmup.sh`
- Treffer: "für Mem0/Gedächtnis" → "für Gedächtnis" (nur Text)
### 15. `deploy/venv-audit.sh`
- **Line 2:** Comment "(Mem0, Voice) altern" → "(Voice) altern"
- **Line 12:** `VENVS=("$HOME/.mem0/venv:mem0" "$HOME/.voice/venv:voice")` → mem0-Entry entfernen
### 16. Ordner `mem0_service/` löschen
- Enthält: `app.py`, `migrate.py`, `smoke_test.py`, `requirements.txt`
- Toter Sidecar: Port `:8765` antwortet nicht, nicht systemd-registered
## Noch nicht touchen (out-of-scope / unklar)
### `voice_service/app.py` + `voice_service/install.sh`
- Enthalten "mem0" — gehören zur voice_service, nicht zur Messlatte
- voice_service.service wurde in Kahlschlag gelöscht, aber voice_service/ Ordner ist noch vorhanden
- **Entscheidung:** Nicht bearbeiten, da nicht in `backend/`, `mcp/`, `deploy/` Messlatte
### `hermes/plugins/mc2-memory/` (2 Dateien)
- `__init__.py`, `plugin.yaml`
- Rufen `/api/memory` auf → existiert nicht mehr, degradieren gracefully
- Nicht in Messlatte (`deploy/` mit `.py/.sh` — YAML zählt nicht, Python-Plugin ist extern)
- **Entscheidung:** Nicht bearbeiten (Hermes-Plugin, nicht Teil von MC2)
### `deploy/mission-control-2.service` + `deploy/mc2-backup.service`
- systemd Service-Dateien (keine `.py` oder `.sh`)
- Nicht in Messlatte, aber könnten Mem0-Referenzen haben
- **Entscheidung:** Prüfen, ob sie Mem0 nennen; wenn ja, Text anpassen
### `deploy/llama-swap.config.yaml`
- YAML, nicht in Messlatte
### `frontend/dist/`
- Muss nach Änderungen neu gebaut werden (`npm run build`)
- **NACHDEM alle .ts/.tsx Dateien bearbeitet sind**
## Bekannte Fallstricke
1. **Prüfstein (Frontend-Konsistenz):** `mem0_ms` war ein API-Feld, das das Frontend las. Wurde zu `memory_ms` umbenannt + Frontend angepasst. **Nicht einfach löschen.**
2. **Restore vs. Backup:** `restore.sh` ist das Gegenstück zu `backup.sh`. Wenn backup.sh mem0 weglässt, darf restore.sh nicht versuchen, mem0 zu restaurieren. **Sorgfältig prüfen!**
3. **`head` funktioniert in PowerShell nicht:** Muss `Select-Object -First N` verwenden.
4. **Globs für native Befehle:** `rg` mit Globs muss gequoted werden, sonst spaltet PowerShell falsch.
5. **`frontend/dist` ist im git:** Nach Frontend-Änderungen muss `npm run build` laufen und das neue `dist` committet werden.
6. **`/api/memory` existiert nicht mehr** (Kahlschlag), aber `frontend/src/lib/queries.ts` ruft es noch via `useMemory()`: `api<Memory[]>(`/api/memory`...`. Das ist ein **vorher bestehendes Problem** (nicht eingeführt in dieser Runde).
## Nächster Schritt ## Nächster Schritt
1. **mcp/mcp_mc.py committen** (bereits bearbeitet) 1. **Nutzer:** Push `referenz/mem0-ausbau` nach Gitea (falls gewünscht).
2. `deploy/agent-hooks/box-steckbrief-inject.sh` bearbeiten (1 Treffer, Text) 2. **Nutzer/Box:** `bash docs/aufgaben/referenz-check.sh` auf der Box → objektiver Abschluss-Beweis.
3. `deploy/autoupdate.sh`, `deploy/warmup.sh` bearbeiten (je 1 Treffer, Text) 3. Optional (eigener Lauf): Out-of-scope-Dokis (AGENTS.md, docs/*) auf Mem0-Entfernung aktualisieren.
4. `deploy/venv-audit.sh` bearbeiten (2 Treffer, Text + Venv-Liste)
5. `deploy/stack-postcheck.sh` bearbeiten (6 Treffer, 1 Block-Entfernung, 4 Kommentare)
6. `deploy/restore.sh` bearbeiten (4 Treffer, LOGIK: MEM0_DIR, SERVICES, dry-run echo, restore-Zeile)
7. `deploy/hermes-postcheck.sh` bearbeiten (heikel: Sidecar-Checks + /api/memory-Check entfernen, neue Memory-Checks behalten)
8. `mem0_service/` Ordner löschen
9. `ruff` + `import app` prüfen
10. `grep -ril mem0 backend/ mcp/ deploy/ --include='*.py' --include='*.sh'` → muss 0 ergeben
11. `frontend/dist` neu bauen (Box: `cd frontend && npm run build`)