Chatverlauf: Zeitleiste mit Playhead, Detailstand und Klon zum Zeitpunkt #338

Open
opened 2026-11-08 19:16:57 +00:00 by alf · 12 comments
Owner

Warum

Ein geteilter Chat (grüner Daumen) liegt samt Workspace und Seitenpanel-Zustand als Ordner Iris-Internal/Geteilte-Chats/<ID>/ im Vault-Repo; jeder Export und jeder Job-Commit schreibt dort einen Stand. Diese Geschichte ist vorhanden, aber nicht zugänglich: Man kann einen früheren Stand eines Chats weder ansehen noch daraus weiterarbeiten.

Wunsch

Im Kontextmenü eines Chats der Eintrag „Chatverlauf“. Er öffnet ein Sheet:

  • Zeitleiste vom ersten Commit des Chat-Ordners bis zum aktuellen Stand, mit einem verschiebbaren Playhead.
  • Detailansicht zum gewählten Zeitpunkt:
    • Nachrichten des Chats, wie sie damals aussahen (schreibgeschützt),
    • Workspace-Dateiliste mit Änderungen gegenüber dem Vorgänger-Stand (neu, geändert, gelöscht),
    • Zustand des rechten Seitenpanels (Notiz, Browser-Tabs usw., soweit als Dateien im Workspace).
  • „Als Klon anlegen“: neuer lokaler Chat (eigene ID, nicht geteilt) mit Nachrichten und Workspace-Dateien des gewählten Stands.

Umfang (Entscheidung Alf)

Gleich über Server-Routen, nicht über direkten Git-Zugriff der App. Das ändert das Wire-Protokoll und betrifft beide Server und alle Clients im selben Zug:

  1. Wire-Protokoll (Entwicklerdokumentation/02-Wire-Protokoll.md): Zeitleiste (Commits des Chat-Ordners), Stand zu einem Commit (Nachrichten, Dateiliste mit Diff, Panel-Zustand), Klon aus Commit.
  2. Mac-Server (IrisRemoteServer) und Linux-Server (eigenes Issue in iris/iris-linux-server).
  3. Mac-Sheet (Iris.app und IrisClient.app); iOS (eigenes Issue in iris/2ndbrain-ios) und Linux-Client danach.

Offene Fragen / Risiken

  • Workspace liegt in Git-LFS: ältere Objekte sind lokal evtl. nicht geladen (Abruf bei Bedarf, Verhalten ohne Netz).
  • Commits im Vault sind vault-weit (Job-Hook, Wächter): Zeitleiste filtert per git log -- <Ordner>; Granularität prüfen.
  • Chats ohne Daumen (nie geteilt) haben keinen Verlauf: Menüeintrag ausblenden oder erklären.
  • Löschen/Entteilen entfernt den Ordner; die Historie bleibt im Repo, ist aber über die Oberfläche nicht mehr erreichbar.
## Warum Ein geteilter Chat (grüner Daumen) liegt samt Workspace und Seitenpanel-Zustand als Ordner `Iris-Internal/Geteilte-Chats/<ID>/` im Vault-Repo; jeder Export und jeder Job-Commit schreibt dort einen Stand. Diese Geschichte ist vorhanden, aber nicht zugänglich: Man kann einen früheren Stand eines Chats weder ansehen noch daraus weiterarbeiten. ## Wunsch Im Kontextmenü eines Chats der Eintrag **„Chatverlauf“**. Er öffnet ein Sheet: - **Zeitleiste** vom ersten Commit des Chat-Ordners bis zum aktuellen Stand, mit einem verschiebbaren **Playhead**. - **Detailansicht** zum gewählten Zeitpunkt: - Nachrichten des Chats, wie sie damals aussahen (schreibgeschützt), - Workspace-Dateiliste mit Änderungen gegenüber dem Vorgänger-Stand (neu, geändert, gelöscht), - Zustand des rechten Seitenpanels (Notiz, Browser-Tabs usw., soweit als Dateien im Workspace). - **„Als Klon anlegen“**: neuer lokaler Chat (eigene ID, nicht geteilt) mit Nachrichten und Workspace-Dateien des gewählten Stands. ## Umfang (Entscheidung Alf) Gleich über **Server-Routen**, nicht über direkten Git-Zugriff der App. Das ändert das Wire-Protokoll und betrifft beide Server und alle Clients im selben Zug: 1. Wire-Protokoll (`Entwicklerdokumentation/02-Wire-Protokoll.md`): Zeitleiste (Commits des Chat-Ordners), Stand zu einem Commit (Nachrichten, Dateiliste mit Diff, Panel-Zustand), Klon aus Commit. 2. Mac-Server (`IrisRemoteServer`) und Linux-Server (eigenes Issue in iris/iris-linux-server). 3. Mac-Sheet (Iris.app und IrisClient.app); iOS (eigenes Issue in iris/2ndbrain-ios) und Linux-Client danach. ## Offene Fragen / Risiken - Workspace liegt in Git-LFS: ältere Objekte sind lokal evtl. nicht geladen (Abruf bei Bedarf, Verhalten ohne Netz). - Commits im Vault sind vault-weit (Job-Hook, Wächter): Zeitleiste filtert per `git log -- <Ordner>`; Granularität prüfen. - Chats ohne Daumen (nie geteilt) haben keinen Verlauf: Menüeintrag ausblenden oder erklären. - Löschen/Entteilen entfernt den Ordner; die Historie bleibt im Repo, ist aber über die Oberfläche nicht mehr erreichbar.
Author
Owner

PR #160 gemergt: docs(wire): Chatverlauf – Zeitleiste, Stand und Klon zum Zeitpunkt (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/160

Commits:

  • docs(wire): Chatverlauf – Zeitleiste, Stand und Klon zum Zeitpunkt (iris/Iris#338)

Stand: Schritt 1 (Protokoll-Spezifikation)

Befund: Die Historie existiert bereits im Vault-Repo (Iris-Internal/Geteilte-Chats/<ID>/, ein Stand je Export/Job-Commit). Es fehlte nur der Zugang.

Geändert: Entwicklerdokumentation/02-Wire-Protokoll.md, neuer Abschnitt „Chatverlauf“: GET /agent/:id/history, GET /agent/:id/history/:commit, POST /agent/:id/history/:commit/clone. Gegenstücke angelegt: iris/iris-linux-server#147, iris/2ndbrain-ios#107.

Geprüft: Ablage-Format und Klon-Route (handleCloneAgent, importJob) im Mac-Code gelesen; Abschnitt gegen die bestehende Dokumentation „Geteilte Chats“ abgeglichen.

Nicht geprüft: Kein Code geschrieben. Dass messages in der Form von GET /agent/:id/messages aus messages.json übersetzt werden kann, ist angenommen, nicht gegen den Code verifiziert. Ebenso das Verhalten bei fehlenden LFS-Objekten und die Kosten von message_count bei langer Historie (Zwischenspeicher je Commit-SHA denkbar, da unveränderlich).

Offen: Mac-Server-Routen, Linux-Server-Routen, Sheet (Mac), danach iOS und Linux-Client.

PR #160 gemergt: docs(wire): Chatverlauf – Zeitleiste, Stand und Klon zum Zeitpunkt (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/160 Commits: - docs(wire): Chatverlauf – Zeitleiste, Stand und Klon zum Zeitpunkt (iris/Iris#338) --- **Stand: Schritt 1 (Protokoll-Spezifikation)** **Befund:** Die Historie existiert bereits im Vault-Repo (`Iris-Internal/Geteilte-Chats/<ID>/`, ein Stand je Export/Job-Commit). Es fehlte nur der Zugang. **Geändert:** `Entwicklerdokumentation/02-Wire-Protokoll.md`, neuer Abschnitt „Chatverlauf“: `GET /agent/:id/history`, `GET /agent/:id/history/:commit`, `POST /agent/:id/history/:commit/clone`. Gegenstücke angelegt: iris/iris-linux-server#147, iris/2ndbrain-ios#107. **Geprüft:** Ablage-Format und Klon-Route (`handleCloneAgent`, `importJob`) im Mac-Code gelesen; Abschnitt gegen die bestehende Dokumentation „Geteilte Chats“ abgeglichen. **Nicht geprüft:** Kein Code geschrieben. Dass `messages` in der Form von `GET /agent/:id/messages` aus `messages.json` übersetzt werden kann, ist angenommen, nicht gegen den Code verifiziert. Ebenso das Verhalten bei fehlenden LFS-Objekten und die Kosten von `message_count` bei langer Historie (Zwischenspeicher je Commit-SHA denkbar, da unveränderlich). **Offen:** Mac-Server-Routen, Linux-Server-Routen, Sheet (Mac), danach iOS und Linux-Client.
Author
Owner

PR #339 gemergt: feat(history): Chatverlauf – Mac-Server-Routen für Zeitleiste, Stand und Klon (#338)
http://docker:3000/iris/Iris/pulls/339

Commits:

  • feat(history): Chatverlauf – Mac-Server-Routen für Zeitleiste, Stand und Klon (#338)

Stand: Schritt 2 (Mac-Server-Routen)

Geändert: Iris/ChatHistoryCore.swift (neu, Git-Kern: Zeitleiste, Stand, Klon-Workspace, Wire-Form, mit Zwischenspeicher je Commit-SHA), drei Routen in IrisRemoteServer.swift (handleChatHistory*), Test scripts/test-chat-history-core.sh. Klon ruft importJob mit dem Manifest des Standes (neuer Titel „ (Stand TT.MM.JJJJ HH:mm)“, frische Job-ID, kein shareID, vote: none).

Geprüft: scripts/test-chat-history-core.sh: 46 Prüfungen grün gegen echte Temp-Repos (Reihenfolge, limit/truncated, Nachrichtenzahl, workspace_changed, Status added/modified/deleted/unchanged, LFS-Zeiger mit Größe und Verfügbarkeit, Inhalt über Zeiger, Workspace-Stand des gewählten Commits, ungültige/fremde Commits, entteilt, Wire-Form). swiftc -parse auf IrisRemoteServer.swift.

Nicht geprüft: Nicht in Xcode gebaut (kein xcodebuild im Terminal); die Routen sind nie gegen die laufende App und den echten Vault aufgerufen worden. Echtes Git-LFS mit Forgejo (git lfs fetch nachladen) nicht ausprobiert, nur Zeiger-Parsing und lokales Objekt. Die Form von messages gegen GET /agent/:id/messages (Wire-Form) ist nach Code nachgebaut, aber nicht Byte für Byte verglichen.

Grenzen/Abweichung von der Spec: available: false heißt „lokal nicht geladen“ (nicht „nicht erreichbar“); note_path ist immer null, weil das Manifest die Notiz-Zuordnung nicht trägt; ein noch nicht committeter Export fehlt in der Zeitleiste. Spec entsprechend angepasst (alf/2ndbrain).

Offen: Linux-Server-Routen (iris/iris-linux-server#147), Sheet in Iris.app/IrisClient.app, iOS (iris/2ndbrain-ios#107), Linux-Client.

PR #339 gemergt: feat(history): Chatverlauf – Mac-Server-Routen für Zeitleiste, Stand und Klon (#338) http://docker:3000/iris/Iris/pulls/339 Commits: - feat(history): Chatverlauf – Mac-Server-Routen für Zeitleiste, Stand und Klon (#338) --- **Stand: Schritt 2 (Mac-Server-Routen)** **Geändert:** `Iris/ChatHistoryCore.swift` (neu, Git-Kern: Zeitleiste, Stand, Klon-Workspace, Wire-Form, mit Zwischenspeicher je Commit-SHA), drei Routen in `IrisRemoteServer.swift` (`handleChatHistory*`), Test `scripts/test-chat-history-core.sh`. Klon ruft `importJob` mit dem Manifest des Standes (neuer Titel „<Titel> (Stand TT.MM.JJJJ HH:mm)“, frische Job-ID, kein `shareID`, `vote: none`). **Geprüft:** `scripts/test-chat-history-core.sh`: 46 Prüfungen grün gegen echte Temp-Repos (Reihenfolge, `limit`/`truncated`, Nachrichtenzahl, `workspace_changed`, Status added/modified/deleted/unchanged, LFS-Zeiger mit Größe und Verfügbarkeit, Inhalt über Zeiger, Workspace-Stand des gewählten Commits, ungültige/fremde Commits, entteilt, Wire-Form). `swiftc -parse` auf `IrisRemoteServer.swift`. **Nicht geprüft:** Nicht in Xcode gebaut (kein `xcodebuild` im Terminal); die Routen sind nie gegen die laufende App und den echten Vault aufgerufen worden. Echtes Git-LFS mit Forgejo (`git lfs fetch` nachladen) nicht ausprobiert, nur Zeiger-Parsing und lokales Objekt. Die Form von `messages` gegen `GET /agent/:id/messages` (Wire-Form) ist nach Code nachgebaut, aber nicht Byte für Byte verglichen. **Grenzen/Abweichung von der Spec:** `available: false` heißt „lokal nicht geladen“ (nicht „nicht erreichbar“); `note_path` ist immer `null`, weil das Manifest die Notiz-Zuordnung nicht trägt; ein noch nicht committeter Export fehlt in der Zeitleiste. Spec entsprechend angepasst (alf/2ndbrain). **Offen:** Linux-Server-Routen (iris/iris-linux-server#147), Sheet in Iris.app/IrisClient.app, iOS (iris/2ndbrain-ios#107), Linux-Client.
Author
Owner

PR #161 gemergt: docs(wire): Chatverlauf – LFS-Verfügbarkeit, note_path, Stand der Zeitleiste (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/161

Commits:

  • docs(wire): Chatverlauf – LFS-Verfügbarkeit, note_path, Stand der Zeitleiste (iris/Iris#338)

Spec angepasst (zu iris/Iris#338, PR iris/Iris#339): available: false = lokal nicht geladen; note_path immer null; noch nicht committete Exporte fehlen in der Zeitleiste. Geprüft: Abschnitt gegen den Mac-Code abgeglichen. Nicht geprüft: Linux-Seite.

PR #161 gemergt: docs(wire): Chatverlauf – LFS-Verfügbarkeit, note_path, Stand der Zeitleiste (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/161 Commits: - docs(wire): Chatverlauf – LFS-Verfügbarkeit, note_path, Stand der Zeitleiste (iris/Iris#338) --- **Spec angepasst** (zu iris/Iris#338, PR iris/Iris#339): `available: false` = lokal nicht geladen; `note_path` immer `null`; noch nicht committete Exporte fehlen in der Zeitleiste. Geprüft: Abschnitt gegen den Mac-Code abgeglichen. Nicht geprüft: Linux-Seite.
Author
Owner

PR #340 gemergt: feat(history): Chatverlauf – Sheet mit Zeitleiste, Playhead, Detailstand und Klon (#338)
http://docker:3000/iris/Iris/pulls/340

Commits:

  • feat(history): Chatverlauf – Sheet mit Zeitleiste, Playhead, Detailstand und Klon (#338)

Stand: Schritt 3 (Sheet in Iris.app und IrisClient.app)

Geändert: Iris/ChatHistorySheet.swift (neu: Sheet, Zeitleiste mit Playhead als ChatHistoryTimelineBar, Reiter Nachrichten/Dateien/Seitenpanel, Fußzeile mit „Workspace-Dateien mitnehmen“ und „Als Klon anlegen“), Iris/RemoteChatHistory.swift (neu: Modelle und die drei Aufrufe als Erweiterung von RemoteServerClient), RemoteJobListView.swift (Menüeintrag „Chatverlauf…“ nur bei vote == "up", Sheet), RemoteServerClient.swift (parseMessages als statische Funktion aus fetchMessages, urlSession nicht mehr private, insertCreatedJob). Der Playhead rastet auf dem nächsten Stand ein; Pfeiltasten und die Pfeil-Schaltflächen springen von Stand zu Stand. Das Laden des Standes ist beim Ziehen um 150 ms entprellt. Beide Apps nutzen dieselben Dateien (Iris.app über das Remote-Fenster gegen den eigenen Mac-Server).

Geprüft: swiftc -typecheck über alle 348 Swift-Dateien von Iris/ mit den Modulen aus DerivedData, -default-isolation MainActor: keine Fehler in den neuen oder geänderten Dateien (zwei bestehende SDK-Fehler in RemoteAppSession.swift, unabhängig davon). Kerntests (scripts/test-chat-history-core.sh, 46 Prüfungen) und Linux-Tests (10) weiter grün.

Nicht geprüft: Nicht in Xcode gebaut, die Oberfläche nie gesehen oder bedient: Playhead-Ziehen, Aussehen, Reiter, Klon aus dem Sheet, Meldung bei übersprungenen Dateien. Das Sheet nie gegen einen echten Server mit echtem Verlauf geöffnet. Bei sehr vielen Ständen (Tausende) und gleichzeitig dichten Strichen ist die Leiste ungetestet.

Grenzen: Die Zeitleiste zeigt nur committete Stände. Notiz-Zuordnung (note_path) ist immer leer. Klon bringt nicht den internen Hermes-Sitzungszustand mit.

Offen: iOS (iris/2ndbrain-ios#107), Linux-Client, Handbuch/Doku des Menüeintrags.

PR #340 gemergt: feat(history): Chatverlauf – Sheet mit Zeitleiste, Playhead, Detailstand und Klon (#338) http://docker:3000/iris/Iris/pulls/340 Commits: - feat(history): Chatverlauf – Sheet mit Zeitleiste, Playhead, Detailstand und Klon (#338) --- **Stand: Schritt 3 (Sheet in Iris.app und IrisClient.app)** **Geändert:** `Iris/ChatHistorySheet.swift` (neu: Sheet, Zeitleiste mit Playhead als `ChatHistoryTimelineBar`, Reiter Nachrichten/Dateien/Seitenpanel, Fußzeile mit „Workspace-Dateien mitnehmen“ und „Als Klon anlegen“), `Iris/RemoteChatHistory.swift` (neu: Modelle und die drei Aufrufe als Erweiterung von `RemoteServerClient`), `RemoteJobListView.swift` (Menüeintrag „Chatverlauf…“ nur bei `vote == "up"`, Sheet), `RemoteServerClient.swift` (`parseMessages` als statische Funktion aus `fetchMessages`, `urlSession` nicht mehr `private`, `insertCreatedJob`). Der Playhead rastet auf dem nächsten Stand ein; Pfeiltasten und die Pfeil-Schaltflächen springen von Stand zu Stand. Das Laden des Standes ist beim Ziehen um 150 ms entprellt. Beide Apps nutzen dieselben Dateien (Iris.app über das Remote-Fenster gegen den eigenen Mac-Server). **Geprüft:** `swiftc -typecheck` über alle 348 Swift-Dateien von `Iris/` mit den Modulen aus DerivedData, `-default-isolation MainActor`: keine Fehler in den neuen oder geänderten Dateien (zwei bestehende SDK-Fehler in `RemoteAppSession.swift`, unabhängig davon). Kerntests (`scripts/test-chat-history-core.sh`, 46 Prüfungen) und Linux-Tests (10) weiter grün. **Nicht geprüft:** Nicht in Xcode gebaut, die Oberfläche nie gesehen oder bedient: Playhead-Ziehen, Aussehen, Reiter, Klon aus dem Sheet, Meldung bei übersprungenen Dateien. Das Sheet nie gegen einen echten Server mit echtem Verlauf geöffnet. Bei sehr vielen Ständen (Tausende) und gleichzeitig dichten Strichen ist die Leiste ungetestet. **Grenzen:** Die Zeitleiste zeigt nur committete Stände. Notiz-Zuordnung (`note_path`) ist immer leer. Klon bringt nicht den internen Hermes-Sitzungszustand mit. **Offen:** iOS (iris/2ndbrain-ios#107), Linux-Client, Handbuch/Doku des Menüeintrags.
Author
Owner

PR #341 gemergt: feat(history): Nachrichten-Reiter springt beim Verschieben des Playheads ans Ende (#338)
http://docker:3000/iris/Iris/pulls/341

Commits:

  • feat(history): Nachrichten-Reiter springt beim Verschieben des Playheads ans Ende (#338)

Stand: Nachrichten-Reiter springt ans Ende (Nutzerwunsch beim Test auf der Mac-VM)

Geändert: ChatHistorySheet.swift, messagesView: ScrollViewReader mit Anker am Ende der Nachrichten; bei jedem Wechsel des Standes springt die Ansicht nach unten (zweimal, mit 200 ms Abstand, weil die Zeilen der LazyVStack vor dem ersten Rendern nur geschätzte Höhen haben).

Geprüft: swiftc -typecheck über alle Swift-Dateien von Iris/: keine Fehler in ChatHistorySheet.swift (die zwei bestehenden SDK-Fehler in RemoteAppSession.swift bleiben).

Nicht geprüft: Nicht in Xcode gebaut und nicht bedient. Ob der Sprung bei sehr langen Chats (Hunderte Nachrichten, variable Höhen, Bilder) genau am Ende landet, ist offen.

Offen: iOS-Gegenstück ist in iris/2ndbrain-ios#107; iris-web: iris/iris-web#45.

PR #341 gemergt: feat(history): Nachrichten-Reiter springt beim Verschieben des Playheads ans Ende (#338) http://docker:3000/iris/Iris/pulls/341 Commits: - feat(history): Nachrichten-Reiter springt beim Verschieben des Playheads ans Ende (#338) --- **Stand: Nachrichten-Reiter springt ans Ende (Nutzerwunsch beim Test auf der Mac-VM)** **Geändert:** `ChatHistorySheet.swift`, `messagesView`: `ScrollViewReader` mit Anker am Ende der Nachrichten; bei jedem Wechsel des Standes springt die Ansicht nach unten (zweimal, mit 200 ms Abstand, weil die Zeilen der `LazyVStack` vor dem ersten Rendern nur geschätzte Höhen haben). **Geprüft:** `swiftc -typecheck` über alle Swift-Dateien von `Iris/`: keine Fehler in `ChatHistorySheet.swift` (die zwei bestehenden SDK-Fehler in `RemoteAppSession.swift` bleiben). **Nicht geprüft:** Nicht in Xcode gebaut und nicht bedient. Ob der Sprung bei sehr langen Chats (Hunderte Nachrichten, variable Höhen, Bilder) genau am Ende landet, ist offen. **Offen:** iOS-Gegenstück ist in iris/2ndbrain-ios#107; iris-web: iris/iris-web#45.
Author
Owner

PR #162 gemergt: docs(wire): Chatverlauf – messages_changed und reason je Stand (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/162

Commits:

  • docs(wire): Chatverlauf – messages_changed und reason je Stand (iris/Iris#338)

Spec: Zeitleiste um messages_changed und reason ergänzt (Nutzerwunsch beim Test auf der Mac-VM).

Warum: Ein hoher Strich sagte nur „Workspace geändert“; ob auch der Verlauf sich geändert hat, war nicht erkennbar, und als Betreff stand überall „Manuelle Änderung“. Der Job-Hook schreibt zwar iris: <Beschreibung> und den letzten Prompt in den Commit, aber der Export des geteilten Chats kommt nach dem Hook-Commit und wird vom Vault-Wächter als „Manuelle Änderung“ committet (im Vault geprüft: alle 8 Commits des Chats „Raiden II Tilemap-Editor“). Deshalb wird der Grund aus den Nachrichten abgeleitet: der neu dazugekommene letzte Nutzer-Prompt; sonst ein aussagekräftiger Commit-Betreff; sonst leer. Das gilt auch für die schon vorhandene Historie.

Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: Der Export selbst bleibt unverändert, der Betreff der Vault-Commits ändert sich nicht.

PR #162 gemergt: docs(wire): Chatverlauf – messages_changed und reason je Stand (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/162 Commits: - docs(wire): Chatverlauf – messages_changed und reason je Stand (iris/Iris#338) --- **Spec: Zeitleiste um `messages_changed` und `reason` ergänzt** (Nutzerwunsch beim Test auf der Mac-VM). Warum: Ein hoher Strich sagte nur „Workspace geändert“; ob auch der Verlauf sich geändert hat, war nicht erkennbar, und als Betreff stand überall „Manuelle Änderung“. Der Job-Hook schreibt zwar `iris: <Beschreibung>` und den letzten Prompt in den Commit, aber der Export des geteilten Chats kommt nach dem Hook-Commit und wird vom Vault-Wächter als „Manuelle Änderung“ committet (im Vault geprüft: alle 8 Commits des Chats „Raiden II Tilemap-Editor“). Deshalb wird der Grund aus den Nachrichten abgeleitet: der neu dazugekommene letzte Nutzer-Prompt; sonst ein aussagekräftiger Commit-Betreff; sonst leer. Das gilt auch für die schon vorhandene Historie. Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: Der Export selbst bleibt unverändert, der Betreff der Vault-Commits ändert sich nicht.
Author
Owner

PR #342 gemergt: feat(history): Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund (#338)
http://docker:3000/iris/Iris/pulls/342

Commits:

  • feat(history): Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund (#338)

Stand: Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund der Änderung (Nutzerwunsch beim Test auf der Mac-VM)

Geändert: ChatHistoryCore.swift: messagesChanged (Prüfsumme von messages.json gegenüber dem Vorgänger) und reason (neuer letzter Nutzer-Prompt; sonst aussagekräftiger Commit-Betreff; sonst leer) je Stand, Wire-Felder messages_changed, reason. RemoteChatHistory.swift: neue Felder (ältere Server: true und leer). ChatHistorySheet.swift: jeder Strich hat zwei Hälften, oben der Verlauf (Akzentfarbe), unten der Workspace (grün), eine unveränderte Hälfte nur als kleiner Punkt; unter dem Datum steht der Grund (zwei Zeilen, Tooltip mit vollem Text), ohne Prompt ein Satz, was sich geändert hat; Legende angepasst; der Commit-Betreff „Manuelle Änderung“ steht nicht mehr in der Detailzeile.

Geprüft: scripts/test-chat-history-core.sh: 54 Prüfungen grün (u. a. Grund, Wächter-Betreff, Kürzung, Wire-Felder); swiftc -typecheck über alle Dateien von Iris/: keine Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler in RemoteAppSession.swift).

Nicht geprüft: Nicht in Xcode gebaut und nicht bedient; das Aussehen der zweigeteilten Striche und die Zeile mit dem Grund nie gesehen. Der Export und die Commit-Betreffe im Vault sind unverändert: der Grund kommt aus den Nachrichten, nicht aus dem Commit-Body.

Offen: iris-web (iris/iris-web#45) muss die neuen Felder kennen.

PR #342 gemergt: feat(history): Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund (#338) http://docker:3000/iris/Iris/pulls/342 Commits: - feat(history): Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund (#338) --- **Stand: Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund der Änderung** (Nutzerwunsch beim Test auf der Mac-VM) **Geändert:** `ChatHistoryCore.swift`: `messagesChanged` (Prüfsumme von `messages.json` gegenüber dem Vorgänger) und `reason` (neuer letzter Nutzer-Prompt; sonst aussagekräftiger Commit-Betreff; sonst leer) je Stand, Wire-Felder `messages_changed`, `reason`. `RemoteChatHistory.swift`: neue Felder (ältere Server: `true` und leer). `ChatHistorySheet.swift`: jeder Strich hat zwei Hälften, oben der Verlauf (Akzentfarbe), unten der Workspace (grün), eine unveränderte Hälfte nur als kleiner Punkt; unter dem Datum steht der Grund (zwei Zeilen, Tooltip mit vollem Text), ohne Prompt ein Satz, was sich geändert hat; Legende angepasst; der Commit-Betreff „Manuelle Änderung“ steht nicht mehr in der Detailzeile. **Geprüft:** `scripts/test-chat-history-core.sh`: 54 Prüfungen grün (u. a. Grund, Wächter-Betreff, Kürzung, Wire-Felder); `swiftc -typecheck` über alle Dateien von `Iris/`: keine Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler in `RemoteAppSession.swift`). **Nicht geprüft:** Nicht in Xcode gebaut und nicht bedient; das Aussehen der zweigeteilten Striche und die Zeile mit dem Grund nie gesehen. Der Export und die Commit-Betreffe im Vault sind unverändert: der Grund kommt aus den Nachrichten, nicht aus dem Commit-Body. **Offen:** iris-web (iris/iris-web#45) muss die neuen Felder kennen.
Author
Owner

PR #163 gemergt: docs(wire): Chatverlauf – Route für eine Datei im Stand eines Commits (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/163

Commits:

  • docs(wire): Chatverlauf – Route für eine Datei im Stand eines Commits (iris/Iris#338)

Spec: vierte Route GET /agent/:id/history/:commit/file?path= (Nutzerwunsch beim Test auf der Mac-VM: Dateien aus der Dateiliste des Chatverlaufs auf den Desktop ziehen, im Stand des gewählten Zeitpunkts).

Rohe Bytes der Workspace-Datei im Stand des Commits; 400 bei ungültigem Pfad, 404 bei unbekanntem Commit oder fehlender Datei, 413 über 200 MB. Beide Server setzen sie um. Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: gegen einen laufenden Server.

PR #163 gemergt: docs(wire): Chatverlauf – Route für eine Datei im Stand eines Commits (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/163 Commits: - docs(wire): Chatverlauf – Route für eine Datei im Stand eines Commits (iris/Iris#338) --- **Spec: vierte Route `GET /agent/:id/history/:commit/file?path=`** (Nutzerwunsch beim Test auf der Mac-VM: Dateien aus der Dateiliste des Chatverlaufs auf den Desktop ziehen, im Stand des gewählten Zeitpunkts). Rohe Bytes der Workspace-Datei im Stand des Commits; 400 bei ungültigem Pfad, 404 bei unbekanntem Commit oder fehlender Datei, 413 über 200 MB. Beide Server setzen sie um. Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: gegen einen laufenden Server.
Author
Owner

PR #343 gemergt: feat(history): Dateien aus dem Chatverlauf auf den Desktop ziehen (#338)
http://docker:3000/iris/Iris/pulls/343

Commits:

  • feat(history): Dateien aus dem Chatverlauf auf den Desktop ziehen (#338)

Stand: Dateien aus dem Chatverlauf auf den Desktop ziehen (Nutzerwunsch beim Test auf der Mac-VM)

Geändert: IrisRemoteServer.swift: Route GET /agent/:id/history/:commit/file?path= (handleChatHistoryFile: Pfadprüfung, Commit muss zur Zeitleiste gehören, Inhalt im Stand des Commits, 400/404/413). ChatHistoryCore.swift: isSafeRelativePath, knownCommit. RemoteChatHistory.swift: downloadChatHistoryFile. ChatHistorySheet.swift: Zeilen der Dateiliste sind per .onDrag ziehbar (NSItemProvider.registerFileRepresentation, die Datei kommt erst beim Ablegen vom Server und behält ihren Dateinamen); gelöschte Dateien sind nicht ziehbar (Tooltip „In diesem Stand gelöscht“).

Geprüft: scripts/test-chat-history-core.sh: 62 Prüfungen grün (u. a. Pfadprüfung, bekannter Commit, Inhalt der Datei im ersten und im dritten Stand, fehlende Datei); swiftc -typecheck über alle Dateien von Iris/ ohne Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler in RemoteAppSession.swift).

Nicht geprüft: Nicht in Xcode gebaut, das Ziehen nie ausprobiert (nach Finder, Desktop, in ein anderes Programm); ob .onDrag auf einer List-Zeile auf macOS zuverlässig auslöst, ist offen. Dateien über 200 MB gehen nicht (413). Ziehen mehrerer Dateien auf einmal gibt es nicht.

Offen: iOS hat dafür nichts (Ziehen auf den Desktop gibt es dort nicht); iris-web: iris/iris-web#45.

PR #343 gemergt: feat(history): Dateien aus dem Chatverlauf auf den Desktop ziehen (#338) http://docker:3000/iris/Iris/pulls/343 Commits: - feat(history): Dateien aus dem Chatverlauf auf den Desktop ziehen (#338) --- **Stand: Dateien aus dem Chatverlauf auf den Desktop ziehen** (Nutzerwunsch beim Test auf der Mac-VM) **Geändert:** `IrisRemoteServer.swift`: Route `GET /agent/:id/history/:commit/file?path=` (`handleChatHistoryFile`: Pfadprüfung, Commit muss zur Zeitleiste gehören, Inhalt im Stand des Commits, 400/404/413). `ChatHistoryCore.swift`: `isSafeRelativePath`, `knownCommit`. `RemoteChatHistory.swift`: `downloadChatHistoryFile`. `ChatHistorySheet.swift`: Zeilen der Dateiliste sind per `.onDrag` ziehbar (`NSItemProvider.registerFileRepresentation`, die Datei kommt erst beim Ablegen vom Server und behält ihren Dateinamen); gelöschte Dateien sind nicht ziehbar (Tooltip „In diesem Stand gelöscht“). **Geprüft:** `scripts/test-chat-history-core.sh`: 62 Prüfungen grün (u. a. Pfadprüfung, bekannter Commit, Inhalt der Datei im ersten und im dritten Stand, fehlende Datei); `swiftc -typecheck` über alle Dateien von `Iris/` ohne Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler in `RemoteAppSession.swift`). **Nicht geprüft:** Nicht in Xcode gebaut, das Ziehen nie ausprobiert (nach Finder, Desktop, in ein anderes Programm); ob `.onDrag` auf einer `List`-Zeile auf macOS zuverlässig auslöst, ist offen. Dateien über 200 MB gehen nicht (413). Ziehen mehrerer Dateien auf einmal gibt es nicht. **Offen:** iOS hat dafür nichts (Ziehen auf den Desktop gibt es dort nicht); iris-web: iris/iris-web#45.
Author
Owner

PR #344 gemergt: docs(handbuch): Kapitel Chatverlauf und Anwendungsbeispiel (#338)
http://docker:3000/iris/Iris/pulls/344

Commits:

  • docs(handbuch): Kapitel Chatverlauf und Anwendungsbeispiel (#338)

Stand: Benutzerhandbuch um Chatverlauf und Anwendungsbeispiel ergänzt (auf ausdrücklichen Wunsch)

Neu: Kapitel „Chatverlauf – Sessions versionieren“ (Gruppe Vault, nach Vault-Synchronisation): öffnen (Mac, iPhone/iPad), Zeitleiste mit Playhead und den zwei Hälften je Strich, Grund eines Stands, die drei Reiter, Dateien auf den Desktop ziehen (Mac), Klon, wann ein Stand entsteht, Grenzen. Kapitel „Wie ich Iris selbst einsetze“ (Gruppe Erste Schritte): Homelab mit M3 Ultra, KI-Server mit zwei RTX-Karten, RTX 6000, mehr als zehn Instanzen mit eigenen Forgejos, Chats per Drag & Drop und über die Git-Server verschieben, Chatverlauf im Einsatz. Verweis im Kapitel Vault-Synchronisation. Gebaut mit build_handbuch.py (33 Kapitel); Iris/Resources/BENUTZERHANDBUCH.md neu erzeugt (nur Ergänzungen, keine anderen Kapitel verändert).

Geprüft: Build läuft durch; Links der neuen Kapitel zeigen auf vorhandene Seiten; die Texte gegen den gebauten Stand des Chatverlaufs abgeglichen (nur Implementiertes, Grenzen genannt).

Nicht geprüft: Die Handbuch-Seiten nicht in der App (HilfeView) und nicht in der iOS-App angesehen; Handbuch-Ordner Handbuch/ und IrisRemote/Handbuch/ sind ignoriert und lokal neu erzeugt, nicht im Repo. Das Anwendungsbeispiel enthält nur, was Alf dazu gesagt hat (Hardware, Instanzen, Drag & Drop, Forgejos, Chatverlauf); weitere Beispiele wären zu ergänzen. Der Builder löst [[Wikilinks]] nicht auf (gilt auch für bestehende Kapitel).

Offen: Die Gesamtüberarbeitung des Handbuchs steht weiter aus.

PR #344 gemergt: docs(handbuch): Kapitel Chatverlauf und Anwendungsbeispiel (#338) http://docker:3000/iris/Iris/pulls/344 Commits: - docs(handbuch): Kapitel Chatverlauf und Anwendungsbeispiel (#338) --- **Stand: Benutzerhandbuch um Chatverlauf und Anwendungsbeispiel ergänzt** (auf ausdrücklichen Wunsch) **Neu:** Kapitel „Chatverlauf – Sessions versionieren“ (Gruppe Vault, nach Vault-Synchronisation): öffnen (Mac, iPhone/iPad), Zeitleiste mit Playhead und den zwei Hälften je Strich, Grund eines Stands, die drei Reiter, Dateien auf den Desktop ziehen (Mac), Klon, wann ein Stand entsteht, Grenzen. Kapitel „Wie ich Iris selbst einsetze“ (Gruppe Erste Schritte): Homelab mit M3 Ultra, KI-Server mit zwei RTX-Karten, RTX 6000, mehr als zehn Instanzen mit eigenen Forgejos, Chats per Drag & Drop und über die Git-Server verschieben, Chatverlauf im Einsatz. Verweis im Kapitel Vault-Synchronisation. Gebaut mit `build_handbuch.py` (33 Kapitel); `Iris/Resources/BENUTZERHANDBUCH.md` neu erzeugt (nur Ergänzungen, keine anderen Kapitel verändert). **Geprüft:** Build läuft durch; Links der neuen Kapitel zeigen auf vorhandene Seiten; die Texte gegen den gebauten Stand des Chatverlaufs abgeglichen (nur Implementiertes, Grenzen genannt). **Nicht geprüft:** Die Handbuch-Seiten nicht in der App (HilfeView) und nicht in der iOS-App angesehen; Handbuch-Ordner `Handbuch/` und `IrisRemote/Handbuch/` sind ignoriert und lokal neu erzeugt, nicht im Repo. Das Anwendungsbeispiel enthält nur, was Alf dazu gesagt hat (Hardware, Instanzen, Drag & Drop, Forgejos, Chatverlauf); weitere Beispiele wären zu ergänzen. Der Builder löst `[[Wikilinks]]` nicht auf (gilt auch für bestehende Kapitel). **Offen:** Die Gesamtüberarbeitung des Handbuchs steht weiter aus.
Author
Owner

PR #164 gemergt: docs(entwicklerdoku): Chatverlauf und Iris-Web mit Gateways (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/164

Commits:

  • docs(entwicklerdoku): Chatverlauf und Iris-Web mit Gateways (iris/Iris#338)

Stand: Entwicklerdokumentation um Chatverlauf und Iris-Web ergänzt

Neu: 17-Chatverlauf.md (Datenherkunft aus dem Vault-Git, wie ein Stand entsteht und warum der Betreff nichts über den Grund sagt, Ableitung von reason, Bausteine je Repo, LFS, Zwischenspeicher, Pfadsicherheit, Entscheidungen, Grenzen, offene Idee) und 18-Iris-Web.md (Einordnung, Aufbau des Repos, Transporte und Sicherheit, die Gateways iris-web-linux und iris-web-mac, Stand der Umsetzung, Entscheidungen in Kürze). Eingetragen in Entwicklerdokumentation/CLAUDE.md, ÖKOSYSTEM-INDEX.md (neuer Abschnitt 9, Linux-Client als veraltet markiert) und mit einem Verweis im Wire-Protokoll.

Wichtig zum Gateway: Ein ausgeschriebener Gateway-Vertrag existiert nicht, und die Plugins iris-web-linux und iris-web-mac sind nicht gebaut. 18-Iris-Web.md hält fest, was aus den Entscheidungen feststeht (Passwort-Login, Session-Cookie, Master-Token, LAN als Standard, Proxy-Modus, gemeinsame Vertragstests) und listet getrennt auf, was noch festzulegen ist (Pfade und Formate von Login/Session, Allowlist oder alle Routen, SSE und Binärdaten, Sitzungsdauer und Token-Rotation, Verhalten bei Desktop-only-Funktionen). Nichts davon ist erfunden; die Arbeit bleibt iris/iris-plugins#346, Schritt 1.

Geprüft: Das Mermaid-Diagramm in 17-Chatverlauf.md mit mermaid-validate (gültig); Pfade, Dateinamen und Issue-Nummern gegen die Repos und Issues abgeglichen.

Nicht geprüft: Ob alle Angaben zu iris-web (Aufbau, Stand) mit dem laufenden Stand der Entwicklung dort übereinstimmen; das Repo wird parallel weiterentwickelt. frontend/iris-web/CLAUDE.md behauptet weiterhin, der Gateway-Vertrag stehe in der Entwicklerdokumentation (steht jetzt in 18-Iris-Web.md, aber als offene Stelle); diese Datei habe ich nicht angefasst.

PR #164 gemergt: docs(entwicklerdoku): Chatverlauf und Iris-Web mit Gateways (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/164 Commits: - docs(entwicklerdoku): Chatverlauf und Iris-Web mit Gateways (iris/Iris#338) --- **Stand: Entwicklerdokumentation um Chatverlauf und Iris-Web ergänzt** **Neu:** `17-Chatverlauf.md` (Datenherkunft aus dem Vault-Git, wie ein Stand entsteht und warum der Betreff nichts über den Grund sagt, Ableitung von `reason`, Bausteine je Repo, LFS, Zwischenspeicher, Pfadsicherheit, Entscheidungen, Grenzen, offene Idee) und `18-Iris-Web.md` (Einordnung, Aufbau des Repos, Transporte und Sicherheit, die Gateways `iris-web-linux` und `iris-web-mac`, Stand der Umsetzung, Entscheidungen in Kürze). Eingetragen in `Entwicklerdokumentation/CLAUDE.md`, `ÖKOSYSTEM-INDEX.md` (neuer Abschnitt 9, Linux-Client als veraltet markiert) und mit einem Verweis im Wire-Protokoll. **Wichtig zum Gateway:** Ein ausgeschriebener **Gateway-Vertrag existiert nicht**, und die Plugins `iris-web-linux` und `iris-web-mac` sind nicht gebaut. `18-Iris-Web.md` hält fest, was aus den Entscheidungen feststeht (Passwort-Login, Session-Cookie, Master-Token, LAN als Standard, Proxy-Modus, gemeinsame Vertragstests) und listet getrennt auf, was **noch festzulegen** ist (Pfade und Formate von Login/Session, Allowlist oder alle Routen, SSE und Binärdaten, Sitzungsdauer und Token-Rotation, Verhalten bei Desktop-only-Funktionen). Nichts davon ist erfunden; die Arbeit bleibt iris/iris-plugins#346, Schritt 1. **Geprüft:** Das Mermaid-Diagramm in `17-Chatverlauf.md` mit `mermaid-validate` (gültig); Pfade, Dateinamen und Issue-Nummern gegen die Repos und Issues abgeglichen. **Nicht geprüft:** Ob alle Angaben zu iris-web (Aufbau, Stand) mit dem laufenden Stand der Entwicklung dort übereinstimmen; das Repo wird parallel weiterentwickelt. `frontend/iris-web/CLAUDE.md` behauptet weiterhin, der Gateway-Vertrag stehe in der Entwicklerdokumentation (steht jetzt in `18-Iris-Web.md`, aber als offene Stelle); diese Datei habe ich nicht angefasst.
Author
Owner

PR #165 gemergt: docs(entwicklerdoku): 17-Chatverlauf.md und 18-Iris-Web.md nachgereicht (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/165

Commits:

  • docs(entwicklerdoku): 17-Chatverlauf.md und 18-Iris-Web.md nachgereicht (iris/Iris#338)

Nachtrag: die beiden Dateien fehlten im vorigen PR. Entwicklerdokumentation/17-Chatverlauf.md und 18-Iris-Web.md waren beim ersten ship nicht versioniert (-a vergessen); gemergt waren nur die Verweise darauf (CLAUDE.md, ÖKOSYSTEM-INDEX, Wire-Protokoll), die Links liefen also kurz ins Leere. Mit diesem PR liegen beide Dateien im Repo; Inhalt wie im Kommentar zum vorigen PR beschrieben.

Geprüft: Nach dem Ship git ls-files auf beide Dateien (siehe unten im Ablauf) und git status ohne ??.

PR #165 gemergt: docs(entwicklerdoku): 17-Chatverlauf.md und 18-Iris-Web.md nachgereicht (iris/Iris#338) http://docker:3000/alf/2ndbrain/pulls/165 Commits: - docs(entwicklerdoku): 17-Chatverlauf.md und 18-Iris-Web.md nachgereicht (iris/Iris#338) --- **Nachtrag: die beiden Dateien fehlten im vorigen PR.** `Entwicklerdokumentation/17-Chatverlauf.md` und `18-Iris-Web.md` waren beim ersten `ship` nicht versioniert (`-a` vergessen); gemergt waren nur die Verweise darauf (CLAUDE.md, ÖKOSYSTEM-INDEX, Wire-Protokoll), die Links liefen also kurz ins Leere. Mit diesem PR liegen beide Dateien im Repo; Inhalt wie im Kommentar zum vorigen PR beschrieben. **Geprüft:** Nach dem Ship `git ls-files` auf beide Dateien (siehe unten im Ablauf) und `git status` ohne `??`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#338
No description provided.