Vault-Sync: Wechsel auf einen anderen Forgejo-Server (Historie prüfen, Verbindung trennen) #223

Closed
opened 2026-10-28 14:58:52 +00:00 by alf · 13 comments
Owner

Teil von iris/Iris#76 (Vault-Synchronisation).

Befund

Ein Vault, das schon synchronisiert, kann nicht sauber auf einen anderen Forgejo-Server umziehen (Linux-Server und Mac-Server verhalten sich gleich):

  • configure setzt bei vorhandenem origin nur die URL um (Modus credentials_updated) und prüft nicht, ob die Historie des neuen Repos zum Vault passt. Die Prüfung (merge-base) kommt erst beim nächsten Abgleich: Status error, „Die Historie des Servers passt nicht zu diesem Vault“. Der Server bleibt im Fehlerzustand, bis die URL zurückgesetzt wird.
  • Beim ersten Verbinden eines Vaults ohne Remote und mit fremder Historie lehnt configure mit unrelated_history ab. Ein Vault nur mit Dateien scheitert bei gleichnamigen Dateien an collisions und wird zurückgesetzt.
  • Der Nutzer hat in allen Fällen keinen Weg, ohne Handarbeit weiterzukommen.

Auslöser: Test mit einem Vault auf der Mac-VM (Historie aus dem Linux-Server-Repo) gegen das Repo des Mac Studio (eigene Historie).

Ziel

Ein Nutzer kann sein Vault jederzeit mit einem anderen Forgejo-Server verbinden, ohne Daten zu verlieren und ohne Handarbeit. Es wird nichts gelöscht und nichts überschrieben.

Entscheidungen (grill-me, 2026-10-28)

  1. Leerer Zielserver: configure pusht das Vault sofort (Modus published, mit Fortschritt über /vault/sync/progress) und meldet Erfolg oder einen klaren Fehler. Bei einem Fehler bleibt die alte URL bestehen.
  2. Fremde Historie: nicht ablehnen, sondern zusammenführen: git merge --allow-unrelated-histories. Beide Historien bleiben erhalten, es wird nichts gelöscht. Damit entfallen unrelated_history und collisions als Fehlerarten.
  3. Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Konfliktmechanismus (add/add, keine Basis): Merge wird abgebrochen, Vault bleibt sauber, Status conflict, der Job läuft weiter, kein Push bis alle gelöst sind. Identische Dateien verschmelzen still und erscheinen nicht in der Liste.
  4. Dialog (zwei Ansichten, links meine Version, rechts Server; ohne Basis ein Zwei-Wege-Vergleich):
    • Einzelwahlen: meine Version, Server-Version, beide behalten (neu, both: die Server-Version kommt als Name (Server).md dazu), zusammenführen (merged, wie bisher).
    • Für .obsidian/*.json gibt es nur meine und Server.
    • Sammelaktionen („überall meine / Server / beide behalten“) für alle offenen Konflikte oder einen Ordner.
    • Die Wahlen sammeln sich beim Server (POST resolve pro Pfad); der Merge läuft, sobald alle Pfade eine Wahl haben. Der Nutzer kann abbrechen und später weitermachen.
  5. Der Wechsel gilt sofort: origin zeigt direkt auf den neuen Server. Bis alle Konflikte gelöst sind, ruht der Abgleich (Regel aus #76); Lampe und Info-Fenster sagen das in Klartext. Zurück geht über „Vault verbinden“ mit dem alten Server (der Merge wurde abgebrochen, am Vault ist nichts verändert).
  6. Reihenfolge der Pfade:
    • Zuerst Vault mit Remote (anderer Server) und Vault mit Verlauf ohne Remote.
    • Danach Vault nur mit Dateien (union): git init + Commit der Dateien, Fetch, Merge mit --allow-unrelated-histories, statt checkout. Berührt LFS-Download, Fortsetzungs-Marker und leere Zeigerdateien für fehlende Anhänge (_download_and_checkout) und muss mit vielen Anhängen getestet werden. Bis dahin meldet dieser Pfad weiter collisions.
  7. Alle Clients in derselben Lieferung (Wire-Vertrag): Mac-Server, Linux-Server, Iris, IrisClient, IrisRemote. IrisRemote erweitert den vorhandenen Dialog (iPad: zwei Spalten, iPhone: Umschalter „Meine Version / Server“, Sammelaktionen oben), kein Neubau.

Wire-Protokoll

  • POST resolve: neue Wahl both.
  • POST configure: statt unrelated_history / collisions (Pfade 1 und 2) meldet die Antwort den Konfliktzustand; GET conflicts liefert Konflikte ohne Basis.

Nicht Teil dieses Issues

Verwerfen der eigenen Historie (Route zum Trennen, Sicherungs-Bundle, Bestätigung) entfällt. Bleibt als spätere Option, falls ein Nutzer bewusst neu anfangen will.

Beim Bau zu prüfen (noch nicht gelesen)

  • Zeigen die Clients den Server-Text message oder einen eigenen Text für unrelated_history (VaultSyncModel.swift)?
  • Aufbau des vorhandenen Konfliktdialogs in IrisRemote.
  • Ob die Ausnahme für .obsidian/*.json beim Server oder im Client liegt.
  • Ablauf bei einem leeren Ziel, wenn der Push scheitert (Token ohne Schreibrecht): alte URL bleibt, Meldung im Klartext.

Abnahmekriterien (Entwurf)

  1. Wechsel auf leeren Server: Vault samt Historie liegt danach dort, Fehler lassen die alte URL stehen.
  2. Wechsel auf Repo mit gleicher Historie (Spiegel): läuft wie ein normaler Abgleich.
  3. Wechsel auf Repo mit fremder Historie: Konfliktliste nur mit unterschiedlichen Dateien, Vault sauber, Job läuft, nichts gelöscht.
  4. Alle vier Einzelwahlen und die Sammelaktionen funktionieren; nach dem Lösen aller Pfade läuft der Push.
  5. Server-Parität (Mac gegen Linux) und alle drei Clients zeigen denselben Dialog.
  6. Test mit großem Vault inkl. LFS-Anhängen (Mac Studio nach VM).
Teil von iris/Iris#76 (Vault-Synchronisation). ## Befund Ein Vault, das schon synchronisiert, kann nicht sauber auf einen anderen Forgejo-Server umziehen (Linux-Server und Mac-Server verhalten sich gleich): - `configure` setzt bei vorhandenem `origin` nur die URL um (Modus `credentials_updated`) und prüft **nicht**, ob die Historie des neuen Repos zum Vault passt. Die Prüfung (`merge-base`) kommt erst beim nächsten Abgleich: Status `error`, „Die Historie des Servers passt nicht zu diesem Vault“. Der Server bleibt im Fehlerzustand, bis die URL zurückgesetzt wird. - Beim ersten Verbinden eines Vaults ohne Remote und mit fremder Historie lehnt `configure` mit `unrelated_history` ab. Ein Vault nur mit Dateien scheitert bei gleichnamigen Dateien an `collisions` und wird zurückgesetzt. - Der Nutzer hat in allen Fällen keinen Weg, ohne Handarbeit weiterzukommen. Auslöser: Test mit einem Vault auf der Mac-VM (Historie aus dem Linux-Server-Repo) gegen das Repo des Mac Studio (eigene Historie). ## Ziel Ein Nutzer kann sein Vault jederzeit mit einem anderen Forgejo-Server verbinden, ohne Daten zu verlieren und ohne Handarbeit. Es wird nichts gelöscht und nichts überschrieben. ## Entscheidungen (grill-me, 2026-10-28) 1. **Leerer Zielserver:** `configure` pusht das Vault sofort (Modus `published`, mit Fortschritt über `/vault/sync/progress`) und meldet Erfolg oder einen klaren Fehler. Bei einem Fehler bleibt die alte URL bestehen. 2. **Fremde Historie:** nicht ablehnen, sondern zusammenführen: `git merge --allow-unrelated-histories`. Beide Historien bleiben erhalten, es wird nichts gelöscht. Damit entfallen `unrelated_history` und `collisions` als Fehlerarten. 3. **Gleichnamige Dateien mit anderem Inhalt** werden Konflikte im bestehenden Konfliktmechanismus (add/add, keine Basis): Merge wird abgebrochen, Vault bleibt sauber, Status `conflict`, der Job läuft weiter, kein Push bis alle gelöst sind. Identische Dateien verschmelzen still und erscheinen nicht in der Liste. 4. **Dialog** (zwei Ansichten, links meine Version, rechts Server; ohne Basis ein Zwei-Wege-Vergleich): - Einzelwahlen: *meine Version*, *Server-Version*, *beide behalten* (neu, `both`: die Server-Version kommt als `Name (Server).md` dazu), *zusammenführen* (`merged`, wie bisher). - Für `.obsidian/*.json` gibt es nur *meine* und *Server*. - Sammelaktionen („überall meine / Server / beide behalten“) für alle offenen Konflikte oder einen Ordner. - Die Wahlen sammeln sich beim Server (`POST resolve` pro Pfad); der Merge läuft, sobald alle Pfade eine Wahl haben. Der Nutzer kann abbrechen und später weitermachen. 5. **Der Wechsel gilt sofort:** `origin` zeigt direkt auf den neuen Server. Bis alle Konflikte gelöst sind, ruht der Abgleich (Regel aus #76); Lampe und Info-Fenster sagen das in Klartext. Zurück geht über „Vault verbinden“ mit dem alten Server (der Merge wurde abgebrochen, am Vault ist nichts verändert). 6. **Reihenfolge der Pfade:** - **Zuerst** Vault mit Remote (anderer Server) und Vault mit Verlauf ohne Remote. - **Danach** Vault nur mit Dateien (`union`): `git init` + Commit der Dateien, Fetch, Merge mit `--allow-unrelated-histories`, statt `checkout`. Berührt LFS-Download, Fortsetzungs-Marker und leere Zeigerdateien für fehlende Anhänge (`_download_and_checkout`) und muss mit vielen Anhängen getestet werden. Bis dahin meldet dieser Pfad weiter `collisions`. 7. **Alle Clients in derselben Lieferung** (Wire-Vertrag): Mac-Server, Linux-Server, Iris, IrisClient, IrisRemote. IrisRemote erweitert den vorhandenen Dialog (iPad: zwei Spalten, iPhone: Umschalter „Meine Version / Server“, Sammelaktionen oben), kein Neubau. ## Wire-Protokoll - `POST resolve`: neue Wahl `both`. - `POST configure`: statt `unrelated_history` / `collisions` (Pfade 1 und 2) meldet die Antwort den Konfliktzustand; `GET conflicts` liefert Konflikte ohne Basis. ## Nicht Teil dieses Issues Verwerfen der eigenen Historie (Route zum Trennen, Sicherungs-Bundle, Bestätigung) entfällt. Bleibt als spätere Option, falls ein Nutzer bewusst neu anfangen will. ## Beim Bau zu prüfen (noch nicht gelesen) - Zeigen die Clients den Server-Text `message` oder einen eigenen Text für `unrelated_history` (`VaultSyncModel.swift`)? - Aufbau des vorhandenen Konfliktdialogs in IrisRemote. - Ob die Ausnahme für `.obsidian/*.json` beim Server oder im Client liegt. - Ablauf bei einem leeren Ziel, wenn der Push scheitert (Token ohne Schreibrecht): alte URL bleibt, Meldung im Klartext. ## Abnahmekriterien (Entwurf) 1. Wechsel auf leeren Server: Vault samt Historie liegt danach dort, Fehler lassen die alte URL stehen. 2. Wechsel auf Repo mit gleicher Historie (Spiegel): läuft wie ein normaler Abgleich. 3. Wechsel auf Repo mit fremder Historie: Konfliktliste nur mit unterschiedlichen Dateien, Vault sauber, Job läuft, nichts gelöscht. 4. Alle vier Einzelwahlen und die Sammelaktionen funktionieren; nach dem Lösen aller Pfade läuft der Push. 5. Server-Parität (Mac gegen Linux) und alle drei Clients zeigen denselben Dialog. 6. Test mit großem Vault inkl. LFS-Anhängen (Mac Studio nach VM).
Author
Owner

Stand 2026-10-28: grill-me abgeschlossen

  • Befund: Der Mac-Server verhält sich wie der Linux-Server (VaultSyncCore.swift:827-829: bei vorhandenem Remote nur set-url, keine Historienprüfung). Der Wechsel ist in der Oberfläche erreichbar: Das Info-Fenster der Lampe öffnet bei verbundenem Vault wieder den Sheet „Vault verbinden“ (VaultSyncViews.swift:57-60).
  • Geändert: Die Beschreibung ist auf die Entscheidungen des Gesprächs umgestellt. Das ursprüngliche Konzept (Route zum Trennen, Sicherungs-Bundle, Verlauf verwerfen) entfällt zugunsten von „Historien zusammenführen, nichts löschen“ über den bestehenden Konfliktmechanismus.
  • Geprüft: nur Code gelesen (Linux-Server vault_git_sync.py, vault_sync_routes.py; Mac-Server und Info-Fenster an den genannten Stellen). Nichts gebaut, nichts gemessen.
  • Nicht geprüft: Aufbau des Konfliktdialogs in IrisRemote, ob die Clients den Server-Text anzeigen, Verhalten bei großen Vaults mit LFS.
  • Offen: Bau in zwei Schritten: erst Vault mit Remote und Vault mit Verlauf ohne Remote, danach das Vault nur mit Dateien (union). Vor dem Bau gilt die Bestätigung des Nutzers.
**Stand 2026-10-28: grill-me abgeschlossen** - **Befund:** Der Mac-Server verhält sich wie der Linux-Server (`VaultSyncCore.swift:827-829`: bei vorhandenem Remote nur `set-url`, keine Historienprüfung). Der Wechsel ist in der Oberfläche erreichbar: Das Info-Fenster der Lampe öffnet bei verbundenem Vault wieder den Sheet „Vault verbinden“ (`VaultSyncViews.swift:57-60`). - **Geändert:** Die Beschreibung ist auf die Entscheidungen des Gesprächs umgestellt. Das ursprüngliche Konzept (Route zum Trennen, Sicherungs-Bundle, Verlauf verwerfen) entfällt zugunsten von „Historien zusammenführen, nichts löschen“ über den bestehenden Konfliktmechanismus. - **Geprüft:** nur Code gelesen (Linux-Server `vault_git_sync.py`, `vault_sync_routes.py`; Mac-Server und Info-Fenster an den genannten Stellen). Nichts gebaut, nichts gemessen. - **Nicht geprüft:** Aufbau des Konfliktdialogs in IrisRemote, ob die Clients den Server-Text anzeigen, Verhalten bei großen Vaults mit LFS. - **Offen:** Bau in zwei Schritten: erst Vault mit Remote und Vault mit Verlauf ohne Remote, danach das Vault nur mit Dateien (`union`). Vor dem Bau gilt die Bestätigung des Nutzers.
Author
Owner

PR #119 gemergt: feat(vault-sync): Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223)
iris/iris-linux-server#119

Commits:

  • feat(vault-sync): Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223)

Stand 2026-10-28: Linux-Server, Pfade 1 und 2 gebaut

  • Befund: wie im Issue beschrieben; configure setzte bei vorhandenem Remote nur die URL um, bei fremder Historie lehnte es ab oder der Abgleich blieb im Fehlerzustand.
  • Geändert (vault_git_sync.py):
    • _merge_remote und _apply_resolution führen bei fehlendem gemeinsamen Vorfahren mit --allow-unrelated-histories zusammen, statt mit „Historie passt nicht“ abzubrechen. Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (Merge abgebrochen, Vault sauber, Status conflict, kein Push bis zur Auflösung, Basis None).
    • Neu _switch_remote: Vault mit Remote, aber anderer Adresse. Leerer Zielserver → Push (published); sonst Fetch, bei fremdem Verlauf Zusammenführen, bei gleichem Verlauf übernimmt der nächste Abgleich. Scheitert ein Schritt vor dem Zusammenführen, kommt die alte URL (und der alte Konfliktstand) zurück.
    • Vault mit Verlauf ohne Remote und fremder Historie: statt unrelated_history jetzt Zusammenführen.
    • Neue Antwort-Angabe conflict_count (nur wenn > 0). Neue Wahl both in POST resolve: die eigene Fassung bleibt am Pfad, die des Servers kommt als Name (Server).md (bei Namensgleichheit Name (Server 2).md). Für .obsidian/… mit 400 abgelehnt.
  • Geprüft: tests/test_vault_git_sync.py, 78 Tests grün (echtes git, lokale Bare-Repos). Neu: fremde Historie ohne und mit Konflikt, alle drei Wahlen, both für .obsidian/ und mit vorhandener Kopie, Wechsel auf leeren Server, Wechsel mit abgelehntem Push (alte URL bleibt), Wechsel auf Spiegel, Wechsel auf fremdes Repo mit Konflikt. Der alte Test test_configure_refuses_unrelated_history_and_restores ist ersetzt.
  • Nicht geprüft: gegen einen echten Forgejo über HTTP, großes Vault mit LFS-Anhängen, Mac-Server, alle Clients (kennen both und conflict_count noch nicht). Wire-Doku (02-Wire-Protokoll.md) noch nicht angepasst: kommt zusammen mit dem Mac-Server, damit sie nicht vorauseilt. Nicht auf iris-server deployt.
  • Offen: Mac-Server (VaultSyncCore.swift, gleiche Änderung), Clients (Dialog mit zwei Ansichten, Sammelaktionen, both, Lampentext „Der Abgleich ruht“), Pfad 3 (Vault nur mit Dateien, union).
  • Hinweis: tests/test_vault_git.py läuft gegen den echten Server und scheitert dort in zwei Tests (test_vault_git_log_no_repo_fails_gracefully, test_vault_git_log_parses_commits_with_pipe_in_message); das hat mit dieser Änderung nichts zu tun, ich habe es nicht weiter untersucht.
PR #119 gemergt: feat(vault-sync): Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/119 Commits: - feat(vault-sync): Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223) --- **Stand 2026-10-28: Linux-Server, Pfade 1 und 2 gebaut** - **Befund:** wie im Issue beschrieben; `configure` setzte bei vorhandenem Remote nur die URL um, bei fremder Historie lehnte es ab oder der Abgleich blieb im Fehlerzustand. - **Geändert (`vault_git_sync.py`):** - `_merge_remote` und `_apply_resolution` führen bei fehlendem gemeinsamen Vorfahren mit `--allow-unrelated-histories` zusammen, statt mit „Historie passt nicht“ abzubrechen. Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (Merge abgebrochen, Vault sauber, Status `conflict`, kein Push bis zur Auflösung, Basis `None`). - Neu `_switch_remote`: Vault mit Remote, aber anderer Adresse. Leerer Zielserver → Push (`published`); sonst Fetch, bei fremdem Verlauf Zusammenführen, bei gleichem Verlauf übernimmt der nächste Abgleich. Scheitert ein Schritt vor dem Zusammenführen, kommt die alte URL (und der alte Konfliktstand) zurück. - Vault mit Verlauf ohne Remote und fremder Historie: statt `unrelated_history` jetzt Zusammenführen. - Neue Antwort-Angabe `conflict_count` (nur wenn > 0). Neue Wahl `both` in `POST resolve`: die eigene Fassung bleibt am Pfad, die des Servers kommt als `Name (Server).md` (bei Namensgleichheit `Name (Server 2).md`). Für `.obsidian/…` mit `400` abgelehnt. - **Geprüft:** `tests/test_vault_git_sync.py`, 78 Tests grün (echtes git, lokale Bare-Repos). Neu: fremde Historie ohne und mit Konflikt, alle drei Wahlen, `both` für `.obsidian/` und mit vorhandener Kopie, Wechsel auf leeren Server, Wechsel mit abgelehntem Push (alte URL bleibt), Wechsel auf Spiegel, Wechsel auf fremdes Repo mit Konflikt. Der alte Test `test_configure_refuses_unrelated_history_and_restores` ist ersetzt. - **Nicht geprüft:** gegen einen echten Forgejo über HTTP, großes Vault mit LFS-Anhängen, Mac-Server, alle Clients (kennen `both` und `conflict_count` noch nicht). Wire-Doku (`02-Wire-Protokoll.md`) noch nicht angepasst: kommt zusammen mit dem Mac-Server, damit sie nicht vorauseilt. Nicht auf iris-server deployt. - **Offen:** Mac-Server (`VaultSyncCore.swift`, gleiche Änderung), Clients (Dialog mit zwei Ansichten, Sammelaktionen, `both`, Lampentext „Der Abgleich ruht“), Pfad 3 (Vault nur mit Dateien, `union`). - **Hinweis:** `tests/test_vault_git.py` läuft gegen den echten Server und scheitert dort in zwei Tests (`test_vault_git_log_no_repo_fails_gracefully`, `test_vault_git_log_parses_commits_with_pipe_in_message`); das hat mit dieser Änderung nichts zu tun, ich habe es nicht weiter untersucht.
Author
Owner

PR #224 gemergt: feat(vault-sync): Mac-Server — Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223)
#224

Commits:

  • feat(vault-sync): Mac-Server — Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223)

Stand 2026-10-28: Mac-Server gebaut (gleiche Änderung wie Linux-Server)

  • Geändert (VaultSyncCore.swift, VaultSyncController.swift):
    • mergeRemote und applyResolution führen bei fehlendem gemeinsamen Vorfahren mit --allow-unrelated-histories zusammen, statt mit „Historie passt nicht“ abzubrechen. Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (Merge abgebrochen, Vault sauber, Basis leer).
    • Neu switchRemote: Vault mit Remote, aber anderer Adresse. Leerer Zielserver → Push (published); sonst Fetch und bei fremdem Verlauf Zusammenführen; scheitert ein Schritt vor dem Zusammenführen, kommt die alte URL (und der alte Konfliktstand) zurück.
    • Vault mit Verlauf ohne Remote und fremder Historie: statt unrelated_history jetzt Zusammenführen. Der Merge läuft über einen Haken (VaultSyncSetup.exclusive) unter der Hook-Sperre des Controllers.
    • configure meldet conflict_count, wenn Konflikte offen sind. Neue Wahl both in POST resolve (Kopie Name (Server).md, nummeriert bei Namensgleichheit); für .obsidian/… mit 400 abgelehnt.
  • Geprüft: scripts/test-vault-sync-core.sh: 216 Prüfungen, 0 Fehler (echtes git, lokale Bare-Repos), darunter neu: fremder Verlauf ohne und mit Konflikt, alle drei Wahlen, both mit vorhandener Kopie, Wechsel auf leeren Server, abgelehnter Push (alte URL bleibt), Wechsel auf Spiegel, Wechsel auf fremdes Repo mit Konflikt. Die App (Scheme Iris, Debug) baut fehlerfrei (Build in eigenem DerivedData, nicht installiert).
  • Nicht geprüft: die laufende App (nicht installiert, nicht gestartet), echter Forgejo über HTTP, großes Vault mit LFS, IrisClient-Ziel nicht separat gebaut, die Clients kennen both und conflict_count noch nicht. Wire-Doku noch nicht angepasst (kommt nach den Clients).
  • Offen: Clients (Dialog mit zwei Ansichten, Sammelaktionen, both, Lampentext „Der Abgleich ruht“), Wire-Doku, Pfad 3 (Vault nur mit Dateien, union).
PR #224 gemergt: feat(vault-sync): Mac-Server — Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/224 Commits: - feat(vault-sync): Mac-Server — Wechsel auf anderen Forgejo-Server, fremde Historie zusammenführen (iris/Iris#223) --- **Stand 2026-10-28: Mac-Server gebaut (gleiche Änderung wie Linux-Server)** - **Geändert (`VaultSyncCore.swift`, `VaultSyncController.swift`):** - `mergeRemote` und `applyResolution` führen bei fehlendem gemeinsamen Vorfahren mit `--allow-unrelated-histories` zusammen, statt mit „Historie passt nicht“ abzubrechen. Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (Merge abgebrochen, Vault sauber, Basis leer). - Neu `switchRemote`: Vault mit Remote, aber anderer Adresse. Leerer Zielserver → Push (`published`); sonst Fetch und bei fremdem Verlauf Zusammenführen; scheitert ein Schritt vor dem Zusammenführen, kommt die alte URL (und der alte Konfliktstand) zurück. - Vault mit Verlauf ohne Remote und fremder Historie: statt `unrelated_history` jetzt Zusammenführen. Der Merge läuft über einen Haken (`VaultSyncSetup.exclusive`) unter der Hook-Sperre des Controllers. - `configure` meldet `conflict_count`, wenn Konflikte offen sind. Neue Wahl `both` in `POST resolve` (Kopie `Name (Server).md`, nummeriert bei Namensgleichheit); für `.obsidian/…` mit `400` abgelehnt. - **Geprüft:** `scripts/test-vault-sync-core.sh`: 216 Prüfungen, 0 Fehler (echtes git, lokale Bare-Repos), darunter neu: fremder Verlauf ohne und mit Konflikt, alle drei Wahlen, `both` mit vorhandener Kopie, Wechsel auf leeren Server, abgelehnter Push (alte URL bleibt), Wechsel auf Spiegel, Wechsel auf fremdes Repo mit Konflikt. Die App (Scheme Iris, Debug) baut fehlerfrei (Build in eigenem DerivedData, nicht installiert). - **Nicht geprüft:** die laufende App (nicht installiert, nicht gestartet), echter Forgejo über HTTP, großes Vault mit LFS, IrisClient-Ziel nicht separat gebaut, die Clients kennen `both` und `conflict_count` noch nicht. Wire-Doku noch nicht angepasst (kommt nach den Clients). - **Offen:** Clients (Dialog mit zwei Ansichten, Sammelaktionen, `both`, Lampentext „Der Abgleich ruht“), Wire-Doku, Pfad 3 (Vault nur mit Dateien, `union`).
Author
Owner

PR #225 gemergt: feat(vault-sync): Konfliktdialog mit „Beide behalten“ und Sammelaktionen (iris/Iris#223)
#225

Commits:

  • feat(vault-sync): Konfliktdialog mit „Beide behalten“ und Sammelaktionen (iris/Iris#223)

Stand 2026-10-28: Dialog in Iris und IrisClient (Mac)

  • Geändert (VaultSyncModel.swift, VaultSyncViews.swift, geteilt von Iris und IrisClient):
    • Der vorhandene Konfliktdialog (links „Meine Version“, rechts „Version vom Server“, Zusammenführen) bekommt die Wahl „Beide behalten“ (für .obsidian/… ausgeblendet) und das Menü „Mehrere auf einmal …“: „Überall meine Version / Version vom Server / beide behalten“ für alle offenen Konflikte oder nur für den Ordner der gewählten Notiz. Der Server wendet alles an, sobald die letzte Wahl vorliegt.
    • VaultSyncChoice.both (Wire both); configure liest conflict_count; die Meldung nach dem Verbinden nennt die Zahl der Konflikte und den Weg („Lampe → Konflikt lösen …“).
    • Erklärung zum Zustand conflict ergänzt: „Der Abgleich ruht, bis alle entschieden sind.“
  • Geprüft: Scheme Iris und Scheme IrisClient bauen fehlerfrei (Debug, eigenes DerivedData, nichts installiert).
  • Nicht geprüft: der Dialog selbst (nicht gestartet, kein Klick-Test, kein Screenshot), die Sammelaktionen gegen einen echten Server, das Layout bei langen Listen. Kein Test für die View-Logik.
  • Offen: IrisRemote (iOS: Umschalter statt Spalten, gleiche Wahlen und Sammelaktionen), Wire-Doku, Pfad 3 (Vault nur mit Dateien). Die Lampe zeigt weiter „Konflikt – bitte entscheiden“; ein eigener Lampentext „Der Abgleich ruht“ steht nur in der Erklärung, nicht in der Lampe selbst.
PR #225 gemergt: feat(vault-sync): Konfliktdialog mit „Beide behalten“ und Sammelaktionen (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/225 Commits: - feat(vault-sync): Konfliktdialog mit „Beide behalten“ und Sammelaktionen (iris/Iris#223) --- **Stand 2026-10-28: Dialog in Iris und IrisClient (Mac)** - **Geändert (`VaultSyncModel.swift`, `VaultSyncViews.swift`, geteilt von Iris und IrisClient):** - Der vorhandene Konfliktdialog (links „Meine Version“, rechts „Version vom Server“, Zusammenführen) bekommt die Wahl **„Beide behalten“** (für `.obsidian/…` ausgeblendet) und das Menü **„Mehrere auf einmal …“**: „Überall meine Version / Version vom Server / beide behalten“ für alle offenen Konflikte oder nur für den Ordner der gewählten Notiz. Der Server wendet alles an, sobald die letzte Wahl vorliegt. - `VaultSyncChoice.both` (Wire `both`); `configure` liest `conflict_count`; die Meldung nach dem Verbinden nennt die Zahl der Konflikte und den Weg („Lampe → Konflikt lösen …“). - Erklärung zum Zustand `conflict` ergänzt: „Der Abgleich ruht, bis alle entschieden sind.“ - **Geprüft:** Scheme Iris und Scheme IrisClient bauen fehlerfrei (Debug, eigenes DerivedData, nichts installiert). - **Nicht geprüft:** der Dialog selbst (nicht gestartet, kein Klick-Test, kein Screenshot), die Sammelaktionen gegen einen echten Server, das Layout bei langen Listen. Kein Test für die View-Logik. - **Offen:** IrisRemote (iOS: Umschalter statt Spalten, gleiche Wahlen und Sammelaktionen), Wire-Doku, Pfad 3 (Vault nur mit Dateien). Die Lampe zeigt weiter „Konflikt – bitte entscheiden“; ein eigener Lampentext „Der Abgleich ruht“ steht nur in der Erklärung, nicht in der Lampe selbst.
Author
Owner

PR #58 gemergt: feat(vault-sync): Konfliktdialog mit „Beide behalten“, Sammelaktionen und iPad-Ansicht (iris/Iris#223)
iris/2ndbrain-ios#58

Commits:

  • feat(vault-sync): Konfliktdialog mit „Beide behalten“, Sammelaktionen und iPad-Ansicht (iris/Iris#223)

Stand 2026-10-28: IrisRemote (iOS)

  • Geändert (VaultSyncModel.swift, VaultSyncViews.swift): gleiche Wahlen wie in Iris und IrisClient.
    • Konfliktdialog: „Beide behalten“ (für .obsidian/… ausgeblendet), „Mehrere“ in der Symbolleiste (alle offenen: überall meine Version / Version vom Server / beide behalten) und im Kontextmenü einer Zeile für den Ordner dieser Notiz.
    • Auf dem iPad stehen „Meine Version“ und „Version vom Server“ nebeneinander; auf dem iPhone bleibt der Umschalter oben.
    • VaultSyncChoice.both, conflict_count aus configure, Meldung nach dem Verbinden nennt die Konflikte; Erklärung zum Zustand conflict: „Der Abgleich ruht, bis alle entschieden sind.“
  • Geprüft: Scheme IrisRemote baut für den iOS-Simulator fehlerfrei (Debug, CODE_SIGNING_ALLOWED=NO, eigenes DerivedData). Nichts aufs Gerät installiert.
  • Nicht geprüft: der Dialog selbst (weder im Simulator gestartet noch auf einem Gerät), iPad-Layout, Sammelaktionen gegen einen echten Server, Kontextmenü auf dem iPhone.
  • Offen: Wire-Doku (02-Wire-Protokoll.md nennt noch unrelated_history), Pfad 3 (Vault nur mit Dateien), echter Durchlauf mit großem Vault (Mac Studio → VM), Lampentext.
  • Nebenbei: Localizable.xcstrings lag schon vorher geändert im Arbeitsbaum und ist separat als chore(i18n) gemergt (iris-ios#57).
PR #58 gemergt: feat(vault-sync): Konfliktdialog mit „Beide behalten“, Sammelaktionen und iPad-Ansicht (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/58 Commits: - feat(vault-sync): Konfliktdialog mit „Beide behalten“, Sammelaktionen und iPad-Ansicht (iris/Iris#223) --- **Stand 2026-10-28: IrisRemote (iOS)** - **Geändert (`VaultSyncModel.swift`, `VaultSyncViews.swift`):** gleiche Wahlen wie in Iris und IrisClient. - Konfliktdialog: **„Beide behalten“** (für `.obsidian/…` ausgeblendet), **„Mehrere“** in der Symbolleiste (alle offenen: überall meine Version / Version vom Server / beide behalten) und im Kontextmenü einer Zeile für den Ordner dieser Notiz. - Auf dem iPad stehen „Meine Version“ und „Version vom Server“ nebeneinander; auf dem iPhone bleibt der Umschalter oben. - `VaultSyncChoice.both`, `conflict_count` aus `configure`, Meldung nach dem Verbinden nennt die Konflikte; Erklärung zum Zustand `conflict`: „Der Abgleich ruht, bis alle entschieden sind.“ - **Geprüft:** Scheme IrisRemote baut für den iOS-Simulator fehlerfrei (Debug, `CODE_SIGNING_ALLOWED=NO`, eigenes DerivedData). **Nichts** aufs Gerät installiert. - **Nicht geprüft:** der Dialog selbst (weder im Simulator gestartet noch auf einem Gerät), iPad-Layout, Sammelaktionen gegen einen echten Server, Kontextmenü auf dem iPhone. - **Offen:** Wire-Doku (`02-Wire-Protokoll.md` nennt noch `unrelated_history`), Pfad 3 (Vault nur mit Dateien), echter Durchlauf mit großem Vault (Mac Studio → VM), Lampentext. - **Nebenbei:** `Localizable.xcstrings` lag schon vorher geändert im Arbeitsbaum und ist separat als `chore(i18n)` gemergt (iris-ios#57).
Author
Owner

PR #129 gemergt: docs(wire): Wechsel auf anderen Forgejo-Server, Wahl both, Konflikte ohne Basis (iris/Iris#223)
alf/2ndbrain#129

Commits:

  • docs(wire): Wechsel auf anderen Forgejo-Server, Wahl both, Konflikte ohne Basis (iris/Iris#223)

Stand 2026-10-28: Wire-Doku nachgezogen

  • Geändert (Entwicklerdokumentation/02-Wire-Protokoll.md): resolve kennt both (Kopie Name (Server).ext, 400 unter .obsidian/); conflicts nennt base: null bei fremdem Verlauf; configure: conflict_count, unrelated_history entfällt, neuer Abschnitt „Wechsel auf einen anderen Server“ (leerer Server, gleicher Verlauf, fremder Verlauf, Rückfall auf die alte Adresse).
  • Geprüft: gegen den gebauten Code gelesen (Linux-Server vault_git_sync.py, Mac-Server VaultSyncCore.swift); keine Ausführung nötig.
  • Nicht geprüft: das Verhalten gegen einen echten Forgejo; die Doku beschreibt den getesteten Stand mit lokalen Bare-Repos.
  • Offen: Pfad 3 (Vault nur mit Dateien, union) meldet weiter collisions und ist in der Doku so beschrieben; Durchlauf mit großem Vault; Lampentext.
PR #129 gemergt: docs(wire): Wechsel auf anderen Forgejo-Server, Wahl both, Konflikte ohne Basis (iris/Iris#223) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/129 Commits: - docs(wire): Wechsel auf anderen Forgejo-Server, Wahl both, Konflikte ohne Basis (iris/Iris#223) --- **Stand 2026-10-28: Wire-Doku nachgezogen** - **Geändert (`Entwicklerdokumentation/02-Wire-Protokoll.md`):** `resolve` kennt `both` (Kopie `Name (Server).ext`, `400` unter `.obsidian/`); `conflicts` nennt `base: null` bei fremdem Verlauf; `configure`: `conflict_count`, `unrelated_history` entfällt, neuer Abschnitt „Wechsel auf einen anderen Server“ (leerer Server, gleicher Verlauf, fremder Verlauf, Rückfall auf die alte Adresse). - **Geprüft:** gegen den gebauten Code gelesen (Linux-Server `vault_git_sync.py`, Mac-Server `VaultSyncCore.swift`); keine Ausführung nötig. - **Nicht geprüft:** das Verhalten gegen einen echten Forgejo; die Doku beschreibt den getesteten Stand mit lokalen Bare-Repos. - **Offen:** Pfad 3 (Vault nur mit Dateien, `union`) meldet weiter `collisions` und ist in der Doku so beschrieben; Durchlauf mit großem Vault; Lampentext.
Author
Owner

PR #120 gemergt: feat(vault-sync): Vault nur mit Dateien — mit dem Verlauf des Servers zusammenführen statt Kollision (iris/Iris#223)
iris/iris-linux-server#120

Commits:

  • feat(vault-sync): Vault nur mit Dateien — mit dem Verlauf des Servers zusammenführen statt Kollision (iris/Iris#223)

Stand 2026-10-28: Pfad 3 (Vault nur mit Dateien), Linux-Server

  • Geändert (vault_git_sync.py): Ein Vault nur mit Dateien wird nicht mehr per checkout -B … --track verbunden (das scheiterte an gleichnamigen Dateien mit collisions). Stattdessen: init, fetch, die eigenen Dateien als eigener Verlauf committen (_commit_local_files), Anhänge laden, dann mit dem Verlauf des Servers zusammenführen (merge --allow-unrelated-histories). Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (conflict_count in der Antwort). Verlangt der Server LFS, kommt zuerst seine .gitattributes ins Vault (nur wenn dort keine liegt), damit eigene Anhänge als LFS-Zeiger im Verlauf stehen und nicht als ganze Dateien hochgeladen werden. Beim Zusammenführen fremder Verläufe wird der LFS-Filter mitgegeben (_merge_lfs_args). Unterbrochenes Einrichten (Marker union) setzt fort und holt den Commit der eigenen Dateien nach, falls er fehlt. collisions und _collisions entfallen.
  • Geprüft: tests/test_vault_git_sync.py, 81 Tests grün (echtes git, lokale Bare-Repos). Neu: Union mit gleichnamiger Datei (Konflikt, nichts überschrieben, danach both und Push), Union mit identischer Datei (kein Konflikt), Union mit LFS-Remote und eigenem Anhang (Zeiger im Verlauf, Datei im Vault unverändert), unterbrochene Union-Einrichtung mit Fortsetzen. Der Test test_configure_reports_collisions_and_changes_nothing ist ersetzt.
  • Nicht geprüft: großes Vault mit vielen LFS-Anhängen, echter Forgejo über HTTP, Verhalten bei sehr vielen Konflikten.
  • Offen: Durchlauf mit großem Vault (Mac Studio → VM), Lampentext „Der Abgleich ruht“.
PR #120 gemergt: feat(vault-sync): Vault nur mit Dateien — mit dem Verlauf des Servers zusammenführen statt Kollision (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/120 Commits: - feat(vault-sync): Vault nur mit Dateien — mit dem Verlauf des Servers zusammenführen statt Kollision (iris/Iris#223) --- **Stand 2026-10-28: Pfad 3 (Vault nur mit Dateien), Linux-Server** - **Geändert (`vault_git_sync.py`):** Ein Vault nur mit Dateien wird nicht mehr per `checkout -B … --track` verbunden (das scheiterte an gleichnamigen Dateien mit `collisions`). Stattdessen: `init`, `fetch`, die eigenen Dateien als eigener Verlauf committen (`_commit_local_files`), Anhänge laden, dann mit dem Verlauf des Servers zusammenführen (`merge --allow-unrelated-histories`). Gleichnamige Dateien mit anderem Inhalt werden Konflikte im bestehenden Mechanismus (`conflict_count` in der Antwort). Verlangt der Server LFS, kommt zuerst seine `.gitattributes` ins Vault (nur wenn dort keine liegt), damit eigene Anhänge als LFS-Zeiger im Verlauf stehen und nicht als ganze Dateien hochgeladen werden. Beim Zusammenführen fremder Verläufe wird der LFS-Filter mitgegeben (`_merge_lfs_args`). Unterbrochenes Einrichten (Marker `union`) setzt fort und holt den Commit der eigenen Dateien nach, falls er fehlt. `collisions` und `_collisions` entfallen. - **Geprüft:** `tests/test_vault_git_sync.py`, 81 Tests grün (echtes git, lokale Bare-Repos). Neu: Union mit gleichnamiger Datei (Konflikt, nichts überschrieben, danach `both` und Push), Union mit identischer Datei (kein Konflikt), Union mit LFS-Remote und eigenem Anhang (Zeiger im Verlauf, Datei im Vault unverändert), unterbrochene Union-Einrichtung mit Fortsetzen. Der Test `test_configure_reports_collisions_and_changes_nothing` ist ersetzt. - **Nicht geprüft:** großes Vault mit vielen LFS-Anhängen, echter Forgejo über HTTP, Verhalten bei sehr vielen Konflikten. - **Offen:** Durchlauf mit großem Vault (Mac Studio → VM), Lampentext „Der Abgleich ruht“.
Author
Owner

PR #226 gemergt: feat(vault-sync): Mac-Server — Vault nur mit Dateien mit dem Verlauf des Servers zusammenführen (iris/Iris#223)
#226

Commits:

  • feat(vault-sync): Mac-Server — Vault nur mit Dateien mit dem Verlauf des Servers zusammenführen (iris/Iris#223)

Stand 2026-10-28: Pfad 3 (Vault nur mit Dateien), Mac-Server

  • Geändert (VaultSyncCore.swift, Test, Kommentar in IrisRemoteServer.swift): gleiche Änderung wie im Linux-Server (iris-linux-server#120): commitLocalFiles (eigene Dateien als eigener Verlauf, bei LFS-Remote zuerst dessen .gitattributes), danach mergeRemote mit --allow-unrelated-histories statt checkout -B … --track; gleichnamige Dateien werden Konflikte (.connectedConflicts); der LFS-Filter wird beim Zusammenführen fremder Verläufe mitgegeben (mergeLFSArguments); unterbrochenes Einrichten (Marker union) holt den Commit der eigenen Dateien nach. collisions und collisions(from:) entfallen.
  • Geprüft: scripts/test-vault-sync-core.sh: 226 Prüfungen, 0 Fehler (echtes git, lokale Bare-Repos); neu: Union mit Konflikt und danach both, Union sauber und mit Verlauf des Servers, identische Datei ohne Konflikt, Union mit LFS-Remote (eigener Anhang als LFS-Zeiger im Verlauf). Schemes Iris und IrisClient bauen fehlerfrei (Debug, nichts installiert).
  • Nicht geprüft: die laufende App, großes Vault mit vielen LFS-Anhängen, echter Forgejo über HTTP, unterbrochenes Einrichten als eigener Test auf dem Mac (nur im Linux-Server-Test).
  • Offen: Durchlauf mit großem Vault (Mac Studio → VM), Lampentext „Der Abgleich ruht“.
PR #226 gemergt: feat(vault-sync): Mac-Server — Vault nur mit Dateien mit dem Verlauf des Servers zusammenführen (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/226 Commits: - feat(vault-sync): Mac-Server — Vault nur mit Dateien mit dem Verlauf des Servers zusammenführen (iris/Iris#223) --- **Stand 2026-10-28: Pfad 3 (Vault nur mit Dateien), Mac-Server** - **Geändert (`VaultSyncCore.swift`, Test, Kommentar in `IrisRemoteServer.swift`):** gleiche Änderung wie im Linux-Server (iris-linux-server#120): `commitLocalFiles` (eigene Dateien als eigener Verlauf, bei LFS-Remote zuerst dessen `.gitattributes`), danach `mergeRemote` mit `--allow-unrelated-histories` statt `checkout -B … --track`; gleichnamige Dateien werden Konflikte (`.connectedConflicts`); der LFS-Filter wird beim Zusammenführen fremder Verläufe mitgegeben (`mergeLFSArguments`); unterbrochenes Einrichten (Marker `union`) holt den Commit der eigenen Dateien nach. `collisions` und `collisions(from:)` entfallen. - **Geprüft:** `scripts/test-vault-sync-core.sh`: 226 Prüfungen, 0 Fehler (echtes git, lokale Bare-Repos); neu: Union mit Konflikt und danach `both`, Union sauber und mit Verlauf des Servers, identische Datei ohne Konflikt, Union mit LFS-Remote (eigener Anhang als LFS-Zeiger im Verlauf). Schemes Iris und IrisClient bauen fehlerfrei (Debug, nichts installiert). - **Nicht geprüft:** die laufende App, großes Vault mit vielen LFS-Anhängen, echter Forgejo über HTTP, unterbrochenes Einrichten als eigener Test auf dem Mac (nur im Linux-Server-Test). - **Offen:** Durchlauf mit großem Vault (Mac Studio → VM), Lampentext „Der Abgleich ruht“.
Author
Owner

PR #130 gemergt: docs(wire): Vault nur mit Dateien wird zusammengeführt, collisions entfällt (iris/Iris#223)
alf/2ndbrain#130

Commits:

  • docs(wire): Vault nur mit Dateien wird zusammengeführt, collisions entfällt (iris/Iris#223)

Stand 2026-10-28: Wire-Doku zu Pfad 3

  • Geändert (Entwicklerdokumentation/02-Wire-Protokoll.md): „Einrichten“ beschreibt das Vault nur mit Dateien jetzt als Commit der eigenen Dateien plus Zusammenführen (bei LFS-Remote zuerst dessen .gitattributes); collisions wird nur noch als Meldung älterer Server erwähnt; Fortsetzen nach Unterbrechung.
  • Geprüft: gegen den gebauten Code gelesen. Nicht geprüft: Verhalten gegen einen echten Forgejo.
PR #130 gemergt: docs(wire): Vault nur mit Dateien wird zusammengeführt, collisions entfällt (iris/Iris#223) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/130 Commits: - docs(wire): Vault nur mit Dateien wird zusammengeführt, collisions entfällt (iris/Iris#223) --- **Stand 2026-10-28: Wire-Doku zu Pfad 3** - **Geändert (`Entwicklerdokumentation/02-Wire-Protokoll.md`):** „Einrichten“ beschreibt das Vault nur mit Dateien jetzt als Commit der eigenen Dateien plus Zusammenführen (bei LFS-Remote zuerst dessen `.gitattributes`); `collisions` wird nur noch als Meldung älterer Server erwähnt; Fortsetzen nach Unterbrechung. - **Geprüft:** gegen den gebauten Code gelesen. **Nicht geprüft:** Verhalten gegen einen echten Forgejo.
Author
Owner

PR #227 gemergt: feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223)
#227

Commits:

  • feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223)

Stand 2026-10-28: Lampentext bei Konflikt

  • Geändert (VaultSyncModel.swift in Iris/IrisClient und in IrisRemote): Die Lampe zeigt im Zustand conflict jetzt „Abgleich ruht – Konflikt entscheiden“ statt „Konflikt – bitte entscheiden“ (Entscheidung 7 aus dem grill-me).
  • Geprüft: Schemes Iris, IrisClient und IrisRemote (iOS-Simulator) bauen fehlerfrei; nichts installiert, die Lampe selbst nicht angesehen.
  • Nicht geprüft: ob der längere Text in der Lampe (macOS, fixedSize) und auf dem iPhone sauber passt.
  • Nicht angefasst: die Benutzerhandbücher (BENUTZERHANDBUCH.md, vault-synchronisation.html) nennen noch den alten Text; die Korrektur gehört in den geplanten Handbuch-Rewrite.
PR #227 gemergt: feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/227 Commits: - feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223) --- **Stand 2026-10-28: Lampentext bei Konflikt** - **Geändert (`VaultSyncModel.swift` in Iris/IrisClient und in IrisRemote):** Die Lampe zeigt im Zustand `conflict` jetzt „Abgleich ruht – Konflikt entscheiden“ statt „Konflikt – bitte entscheiden“ (Entscheidung 7 aus dem grill-me). - **Geprüft:** Schemes Iris, IrisClient und IrisRemote (iOS-Simulator) bauen fehlerfrei; nichts installiert, die Lampe selbst nicht angesehen. - **Nicht geprüft:** ob der längere Text in der Lampe (macOS, `fixedSize`) und auf dem iPhone sauber passt. - **Nicht angefasst:** die Benutzerhandbücher (`BENUTZERHANDBUCH.md`, `vault-synchronisation.html`) nennen noch den alten Text; die Korrektur gehört in den geplanten Handbuch-Rewrite.
Author
Owner

PR #59 gemergt: feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223)
iris/2ndbrain-ios#59

Commits:

  • feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223)

Stand 2026-10-28: Lampentext bei Konflikt

  • Geändert (VaultSyncModel.swift in Iris/IrisClient und in IrisRemote): Die Lampe zeigt im Zustand conflict jetzt „Abgleich ruht – Konflikt entscheiden“ statt „Konflikt – bitte entscheiden“ (Entscheidung 7 aus dem grill-me).
  • Geprüft: Schemes Iris, IrisClient und IrisRemote (iOS-Simulator) bauen fehlerfrei; nichts installiert, die Lampe selbst nicht angesehen.
  • Nicht geprüft: ob der längere Text in der Lampe (macOS, fixedSize) und auf dem iPhone sauber passt.
  • Nicht angefasst: die Benutzerhandbücher (BENUTZERHANDBUCH.md, vault-synchronisation.html) nennen noch den alten Text; die Korrektur gehört in den geplanten Handbuch-Rewrite.
PR #59 gemergt: feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/59 Commits: - feat(vault-sync): Lampentext bei Konflikt — Abgleich ruht (iris/Iris#223) --- **Stand 2026-10-28: Lampentext bei Konflikt** - **Geändert (`VaultSyncModel.swift` in Iris/IrisClient und in IrisRemote):** Die Lampe zeigt im Zustand `conflict` jetzt „Abgleich ruht – Konflikt entscheiden“ statt „Konflikt – bitte entscheiden“ (Entscheidung 7 aus dem grill-me). - **Geprüft:** Schemes Iris, IrisClient und IrisRemote (iOS-Simulator) bauen fehlerfrei; nichts installiert, die Lampe selbst nicht angesehen. - **Nicht geprüft:** ob der längere Text in der Lampe (macOS, `fixedSize`) und auf dem iPhone sauber passt. - **Nicht angefasst:** die Benutzerhandbücher (`BENUTZERHANDBUCH.md`, `vault-synchronisation.html`) nennen noch den alten Text; die Korrektur gehört in den geplanten Handbuch-Rewrite.
Author
Owner

PR #229 gemergt: docs(handbuch): Vault-Synchronisation — alle Funktionen und Wege (iris/Iris#223)
#229

Commits:

  • docs(handbuch): Vault-Synchronisation — alle Funktionen und Wege (iris/Iris#223)

Stand 2026-10-28: Benutzerhandbuch, Kapitel „Vault-Synchronisation“

  • Geändert: Das Kapitel ist um alle Funktionen und Wege erweitert (Quelle: Iris/BENUTZERHANDBUCH/Vault-Synchronisation.md im Vault, daraus gebaut mit deployment/handbuch/build_handbuch.py; hier eingecheckt ist die generierte Iris/Resources/BENUTZERHANDBUCH.md). Neu: Inhaltsübersicht; Tabelle „Was beim Verbinden passiert — alle Fälle“ (leeres Vault, Vault mit Notizen, Vault mit eigenem Verlauf, schon verbunden, jeweils gegen leeres Repository, Repository mit Inhalt, gleichem und fremdem Verlauf); Abschnitt „Den Server wechseln“ (Schritte, drei Fälle, Rückweg, Tipp für große Vaults); Fortschritt, Unterbrechung und Fortsetzen, fehlende Anhänge; Konfliktfenster (Mac, iPad, iPhone), die vier Wahlen inklusive „Beide behalten“ und der Ausnahme .obsidian/…, Sammelaktionen („Mehrere auf einmal …“, Ordner-Wahl, Kontextmenü), Ablauf nach der letzten Entscheidung; Tabelle „Wenn etwas nicht klappt“; Lampentext „Abgleich ruht – Konflikt entscheiden“; neue Einschränkungen (Versionsgeschichte zieht mit um, Abgleich ruht bei offenen Konflikten).
  • Geprüft: Build des Handbuchs läuft durch (28 Kapitel), interne Sprungmarken und Tabellen im HTML vorhanden; Inhalt gegen den gebauten Code und die Tests gelesen (Fälle von configure, Wahlen, Sammelaktionen, Meldungen).
  • Nicht geprüft: das Kapitel in der App-Hilfe (nicht gestartet); die beschriebenen Abläufe gegen einen echten Forgejo; Kontextmenü und iPad-Ansicht auf einem Gerät.
  • Nicht eingecheckt (gitignored): die HTML-Site (macos-iris/Handbuch/, ios/IrisRemote/Handbuch/) ist lokal neu erzeugt und kommt mit dem nächsten App-Build in die Hilfe; [[Wikilinks]] zeigt der Build wie bisher unaufgelöst.
PR #229 gemergt: docs(handbuch): Vault-Synchronisation — alle Funktionen und Wege (iris/Iris#223) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/229 Commits: - docs(handbuch): Vault-Synchronisation — alle Funktionen und Wege (iris/Iris#223) --- **Stand 2026-10-28: Benutzerhandbuch, Kapitel „Vault-Synchronisation“** - **Geändert:** Das Kapitel ist um alle Funktionen und Wege erweitert (Quelle: `Iris/BENUTZERHANDBUCH/Vault-Synchronisation.md` im Vault, daraus gebaut mit `deployment/handbuch/build_handbuch.py`; hier eingecheckt ist die generierte `Iris/Resources/BENUTZERHANDBUCH.md`). Neu: Inhaltsübersicht; Tabelle „Was beim Verbinden passiert — alle Fälle“ (leeres Vault, Vault mit Notizen, Vault mit eigenem Verlauf, schon verbunden, jeweils gegen leeres Repository, Repository mit Inhalt, gleichem und fremdem Verlauf); Abschnitt „Den Server wechseln“ (Schritte, drei Fälle, Rückweg, Tipp für große Vaults); Fortschritt, Unterbrechung und Fortsetzen, fehlende Anhänge; Konfliktfenster (Mac, iPad, iPhone), die vier Wahlen inklusive „Beide behalten“ und der Ausnahme `.obsidian/…`, Sammelaktionen („Mehrere auf einmal …“, Ordner-Wahl, Kontextmenü), Ablauf nach der letzten Entscheidung; Tabelle „Wenn etwas nicht klappt“; Lampentext „Abgleich ruht – Konflikt entscheiden“; neue Einschränkungen (Versionsgeschichte zieht mit um, Abgleich ruht bei offenen Konflikten). - **Geprüft:** Build des Handbuchs läuft durch (28 Kapitel), interne Sprungmarken und Tabellen im HTML vorhanden; Inhalt gegen den gebauten Code und die Tests gelesen (Fälle von `configure`, Wahlen, Sammelaktionen, Meldungen). - **Nicht geprüft:** das Kapitel in der App-Hilfe (nicht gestartet); die beschriebenen Abläufe gegen einen echten Forgejo; Kontextmenü und iPad-Ansicht auf einem Gerät. - **Nicht eingecheckt (gitignored):** die HTML-Site (`macos-iris/Handbuch/`, `ios/IrisRemote/Handbuch/`) ist lokal neu erzeugt und kommt mit dem nächsten App-Build in die Hilfe; `[[Wikilinks]]` zeigt der Build wie bisher unaufgelöst.
Author
Owner

Stand 2026-10-28: Images veröffentlicht, latest gesetzt

  • Was draußen ist: Die sechs Linux-Server-Images (iris-server, iris-hermes, iris-tunnel, iris-hermes-sandbox, iris-web-automation, iris-browser) liegen als v1.6.59 in der Forgejo-Registry (forgejo.lewerken.duckdns.org/iris/…), der Git-Tag v1.6.59 ist gepusht, und latest zeigt auf v1.6.59 (zuvor v1.6.58). Der Build lief auf dem Entwicklungshost alf@iris-server.
  • Enthalten: Serverwechsel mit fremder Historie, Vault nur mit Dateien (iris/Iris#223), Wahl both in resolve, Aufräumen alter Git-Server-Token beim Anmelden und Bereitstellen (iris/Iris#230).
  • Was Nutzer bekommen: Neue Linux-Server-Instanzen und Aktualisierungen über die Registry holen diesen Stand. Die Mac-App und IrisRemote sind davon getrennt (nicht mit-veröffentlicht).
  • Geprüft: Build und Push aller sechs Images ohne Fehler, die Tags stehen in der Registry. Der Server lief schon vor dem Build mit demselben Quelltext auf iris-server (/health ok).
  • Nicht geprüft: ein frischer Start aus den veröffentlichten Images, eine Aktualisierung einer bestehenden Instanz über die Registry, der Serverwechsel gegen einen echten Forgejo mit großem Vault.
**Stand 2026-10-28: Images veröffentlicht, `latest` gesetzt** - **Was draußen ist:** Die sechs Linux-Server-Images (`iris-server`, `iris-hermes`, `iris-tunnel`, `iris-hermes-sandbox`, `iris-web-automation`, `iris-browser`) liegen als **v1.6.59** in der Forgejo-Registry (`forgejo.lewerken.duckdns.org/iris/…`), der Git-Tag `v1.6.59` ist gepusht, und `latest` zeigt auf v1.6.59 (zuvor v1.6.58). Der Build lief auf dem Entwicklungshost `alf@iris-server`. - **Enthalten:** Serverwechsel mit fremder Historie, Vault nur mit Dateien (iris/Iris#223), Wahl `both` in `resolve`, Aufräumen alter Git-Server-Token beim Anmelden und Bereitstellen (iris/Iris#230). - **Was Nutzer bekommen:** Neue Linux-Server-Instanzen und Aktualisierungen über die Registry holen diesen Stand. Die Mac-App und IrisRemote sind davon getrennt (nicht mit-veröffentlicht). - **Geprüft:** Build und Push aller sechs Images ohne Fehler, die Tags stehen in der Registry. Der Server lief schon vor dem Build mit demselben Quelltext auf iris-server (`/health` ok). - **Nicht geprüft:** ein frischer Start aus den veröffentlichten Images, eine Aktualisierung einer bestehenden Instanz über die Registry, der Serverwechsel gegen einen echten Forgejo mit großem Vault.
alf 2026-10-31 09:13:30 +00:00
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#223
No description provided.