# Pyramid – Arbeitsprotokoll

Neueste Einträge OBEN. Jede Claude-Session schreibt hier nach jedem abgeschlossenen
Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:

```
## JJJJ-MM-TT – Kurztitel
**Erledigt:** was fertig ist (mit Commit-Hash)
**Offen/Nächster Schritt:** der konkrete nächste Handgriff
**Stolperfallen:** was schiefging und wie es gelöst wurde (damit es nie zweimal passiert)
**Fragen an Bernd:** (optional) gesammelte Richtungsfragen, die nicht blockieren
```

---

## 2026-07-03 – M0 abgeschlossen: Ordnung, flutter analyze sauber, README

**Erledigt:**
- Liegen gebliebene Deprecation-Fixes aus einer abgebrochenen Session committet
  (`withOpacity`→`withValues`, `activeColor`→`activeThumbColor`, `cacheExtent`→
  `ScrollCacheExtent`, `PublicRoomsChunk`→`PublishedRoomsChunk`) – Commit 057ac1e
- Restliche `flutter analyze`-Hinweise behoben – Commit 401bd6a:
  - `document_viewer.dart`: `Matrix4.translate/scale` → `translateByDouble`/
    `scaleByDouble` (PDF-Zoom, gleiches Verhalten)
  - `rooms_panel.dart`: `onReorder` → `onReorderItem` (Index-Korrektur jetzt intern,
    manuelles `newIdx--` entfernt); `implementation_imports`-Hinweis kommentiert
    (SpaceChild wird vom `matrix`-Paket nicht öffentlich exportiert, kein Fix möglich)
  - `voip_manager.dart`: `getSources()`-Override kommentiert (Pflicht-Override der
    abstrakten `MediaDevices`-Klasse, die die Methode selbst deprecated hat)
  - `settings_modal.dart`: zwei `BuildContext`-nach-`await`-Stellen mit
    `context.mounted` abgesichert (Geräte umbenennen, Passwortabfrage bei Massenlogout)
  - **Bewusst NICHT gefixt:** `chat_provider.dart:42` (`Timeline.onUpdate` deprecated,
    Ersatz wäre `client.onSync` + Raum-Filter). Hängt am E2EE-Redecrypt-Pfad
    (Re-Entschlüsseln nach Schlüssel-Empfang) – laut CLAUDE.md heiliger Bereich,
    Umbau nur mit dediziertem Login→Nachrichten→Logout→Login-Test, nicht nebenbei.
- `lib/features/calls/` (Leiche) geprüft: existiert nicht mehr, nur `lib/features/call/`
  mit den echten Dateien – Punkt war bereits erledigt, nur nicht abgehakt.
- README.md durch echte Projektbeschreibung ersetzt (Funktionsumfang, Build, Struktur) – Commit 74d38fd
- ROADMAP.md: M0 komplett abgehakt.

**Offen/Nächster Schritt:** M1, erster Punkt – Uta-Random-Logout-Bug untersuchen
(Logging an allen Logout-Pfaden einbauen, dann Ursache finden). Direkt danach die
Push-Entschlüsselungs-Regression (`docs/NOTIFICATIONS.md` + Memory „Pyramid Push"
vorher lesen).

**Stolperfallen:**
- Kein `test/`-Ordner vorhanden → `flutter test` läuft ins Leere, keine automatisierte
  Absicherung. `flutter analyze` lief sauber (0 Fehler/Warnungen), aber die Lint-Fixes
  in `document_viewer.dart` (PDF-Zoom) und `rooms_panel.dart` (Drag-Reorder der
  Raumliste) sind **UNGETESTET** in echter UI – nächster Windows-Lauf sollte kurz
  PDF-Zoom und Raum-Umsortieren per Drag prüfen.
- Der `ignore:`-Kommentar für einen deprecated-Aufruf muss auf der Zeile *unmittelbar*
  über der betroffenen Codezeile stehen, nicht nur "in der Nähe" – sonst wirkt er nicht
  (bei `voip_manager.dart` erst falsch über `@override` gesetzt, dann korrigiert).

---

## 2026-07-03 – Arbeitsstruktur angelegt + Vollbackup (Setup, noch kein Code)

**Erledigt:**
- Vollbackup inkl. Git-Historie: `MatrixPi\backups\pyramid-kopie_backup_2026-07-03.tar.gz` (510 MB)
- `CLAUDE.md` (Arbeitsregeln), `ROADMAP.md` (M0–M7 nach Bernds Prioritäten), dieses Protokoll
- Klargestellt: `C:\Users\nordm\pyramid - Kopie` ist das EINZIGE aktuelle Repo;
  `C:\Users\nordm\pyramid` und `MatrixPi\pyramid` sind veraltete April-Stände (Commit c9af913)

**Offen/Nächster Schritt:** M0, Punkt 2 – die ~140 uncommitteten Dateien mit `git status`
sichten und in thematische Commits aufteilen (diese drei neuen Dateien mit committen),
dann `git push origin master`.

**Stolperfallen:**
- Letzter Commit ist vom 2026-04-28 (d706ace), gearbeitet wurde aber bis mindestens
  2026-06-12 → zwischen Commits und Realität liegen 6 Wochen. Genau deshalb: ab jetzt
  kleine Commits nach jedem Schritt.
- Git-Remote (Gitea auf dem Pi) enthält Zugangsdaten in der URL – funktioniert, aber
  nur erreichbar, wenn der Pi läuft (unterwegs: WireGuard nötig).
