ONC-10: M9 – Automatik, Mobile, Login Flow #21

Merged
martin merged 5 commits from issue/10/m9-automatik-mobile-login-flow into main 2026-10-17 18:23:53 +02:00
Owner

Closes #10
Ticket: #10

Änderungen

  • Scheduler (src/sync/scheduler.ts, rein): Start (2 s nach Layout), Intervall, Debounce nach Änderungen, Vordergrund (höchstens alle 30 s). Neue Settings syncIntervalMinutes, syncOnStartup, syncOnSave, syncOnSaveDebounceSec (+ UI, DE/EN).
  • Mutex mit Re-Run-Flag im SyncController; manuelle Anfrage gewinnt. Auto-Läufe still: kein Dialog, Rückfragen zurückgestellt, Notices nur bei Warnung/Fehler und ohne Wiederholung; AuthError/ApiChanged pausieren sie.
  • Dirty-Schlüssel unfertiger Läufe kommen in die Queue zurück; eigene Renames/Trash/Writes des Plugins lösen keinen Sync aus.
  • Login Flow v2 (src/api/loginFlow.ts, Button in den Einstellungen): Origin-Prüfung von Login-URL und Poll-Endpoint, Warten auf Timer oder App-Resume, nur https, Abbruch beim Schließen.
  • Gedrosseltes Speichern (throttledPersist.ts): nur create lazy (≤ 1×/s), Flush am Ende/Abbruch.
  • Doku: ADR 0022, docs/manual-test.md, README, docs/api-notes.md, PLAN §7.1/§10.2/§14/§17.

Getestete Akzeptanzkriterien

  • Manuelle Testcheckliste (docs/manual-test.md) auf iOS und Android bestanden — steht aus (Checkliste liegt vor, nicht vom Agent auf Geräten prüfbar)
  • npm run build, lint, test, test:int grün; PLAN §17 aktualisiert — lokal gemessen (siehe unten)

Gate a) Tests

Baseline vor Implementierung: grün (build, lint 0 Fehler, 1769 Unit-, 81 Integrationstests).

Lauf Beleg Ergebnis
Unit lokal npm test 1921 Tests, 0 Fehler
Integration lokal npm run test:int (Docker-Testserver) 83 Tests, 0 Fehler

Kein CI-Check abgefragt; alle Zahlen sind lokal gemessen.

Neue Tests: Scheduler (Start/Intervall/Debounce/Foreground), Controller-Mutex (Re-Run, Auto-Stille, Pause, Dedup, Dialoge, Dirty-Requeue, Warteschlange), Login Flow (Origin-Angriffe, Poll, Timeout, Abbruch, 5xx), gedrosseltes Speichern (inkl. Flush bei Abbruch), Settings-Validierung, Rename/Trash-Unterdrückung. Mutationsproben an Pause, Dedup, Requeue und Warteschlangen-Typ schlugen erwartungsgemäß fehl.
tests/integration/performance.test.ts: 500 Seiten, Erstsync 135 s (133 State-Schreibzugriffe statt ≥ 500), Leerlauf-Sync 2,6 s (Limit < 5 s, localhost).
Nicht verifiziert: Login Flow gegen echten Server und Geräteverhalten (requestUrl-Redirects, window.open iOS, Gerätename); iOS/Android allgemein. Coverage wird im Projekt nicht gemessen.
Bekannte rote Tests / @Ignore: keine.
Hinweis: Der Performance-Test löscht seine Collective endgültig – im Papierkorb verlangsamten 500 Seiten alle Folgetests massiv (Pull-Test 20 s → 15 min).

Gate b) Lint und statische Analyse

Check Beleg Ergebnis
ESLint (inkl. obsidianmd) lokal npm run lint 0 Fehler, 16 Warnungen (wie Baseline)
Typecheck/Build lokal npm run build ✓

Gate c) Code-Review (agentseitige Aussage)

Durchgeführt von: Phil (Code-Review), Nils (Security-Review), beide als Opus-Agent.
Befunde: 14 gesamt — 13 behoben, 1 bewusst offen.
Offen: Nils-Hinweis 5 (serverseitige Löschungen laufen auch in Auto-Läufen ohne Massenlösch-Schwelle; nur unveränderte Dateien, in den Obsidian-Papierkorb, wiederherstellbar) — ggf. M10.

Gate d) Abweichungen von der Story (agentseitige Aussage)

  • Save-Sync = voller Lauf statt „nur diese Seite“ (→ M10).
  • Auto-Läufe still, ohne Dialoge; Pause bei Auth-Fehler.
  • Server-URL wird erst bei Commit gespeichert (Security-Review).
  • Offene Fragen beantwortet: Speicher-Trigger = modify + Debounce; Installation per BRAT oder manuell (docs/manual-test.md §0).
  • Nach M10 verschoben: Konfliktkopie bei erneuter Server-Änderung aktualisieren.

Story-Kommentar: siehe Kommentar am Issue #10.

Version

entfällt — keine Versionierung im Projekt, die dieser Skill pflegen dürfte (package.json bleibt bis M10 auf 0.1.0).

🤖 Generated with Claude Code

Closes #10 Ticket: https://forgejo.home.msc.wtf/keineantwort.de/nextcloud-collectives/issues/10 ## Änderungen - **Scheduler** (`src/sync/scheduler.ts`, rein): Start (2 s nach Layout), Intervall, Debounce nach Änderungen, Vordergrund (höchstens alle 30 s). Neue Settings `syncIntervalMinutes`, `syncOnStartup`, `syncOnSave`, `syncOnSaveDebounceSec` (+ UI, DE/EN). - **Mutex mit Re-Run-Flag** im `SyncController`; manuelle Anfrage gewinnt. **Auto-Läufe still**: kein Dialog, Rückfragen zurückgestellt, Notices nur bei Warnung/Fehler und ohne Wiederholung; `AuthError`/`ApiChanged` pausieren sie. - **Dirty-Schlüssel** unfertiger Läufe kommen in die Queue zurück; eigene Renames/Trash/Writes des Plugins lösen keinen Sync aus. - **Login Flow v2** (`src/api/loginFlow.ts`, Button in den Einstellungen): Origin-Prüfung von Login-URL und Poll-Endpoint, Warten auf Timer *oder* App-Resume, nur https, Abbruch beim Schließen. - **Gedrosseltes Speichern** (`throttledPersist.ts`): nur `create` lazy (≤ 1×/s), Flush am Ende/Abbruch. - Doku: ADR 0022, `docs/manual-test.md`, README, `docs/api-notes.md`, PLAN §7.1/§10.2/§14/§17. ## Getestete Akzeptanzkriterien - [ ] Manuelle Testcheckliste (`docs/manual-test.md`) auf iOS und Android bestanden — **steht aus** (Checkliste liegt vor, nicht vom Agent auf Geräten prüfbar) - [x] `npm run build`, `lint`, `test`, `test:int` grün; PLAN §17 aktualisiert — lokal gemessen (siehe unten) ## Gate a) Tests Baseline vor Implementierung: grün (build, lint 0 Fehler, 1769 Unit-, 81 Integrationstests). | Lauf | Beleg | Ergebnis | |---|---|---| | Unit | lokal `npm test` | 1921 Tests, 0 Fehler | | Integration | lokal `npm run test:int` (Docker-Testserver) | 83 Tests, 0 Fehler | Kein CI-Check abgefragt; alle Zahlen sind **lokal gemessen**. Neue Tests: Scheduler (Start/Intervall/Debounce/Foreground), Controller-Mutex (Re-Run, Auto-Stille, Pause, Dedup, Dialoge, Dirty-Requeue, Warteschlange), Login Flow (Origin-Angriffe, Poll, Timeout, Abbruch, 5xx), gedrosseltes Speichern (inkl. Flush bei Abbruch), Settings-Validierung, Rename/Trash-Unterdrückung. Mutationsproben an Pause, Dedup, Requeue und Warteschlangen-Typ schlugen erwartungsgemäß fehl. `tests/integration/performance.test.ts`: 500 Seiten, Erstsync 135 s (133 State-Schreibzugriffe statt ≥ 500), **Leerlauf-Sync 2,6 s** (Limit < 5 s, localhost). Nicht verifiziert: Login Flow gegen echten Server und Geräteverhalten (`requestUrl`-Redirects, `window.open` iOS, Gerätename); iOS/Android allgemein. Coverage wird im Projekt nicht gemessen. Bekannte rote Tests / `@Ignore`: keine. Hinweis: Der Performance-Test löscht seine Collective endgültig – im Papierkorb verlangsamten 500 Seiten alle Folgetests massiv (Pull-Test 20 s → 15 min). ## Gate b) Lint und statische Analyse | Check | Beleg | Ergebnis | |---|---|---| | ESLint (inkl. obsidianmd) | lokal `npm run lint` | 0 Fehler, 16 Warnungen (wie Baseline) | | Typecheck/Build | lokal `npm run build` | ✓ | ## Gate c) Code-Review *(agentseitige Aussage)* Durchgeführt von: Phil (Code-Review), Nils (Security-Review), beide als Opus-Agent. Befunde: 14 gesamt — 13 behoben, 1 bewusst offen. Offen: Nils-Hinweis 5 (serverseitige Löschungen laufen auch in Auto-Läufen ohne Massenlösch-Schwelle; nur unveränderte Dateien, in den Obsidian-Papierkorb, wiederherstellbar) — ggf. M10. ## Gate d) Abweichungen von der Story *(agentseitige Aussage)* - Save-Sync = voller Lauf statt „nur diese Seite“ (→ M10). - Auto-Läufe still, ohne Dialoge; Pause bei Auth-Fehler. - Server-URL wird erst bei Commit gespeichert (Security-Review). - Offene Fragen beantwortet: Speicher-Trigger = `modify` + Debounce; Installation per BRAT oder manuell (`docs/manual-test.md` §0). - Nach M10 verschoben: Konfliktkopie bei erneuter Server-Änderung aktualisieren. Story-Kommentar: siehe Kommentar am Issue #10. ## Version entfällt — keine Versionierung im Projekt, die dieser Skill pflegen dürfte (`package.json` bleibt bis M10 auf 0.1.0). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
martin merged commit 2902c1053c into main 2026-10-17 18:23:53 +02:00
martin deleted branch issue/10/m9-automatik-mobile-login-flow 2026-10-17 18:23:54 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
keineantwort.de/nextcloud-collectives!21
No description provided.