From a73156755113030741bc4024b88e75695863534e Mon Sep 17 00:00:00 2001 From: Patrick Schiller
Date: Sat, 17 Oct 2026 18:05:45 +0200 Subject: [PATCH] Prepare SourceBraid for iOS 1.1.1 (build 12) Signed-off-by: Patrick Schiller
---
.gitattributes | 2 +
README.de.md | 2 +-
README.md | 2 +-
docs/IOS_APP_STORE_METADATA.de.md | 252 ++
docs/IOS_APP_STORE_METADATA.md | 241 ++
docs/IOS_BRAND_APPEARANCE.de.md | 4 +-
docs/IOS_BRAND_APPEARANCE.md | 4 +-
docs/IOS_DEVICE_ACCEPTANCE.de.md | 58 +-
docs/IOS_DEVICE_ACCEPTANCE.md | 52 +-
docs/IOS_IMPLEMENTATION_TESTING.de.md | 147 +
docs/IOS_IMPLEMENTATION_TESTING.md | 133 +
docs/IOS_READER_REFRESH_UX.de.md | 21 +-
docs/IOS_READER_REFRESH_UX.md | 19 +-
docs/IOS_RELEASE_1.1.1.de.md | 104 +
docs/IOS_RELEASE_1.1.1.md | 94 +
ios/README.md | 109 +-
ios/SourceBraid.xcodeproj/project.pbxproj | 22 +-
ios/SourceBraid/App/ContentView.swift | 26 +-
ios/SourceBraid/App/SettingsView.swift | 22 -
ios/SourceBraid/App/SettingsViewModel.swift | 7 -
.../Archive/ArchiveBackgroundRefresh.swift | 41 +-
ios/SourceBraid/Archive/ArchiveChatView.swift | 65 +-
ios/SourceBraid/Archive/ArchiveDemo.swift | 104 +-
.../Archive/ArchiveIntelligence.swift | 73 +-
ios/SourceBraid/Archive/ArchiveLibrary.swift | 48 +-
ios/SourceBraid/Archive/ArchiveModels.swift | 3 +-
.../Archive/ArchiveReaderView.swift | 204 +-
.../Archive/MarkdownRenderer.swift | 46 +-
.../Resources/Localizable.xcstrings | 6 +-
.../Resources/Mermaid/LICENSE-mermaid.txt | 21 +
ios/SourceBraid/Resources/Mermaid/README.md | 35 +
.../Resources/Mermaid/ThirdPartyNotices.txt | 3447 ++++++++++++++++
.../Resources/Mermaid/mermaid.tiny.js | 3580 +++++++++++++++++
.../Resources/Mermaid/sourcebraid-mermaid.js | 113 +
.../Resources/Mermaid/vendor-manifest.json | 349 ++
.../Resources/ThirdPartyNotices.txt | 3449 ++++++++++++++++
ios/SourceBraidTests/ArchiveChatTests.swift | 71 +-
.../ArchiveRefreshTests.swift | 159 +-
ios/SourceBraidTests/ArchiveTests.swift | 31 +
ios/SourceBraidUITests/ArchiveUITests.swift | 186 +-
tests/test_ios_release.py | 4 +-
tests/test_release_packages.py | 2 +-
42 files changed, 13229 insertions(+), 129 deletions(-)
create mode 100644 .gitattributes
create mode 100644 docs/IOS_APP_STORE_METADATA.de.md
create mode 100644 docs/IOS_APP_STORE_METADATA.md
create mode 100644 docs/IOS_RELEASE_1.1.1.de.md
create mode 100644 docs/IOS_RELEASE_1.1.1.md
create mode 100644 ios/SourceBraid/Resources/Mermaid/LICENSE-mermaid.txt
create mode 100644 ios/SourceBraid/Resources/Mermaid/README.md
create mode 100644 ios/SourceBraid/Resources/Mermaid/ThirdPartyNotices.txt
create mode 100644 ios/SourceBraid/Resources/Mermaid/mermaid.tiny.js
create mode 100644 ios/SourceBraid/Resources/Mermaid/sourcebraid-mermaid.js
create mode 100644 ios/SourceBraid/Resources/Mermaid/vendor-manifest.json
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..eccbd6a
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Retain the exact pinned upstream bundle, including whitespace in template literals.
+ios/SourceBraid/Resources/Mermaid/mermaid.tiny.js -whitespace linguist-vendored
diff --git a/README.de.md b/README.de.md
index 882bc89..780bb3f 100644
--- a/README.de.md
+++ b/README.de.md
@@ -438,7 +438,7 @@ werden getrennt verfolgt; die Freigabe belegt keinen erfolgreichen Cloud-Build
oder Store-Release. Siehe [Release-Hinweise 1.1.0](docs/IOS_RELEASE_1.1.0.de.md),
[Umsetzungs- und Testprotokoll](docs/IOS_IMPLEMENTATION_TESTING.de.md)
und [verbleibende Geräteprüfungen](docs/IOS_DEVICE_ACCEPTANCE.de.md). Native
-Navigation für Neueste/Suche/Chat und begrenzte Hintergrundaktualisierung stehen
+Navigation für Zuletzt/Suche/Chat und begrenzte Hintergrundaktualisierung stehen
im [UI- und Refresh-Konzept](docs/IOS_READER_REFRESH_UX.de.md).
## Android-Roadmap
diff --git a/README.md b/README.md
index 3f801dd..7769246 100644
--- a/README.md
+++ b/README.md
@@ -404,7 +404,7 @@ separately; approval does not establish a successful cloud build or store releas
See the [1.1.0 release notes](docs/IOS_RELEASE_1.1.0.md),
[implementation and test record](docs/IOS_IMPLEMENTATION_TESTING.md), and
[remaining device checks](docs/IOS_DEVICE_ACCEPTANCE.md). Native
-Latest/Search/Chat navigation and bounded background refresh are described in
+Recent/Search/Chat navigation and bounded background refresh are described in
the [UI and refresh concept](docs/IOS_READER_REFRESH_UX.md).
## Android roadmap
diff --git a/docs/IOS_APP_STORE_METADATA.de.md b/docs/IOS_APP_STORE_METADATA.de.md
new file mode 100644
index 0000000..2507074
--- /dev/null
+++ b/docs/IOS_APP_STORE_METADATA.de.md
@@ -0,0 +1,252 @@
+# iOS-App-Store-Texte und Screenshots
+
+Vorbereitet am 17. Oktober 2026 · [English](IOS_APP_STORE_METADATA.md)
+
+Bearbeitungsziel ist der **Entwurf 1.1.1** in App Store Connect. Deutsche und
+englische Werbetexte, Beschreibungen, Schlüsselwörter, Untertitel und erste
+Diagnose-Neuerungen wurden gespeichert. **22 neue native Screenshots** sind
+bestätigt hinterlegt: je Sprache vier für iPhone, drei für iPad und vier für
+iPhone Duo. Der bisherige iPad-Screenshot wurde aus der Auswahl dieses Entwurfs
+entfernt und bleibt in der Asset-Bibliothek. Es ist kein Build ausgewählt; der
+Entwurf wurde weder eingereicht noch veröffentlicht.
+
+Die überarbeiteten Beschreibungen und die Neuerungen für 1.1.1 unten
+berücksichtigen zusätzlich die spätere Korrektur des Archivladens und lokale
+Mermaid-Diagramme. Diese neuesten Texte sind in beiden Sprachen gespeichert und
+wurden nach vollständigem Neuladen und Sprachwechsel mit den exportierten
+Textdateien abgeglichen. Alle sechs Screenshot-Bereiche behielten die erwarteten
+Dateinamen und Anzahlen; beide Untertitel wurden unter App-Informationen
+gespeichert. Implementierungstests und Geräteprüfung laufen noch; die Texte
+bestätigen keine Veröffentlichung dieser Änderungen.
+
+Die [deutsche App-Store-Seite](https://apps.apple.com/de/app/sourcebraid/id6798551232)
+ist weiterhin als **1.1.0** öffentlich verfügbar, bestätigt am 17. Oktober 2026
+mit dem Veröffentlichungszeitpunkt **07:14:07 UTC**. Deren veröffentlichte
+Screenshots und Release bleiben durch die Vorbereitung von 1.1.1 unverändert.
+
+## Direkt übernehmbare deutsche Felder
+
+### App-Name
+
+```text
+SourceBraid
+```
+
+### Untertitel — höchstens 30 Zeichen
+
+```text
+Quellen sammeln, lesen, finden
+```
+
+### Werbetext — höchstens 170 Zeichen
+
+```text
+Teile Webseiten als Markdown in dein GitHub-Archiv. Lies geladene Beiträge, durchsuche ihren Text und stelle Fragen mit optionaler Apple Intelligence auf dem Gerät.
+```
+
+### Beschreibung — höchstens 4.000 Zeichen
+
+```text
+SourceBraid — Weave the web into Markdown.
+
+Sammle nützliche Quellen, finde sie wieder und behalte die Dateien in einem GitHub-Repository unter deiner Kontrolle. SourceBraid verbindet Erfassung, Markdown-Reader, lokale Suche und optionalen Chat auf deinem iPhone und iPad.
+
+AUS DEM TEILEN-MENÜ SPEICHERN
+Teile eine Webseite, ausgewählten Text, eine PDF oder eine andere Datei mit SourceBraid. Passe den Titel an, ergänze Tags oder eine Notiz und speichere alles im eingerichteten Repository. Lesbare öffentliche Seiten werden zu Markdown mit Quellenmetadaten und relevanten Bildern. Nicht auslesbare Seiten werden klar als Links gespeichert. Geteilte PDFs lassen sich durch den optionalen Docling-Workflow in GitHub Actions umwandeln.
+
+DIE NEUESTEN QUELLEN GRIFFBEREIT
+Unter Zuletzt findest du sieben aktuelle Beiträge. Öffne direkt einen Beitrag, aktualisiere dein Archiv oder wechsle zu Suche und Chat. Breite Ansichten zeigen Liste und Reader nebeneinander.
+
+MARKDOWN ANGENEHM LESEN
+Lies Überschriften, Listen, Aufgaben, Tabellen, Zitate, Code und lokale Bilder. Öffne PDF-Anhänge in der nativen Vorschau, sieh dir rohes Markdown an, teile einen Beitrag oder öffne seine Originalquelle. Externe Bilder werden erst geladen, wenn du es für das jeweilige Dokument auswählst. Gängige Mermaid-Fluss-, Sequenz-, Zustands-, Klassen-, ER- und Gantt-Diagramme werden lokal dargestellt; bei nicht unterstützten oder fehlerhaften Diagrammen bleibt der ursprüngliche Quelltext erhalten.
+
+GELADENE TEXTE WIEDERFINDEN
+Die Volltextsuche läuft auf deinem Gerät und zeigt den indizierten Anteil des Archivs. Geladene Beiträge lassen sich offline lesen und durchsuchen, solange dein Repository eingerichtet bleibt. Die Suche umfasst lokal gespeicherten, indizierten Text; bei großen Archiven kann der Bestand zunächst unvollständig sein. Aktualisieren schließt Lücken. iOS kann Cache-Dateien entfernen, um Speicher freizugeben, und bestimmt die Ausführung von Hintergrundaktualisierungen.
+
+DEINE QUELLEN AUF DEM GERÄT BEFRAGEN
+Stelle auf kompatiblen Geräten Fragen zu einem ausgewählten Beitrag oder passenden Auszügen aus dem indizierten Archiv. Antworten erscheinen schrittweise und enthalten Links zu den Quellenauszügen, die dem Modell vorlagen. Du kannst eine Antwort jederzeit stoppen.
+
+Chat benötigt iOS oder iPadOS ab 26, ein geeignetes Gerät, aktivierte Apple Intelligence, ein bereites heruntergeladenes Systemmodell und eine unterstützte Sprache. Er arbeitet mit begrenzten Auszügen statt mit jedem Wort jedes Dokuments. KI-Antworten können falsch sein; Quellenlinks helfen bei der Prüfung. Reader und Suche bleiben bei nicht verfügbarem Chat nutzbar. SourceBraid sendet Chat-Fragen an keinen Cloud-KI-Dienst und verwendet keinen Cloud-Ersatz.
+
+DEIN ARCHIV, DEINE DATEIEN
+Markdown-Dateien und Git-Verlauf bleiben im gewählten GitHub-Repository. Der GitHub-Token liegt im Schlüsselbund; Reader und Suche verwenden einen ersetzbaren lokalen Cache. Lesen, Suche, Chat und lesende App-Kurzbefehle verändern dein Archiv nicht. Die Teilen-Erweiterung speichert nur die von dir gewählten Inhalte.
+
+SourceBraid enthält keine Werbung, kein Tracking und keine Analysefunktionen. Erfassung und Archivaktualisierung kontaktieren GitHub und die beteiligten Quellwebseiten; deren eigene Datenschutzregeln gelten. Für lokalen Chat brauchst du kein zusätzliches KI-Konto.
+
+ERSTE SCHRITTE
+Du benötigst ein GitHub-Konto und richtest ein Repository mit einem fein abgestuften Zugriffstoken ein. Zum Lesen genügen Leserechte; zum Speichern benötigt die App zusätzlich Schreibrechte für Repository-Inhalte. Reader und Suche unterstützen iOS und iPadOS ab 17.
+```
+
+### Schlüsselwörter — höchstens 100 Bytes
+
+```text
+markdown,webclipper,lesen,notizen,recherche,archiv,pdf,offline,suche,lesezeichen
+```
+
+### Neuerungen — Fakten zu iOS 1.1.0, höchstens 4.000 Zeichen
+
+Nur für die Funktionsbeschreibung von 1.1.0 oder historische Release-Texte.
+Für ein späteres Fehlerkorrektur-Update dessen tatsächliche Änderungen nennen.
+
+```text
+SourceBraid hilft dir jetzt auch, deine gespeicherten Quellen zu nutzen:
+
+• Neueste zeigt sieben aktuelle Beiträge mit direktem Zugang zum Reader.
+• Lies Markdown mit Tabellen, Aufgaben, Code, lokalen Bildern und Archivlinks. Sieh PDF-Anhänge an und teile Beiträge.
+• Durchsuche geladene Texte auf deinem Gerät mit sichtbarer Indexabdeckung. Lies und durchsuche lokal gespeicherte Beiträge offline.
+• Stelle Fragen zu einem Beitrag oder indizierten Archivauszügen: optional mit Apple Intelligence, schrittweisen Antworten, Abbrechen und Quellenlinks.
+• Finde Quellen, liste aktuelle Beiträge auf und öffne geladene Beiträge über lesende App-Kurzbefehle.
+• Nutze angepasste Ansichten für iPhone und iPad, neue Farben und begrenzte Hintergrundaktualisierungen.
+
+Lokaler Chat benötigt iOS oder iPadOS ab 26, ein geeignetes Gerät, aktivierte Apple Intelligence, ein bereites Systemmodell und eine unterstützte Sprache. Suche und Chat umfassen geladene, indizierte Inhalte; Quellenlinks garantieren keine sachlich richtige KI-Antwort.
+```
+
+### Neuerungen — Entwurf 1.1.1, noch nicht veröffentlicht
+
+Diesen Entwurf erst mit einem 1.1.1-Build verwenden, der die Änderungen enthält,
+nachdem Tests und Geräteprüfung bestanden sind. Der historische Text zu 1.1.0
+oben bleibt unverändert.
+
+```text
+Dieses Update verbessert Archivladen, Lesen und lokalen Chat:
+
+• Behebt einen Reader, der nach der Rückkehr zur Liste und dem Öffnen eines anderen Beitrags beim Laden hängen bleiben konnte.
+• Unterbrochene erste Archiv-Downloads werden beim Zurückkehren fortgesetzt. Eine Anzeige geladener Beiträge und eine Aktion zum Laden der übrigen Beiträge machen den lokalen Archivstand deutlicher.
+• Gängige Mermaid-Fluss-, Sequenz-, Zustands-, Klassen-, ER- und Gantt-Diagramme werden auf deinem Gerät dargestellt. Bei nicht unterstützten oder fehlerhaften Diagrammen bleibt der ursprüngliche Quelltext erhalten.
+• Der lokale Chat erklärt die Verfügbarkeit von Apple Intelligence genauer, zeigt passende Hilfeschritte und lässt dich nach Änderungen in den Systemeinstellungen erneut prüfen. Lesen und Suche bleiben verfügbar.
+• Der Startbereich heißt jetzt Zuletzt. Die Einstellungen enthalten keine zusätzliche Liste kürzlich gespeicherter Beiträge mehr.
+
+Apple Intelligence benötigt weiterhin ein kompatibles Gerät, eine unterstützte Sprache, aktivierte Einstellungen und ein bereites Systemmodell. SourceBraid kann dessen Download nicht erzwingen.
+```
+
+Keinen Download-Fortschrittsbalken, erzwungenen Modelldownload oder eine Änderung
+der Systemeinstellungen versprechen, solange die veröffentlichte App das nicht
+tatsächlich leisten kann.
+
+## Im Entwurf 1.1.1 gespeicherter nativer Screenshot-Satz
+
+Das gemeinsame Upload-ZIP enthält **22 native Bilder** auf Deutsch und Englisch:
+je Sprache vier für **iPhone 17 Pro** mit **1206 × 2622**, drei für **iPad Pro
+13 Zoll (M5)** mit **2064 × 2752** und vier für **iPhone Duo** mit **1398 × 2034**.
+Diese Anzahlen wurden in App Store Connect bestätigt. Upload und Speichern
+bedeuten weder eine Freigabe durch Apple noch eine öffentliche Veröffentlichung.
+
+Die beiden iPad-Aufnahmen von Zuletzt bleiben optionale Kandidaten außerhalb
+des ZIPs, weil der anfängliche Detailbereich viel leere Fläche zeigt. Die
+laufende App zeigt selbst verfasste fiktive Archivinhalte. Pixelmaße, Aufnahme
+und Sichtprüfung stehen in `CAPTURE_README.md`, `IPHONE_DUO_README.md` und im
+gemeinsamen Manifest. Siehe auch das
+[Implementierungs-Testprotokoll](IOS_IMPLEMENTATION_TESTING.de.md).
+
+Die empfohlenen Bilder erklären hilfreiche Funktionen ohne verfügbares KI-Modell.
+Den warmen SourceBraid-Hintergrund, dunklen Text und Petrol-Akzent beibehalten.
+Die Bildtexte unten sind begleitende Textvorschläge; sie behaupten nicht, dass
+die nativen Bilder bereits beschriftet wurden. Die App muss auch als Miniatur
+lesbar bleiben.
+
+| Reihenfolge | Bildtext | Empfohlene Geräte | Native Ansicht und Nachweis |
+| --- | --- | --- | --- |
+| 1 | Lies, was du gespeichert hast | iPhone, iPhone Duo und iPad | Markdown-Reader mit „Lesen, verstehen, behalten“, seiner fiktiven Autorenkennzeichnung, Überschriften und gut lesbarem Beitrag. Der iPad-Satz zeigt dabei auch die native breite Ansicht. |
+| 2 | Deine neuesten Quellen griffbereit | iPhone und iPhone Duo | Zuletzt mit sieben abwechslungsreichen, selbst verfassten Beispielbeiträgen. Die aufgenommene iPad-Variante bleibt optional und ist nicht im empfohlenen ZIP enthalten. |
+| 3 | Finde es im geladenen Text | iPhone, iPhone Duo und iPad | Offline-Suche mit sinnvoller Anfrage und der tatsächlichen Indexanzeige der App. Dies zeigt die Suche im Cache, keine vollständige Archivsynchronisation. |
+| 4 | Deine Dateien bleiben Markdown | iPhone, iPhone Duo und iPad | Rohes Markdown aus dem Reader mit portablem Quelltext und klar fiktiven Metadaten. |
+
+### Spätere optionale Aufnahmen — außerhalb des empfohlenen Upload-Satzes
+
+- **Aus dem Teilen-Menü speichern:** Teilen-Erweiterung mit Titel, Tags und
+ Notiz vor dem Speichern mit synthetischer Eingabe und Test-Repository
+ aufnehmen.
+- **Frage deine Quellen auf dem Gerät:** Echte Antwort mit Quellenbuttons auf
+ einem Gerät mit bereitem Modell aufnehmen. Hinweis „Benötigt kompatible
+ Apple Intelligence“ ergänzen. Der empfohlene Upload-Satz enthält keine
+ KI-Antwort. Eine Demo-Antwort muss sichtbar „Beispielantwort mit Testdaten“
+ bleiben und ist kein Nachweis einer Modellantwort.
+- **Sieh, wann lokale KI bereit ist:** Neue Diagnoseansicht erst aufnehmen,
+ wenn sie in der eingereichten Version enthalten ist. Hilfreiche Schritte
+ zeigen, ohne Download-Fortschritt zu erfinden oder ungeprüfte Bedingungen
+ als bestanden auszugeben.
+
+Einen nicht verfügbaren Modellstatus niemals durch eine erfundene erfolgreiche
+Antwort ersetzen. Das angehängte Nutzerfoto ist kein geeigneter
+Werbe-Screenshot. Diagnosebilder gehören zum nächsten Update und dürfen nicht
+nachträglich als Funktion von 1.1.0 dargestellt werden.
+
+### Sichere Screenshot-Inhalte
+
+Die vorbereiteten Aufnahmen verwenden das selbst verfasste fiktive Markdown
+in `ArchiveDemoReader.storeDocuments()` mit den ausdrücklichen Debug-Opt-ins
+`SOURCEBRAID_DEMO=1` und `SOURCEBRAID_STORE_DEMO=1`. Dieser Adapter verwendet
+weder Netzwerk noch Zugangsdaten, private Archivinhalte oder Modellausgaben.
+Die Beispiel-URLs liegen auf `example.invalid`; die Autorenkennzeichnung
+lautet „SourceBraid-Beispielarchiv“. Die sieben tatsächlichen Titel sind:
+
+- Ein Garten auf dem Balkon
+- Ein Notizbuch fürs Wochenende
+- Oberflächen mit Freiraum
+- Mehr als ein Lesezeichen
+- Kleine Werkzeuge, großer Wert
+- Die eigene Wissensbibliothek
+- Lesen, verstehen, behalten
+
+Dies sind erfundene Beispiele, keine erfassten Veröffentlichungen. Keine echten
+Autoren, Veröffentlichungsdaten oder Quelldomains hinzufügen. Keine Inhalte
+aus `web-clips/`, Tokens, Kontokennungen, Review-Zugangsdaten oder privaten
+Repository-Namen zeigen. Eine ruhige Statusleiste mit 09:41 ist geeignet;
+den Funktionszustand der App nicht für unbelegte Aussagen verändern.
+
+### Export und Prüfung
+
+Die vorbereiteten nativen PNG- oder JPEG-Aufnahmen mit den in App Store Connect
+angezeigten Gerätegrößen nach [Apples aktuellen Screenshot-Vorgaben](https://developer.apple.com/help/app-store-connect/reference/app-information/screenshot-specifications/)
+abgleichen. Keine Aufnahme eines anderen Geräts hochskalieren und als native
+Aufnahme ausgeben. Je Gerätesatz und Sprache 1–10 Bilder hinterlegen und
+Reihenfolge, Ausschnitte, Lesbarkeit und übersetzte Bildtexte im Media Manager
+prüfen. Für dieselbe Oberfläche auf kleineren Geräten kann Apples unterstützte
+Skalierung verwendet werden. Die 22 Bilder wurden im Entwurf 1.1.1 hochgeladen
+und gespeichert; ein passender Build und die Prüfung stehen noch aus. Dieses
+Dokument bestätigt keine öffentliche Verfügbarkeit der neuen Bilder.
+
+## Änderbarkeit in App Store Connect
+
+Am 17. Oktober 2026 anhand von Apples Dokumentation geprüft:
+
+- Die [Dokumentation zu Versionslokalisierungen](https://developer.apple.com/documentation/appstoreconnectapi/app-store-version-localizations)
+ erlaubt Änderungen am Werbetext jederzeit; andere versionsbezogene
+ Textfelder benötigen einen bearbeitbaren App-Status.
+- Die [aktuelle Anleitung zur Asset Library](https://developer.apple.com/help/app-store-connect/manage-app-information/manage-your-app-store-assets)
+ erlaubt den Screenshot-/Vorschau-Upload in den Zuständen Prepare for
+ Submission, Invalid Binary, Rejected, Metadata Rejected und Developer
+ Rejected. Die Ausnahme für veröffentlichte Versionen betrifft freigegebene
+ Creative Assets für Produktseitenkopf und Suchergebnisse; diese sind von
+ Screenshots und Vorschauen getrennt.
+- Die [App- und Einreichungsstatus](https://developer.apple.com/help/app-store-connect/reference/app-information/app-and-submission-statuses)
+ schließen Screenshot-Uploads und -Änderungen während Warten auf Prüfung
+ ausdrücklich aus. In Prüfung und Ready for Distribution gehören ebenfalls
+ nicht zu den genannten Upload-Zuständen. Keine bestehende Einreichung allein
+ für Marketing-Änderungen zurückziehen.
+
+Da 1.1.0 öffentlich verfügbar ist, werden die neuen normalen Screenshots,
+Beschreibung, Untertitel und Schlüsselwörter im **Entwurf 1.1.1** desselben
+App-Eintrags bearbeitet. Die 22 Bilder und die neueste Textfassung oben sind
+gespeichert und wurden nach vollständigem Neuladen und Sprachwechsel geprüft. Eine [neue Version](https://developer.apple.com/help/app-store-connect/update-your-app/create-a-new-version)
+übernimmt zunächst die aktuellen Metadaten. Es ist kein Build ausgewählt, und
+es wurde keine Einreichung oder Veröffentlichung ausgelöst. Ein neuer passender
+Build und abgeschlossene Prüfungen stehen noch aus. Verträge,
+Veröffentlichungseinstellungen und Zugriffsrechte wurden nicht geändert.
+
+## Prüfung der Aussagen
+
+Die Texte für 1.1.1 setzen den Abschluss und die Prüfung der zugehörigen
+Änderungen für Archivladen, lokale Mermaid-Darstellung und Intelligence-Diagnose
+voraus. Sie beschreiben nur gängige Mermaid-Typen; bei nicht unterstützter Syntax
+oder Darstellungsfehlern bleibt der Quelltext erhalten. Sie versprechen weder
+Download-Fortschrittsbalken noch erzwungenen Modelldownload.
+
+Die Texte folgen der Implementierung in `ios/SourceBraid/Archive/`,
+`ios/SourceBraidShare/`, der [iOS-README](../ios/README.md),
+dem [Release-Protokoll für 1.1.0](IOS_RELEASE_1.1.0.de.md) und
+dem [Datenschutzhinweis](../PRIVACY.md). Sie versprechen weder vollständige
+Archivsynchronisation noch garantierte Offline-Aufbewahrung, uneingeschränkte
+lokale KI, sachlich richtige generierte Antworten oder einen Cloud-KI-Ersatz.
+Die separate Chrome-Erweiterung, das Codex-Plugin und der ChatGPT-Dienst sind
+keine in der iOS-App enthaltenen Dienste und werden nicht als solche beworben.
diff --git a/docs/IOS_APP_STORE_METADATA.md b/docs/IOS_APP_STORE_METADATA.md
new file mode 100644
index 0000000..fa5281e
--- /dev/null
+++ b/docs/IOS_APP_STORE_METADATA.md
@@ -0,0 +1,241 @@
+# iOS App Store metadata and screenshots
+
+Prepared October 17, 2026 · [Deutsch](IOS_APP_STORE_METADATA.de.md)
+
+The editing target is the **1.1.1 draft** in App Store Connect. Its English and
+German promotional text, description, keywords, subtitles and initial diagnostic
+update notes have been saved. **22 new native screenshots** are confirmed saved:
+four iPhone, three iPad and four iPhone Duo images per localization. The previous
+iPad screenshot was removed from this draft's selection and remains in the asset
+library. No build is selected; the draft has not been submitted or released.
+
+The revised descriptions and 1.1.1 update notes below also cover the subsequent
+archive-loading fix and local Mermaid rendering. These latest text revisions
+are saved in both localizations and were verified after a full page reload and
+locale switch against the exported text files. All six screenshot wells retained
+the expected filenames and counts; both localized subtitles were saved in App
+Information. Implementation tests and physical-device acceptance remain in
+progress; the copy does not establish that these changes have shipped.
+
+The [German App Store listing](https://apps.apple.com/de/app/sourcebraid/id6798551232)
+remains publicly available as **1.1.0**, verified on October 17, 2026, with a
+release timestamp of **07:14:07 UTC**. Its live screenshots and release are
+unchanged by preparation of the 1.1.1 draft.
+
+## Copy-ready English (U.S.) fields
+
+### App name
+
+```text
+SourceBraid
+```
+
+### Subtitle — maximum 30 characters
+
+```text
+Save, read and search sources
+```
+
+### Promotional text — maximum 170 characters
+
+```text
+Turn shared pages into Markdown in your GitHub archive. Read downloaded clips, search their text, and ask questions with optional on-device Apple Intelligence.
+```
+
+### Description — maximum 4,000 characters
+
+```text
+SourceBraid — Weave the web into Markdown.
+
+Save useful sources, find them again, and keep the files in a GitHub repository you control. SourceBraid brings capture, a Markdown reader, local search, and optional on-device chat to your iPhone and iPad.
+
+SAVE FROM THE SHARE MENU
+Share a web page, selected text, a PDF, or another file to SourceBraid. Adjust the title, add tags or a note, and save it to your configured repository. Readable public pages become Markdown with source metadata and relevant images. Pages that cannot be extracted are clearly saved as links. Shared PDFs can be converted by the optional Docling GitHub Actions workflow in your repository.
+
+RETURN TO YOUR LATEST SOURCES
+The Recent view puts seven recent clips within reach. Open a source directly, refresh your archive, or switch to Search and Chat. Wider layouts place your list and reader side by side.
+
+READ MARKDOWN COMFORTABLY
+Read headings, lists, tasks, tables, quotes, code, and local images. Open PDF attachments in the native preview, inspect the raw Markdown, share a clip, or follow its original source. External images load only when you choose to load them for that document. Common Mermaid flowcharts and sequence, state, class, ER, and Gantt diagrams render locally; unsupported or invalid diagrams retain their original source text.
+
+FIND TEXT YOU HAVE DOWNLOADED
+Full-text search runs on your device and shows how much of your archive is indexed. Downloaded clips can be read and searched offline while your repository remains configured. Search covers cached, indexed text; it may not yet include every file in a large archive. Refresh fills gaps, and iOS may remove cached files to reclaim storage. Background updates run when iOS allows them.
+
+ASK YOUR SOURCES ON DEVICE
+On compatible devices, ask about a selected clip or relevant excerpts from the indexed archive. Answers stream into the conversation and include links to the source excerpts supplied to the model. You can stop an answer at any time.
+
+Chat requires iOS or iPadOS 26 or later, an eligible device, enabled Apple Intelligence, a ready downloaded system model, and a supported language. It works with limited excerpts rather than every word of every document. AI answers can be wrong; source links help you check them. Reader and search remain available when chat is unavailable. SourceBraid does not send chat questions to a cloud AI service or use a cloud fallback.
+
+YOUR ARCHIVE, YOUR FILES
+Markdown files and Git history stay in the GitHub repository you choose. The app stores the GitHub token in Keychain and maintains a disposable local reading and search cache. Reading, searching, chat, and read-only App Shortcuts do not change your archive. Saving through the Share Extension writes the captures you choose.
+
+SourceBraid includes no ads, tracking, or analytics. Capture and archive refresh contact GitHub and the source websites involved; those services have their own privacy policies. No separate AI account is required for on-device chat.
+
+GET STARTED
+Use a GitHub account and configure a repository with a fine-grained access token. Read access is sufficient for the reader; saving captures also needs repository contents write access. Reader and search support iOS and iPadOS 17 or later.
+```
+
+### Keywords — maximum 100 bytes
+
+```text
+markdown,webclipper,reader,notes,research,archive,pdf,offline,search,bookmarks
+```
+
+### What's New — iOS 1.1.0 facts, maximum 4,000 characters
+
+Use this only for the 1.1.0 feature description or historical release copy.
+For a later bug-fix update, describe the changes in that update instead.
+
+```text
+SourceBraid now helps you use the sources you save:
+
+• Latest opens with seven recent clips and direct access to the reader.
+• Read Markdown with tables, tasks, code, local images, and archive links. Preview PDF attachments and share clips.
+• Search downloaded text on your device, with visible index coverage. Read and search cached clips offline.
+• Ask questions about a selected clip or indexed archive excerpts with optional Apple Intelligence chat, streaming answers, cancellation, and source links.
+• Use read-only App Shortcuts to find sources, list recent clips, and open a loaded clip.
+• Enjoy adaptive phone and iPad layouts, refreshed colors, and bounded background archive refresh.
+
+Local chat requires iOS or iPadOS 26 or later, an eligible device, enabled Apple Intelligence, a ready system model, and a supported language. Search and chat cover downloaded, indexed material; source links do not guarantee an AI answer is correct.
+```
+
+### What's New — 1.1.1 draft, not yet released
+
+Use this draft only with a 1.1.1 build containing these changes, after its tests
+and device checks pass. The 1.1.0 historical copy above remains unchanged.
+
+```text
+This update improves archive loading, reading, and local chat:
+
+• Fixes a reader that could stay loading after you returned to the list and opened another clip.
+• Interrupted initial archive downloads resume when you return. A loaded-clip count and an action to load remaining clips make the local archive state clearer.
+• Common Mermaid flowcharts and sequence, state, class, ER, and Gantt diagrams render on your device. Unsupported or invalid diagrams keep their original source text.
+• Local chat explains Apple Intelligence availability more clearly, offers relevant recovery steps, and lets you check again after changing system settings. Reading and search remain available.
+• The home tab is now called Recent. Settings no longer repeats a list of recently saved items.
+
+Apple Intelligence still requires a compatible device, supported language, enabled settings, and a ready system model. SourceBraid cannot force its download.
+```
+
+Do not promise a download progress bar, a forced model download, or a system
+setting change unless the released implementation can actually provide it.
+
+## Native screenshot set saved in the 1.1.1 draft
+
+The combined upload ZIP contains **22 native images** in English and German:
+four per **iPhone 17 Pro** localization at **1206 × 2622**, three per **iPad Pro
+13-inch (M5)** localization at **2064 × 2752**, and four per **iPhone Duo**
+localization at **1398 × 2034**. These exact counts have been confirmed in
+App Store Connect. Upload and save do not mean Apple approval or public release.
+
+The two iPad Recent captures remain optional candidates outside the ZIP because
+their initial detail pane leaves a large empty area. Each image shows the
+running app with original fictional archive content. Pixel dimensions, capture
+and visual checks are recorded in the delivered `CAPTURE_README.md`,
+`IPHONE_DUO_README.md` and combined manifest. See also the
+[implementation test record](IOS_IMPLEMENTATION_TESTING.md).
+
+The recommended images explain useful functionality without requiring an available
+AI model. Keep the warm SourceBraid background, dark text, and teal accent.
+The captions below are accompanying copy suggestions, not claims that text
+has been added to the native images. Leave the app readable at thumbnail size.
+
+| Order | Caption | Recommended devices | Native screen and evidence |
+| --- | --- | --- | --- |
+| 1 | Read what you saved | iPhone, iPhone Duo and iPad | Markdown reader showing “Reading notes that last”, its fictional author label, headings, and a readable article. The iPad set also demonstrates the native wider layout. |
+| 2 | Your latest sources, within reach | iPhone and iPhone Duo | Recent with seven varied original example articles. The captured iPad variant is optional and excluded from the recommended ZIP. |
+| 3 | Find it in downloaded text | iPhone, iPhone Duo and iPad | Offline Search with a meaningful query and the app's actual coverage display. This depicts cached search, not complete archive synchronization. |
+| 4 | Your files stay Markdown | iPhone, iPhone Duo and iPad | The reader's raw Markdown view, preserving the portable source text and clearly fictional metadata. |
+
+### Later optional captures — outside the recommended upload set
+
+- **Save from the Share menu:** capture the Share Extension with title, tags,
+ and a note before saving, using synthetic input and a test repository.
+- **Ask your sources, on device:** use a real answer with source buttons on a
+ device with an available model. Add the qualifier “Requires compatible Apple
+ Intelligence.” The recommended upload set contains no AI-answer screenshot.
+ A demo answer must remain visibly labeled “Example answer with test data”
+ and is not evidence of model output.
+- **Know when local AI is ready:** capture the new diagnostic UI only after
+ it exists in the version being submitted. Show useful recovery steps without
+ inventing download progress or marking unchecked conditions as passed.
+
+Never replace an unavailable-model screen with a fabricated successful answer.
+Do not use the user's attached photo as a promotional screenshot. Diagnostic
+screens belong to the next update, not a retrospective claim about 1.1.0.
+
+### Safe screenshot data
+
+The prepared captures use the original fictional Markdown in
+`ArchiveDemoReader.storeDocuments()` with the explicit Debug opt-ins
+`SOURCEBRAID_DEMO=1` and `SOURCEBRAID_STORE_DEMO=1`. This adapter uses no
+network, credentials, private archive content, or model output. Its fixture
+URLs use `example.invalid`, and its author label says “SourceBraid example
+archive”. The seven actual fixture titles are:
+
+- A balcony garden
+- A notebook for the weekend
+- Interfaces with room to breathe
+- Beyond the bookmark
+- Small tools, lasting value
+- A personal reference library
+- Reading notes that last
+
+These are invented examples, not captured publications. Do not attach real
+authors, publication dates, or source domains to them. No `web-clips/` data,
+tokens, account identifiers, review credentials, or private repository names
+may appear. A clean 09:41 status bar is appropriate; do not alter the app's
+feature state to create unsupported claims.
+
+### Export and review
+
+Check the prepared native PNG or JPEG files against the device wells shown by App Store
+Connect, using [Apple's current screenshot specifications](https://developer.apple.com/help/app-store-connect/reference/app-information/screenshot-specifications/).
+Do not upscale an unrelated device image into an asserted native device
+capture. Upload 1–10 screenshots per supported device set and localization;
+check order, crops, legibility, and localized captions in Media Manager. The
+same UI on smaller devices can use Apple's supported scaling. The 22-image
+set has been uploaded and saved in draft 1.1.1; it still requires a matching
+build and review. This document does not assert that the new images are live.
+
+## App Store Connect editability
+
+Checked against Apple's documentation on October 17, 2026:
+
+- [Version-localization documentation](https://developer.apple.com/documentation/appstoreconnectapi/app-store-version-localizations)
+ says promotional text can be updated at any time; other version-localization
+ attributes require an editable app state.
+- [The current Asset Library guide](https://developer.apple.com/help/app-store-connect/manage-app-information/manage-your-app-store-assets)
+ lists screenshot/previews upload states: Prepare for Submission, Invalid
+ Binary, Rejected, Metadata Rejected, and Developer Rejected. Its live-version
+ exception concerns approved Header/Search Results creative assets, which are
+ separate from screenshots and previews.
+- [App and submission statuses](https://developer.apple.com/help/app-store-connect/reference/app-information/app-and-submission-statuses)
+ explicitly says that Waiting for Review does not allow uploading or editing
+ screenshots/previews. In Review and Ready for Distribution are not among
+ the screenshot-upload states above. Do not withdraw an existing submission
+ simply to change marketing.
+
+Since 1.1.0 is publicly available, the new default screenshots, description,
+subtitle and keywords are being edited in draft **1.1.1** on the same app record.
+The 22 screenshots and latest patch copy above are saved and were verified after
+a full page reload and locale switch. [Creating a new version](https://developer.apple.com/help/app-store-connect/update-your-app/create-a-new-version)
+copies the current metadata into the new version. No build is selected and no
+submission or release has been triggered. A new matching build and completed
+checks are still required. Agreements, release settings and access rights have
+not been changed.
+
+## Claim checks
+
+The 1.1.1 copy is conditional on completion and validation of the corresponding
+archive-loading, local Mermaid and Intelligence diagnostic changes. It claims
+common Mermaid types only; unsupported syntax and render errors retain source
+text. It promises neither a model download progress bar nor a forced download.
+
+The copy follows the implementation in `ios/SourceBraid/Archive/`,
+`ios/SourceBraidShare/`, [the iOS README](../ios/README.md),
+[the 1.1.0 release record](IOS_RELEASE_1.1.0.md), and
+[the privacy notice](../PRIVACY.md). It intentionally does not claim complete
+archive synchronization, guaranteed offline retention, unconditional local AI
+availability, factual accuracy of generated answers, or a hosted AI fallback.
+The separate Chrome extension, Codex plugin, and ChatGPT service are not iOS
+in-app features and are not presented as included services here.
diff --git a/docs/IOS_BRAND_APPEARANCE.de.md b/docs/IOS_BRAND_APPEARANCE.de.md
index b396556..642c2f8 100644
--- a/docs/IOS_BRAND_APPEARANCE.de.md
+++ b/docs/IOS_BRAND_APPEARANCE.de.md
@@ -5,7 +5,7 @@
Diese lokale Anpassung gibt der iOS-/iPadOS-App eine zurückhaltende Identität,
inspiriert von [sourcebraid.com](https://sourcebraid.com/). Warme Papierflächen,
dunkelgrüne Schrift und ein einzelner Petrol-Akzent übertragen den Charakter
-der Webseite auf native Apple-Steuerelemente. **Neueste** mit sieben Einträgen,
+der Webseite auf native Apple-Steuerelemente. **Zuletzt** mit sieben Einträgen,
Navigation, Reader und Hintergrundaktualisierung folgen weiterhin dem
[Reader-Konzept](IOS_READER_REFRESH_UX.de.md).
@@ -66,7 +66,7 @@ Sichtprüfung; die Palettenberechnung prüft nicht jede zusammengesetzte Ansicht
## Prüfgrenze
-Neueste, Suche, Chat, Einstellungen und gerendertes Markdown im hellen/dunklen
+Zuletzt, Suche, Chat, Einstellungen und gerendertes Markdown im hellen/dunklen
Modus, mit erhöhtem Kontrast und vergrößerter Schrift prüfen. Dabei Datum und
Platzhalter, gewählte Tabs, Links, Eingabe-/Sendesteuerung, Quellen, Codeblöcke
und Tabellen auf Lesbarkeit prüfen. Den Eingaberahmen mit und ohne Fokus,
diff --git a/docs/IOS_BRAND_APPEARANCE.md b/docs/IOS_BRAND_APPEARANCE.md
index 5fafd4a..e3657a2 100644
--- a/docs/IOS_BRAND_APPEARANCE.md
+++ b/docs/IOS_BRAND_APPEARANCE.md
@@ -5,7 +5,7 @@ October 12, 2026 · [Deutsch](IOS_BRAND_APPEARANCE.de.md)
This local appearance update gives the iOS/iPadOS app a restrained identity
inspired by [sourcebraid.com](https://sourcebraid.com/). Warm paper, deep green
text and a single teal accent carry the website's visual character into native
-Apple controls. The seven-entry **Latest** destination, navigation, reader and
+Apple controls. The seven-entry **Recent** destination, navigation, reader and
background-refresh behavior remain as described in the
[reader concept](IOS_READER_REFRESH_UX.md).
@@ -63,7 +63,7 @@ does not verify every composited screen.
## Verification boundary
-Inspect Latest, Search, Chat, Settings and rendered Markdown in light/dark mode,
+Inspect Recent, Search, Chat, Settings and rendered Markdown in light/dark mode,
increased contrast and enlarged text. Check legible dates and placeholder text,
selected tabs, links, composer/send controls, sources, code blocks and tables.
Check the input border with and without focus, reserved text/action space,
diff --git a/docs/IOS_DEVICE_ACCEPTANCE.de.md b/docs/IOS_DEVICE_ACCEPTANCE.de.md
index 4edad6a..e862f5b 100644
--- a/docs/IOS_DEVICE_ACCEPTANCE.de.md
+++ b/docs/IOS_DEVICE_ACCEPTANCE.de.md
@@ -59,8 +59,12 @@ historische Läufe mit Runtime 27.0 bleiben Nachweise ohne Duo-Abdeckung.
- [ ] Neueste sieben mit dem vollständigen GitHub-Bestand vergleichen: UTC-
Aufnahmezeit, Tages-Fallback, gleiche Datumswerte und undatierte Dateien.
Ein unvollständiger Erstabruf darf keinen vollständigen Bestand behaupten.
-- [ ] Start mit **Neueste** und sieben Beiträgen; Suche/Chat nutzen native Navigation.
+- [ ] Start mit **Zuletzt** und sieben Beiträgen; Suche/Chat nutzen native Navigation.
Antippen öffnet den Beitrag. Zurücknavigation, Auswahlmarkierung und interner Link funktionieren.
+- [ ] Verschiedene Beiträge nacheinander öffnen, etwa 5 → Zurück → 6 → Zurück
+ → 7 → Zurück → 5. Jede Auswahl muss fertig laden und ihren eigenen Inhalt,
+ Originalquelle und Markdown-Quelltext zeigen. Auch aus Suche und nach der
+ Rückkehr vom Chat prüfen.
- [ ] Auf breitem iPad erscheinen Auswahl/Chat links und Reader rechts;
Hoch-/Querformat, schmale Fenster, Split View und zweite App-Szene prüfen.
- [ ] Überschriften, Fett/Kursiv, verschachtelte Listen, Aufgaben, Zitate,
@@ -114,7 +118,10 @@ Gerät Apple Intelligence aktivieren und den Modelldownload abschließen.
| Fall | Erwartung / zu protokollierender Nachweis |
| --- | --- |
-| KI deaktiviert / Modell lädt / unzulässige Sprache | Verständlicher Status, kein aktives Chat-Eingabefeld; Reader/Suche nutzbar. |
+| Gerät nicht berechtigt / iOS zu alt | Der gemeldete Grund ist von einem noch nicht bereiten Modell unterschieden; Reader/Suche bleiben nutzbar. |
+| Apple Intelligence deaktiviert | Aktivieren in den Einstellungen wird empfohlen; kein angeblich laufender Modelldownload. |
+| Modell nicht bereit | Der Status benennt die unbekannten Download-/Einrichtungsdetails ehrlich; Schritte zu aktivierter Intelligence, gleicher Geräte-/Siri-Sprache, WLAN, Strom und freiem Speicher. |
+| Nicht unterstützte Sprache | Geprüfte Sprache und Sprachhinweise sichtbar; keine Anfrage erreicht das Modell. |
| Demo-Beitrag 5: „Welcher Wert steht in der Swift-Zeile?“ | `SourceBraid` aus dem Code; Quellenknopf öffnet den richtigen Auszug. |
| Gleicher Fall auf Englisch | „What is the value in the Swift code?“; passende Sprache, gleicher Beleg. |
| „Fasse diesen Beitrag zusammen.“ | Nur gelieferte Auszüge; keine Aussage, die eine vollständige Langdokument-Analyse behauptet. |
@@ -126,6 +133,30 @@ Gerät Apple Intelligence aktivieren und den Modelldownload abschließen.
| Während Antwort stoppen / abmelden / Archiv wechseln | Keine nachträglich als geprüft dargestellte alte Antwort; Chat beim Archivwechsel geleert. |
| Lange Quellen, Deutsch und weitere unterstützte Sprachen | Begrenzte Auszüge oder verständlicher Kontextfehler; kein stilles „vollständig gelesen“. |
+Die erweiterte Diagnose ist **für das nächste Update vorbereitet und nicht Teil
+der veröffentlichten 1.1.0**. Ihre Abnahme auf einem echten iPhone steht aus:
+
+- [ ] Auf einem iPhone 17 Pro die Debug-Verfügbarkeitsvorgaben entfernen und
+ tatsächliche App-/Build- und iOS-Version, Geräte- und Siri-Sprache,
+ Intelligence-Einstellung und gemeldeten Zustand protokollieren. Ein geeignetes
+ Gerät darf nicht automatisch als bereites Modell dargestellt werden.
+- [ ] Falls iOS ein noch nicht bereites Modell meldet, die Schritte mit
+ [Apples Hilfe](https://support.apple.com/de-de/121115) vergleichen. Einstellungen,
+ gleiche unterstützte Sprachen, WLAN, Strom und freien Speicher prüfen.
+ SourceBraid darf keinen Downloadprozentsatz, Downloadstart oder festen
+ Fertigstellungstermin behaupten. Den echten Zustand nach abgeschlossener
+ iOS-Vorbereitung protokollieren.
+- [ ] Chat öffnen, aus Einstellungen/Hintergrund zurückkehren und manuell
+ erneut prüfen: Jeweils den aktuellen Grund anzeigen. Bei fehlender
+ Verfügbarkeit bleibt Senden gesperrt; Lesen/Suche funktionieren weiter.
+- [ ] Nach einem echten Verfügbarkeitswechsel vorhandenen Verlauf und einen
+ ungesendeten mehrzeiligen Entwurf über erneute Prüfung und Wiederherstellung
+ behalten. Sobald das Modell bereit ist, die erhaltene Frage zu einem Beitrag
+ mit passenden Belegen senden; keine doppelte Anfrage oder automatische
+ Übermittlung. Zum Test geänderte Einstellungen danach wiederherstellen.
+- [ ] Vollständige Diagnose, erneute Prüfung und Apple-Hilfelink auf Deutsch
+ und Englisch mit großer Schrift und VoiceOver prüfen; per Scrollen erreichbar.
+
Pro Fall Sprache, Geräte-/OS-Version, grobe Dauer, Ergebnis und Pass/Fail
festhalten. Quellen-IDs sind strukturell prüfbar; ob ein Text die Antwort
wirklich stützt, muss in dieser Abnahme inhaltlich kontrolliert werden.
@@ -245,6 +276,29 @@ Release-Stufe diese Funktionen einschließt. Fehlende Nachweise als **offen**
führen, nicht als bestanden. Keine privaten Dokumente oder Tokens in
Screenshots, Testreports oder öffentlichen Issues.
+## Mermaid-Reader-Abnahme für das nächste Update
+
+Diese lokalen Änderungen sind nicht in der veröffentlichten 1.1.0 enthalten.
+Ein synthetisches Dokument mit Flussdiagramm, Sequenzdiagramm, einem ungültigen
+und anschließend gültigen Diagramm sowie einem zu großen Diagramm prüfen.
+Unterstützte Vorschauen müssen offline ohne CDN oder Diagrammdienst sichtbar
+bleiben. Fehlerhafte, nicht unterstützte und zu große Eingaben müssen ihren
+lesbaren Originalquelltext und einen klaren Hinweis behalten. Erfolgreiche
+Vorschauen bieten weiterhin einen aufklappbaren Quelltext.
+
+Mermaid Tiny 12.2.0 enthält keine Mindmaps, Architekturdiagramme oder KaTeX.
+Angeforderte ELK-Layouts verwenden Dagre. Zwei verschiedene Dokumente
+nacheinander öffnen, zum ersten zurückkehren, dunkle Darstellung und Drehung
+prüfen sowie eine Quellenzeile unterhalb eines Diagramms anspringen. Relative
+Links und Bilder müssen zum aktuellen Dokument gehören; die Leseposition muss
+nach Abschluss der Darstellung wiederhergestellt werden. Archivskripte,
+anklickbare Diagrammlinks und externe Diagrammmedien bleiben deaktiviert;
+externe Reader-Bilder benötigen weiterhin eine bewusste Auswahl.
+
+Ergebnisse auf echten Geräten, einschließlich des gemeldeten iPhone 17 Pro,
+sind weiterhin **offen**. Simulator-WebKit-Nachweise stehen getrennt im
+Implementierungsprotokoll und belegen kein Verhalten auf realer Hardware.
+
## Abnahmeprotokoll
| Gerät / OS / Sprache | Fall | Ergebnis / Fehler | Nachweis | Freigabe |
diff --git a/docs/IOS_DEVICE_ACCEPTANCE.md b/docs/IOS_DEVICE_ACCEPTANCE.md
index 722c444..2a21f43 100644
--- a/docs/IOS_DEVICE_ACCEPTANCE.md
+++ b/docs/IOS_DEVICE_ACCEPTANCE.md
@@ -53,8 +53,11 @@ historical runs on runtime 27.0 remain non-Duo evidence.
- [ ] Compare latest-seven ordering against the complete inventory: UTC capture
timestamps, day/filename fallback, ties and undated files. Partial sync is labeled.
-- [ ] Start at **Latest** with seven clips; Search/Chat use native navigation.
+- [ ] Start at **Recent** with seven clips; Search/Chat use native navigation.
Tap a row to open the document. Back, selection indication and relative links work.
+- [ ] Open different clips in succession, for example 5 → Back → 6 → Back → 7
+ → Back → 5. Each selection must finish loading and show its own body, original
+ source and raw Markdown. Repeat from Search and after returning from Chat.
- [ ] Wide iPad has selection/chat left and reader right. Test rotation,
narrow windows, Split View, and a second app scene.
- [ ] Verify headings, emphasis, nested lists, tasks, quotes, code, wide tables,
@@ -105,7 +108,10 @@ the model download.
| Case | Expected evidence |
| --- | --- |
-| Disabled / model loading / unsupported language | Reason shown, no active chat input, reader/search usable. |
+| Device not eligible / iOS too old | The reported reason is distinguished from a model that is not ready; reader/search remain usable. |
+| Apple Intelligence disabled | Enabling it in Settings is suggested; the app does not claim a model download is running. |
+| Model not ready | The status remains honest about unknown download/setup progress; steps cover enabling Intelligence, matching device/Siri languages, Wi-Fi, power and free storage. |
+| Unsupported language | The checked language and language guidance are shown; no request reaches the model. |
| Demo clip 5: “What is the value in the Swift code?” | `SourceBraid`, with a source button opening its supporting excerpt. |
| German equivalent | “Welcher Wert steht in der Swift-Zeile?”; same evidence, suitable language. |
| Summarize selected clip | Only supplied excerpts; no claim of complete long-document analysis. |
@@ -117,6 +123,27 @@ the model download.
| Stop/sign out/change archive while streaming | No late verified old answer; archive changes clear chat. |
| Long sources and multiple supported languages | Bounded excerpts or understandable context failure, without a silent completeness claim. |
+The expanded diagnostics are **prepared for the next update, not part of the
+published 1.1.0**. Their physical iPhone acceptance remains pending:
+
+- [ ] On an iPhone 17 Pro, remove Debug availability overrides and record the
+ actual app/build, iOS version, device and Siri languages, Intelligence setting
+ and reported state. Device eligibility alone must not be presented as readiness.
+- [ ] If iOS reports that the model is not ready, compare the displayed steps
+ with [Apple's guide](https://support.apple.com/en-us/121115). Check Settings,
+ matching supported languages, Wi-Fi, power and available storage. SourceBraid
+ must not display a download percentage, claim to start a download or promise
+ a completion time. Record the real state after iOS finishes preparation.
+- [ ] Enter Chat, return from Settings/background and use the manual recheck;
+ each should show the current reason. Check that sending remains blocked when
+ unavailable and that reading/search still work.
+- [ ] After a real availability change, keep an existing conversation and an
+ unsent multiline draft through refresh and recovery. Once ready, send the
+ preserved question against a clip with matching evidence; no duplicate request
+ or automatic submission should occur. Restore any settings changed for testing.
+- [ ] Check the full diagnosis, recheck action and Apple help link in German
+ and English with large text and VoiceOver; scrolling must keep them reachable.
+
Record device/OS/language, rough duration, result and pass/fail. Verify the
answer against the actual excerpt; structural citation checks do not establish
semantic correctness. Repeat positive and negative quality cases at least
@@ -227,6 +254,27 @@ archive measurements remain release gates for stages that include them.
Missing evidence is **pending**, never passed. Keep private documents and
tokens out of screenshots, reports and public issues.
+## Mermaid reader acceptance for the next update
+
+These local changes are not included in the published 1.1.0. In a synthetic
+document, verify a flowchart, a sequence diagram, an invalid diagram followed
+by a valid one, and an oversized diagram. Supported diagrams must remain
+visible offline without contacting a CDN or diagram service. Invalid,
+unsupported and oversized input must leave readable original source and a clear
+message; successful previews retain an expandable source section.
+
+Mermaid Tiny 12.2.0 omits mindmaps, architecture diagrams and KaTeX. Requested
+ELK layouts fall back to Dagre. Test two different documents in succession,
+reopen the first, switch to dark appearance, rotate, and navigate to a source
+line below a diagram. Check source links/images resolve against the current
+document, and that reading position is restored after rendering completes.
+Archived scripts, clickable diagram links and external diagram media must
+remain disabled; reader images still need explicit permission.
+
+Real-device results, including the reported iPhone 17 Pro, remain **pending**.
+Simulator WebKit test evidence is recorded separately in the implementation
+test report; it does not establish physical-device behavior.
+
## Acceptance record
| Device / OS / language | Case | Result / issue | Evidence | Approval |
diff --git a/docs/IOS_IMPLEMENTATION_TESTING.de.md b/docs/IOS_IMPLEMENTATION_TESTING.de.md
index 73eb659..f424fcd 100644
--- a/docs/IOS_IMPLEMENTATION_TESTING.de.md
+++ b/docs/IOS_IMPLEMENTATION_TESTING.de.md
@@ -450,6 +450,153 @@ iOS-Release. Xcode Cloud 27.1 RC wurde geprüft; nächste Cloud-Buildnummer ist
Diese lokalen Ergebnisse behaupten weder erfolgreichen Cloud-Upload noch eine
App-Store-Veröffentlichung.
+### Lokale KI-Diagnose und Store-Dateien: 17. Oktober
+
+Diese Arbeitskopie bereitet ein späteres Update vor; die veröffentlichte
+1.1.0/Build 11 enthält die neue Diagnoseansicht noch nicht. Die Prüfung nutzt
+Apples öffentlichen `SystemLanguageModel`-Status und die Sprachunterstützung.
+Die Hilfe unterscheidet ausgeschaltete Intelligence, ein nicht bereites Modell,
+ungeeignete Hardware und eine nicht unterstützte Sprache, ohne angeblichen
+Downloadfortschritt anzuzeigen. Entwurf, Verlauf und Fragebereich bleiben bei
+erneuter Prüfung erhalten; vor der Generierung wird auch nach dem Abruf der
+Quellenauszüge nochmals geprüft.
+
+Der vorgeschriebene unsignierte generische iOS-Simulator-Build sowie Quell- und
+Bundle-Releaseprüfung bestanden. Im eigens angelegten iPhone-17-Pro-Simulator
+(iOS 27.1) bestanden alle **51 Unit-/Integrations- und 12 UI-Tests**. Dazu
+gehören sieben bestehende Regressionstests, eine zweisprachige Prüfung von
+Diagnose/erneuter Prüfung/Reader und vier ausdrücklich aktivierte Bildfälle.
+Auf iPad Pro 13 Zoll (M5) bestanden ebenfalls die fünf Bild-/Diagnose-UI-Fälle.
+Nach der Sichtprüfung wurden Prüfbutton und Apple-Hilfelink über die langen
+Hinweise verschoben. Die drei betroffenen Diagnose-UI-Fälle bestanden danach
+erneut auf beiden Geräten. Beide Aktionen müssen in beiden Sprachen ohne
+Scrollen erreichbar sein.
+
+Der Store-Ablauf benötigt in einem Debug-Build sowohl `SOURCEBRAID_DEMO=1` als
+auch `SOURCEBRAID_STORE_DEMO=1`. Sieben selbst verfasste fiktive Artikel nutzen
+`example.invalid` und eine ausdrückliche Beispielarchiv-Autorenkennzeichnung;
+private Archive, Zugangsdaten und generierte Modellantworten fehlen. Pro Sprache
+und Gerät sind vier native Produktansichten vorbereitet: Reader, Neueste,
+Offline-Suche und Markdown-Quelltext. Diagnosevorschauen gehören nicht zum
+Produkt-Uploadsatz. Die erweiterten Store-Felder auf
+[Deutsch](IOS_APP_STORE_METADATA.de.md) / [Englisch](IOS_APP_STORE_METADATA.md)
+halten Apples Längenlimits ein.
+Alle 16 nativen Produktaufnahmen wurden gesichtet: iPhone **1206 × 2622** und
+iPad **2064 × 2752**, RGB-PNG ohne Alphakanal. Das empfohlene Upload-ZIP enthält
+**14 Bilder**; die zwei iPad-Neueste-Aufnahmen bleiben wegen des anfangs leeren
+Detailbereichs optional außerhalb davon. PNG-Hashes und ZIP-Integrität sind
+geprüft.
+
+Nachweise außerhalb von Git:
+`/private/tmp/sourcebraid-store-diagnostics-build.log`,
+`/private/tmp/sourcebraid-store-diagnostics-phone-verified.xcresult`,
+`/private/tmp/sourcebraid-store-diagnostics-ipad.xcresult` mit zugehörigen Logs.
+Die endgültige Diagnoseanordnung ist in
+`/private/tmp/sourcebraid-diagnostics-{phone,ipad}-actions.xcresult` mit
+zugehörigen Logs und getrennt ausgelieferten Vorschauen belegt.
+Für CLI-Aufnahmen wird die Runner-Umgebungsvariable
+`TEST_RUNNER_SOURCEBRAID_APP_STORE_CAPTURE=1` gesetzt. Normale Testläufe
+überspringen diese Bildfälle ohne ausdrückliche Aktivierung.
+
+Die Simulator-Injektion prüft Darstellung und Schutz vor Modellaufrufen, nicht
+die echte Modellvorbereitung, Einstellungen, Siri-Sprache oder Antwortqualität
+auf dem iPhone. Physische iPhone-17-Pro-Wiederherstellung und Accessibility
+bleiben in der Gerätecheckliste offen. Version/Build unverändert; keine
+Signierung, Store-Uploads, neuen Einreichungen oder Git-Pushes ausgeführt.
+Neue Standard-Screenshots und Beschreibung benötigen die nächste bearbeitbare
+Store-Version, weil 1.1.0 bereits öffentlich verfügbar ist.
+
+### Store-Entwurf 1.1.1 und Reader-Korrekturen: 17. Oktober
+
+Nach Wiederherstellung der angemeldeten Chrome-Verbindung bestätigte App Store
+Connect 1.1.0/Build 11 als bereit für den Vertrieb. Ein eigener **Entwurf 1.1.1**
+enthält jetzt die erweiterten deutschen/englischen Beschreibungen, Werbetexte,
+Schlüsselwörter, Neuerungen und Untertitel. Alle **22 nativen Produktbilder**
+sind gespeichert und nach erneutem Laden geprüft: je Sprache vier für iPhone
+17 Pro, vier für iPhone Duo und drei für iPad. Die Duo-Aufnahmen sind
+**1398 × 2034** große RGB-PNGs ohne Alpha; beide Produktaufnahme-Tests bestanden.
+Das Gesamtpaket bewahrt die unveränderten Bilddateien und ersetzt die oben
+dokumentierte erste Vorbereitung mit 14 Bildern. Für 1.1.1 wurde kein Build
+ausgewählt, eingereicht oder veröffentlicht; öffentlich bleibt 1.1.0 bestehen.
+Nach der Umbenennung in Recent/Zuletzt wurden alle 22 ausgewählten Bilder neu
+aufgenommen, als unveränderte native PNGs geprüft und in allen sechs
+Sprach-/Gerätegruppen ersetzt. Erneutes Laden bestätigte neue Asset-IDs und
+Bildzahlen. Gespeicherte Beschreibungen und 1.1.1-Neuerungen auf Deutsch und
+Englisch stimmen exakt mit den lokalen Textdateien überein.
+
+Die Ladekorrektur reproduziert einen ersten Abruf, der nach einem gespeicherten
+Beitrag unterbrochen wird. Ein späterer Start ergänzt jetzt nur die fehlenden
+Plätze bis sieben; ausdrückliches Aktualisieren lädt den übrigen Bestand.
+Zuletzt zeigt geladenen/Gesamtbestand und **Übrige Beiträge laden**. Die
+Wiederherstellung nach Abbruch bleibt im überwachten Aktualisierungsjob, damit
+sie keinen Cache nach dessen Entfernung durch ein anderes Fenster erneut
+öffnet. Ein deterministischer Test hält die Abbruchbereinigung an und prüft,
+dass die Entfernung wartet und kein Cache-Verzeichnis wieder entsteht.
+
+Ein eigener Regressionstest reproduziert den präzisierten Gerätebericht in
+der markierten Version 1.1.0: Beitrag 5 öffnet sich, nach Zurück bleibt Beitrag
+6 am nativen Ladekreisel hängen. Synthetische Ablaufmarkierungen zeigen, dass
+die erzwungene äußere Reader-Identität den neuen Detail-Ladevorgang während der
+kompakten Navigation abbricht. Allein das Entfernen dieses `.id(...)` aus dem
+veröffentlichten Code lässt die vollständige Folge 5 → 6 → 7 → 5 bestehen,
+einschließlich eigener Inhalte und Quell-URLs im Markdown-Quelltext. Der neue
+Stand behält den Reader bei, ordnet Ladeaufgaben Pfad/SHA und Generation zu,
+setzt beitragsbezogene Ansichtsoptionen zurück, verhindert veraltete Ergebnisse
+und bietet nach einem Ladeabbruch einen erneuten Versuch an. Ungültiges UTF-8
+meldet jetzt einen Dateifehler statt eines still verschluckten Abbruchs.
+
+Der Startbereich heißt jetzt **Recent** / **Zuletzt**. Die zusätzliche Liste
+kürzlich gespeicherter Beiträge entfällt aus den Einstellungen, ebenso deren
+ungenutzter Ansichtsstatus und Aktualisierungsaufruf. Die gemeinsame
+Capture-Speicherung der Share Extension bleibt unverändert.
+
+Mermaid-Codeblöcke verwenden jetzt die fest gebündelte **Mermaid Tiny 12.2.0**
+in einer isolierten WebKit-Skriptumgebung. Seitenskripte bleiben deaktiviert,
+Diagramme benötigen keinen externen Dienst und externe Artikelbilder weiterhin
+die Freigabe pro Dokument. Gängige Fluss-, Sequenz-, Zustands-, Klassen-, ER-
+und Gantt-Diagramme werden unterstützt. Ungültige, nicht unterstützte oder zu
+große Eingaben behalten ihren Originalquelltext. Nach zehn Sekunden oder einem
+WebKit-Prozessabbruch bleibt eine Quelltextansicht erhalten. Die eingebettete
+WebView wird Beitragspfad, SHA und Bestands-Commit zugeordnet. Lizenzhinweise der
+Abhängigkeiten bleiben in der App enthalten.
+
+Abschließende Prüfung:
+
+- Der generische unsignierte iOS-Simulator-Build bestand.
+- Alle **58 Unit-/Integrationstests bestanden**, einschließlich unterbrochenem
+ Startabruf, ausdrücklichem vollständigem Abruf, ungültigem UTF-8, echten
+ Abbrüchen und Abbruch-/Löschfällen über mehrere Fenster.
+- Der echte WebKit-UI-Test bestand auf **iPhone 17 Pro und iPad Pro 13 Zoll**:
+ drei sichtbare gefüllte SVGs, gültige Darstellung nach einem Syntaxfehler,
+ Quelltext bei Übergröße, keine aktiven/Medien-/Link-Elemente und isolierte
+ JavaScript-Variablen.
+- Alle **sechs gezielten Reader-/Navigationsfälle bestanden** mit dem finalen
+ Stand: aufeinanderfolgende Auswahl aus Zuletzt und Suche, Chatentwurf und
+ Tab-Wechsel, PDF/interne Links, Mermaid/Sicherheit und Rotation. Weitere
+ **acht UI-Fälle** bestanden für deutsche/englische Reader-, Einstellungs- und
+ Suchansichten auf dem iPhone sowie native Produktaufnahmen auf iPhone 17 Pro,
+ iPad Pro 13 Zoll und iPhone Duo. Die Darstellung wird in einer synthetischen
+ Debug-App geprüft, da das Unit-Testziel keinen UIApplication-Host besitzt.
+- Quell-/Bundle-Prüfung, Integrität der gebündelten Ressourcen und
+ `git diff --check` bestanden. Keine echten Archive, Zugangsdaten oder
+ generierten Antworten wurden verwendet.
+
+Nachweise außerhalb von Git: `/private/tmp/sourcebraid-recent-reader-final-build.log`,
+`/private/tmp/sourcebraid-recent-store-phone-v2.xcresult`,
+`/private/tmp/sourcebraid-reader-navigation-fixed.xcresult`,
+`/private/tmp/sourcebraid-recent-store-ipad.xcresult`,
+`/private/tmp/sourcebraid-recent-store-duo.xcresult` mit zugehörigen Logs.
+Der frühere `/private/tmp/sourcebraid-1-1-1-mermaid-ipad.xcresult` enthält den
+WebKit-Test auf dem iPad. Der Vergleich mit dem veröffentlichten Code liegt in
+`/private/tmp/sourcebraid-reader-release-repro.xcresult` und
+`/private/tmp/sourcebraid-reader-release-without-outer-id.xcresult`.
+Dies sind lokale Änderungen, kein auf dem physischen iPhone installiertes
+Update. Version/Build, Signierung und Git-Verlauf bleiben unverändert. Der
+Reader-Wechselfehler wurde unabhängig vom unterbrochenen Startabruf nachgestellt
+und durch den beschriebenen Vergleich mit dem veröffentlichten Code eingegrenzt.
+Das korrigierte Verhalten auf dem physischen iPhone des Nutzers bleibt Teil der
+Geräteabnahme.
+
## Nächster Abnahmeschritt
[Gerätecheckliste](IOS_DEVICE_ACCEPTANCE.de.md) lokal in Xcode und auf dem
diff --git a/docs/IOS_IMPLEMENTATION_TESTING.md b/docs/IOS_IMPLEMENTATION_TESTING.md
index 7abeea6..1f3bf72 100644
--- a/docs/IOS_IMPLEMENTATION_TESTING.md
+++ b/docs/IOS_IMPLEMENTATION_TESTING.md
@@ -425,6 +425,139 @@ core/MCP logs. The planned iOS-only tag is `ios-v1.1.0`; Chrome/plugin/MCP stay
Xcode Cloud 27.1 RC was verified; next Cloud build number is 11. These local
results do not assert a successful Cloud archive/upload or App Store release.
+### Local Intelligence diagnostics and Store assets: October 17
+
+This working-tree update prepares a later release; the published 1.1.0/build 11
+does not contain the new diagnostic UI. Availability uses Apple's public
+`SystemLanguageModel` status and locale support. Guidance distinguishes
+disabled Intelligence, an unready model, ineligible hardware and an unsupported
+language without claiming to know download progress. Checks preserve the draft,
+conversation and scope, and run again after retrieval before generation.
+
+The generic unsigned iOS Simulator build passed, as did source and built-bundle
+release validation. On the dedicated iPhone 17 Pro simulator (iOS 27.1), all
+**51 unit/integration tests and 12 UI tests passed**. The latter include the
+seven existing regression cases, a bilingual diagnostic/recheck/reader case,
+and four explicitly opted-in screenshot cases. On iPad Pro 13-inch (M5), the
+five screenshot/diagnostic UI cases also passed.
+After visual review moved the recheck button and Apple help link above the
+long guidance, the three affected diagnostic UI cases passed again on each
+device. Both actions are asserted reachable without scrolling in both languages.
+
+The Store workflow requires both `SOURCEBRAID_DEMO=1` and
+`SOURCEBRAID_STORE_DEMO=1` in a Debug build. Seven original fictional articles
+use `example.invalid` and an explicit example-archive author; no private archive,
+credentials or generated model answer appears. Four native product views per
+locale/device are prepared: reader, Latest, offline search and raw Markdown.
+Diagnostic previews are excluded from the product upload set. Expanded
+[English](IOS_APP_STORE_METADATA.md) / [German](IOS_APP_STORE_METADATA.de.md)
+Store fields stay within Apple's length limits.
+All 16 original product captures were inspected: iPhone **1206 × 2622** and
+iPad **2064 × 2752**, RGB PNG without alpha. The recommended upload ZIP contains
+**14 images**; the two iPad Latest pictures remain optional outside it because
+their initial detail pane is empty. PNG hashes and ZIP integrity were verified.
+
+Evidence outside Git:
+`/private/tmp/sourcebraid-store-diagnostics-build.log`,
+`/private/tmp/sourcebraid-store-diagnostics-phone-verified.xcresult`,
+`/private/tmp/sourcebraid-store-diagnostics-ipad.xcresult` and matching logs.
+The final diagnostic layout evidence is in
+`/private/tmp/sourcebraid-diagnostics-{phone,ipad}-actions.xcresult` with matching
+logs and separately delivered previews.
+The screenshot capture tests are gated by the runner environment variable
+`TEST_RUNNER_SOURCEBRAID_APP_STORE_CAPTURE=1` for CLI runs. Routine tests skip
+them unless explicitly requested.
+
+Simulator injection verifies presentation and request gating, not the real
+iPhone's model preparation, Settings, Siri language or answer quality. Physical
+iPhone 17 Pro recovery and accessibility checks remain in the device checklist.
+No build/version bump, signing, App Store upload, new submission or Git push
+occurred. The new default screenshots and description need the next editable
+Store version because 1.1.0 is already public.
+
+### Store draft 1.1.1 and reader fixes: October 17
+
+After the signed-in Chrome connection became available, App Store Connect
+confirmed 1.1.0/build 11 as Ready for Distribution. A separate **1.1.1 draft**
+now contains the expanded English/German description, promotional text,
+keywords, update notes and subtitles. All **22 native product screenshots**
+were saved and verified after reloading: per language, four iPhone 17 Pro,
+four iPhone Duo and three iPad pictures. The Duo images are **1398 × 2034**
+RGB PNGs without alpha; its two product capture tests passed. The combined
+package retains the original screenshot bytes. This supersedes the earlier
+14-image preparation set above. No build was selected, submitted or released
+for 1.1.1; the public 1.1.0 listing remains unchanged.
+After the Recent/Zuletzt naming change, all 22 selected images were captured
+again, checked as original native PNGs and replaced in all six locale/device
+wells. A full reload confirmed their new asset IDs and counts. The saved
+English/German descriptions and 1.1.1 notes exactly match the local text files.
+
+The archive fix reproduces an initial refresh interrupted after one committed
+article. A later launch now fills only the missing slots up to seven; an
+explicit refresh downloads the remaining inventory. Recent shows loaded/total
+coverage and a **Load remaining clips** action. Cancellation recovery remains
+inside the coordinator's tracked job so it cannot reopen a cache after another
+scene has removed local data. A deterministic test holds cancellation cleanup
+and verifies that removal waits and leaves no recreated cache directory.
+
+A separate regression reproduces the user's clarified report in the tagged
+1.1.0 app: article 5 opens, but after Back, article 6 remains on the native
+spinner. Synthetic lifecycle tracing shows that the forced outer reader
+identity cancels the new detail task during compact navigation. Removing only
+that `.id(...)` from the released code makes the full 5 → 6 → 7 → 5 sequence
+pass, including distinct rendered bodies and raw source URLs. The working
+implementation keeps the reader stable, keys its loading task by path/SHA and
+generation, resets document-specific UI state, guards stale completions and
+offers Retry after an interrupted load. Invalid UTF-8 now reports a file error
+instead of being silently treated as cancellation.
+
+The home destination is now **Recent** / **Zuletzt**. Settings no longer shows
+the separate recently saved list; its unused settings-only state and refresh
+hook were removed. Capture storage used by the Share Extension is unchanged.
+
+Mermaid fences now use the pinned, bundled **Mermaid Tiny 12.2.0** engine in
+an isolated WebKit content world. Page scripts remain disabled, diagram
+rendering uses no remote service, and external article images retain their
+per-document opt-in. Common flowchart, sequence, state, class, ER and Gantt
+syntax is supported; invalid/unsupported/oversized input keeps its original
+source. A ten-second watchdog and WebKit termination recovery preserve the
+source-only fallback. The embedded WebView is keyed by clip path, SHA and
+inventory commit. Dependency notices are retained in the app.
+
+Final verification:
+
+- Generic unsigned iOS Simulator build passed.
+- All **58 unit/integration tests passed**, including interrupted bootstrap,
+ explicit full refresh, invalid UTF-8, genuine cancellation and cross-window
+ deletion/cancellation regressions.
+- The real WebKit UI probe passed on **iPhone 17 Pro and iPad Pro 13-inch**:
+ three visible nonempty SVGs, recovery from an invalid diagram, oversized
+ source fallback, no active/media/link elements and isolated JavaScript globals.
+- All **six targeted reader/navigation UI cases passed** with the final code:
+ successive selections from Recent and Search, Chat draft/tab preservation,
+ PDF/internal links, Mermaid/security and rotation. Another **eight UI cases**
+ passed for English/German phone reader/settings/search and native product
+ captures on iPhone 17 Pro, iPad Pro 13-inch and iPhone Duo. Rendering uses a
+ Debug-only synthetic app probe because the unit-test target has no
+ UIApplication host.
+- Source/bundle validation, pinned resource integrity and `git diff --check`
+ passed. No production archive, credentials or generated answer was used.
+
+Evidence outside Git: `/private/tmp/sourcebraid-recent-reader-final-build.log`,
+`/private/tmp/sourcebraid-recent-store-phone-v2.xcresult`,
+`/private/tmp/sourcebraid-reader-navigation-fixed.xcresult`,
+`/private/tmp/sourcebraid-recent-store-ipad.xcresult`,
+`/private/tmp/sourcebraid-recent-store-duo.xcresult` and matching logs.
+The earlier `/private/tmp/sourcebraid-1-1-1-mermaid-ipad.xcresult` records the
+iPad WebKit probe. Controlled release evidence is retained in
+`/private/tmp/sourcebraid-reader-release-repro.xcresult` and
+`/private/tmp/sourcebraid-reader-release-without-outer-id.xcresult`.
+These are local changes, not an installed physical-device update. Version/build,
+signing and Git history remain unchanged. The reader transition failure is
+reproduced separately from interrupted bootstrap and isolated by the controlled
+release experiment above. The corrected behavior on the user's physical iPhone
+still requires device acceptance.
+
## Next acceptance step
Follow the [device checklist](IOS_DEVICE_ACCEPTANCE.md) in Xcode and on iPhone,
diff --git a/docs/IOS_READER_REFRESH_UX.de.md b/docs/IOS_READER_REFRESH_UX.de.md
index e53924f..81d9cfe 100644
--- a/docs/IOS_READER_REFRESH_UX.de.md
+++ b/docs/IOS_READER_REFRESH_UX.de.md
@@ -13,14 +13,14 @@ freigegeben.
Das [Konzept für die Markenfarben der App](IOS_BRAND_APPEARANCE.de.md) beschreibt
die zurückhaltende Papier-/Grün-Palette nach dem Vorbild der SourceBraid-Webseite.
-Die App startet mit **Neueste** und zeigt die neuesten sieben Beiträge.
+Die App startet mit **Zuletzt** und zeigt die neuesten sieben Beiträge.
Die native gruppierte Liste nutzt den verfügbaren Inhaltsbereich. Antippen
öffnet den Beitrag direkt; die systemeigene
Zurücknavigation führt zur Liste. Datumswerte erscheinen entsprechend der
aktuellen Sprache statt als ISO-Zeitstempel. Reine Tagesdaten behalten ihren
UTC-Kalendertag.
-Ab OS 18 trennt die systemeigene Tab-Leiste **Neueste**, **Suche** und **Chat**.
+Ab OS 18 trennt die systemeigene Tab-Leiste **Zuletzt**, **Suche** und **Chat**.
OS 17 verwendet entsprechende Aktionen in der unteren Toolbar. Oben stehen
Aktualisieren/Stopp und ein Mehr-Menü für Einstellungen, lokale Datenlöschung
und Abmelden. Reader-Aktionen bleiben in dessen Toolbar; dort kann man auch zum
@@ -56,8 +56,9 @@ Skills bleiben außerhalb des Repositorys.
| Auslöser | Arbeit |
| --- | --- |
-| Start mit Cache / Vordergrund | Geschützten lokalen Metadatenkatalog und Suchabdeckung wiederherstellen. Keine automatische GitHub-Bestands- oder Artikelanfrage. |
+| Start mit Cache / Vordergrund nach abgeschlossenem Startpaket | Geschützten lokalen Metadatenkatalog und Suchabdeckung wiederherstellen. Keine automatische GitHub-Bestands- oder Artikelanfrage. |
| Leerer lokaler Cache | Gepinnten Bestand mit Anfragebudget lesen und höchstens sieben Markdown-Dateien versuchen. Unvollständige Abdeckung anzeigen. |
+| Unterbrochenes Startpaket | Gespeicherte Beiträge wiederherstellen, den begrenzten Bestand erneut prüfen und nur die fehlenden Plätze bis zu sieben geladenen/indexierten Beiträgen ergänzen. |
| Geplanter Hintergrundabruf | Neuesten Commit prüfen, Bestandsänderungen abgleichen und ein begrenztes Paket fehlender/geänderter Dateien oder Suchzeilen verarbeiten. |
| Pull to refresh / Toolbar-Aktualisierung | Ausdrücklichen inkrementellen Abgleich starten; ausstehende Artikel innerhalb vorhandener Datei-/Cache-Grenzen vervollständigen. Stopp bleibt verfügbar. |
| Nicht geladenen Beitrag öffnen | Diesen Beitrag gezielt laden und Metadaten/Suchzeile seiner aktuellen Version ergänzen. |
@@ -69,6 +70,20 @@ Teilbestand. Weitere Pakete ermitteln die tatsächliche Aufnahmezeit-Reihenfolge
ohne die erforderlichen Metadaten kann die App keine endgültigen neuesten sieben
garantieren. Bereits vollständig gespeicherte Metadaten liefern diese sofort.
+Das nächste Update setzt auch ein teilweise gespeichertes Startpaket fort.
+Bisher konnte ein bereits gespeicherter Bestand nach einem Startabbruch alle
+weiteren Startdownloads unterdrücken, selbst wenn erst ein Beitrag fertig war.
+Die Fortsetzungsprüfung zählt jetzt geladene/indexierte Beiträge zusätzlich zum
+Bestand; fertige Beiträge werden wiederverwendet. Stopp oder Abbruch einer
+Aktualisierung übernimmt deren bereits atomar gespeicherten Fortschritt in die
+sichtbare Bibliothek. Der Start bleibt auf insgesamt sieben Beiträge begrenzt;
+ausdrückliches Aktualisieren vervollständigt den Rest eines großen Archivs.
+Archivformat, Berechtigungen und Cache-Budgets bleiben unverändert.
+Solange der Bestand unvollständig ist, zeigt die Fußzeile unter **Zuletzt** die
+Zahl geladener Beiträge gegenüber dem vollständigen Bestand. **Übrige Beiträge
+laden** startet dort direkt die ausdrückliche inkrementelle Aktualisierung mit
+vorhandener Fortschrittsanzeige und Stopp-Aktion.
+
Der Katalog speichert den gepinnten Commit und jede Datei-SHA. Bei vollständigem,
unverändertem Bestand/Index genügt während einer Aktualisierung die
Commit-Anfrage. Unveränderte Dateien und passende Suchzeilen werden wiederverwendet.
diff --git a/docs/IOS_READER_REFRESH_UX.md b/docs/IOS_READER_REFRESH_UX.md
index 5e5814f..ea0d018 100644
--- a/docs/IOS_READER_REFRESH_UX.md
+++ b/docs/IOS_READER_REFRESH_UX.md
@@ -12,13 +12,13 @@ approval remain pending; no commit, push or upload is authorized.
The [app brand-color concept](IOS_BRAND_APPEARANCE.md) defines the restrained
paper/green palette inspired by the SourceBraid website.
-The initial destination is **Latest** and shows the latest seven clips. Its
+The initial destination is **Recent** and shows the latest seven clips. Its
native grouped list fills the available content area. A row opens its document
directly; the system Back
control returns to the list. Dates use the current locale rather than raw ISO
timestamps; day-only capture dates retain their UTC calendar day.
-On OS 18 and later, a system tab bar separates **Latest**, **Search**, and
+On OS 18 and later, a system tab bar separates **Recent**, **Search**, and
**Chat**. OS 17 uses the corresponding bottom toolbar actions. The upper
toolbar contains Refresh/Stop and a More menu for Settings, local-data removal,
and sign-out. Reader actions remain in the reader toolbar, including an action
@@ -54,8 +54,9 @@ outside this repository.
| Trigger | Work |
| --- | --- |
-| Warm launch / foreground | Restore the protected local metadata catalog and index coverage. No automatic GitHub inventory or article request. |
+| Warm launch / foreground after a completed initial seed | Restore the protected local metadata catalog and index coverage. No automatic GitHub inventory or article request. |
| Empty local cache | Read a pinned, request-bounded inventory and attempt at most seven Markdown bodies. Show partial coverage. |
+| Interrupted initial seed | Restore committed clips, recheck the bounded inventory and resume only the missing slots up to seven loaded/indexed clips. |
| Scheduled background refresh | Check the latest commit, reconcile inventory changes and process a bounded batch of missing/changed bodies or index rows. |
| Pull to refresh / toolbar Refresh | Run an explicit incremental refresh; finish pending articles within existing per-file/cache limits. Stop remains available. |
| Open a missing document | Download that document on demand and add its current-version metadata/search row. |
@@ -67,6 +68,18 @@ capture-time ordering; the app cannot claim the definitive newest seven before
reading the necessary metadata. Previously cached full metadata can show the
correct newest seven immediately.
+The next update also recovers a partially saved initial seed. Previously, a
+snapshot saved before a launch interruption could suppress all later startup
+downloads even if only one clip had finished. The resume check now counts
+loaded/indexed clips as well as the inventory; completed clips are reused.
+Stopping or cancelling a refresh restores its atomically committed progress in
+the visible library. The startup still stops at seven total clips, and explicit
+Refresh remains the way to complete the rest of a large archive. These fixes do
+not change the archive format, permissions or cache budgets.
+The Recent footer shows the loaded count against the full inventory while
+coverage is partial. **Load remaining clips** starts the explicit incremental
+refresh directly from that footer, with the existing progress and Stop action.
+
The catalog records the pinned commit and each file's SHA. A complete,
unchanged inventory/index requires only the commit request during a refresh.
Unchanged bodies and existing matching search rows are reused. New/changed
diff --git a/docs/IOS_RELEASE_1.1.1.de.md b/docs/IOS_RELEASE_1.1.1.de.md
new file mode 100644
index 0000000..1aafd50
--- /dev/null
+++ b/docs/IOS_RELEASE_1.1.1.de.md
@@ -0,0 +1,104 @@
+# SourceBraid für iOS 1.1.1
+
+17. Oktober 2026 · [English](IOS_RELEASE_1.1.1.md)
+
+## Release-Status
+
+Der Maintainer hat das Pushen der aktuellen Änderungen, die Veröffentlichung
+des iOS-spezifischen GitHub-Releases **`ios-v1.1.1`**, die Begleitung seines
+Xcode-Cloud-Builds und die Einreichung der passenden App-Version zur
+Apple-Prüfung freigegeben. Dieses Protokoll beschreibt den geprüften
+Kandidaten. Die Freigabe allein belegt weder erfolgreiche Cloud-Archivierung
+und Upload noch Prüfeinreichung oder App-Store-Veröffentlichung.
+
+Der Kandidat für App und Share Extension ist **1.1.1/Build 12**. Build 12 wurde
+nach Prüfung der Xcode-Cloud-Historie gewählt; der neueste vorhandene Build
+war 11. Ein erfolgreicher Cloud-Durchlauf für Build 12 bleibt zu bestätigen.
+**1.1.0/Build 11** ist die
+vorherige, bereits veröffentlichte App-Store-Version. Ihr erfolgreicher
+Cloud-Build belegt diesen Kandidaten nicht. Chrome-Erweiterung, Codex-Plugin
+und gehosteter ChatGPT-MCP behalten ihre unabhängigen Release-Versionen.
+
+## Änderungen
+
+- Mehrere Beiträge lassen sich auf dem kompakten iPhone-Layout nacheinander
+ öffnen. In 1.1.0 konnte der erste gewählte Beitrag erscheinen, während die
+ nächste Auswahl nach Zurück dauerhaft lud. Der Reader behält jetzt seine
+ Navigationsidentität, startet anhand von Dateipfad/-version, setzt
+ beitragsspezifische Zustände zurück und verwirft veraltete Ergebnisse.
+ Unterbrochene Abrufe bieten erneutes Versuchen; ungültiges UTF-8 zeigt einen
+ Dateifehler mit GitHub-Fallback.
+- Ein unterbrochener erster Archivabruf wird fortgesetzt, statt nur seinen
+ ersten fertigen Beitrag anzuzeigen. Der Start ergänzt fehlende Plätze bis
+ insgesamt sieben geladene/indexierte Beiträge. Die Abdeckung zeigt
+ geladenen und vollständigen Bestand; **Übrige Beiträge laden** startet die
+ ausdrückliche inkrementelle Aktualisierung. Fertiger Fortschritt bleibt
+ nach Stopp sichtbar. Die Wiederherstellung kann keinen Cache erneut öffnen,
+ der in einem anderen Fenster gerade entfernt wird.
+- Die Apple-Intelligence-Diagnose unterscheidet ausgeschaltete Intelligence,
+ ein noch nicht bereites Systemmodell, nicht unterstützte Sprache und
+ ungeeignete Hardware mit konkreten Hilfeschritten. Geprüft wird beim Öffnen
+ von Chat, bei der Rückkehr in den Vordergrund, vor der Generierung und auf
+ Wunsch. Entwurf und Verlauf bleiben erhalten. Apples Einrichtungshilfe
+ beschreibt die nächsten Schritte; SourceBraid kann weder den Systemmodell-
+ Download erzwingen noch dessen Fortschritt anzeigen.
+- Mermaid-Diagramme werden mit gebündeltem, fest versioniertem **Mermaid Tiny
+ 12.2.0** vollständig auf dem Gerät dargestellt. Gängige Fluss-, Sequenz-,
+ Zustands-, Klassen-, ER- und Gantt-Syntax wird unterstützt. Fehlerhafte,
+ nicht unterstützte oder zu große Diagramme behalten ihren Originalquelltext,
+ ebenso Zeitüberschreitungen und die WebKit-Wiederherstellung. Auch nach
+ erfolgreicher Vorschau bleibt der Quelltext erreichbar. Tiny enthält keine
+ Mindmaps, Architekturdiagramme oder KaTeX; ELK-Layouts verwenden Dagre.
+- Der Hauptbereich heißt jetzt **Recent** / **Zuletzt**. Die überholte Liste
+ **Zuletzt gespeichert** entfällt aus den Einstellungen. Der Capture-Speicher
+ der Share Extension bleibt unverändert.
+- Erweiterte englische/deutsche App-Store-Texte und **22 native Produktbilder**:
+ pro Sprache vier iPhone-, vier iPhone-Duo- und drei iPad-Bilder. Die neuen
+ Bilder und Texte sind im Store-Entwurf 1.1.1 gespeichert und nach erneutem
+ Laden geprüft. Alle Beispielbeiträge sind fiktiv; weder private Archive noch
+ erzeugte KI-Antworten erscheinen darin.
+
+## Kompatibilität und Datenschutz
+
+Reader und Suche unterstützen weiterhin iOS/iPadOS ab 17. Chat benötigt
+zusätzlich iOS/iPadOS ab 26, geeignete Hardware, aktivierte Apple Intelligence
+und ein bereites Systemmodell in einer unterstützten Sprache. Die
+Duo-Faltanpassung benötigt iOS 27.1. Reader und Suche bleiben ohne lokale KI
+verfügbar.
+
+Es gibt keine neuen GitHub-Berechtigungen, Zugangsdaten-Speicher,
+Archivformatänderungen oder externen Diagrammdienste. Mermaid führt nur das
+gebündelte Programm der App in einer isolierten WebKit-Umgebung aus.
+Archivskripte, Diagrammlinks und eingebettete/externe Diagrammmedien bleiben
+deaktiviert. Externe Artikelbilder benötigen weiterhin eine bewusste Freigabe
+für den jeweiligen Beitrag. Tokens bleiben im Schlüsselbund; Reader und Suche
+verwenden den vorhandenen geschützten, verwerfbaren Cache. Die Share Extension
+behält ihre bisherigen Capture-Schreibzugriffe. Siehe [Datenschutz](../PRIVACY.md).
+
+## Prüfung und Distributionsprotokoll
+
+Der funktionale Kandidat besteht **58 Unit-/Integrationstests und 14 UI-Fälle**
+auf Simulatoren mit iOS 27.1. Vorgeschriebener unsignierter iOS-Simulator-Build,
+Quell-/Bundle-Validierung, Integritätsprüfung der gebündelten Ressourcen und
+`git diff --check` bestehen. Die UI-Nachweise umfassen aufeinanderfolgende
+Beitragsauswahl, unterschiedliche gerenderte/rohe Inhalte, Navigation über
+Zuletzt/Suche, Erhalt des Chatentwurfs, Reader-Links/PDFs, englische/deutsche
+Einstellungen und Store-Aufnahmen. Die echte WebKit-Mermaid-Prüfung besteht
+auf iPhone 17 Pro und iPad Pro 13 Zoll; Produktaufnahmen auch im nativen
+iPhone-Duo-Simulator. Der kontrollierte 1.1.0-Vergleich reproduziert den
+Fehler nach dem ersten Öffnen und grenzt die äußere Reader-Identität als
+Ursache ein. Umfang und lokale Nachweispfade stehen im
+[Testprotokoll](IOS_IMPLEMENTATION_TESTING.de.md).
+
+Diese Prüfungen belegen die funktionale Änderung vor der Distribution.
+Das genaue versionierte Release-Bundle, Signierung, neue Xcode-Cloud-
+Archivierung, Upload, App-Store-Verarbeitung und Prüfeinreichung werden jeweils
+an ihren tatsächlichen Ergebnissen geprüft. Bei Vorbereitung dieses Protokolls
+wird kein erfolgreicher neuer Cloud-Build oder eine Apple-Freigabe behauptet.
+Der erfolgreiche historische **Build 11** bleibt getrennt.
+
+Die Abnahme der korrigierten Navigation auf dem physischen iPhone, tatsächliche
+Apple-Intelligence-Vorbereitung/Antwortqualität, Mindest-OS-Starts, physische
+Duo-Faltwechsel und die übrige Accessibility-Matrix bleiben in der
+[Gerätecheckliste](IOS_DEVICE_ACCEPTANCE.de.md) dokumentiert. Simulatoren und
+Veröffentlichungsfreigabe ersetzen diese offenen Prüfungen nicht.
diff --git a/docs/IOS_RELEASE_1.1.1.md b/docs/IOS_RELEASE_1.1.1.md
new file mode 100644
index 0000000..292c893
--- /dev/null
+++ b/docs/IOS_RELEASE_1.1.1.md
@@ -0,0 +1,94 @@
+# SourceBraid for iOS 1.1.1
+
+October 17, 2026 · [Deutsch](IOS_RELEASE_1.1.1.de.md)
+
+## Release status
+
+The maintainer has authorized pushing the current changes, publishing the
+iOS-specific GitHub release **`ios-v1.1.1`**, following its Xcode Cloud build,
+and submitting the matching app version for Apple's review. This record
+describes the validated candidate; authorization alone does not establish a
+successful cloud archive, upload, review submission or App Store publication.
+
+The candidate is **1.1.1/build 12** for both the app and Share Extension.
+Build 12 was selected after checking the Xcode Cloud history, whose latest
+existing build was 11. A successful cloud result for build 12 remains to be
+verified. **1.1.0/build 11** is the
+previous, already published App Store version. Its successful cloud build
+does not validate this candidate. The Chrome extension, Codex plugin and hosted
+ChatGPT MCP retain their independent release versions.
+
+## Changes
+
+- Fix repeated article opening on a compact iPhone layout. In 1.1.0, the first
+ chosen article could open, while the next selection after Back stayed on a
+ spinner. The reader now keeps a stable navigation identity, starts loading
+ by file path/version, resets document-specific state and rejects stale
+ completions. Interrupted loads offer Retry; invalid UTF-8 produces a visible
+ file error with GitHub fallback.
+- Resume an interrupted initial archive download instead of leaving only its
+ first completed article visible. Startup fills the missing slots up to seven
+ loaded/indexed clips. Coverage shows loaded/total counts and **Load remaining
+ clips** starts an explicit incremental refresh. Committed progress survives
+ Stop, and recovery cannot reopen a cache being removed by another scene.
+- Show practical Apple Intelligence diagnostics for disabled Intelligence,
+ an unready system model, unsupported language and ineligible hardware.
+ Availability is checked when entering Chat, returning to the foreground,
+ before generation and on request. The draft and conversation are retained.
+ Apple's setup guide explains the next steps; SourceBraid cannot force a
+ system-model download or report its progress.
+- Render Mermaid diagrams entirely on the device using pinned, bundled
+ **Mermaid Tiny 12.2.0**. Common flowchart, sequence, state, class, ER and Gantt
+ syntax is supported. Invalid, unsupported or oversized diagrams retain
+ their original source, as do rendering timeouts and WebKit recovery.
+ Source remains available even after a successful preview. Tiny omits
+ mindmaps, architecture diagrams and KaTeX; ELK layouts use Dagre.
+- Rename the main destination to **Recent** / **Zuletzt** and remove the
+ obsolete **Recently saved** list from Settings. Share Extension capture
+ storage remains unchanged.
+- Expand the English/German App Store description and prepare **22 native
+ product screenshots**: four iPhone, four iPhone Duo and three iPad pictures
+ per language. These updated images and text are saved in the 1.1.1 Store
+ draft and were verified after reload. All example articles are fictional;
+ no private archive or generated model answer appears.
+
+## Compatibility and privacy
+
+Reader and search retain iOS/iPadOS 17 support. Chat additionally requires
+iOS/iPadOS 26 or later, eligible hardware, enabled Apple Intelligence and a
+ready system model in a supported language. The Duo hinge adapter requires
+iOS 27.1. Reader and search remain available without local AI.
+
+There are no new GitHub scopes, credential stores, archive-format changes or
+remote diagram services. Mermaid executes only the app-owned offline bundle
+in an isolated WebKit content world. Archived page scripts, diagram links and
+embedded/external diagram media remain disabled. External article images
+retain their per-document opt-in. Tokens stay in Keychain, and reader/search
+use the existing protected disposable cache. The Share Extension retains its
+existing capture writes. See [Privacy](../PRIVACY.md).
+
+## Validation and distribution record
+
+The functional candidate passed **58 unit/integration tests and 14 UI cases**
+on iOS 27.1 simulators. The generic unsigned iOS Simulator build passed, as did
+source/bundle validation, pinned resource integrity and `git diff --check`.
+The UI evidence includes successive article selections, distinct rendered/raw
+bodies, Recent/Search navigation, Chat draft preservation, reader links/PDFs,
+English/German settings and Store captures. The real WebKit Mermaid probe
+passed on iPhone 17 Pro and iPad Pro 13-inch; product capture also passed on
+the native iPhone Duo simulator. The controlled 1.1.0 experiment reproduces
+the first-open-only failure and isolates the outer reader identity as its
+cause. The [test record](IOS_IMPLEMENTATION_TESTING.md) contains exact scope
+and local evidence paths.
+
+These checks validate the functional patch before distribution. The exact
+versioned release bundle, signing, new Xcode Cloud archive, upload, App Store
+processing and review submission must each be verified from their own results.
+At preparation of this record, no new cloud-build success or review acceptance
+is asserted. The successful historical build **11** remains separate.
+
+Physical iPhone acceptance of the corrected navigation, actual Apple
+Intelligence preparation/answer quality, minimum-OS launches, physical Duo
+fold transitions and the remaining accessibility matrix are still documented
+in the [device checklist](IOS_DEVICE_ACCEPTANCE.md). Simulator and release
+authorization do not mark those checks as passed.
diff --git a/ios/README.md b/ios/README.md
index 2383a22..2e3921c 100644
--- a/ios/README.md
+++ b/ios/README.md
@@ -1,10 +1,11 @@
# SourceBraid for iOS
The iOS project contains a SwiftUI archive reader, configuration screens, and a
-native Share Extension. The maintainer approved the **1.1.0** release candidate
-for publication on October 15, 2026 after a hands-on functional check. Xcode
-Cloud distribution and App Store availability are tracked separately in the
-[release notes](../docs/IOS_RELEASE_1.1.0.md). The Share
+native Share Extension. The next iOS release candidate is **1.1.1/build 12**; its
+[release record](../docs/IOS_RELEASE_1.1.1.md) separates validated local changes
+from the new cloud build and Apple review. **1.1.0/build 11** remains the
+published App Store version; its [earlier release notes](../docs/IOS_RELEASE_1.1.0.md)
+preserve the preflight and publication record. The Share
Extension saves shared URLs, readable Safari content and its relevant image
assets, selected text, PDFs, and other files into the same GitHub repository
and URL-hash-sharded `web-clips/index/*.jsonl` format as the Chrome extension.
@@ -32,13 +33,17 @@ Reader-only use needs `Contents: Read` for the selected GitHub repository. The S
## TestFlight
The project uses automatic distribution signing for Apple Developer team
-`H76K2HQUFB`. The approved release candidate is version `1.1.0` (build `11`) for
-both the app and Share Extension. Its planned iOS-only GitHub tag is
-`ios-v1.1.0`; Chrome, the Codex plugin, and hosted MCP remain at `1.0.1`.
+`H76K2HQUFB`. The iOS release candidate is `1.1.1/build 12` for both the app and
+Share Extension, with the iOS-only tag `ios-v1.1.1`. Build 12 was selected after
+checking the existing Xcode Cloud history; its new cloud result is tracked in the
+[release record](../docs/IOS_RELEASE_1.1.1.md). The already published
+`1.1.0/build 11` belongs to the previous release. Chrome, the local Codex plugin,
+and hosted MCP remain at `1.0.1` in this iOS release and use independent
+submission-bundle releases.
Before every later upload, increment `CURRENT_PROJECT_VERSION` for both targets.
The maintainer reports that the Xcode Cloud workflow uses Xcode 27.1 RC.
-Cloud archive, distribution, and App Store processing must each be verified
-from their actual results; none is implied by local validation.
+For the new upload, cloud archive, distribution, and App Store processing must
+each be verified from their actual results; none is implied by local validation.
Run the release preflight from the repository root before archiving:
@@ -82,10 +87,12 @@ python3 ../scripts/validate_ios_release.py \
## Use
-The app starts at **Latest** with the latest seven clips, ordered by recorded
+The next update starts at **Recent** (called **Latest** in published 1.1.0)
+with the latest seven clips, ordered by recorded
capture time and documented day/filename fallbacks. Tap a row to open it. Native
**Search** and **Chat** destinations keep the initial list spacious; Refresh and More live in the
toolbar. Wider layouts show the chosen destination alongside the reader.
+The separate recently saved list has been removed from Settings.
Search covers downloaded text and displays index coverage. Warm starts restore
the local catalog without downloading articles again. An empty cache seeds at
most seven bodies; the initial filename-based candidates remain explicitly
@@ -111,6 +118,19 @@ are required. Unsupported devices retain reader/search and show the reason
chat is unavailable. App Shortcuts provide read-only search, recent clips, and
opening a loaded clip; broader Siri conversation support is not promised.
+**Prepared for the next update; not included in the published 1.1.0:** Chat
+diagnostics distinguish device eligibility, disabled Apple Intelligence, a model
+that is not ready, and an unsupported language. They show the language being
+checked and practical steps in Settings, with [Apple's setup and availability
+guide](https://support.apple.com/en-us/121115). For a model that is not ready,
+check that Apple Intelligence is enabled, that the device and Siri use the same
+supported language, and that Wi-Fi, power and free storage are available.
+SourceBraid cannot determine download progress or force a system-model download.
+Availability is checked when entering Chat, returning to the foreground, before
+generation and using **Check availability again**. A status change preserves the
+chat history and draft; sending stays disabled until the model is ready. Reading
+and search remain available. Real-device acceptance is still required.
+
In Safari, Files, or another app:
1. Tap **Share**.
@@ -119,6 +139,20 @@ In Safari, Files, or another app:
Apps such as Chrome generally share only a URL. SourceBraid loads public web URLs in an isolated web view and converts the readable page content to Markdown before saving, recording the same extraction methods as the browser extension (including specialized DeepMind captures). Safari can additionally supply its already visible page text and relevant article images through the extension's preprocessing script. Images are copied into the clip's asset folder and linked relatively in Markdown. Shared PDFs are queued as `pdf-docling-pending`; the PDF is pushed last so the existing GitHub Actions workflow can safely convert it after its Markdown and index metadata exist. Pages that require an authenticated browser session or block the isolated request are saved as clearly labeled link-only clips.
+## Mermaid previews prepared for the next update
+
+Fenced `mermaid` blocks render on device with bundled Mermaid Tiny 12.2.0;
+no CDN, diagram service or runtime download is used. Common flowcharts,
+sequence/state/class/ER diagrams and Gantt charts are supported. Upstream's tiny
+build omits mindmaps, architecture diagrams and KaTeX; ELK layouts fall back to
+Dagre. Unsupported, invalid or oversized diagrams show an explanation and their
+original source. The source is also available below successful previews.
+Archive scripts, diagram links and external diagram media remain disabled;
+ordinary external reader images still require the user's explicit selection.
+Details and license notices are in [the bundled renderer notes](SourceBraid/Resources/Mermaid/README.md).
+These changes are local preparation for the next update, not part of the
+published 1.1.0. Real-device diagram acceptance remains pending.
+
## Build without signing
```bash
@@ -145,20 +179,28 @@ model-quality checks remain documented in the acceptance checklist; this
approval does not mark the full device matrix as passed. Historical test
entries retain the version and build that were actually tested.
-## Deutsch: Release-Kandidat 1.1.0
-
-Der Maintainer hat Version **1.1.0/Build 11** am 15. Oktober 2026 nach eigenem
-Funktionstest zur Veröffentlichung freigegeben. Der geplante iOS-GitHub-Tag
-lautet `ios-v1.1.0`; Chrome, Codex-Plugin und gehosteter MCP bleiben auf `1.0.1`.
-Der Xcode-Cloud-Workflow verwendet laut Maintainer Xcode 27.1 RC. Cloud-Build,
-Distribution und App-Store-Verfügbarkeit werden anhand ihrer tatsächlichen
-Ergebnisse getrennt geprüft. [Release-Hinweise](../docs/IOS_RELEASE_1.1.0.de.md).
-
-Die App startet mit **Neueste** und den neuesten sieben Beiträgen; Antippen
+## Deutsch: Veröffentlichung 1.1.1
+
+Der nächste iOS-Kandidat ist **1.1.1/Build 12** für App und Share Extension mit
+dem iOS-spezifischen Tag `ios-v1.1.1`. Build 12 wurde nach Prüfung der
+Xcode-Cloud-Historie gewählt; der neue Cloud-Durchlauf wird im
+[Release-Protokoll](../docs/IOS_RELEASE_1.1.1.de.md) dokumentiert. Die bereits
+veröffentlichte **1.1.0/Build 11** gehört zum vorherigen Release. Chrome,
+lokales Codex-Plugin und gehosteter MCP bleiben in diesem iOS-Release auf
+`1.0.1` und verwenden unabhängige Submission-Bundle-Releases. Deren öffentliche
+Freigabe folgt unabhängig.
+Der Xcode-Cloud-Workflow verwendet laut Maintainer Xcode 27.1 RC. Für spätere
+Uploads werden Cloud-Build, Distribution und App-Store-Verarbeitung anhand
+ihrer tatsächlichen Ergebnisse geprüft. Die früheren Testnachweise bleiben
+in den [Release-Hinweisen](../docs/IOS_RELEASE_1.1.0.de.md) erhalten.
+
+Im nächsten Update startet die App mit **Zuletzt** (in der veröffentlichten
+1.1.0 **Neueste**) und den neuesten sieben Beiträgen; Antippen
öffnet den Beitrag direkt. Native Bereiche für **Suche** und **Chat** halten
die Startliste frei. Aktualisieren und
weitere Aktionen liegen in der Toolbar. Breite Oberflächen zeigen den gewählten
-Bereich neben dem Reader. Cache-Starts laden keine Artikel erneut. Bei leerem
+Bereich neben dem Reader. Die zusätzliche Liste kürzlich gespeicherter Beiträge
+entfällt aus den Einstellungen. Cache-Starts laden keine Artikel erneut. Bei leerem
Cache werden höchstens sieben Dateien versucht; die Dateinamens-Kandidaten bleiben
bis zum weiteren Metadatenabruf als Teilbestand markiert. Begrenzte
Hintergrundpakete und manuelles Aktualisieren lesen neue/geänderte Dateien.
@@ -173,6 +215,20 @@ bereites Modell in einer unterstützten Sprache. Nicht verfügbare KI wird
verständlich angezeigt. Quellenlinks verweisen auf gelieferte Auszüge einer
festen Dateiversion; sachliche Antwortqualität wird separat getestet.
+**Für das nächste Update vorbereitet; nicht in der veröffentlichten 1.1.0:**
+Die Chat-Diagnose unterscheidet Geräteberechtigung, ausgeschaltete Apple
+Intelligence, ein noch nicht bereites Modell und eine nicht unterstützte Sprache.
+Sie zeigt die geprüfte Sprache und konkrete Schritte in den Einstellungen mit
+[Apples Hilfe zu Einrichtung und Verfügbarkeit](https://support.apple.com/de-de/121115).
+Bei einem noch nicht bereiten Modell Apple Intelligence, dieselbe unterstützte
+Geräte- und Siri-Sprache sowie WLAN, Strom und freien Speicher prüfen.
+SourceBraid kann weder den Downloadfortschritt erkennen noch einen Download des
+Systemmodells erzwingen. Geprüft wird beim Öffnen von Chat, bei der Rückkehr in
+den Vordergrund, vor der Generierung und über **Verfügbarkeit erneut prüfen**.
+Ein Statuswechsel erhält Chatverlauf und Entwurf; Senden bleibt bis zur
+Bereitschaft gesperrt. Lesen und Suche bleiben verfügbar. Die Abnahme auf echten
+Geräten steht weiterhin aus.
+
Markdown wird lokal mit `swift-markdown` dargestellt, PDF-Anhänge über Quick
Look. Externe Bilder werden nur nach bewusster Auswahl geladen. Der Reader
verändert keine GitHub-Dateien. Für reines Lesen genügen Contents-Leserechte;
@@ -182,3 +238,14 @@ im [Testprotokoll](../docs/IOS_IMPLEMENTATION_TESTING.de.md) und in der
[Gerätecheckliste](../docs/IOS_DEVICE_ACCEPTANCE.de.md). Die Release-Freigabe
ersetzt keine offenen Mindest-OS-, Dunkelmodus-, Accessibility- oder echten
KI-Qualitätsnachweise.
+
+**Mermaid-Vorschauen für das nächste Update:** `mermaid`-Codeblöcke werden mit
+gebündeltem Mermaid Tiny 12.2.0 vollständig auf dem Gerät dargestellt. Gängige
+Fluss-, Sequenz-, Zustands-, Klassen-, ER- und Gantt-Diagramme werden unterstützt.
+Mindmaps, Architekturdiagramme und KaTeX fehlen in der Tiny-Distribution;
+ELK-Layouts verwenden Dagre. Fehlerhafte, nicht unterstützte oder zu große
+Diagramme zeigen einen Hinweis und ihren originalen Quelltext. Auch bei
+erfolgreicher Darstellung bleibt der Quelltext aufklappbar. Archivskripte,
+Diagrammlinks und externe Diagrammmedien bleiben deaktiviert. Es gibt keinen
+CDN-Aufruf und keinen Diagrammdienst. Die Geräteabnahme ist weiterhin offen;
+die veröffentlichte 1.1.0 enthält diese Änderung noch nicht.
diff --git a/ios/SourceBraid.xcodeproj/project.pbxproj b/ios/SourceBraid.xcodeproj/project.pbxproj
index 7be5dcc..300582a 100644
--- a/ios/SourceBraid.xcodeproj/project.pbxproj
+++ b/ios/SourceBraid.xcodeproj/project.pbxproj
@@ -7,6 +7,8 @@
objects = {
/* Begin PBXBuildFile section */
+ 41B68DF557BA4ECA86DAFC01 /* Mermaid in Resources */ = {isa = PBXBuildFile; fileRef = 41B68DF557BA4ECA86DAFC00; };
+ 41B68DF557BA4ECA86DAFC02 /* Mermaid in Resources */ = {isa = PBXBuildFile; fileRef = 41B68DF557BA4ECA86DAFC00; };
6D92AC9703BA4356B0E87DA9 /* SourceBraidTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8E20934E3047468D63A6CD /* SourceBraidTheme.swift */; };
B00000000000000000000001 /* SourceBraidApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00000000000000000000001 /* SourceBraidApp.swift */; };
B00000000000000000000002 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00000000000000000000002 /* ContentView.swift */; };
@@ -101,6 +103,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 41B68DF557BA4ECA86DAFC00 /* Mermaid */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Mermaid; sourceTree = "
\"] --> B[Safe]
+ click B \"https://example.invalid/navigation\"
+ ```
+
+ ```mermaid
+ \(String(repeating: "%% synthetic comment\n", count: 301))
+ flowchart TD
+ A --> B
+ ```
+ """
+ let clip = ClipMetadataReader.read(body, file: .init(path: "clips/mermaid-probe.md", sha: String(repeating: "a", count: 40), size: body.utf8.count))
+ context.coordinator.html = MarkdownRenderer.document(clip, root: "clips")
+ return web
+ }
+ func updateUIView(_ web: WKWebView, context: Context) {
+ guard !context.coordinator.started else { return }
+ context.coordinator.started = true
+ web.loadHTMLString(context.coordinator.html, baseURL: URL(string: "sourcebraid-document://local/"))
+ }
+ static func dismantleUIView(_ web: WKWebView, coordinator: Coordinator) {
+ coordinator.task?.cancel(); web.stopLoading(); web.navigationDelegate = nil
+ }
+ @MainActor final class Coordinator: NSObject, WKNavigationDelegate {
+ let report: (String) -> Void
+ var task: Task