Drei offene Punkte aus dem Simplify-Review: settings.rs, struct Pool, free_path/Sync
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -44,6 +44,39 @@
|
||||
(`src/markdown.ts`), aber eine echte CSP wäre die Schranke dahinter.
|
||||
Braucht eine Runde Prüfen, was inline benötigt wird (Themes, xterm).
|
||||
|
||||
- [ ] **`write_app_setting` verliert die übrigen App-Settings (`settings.rs:71`).**
|
||||
Dieselbe Fehlerklasse wie die `.claude.json` in `pool.rs`, nur eine Datei
|
||||
weiter — beim Simplify-Review gefunden, bewusst nicht mitgefixt.
|
||||
`read_app_settings` (settings.rs:11-14) wirft mit zweimal `.ok()?` fehlende
|
||||
Datei, Lesefehler und kaputtes JSON in denselben `None`; `write_app_setting`
|
||||
macht daraus `json!({})` und schreibt die Datei mit einem Key neu.
|
||||
Konkret: halb geschriebene `~/.config/ai-control/settings.json`, dann einmal
|
||||
Schriftgröße verstellen — `claudeCommand`, `poolSyncDir`, `syncOnSessionEnd`
|
||||
und `spellcheckLang` sind endgültig weg. Fix wie in `pool.rs`: nur eine
|
||||
*fehlende* Datei rechtfertigt ein frisches Objekt.
|
||||
|
||||
- [ ] **`struct Pool` verliert unbekannte Keys beim Umbenennen (`pool.rs:20`).**
|
||||
Dritte Stelle derselben Klasse. `rename_pool_in` (pool.rs:402-408) liest
|
||||
typisiert in `Pool` (nur `name` + `credentialType`) und schreibt die ganze
|
||||
`pool.json` über `write_pool_json` neu — jeder künftige Key stirbt beim
|
||||
Umbenennen. `ProjectConfig` und `TerminalConfig` haben dafür inzwischen
|
||||
`#[serde(flatten)] rest`.
|
||||
|
||||
Grundsätzlicher: `flatten` bildet pro Struct nach, was read-modify-write auf
|
||||
`serde_json::Value` von Natur aus kann (so macht es `add_archive_permission`,
|
||||
archive.rs:56-90). Statt es an jedem Struct einzeln zu wiederholen, wäre ein
|
||||
gemeinsamer Helfer die Lösung, die die Klasse wirklich schließt.
|
||||
|
||||
- [ ] **Archiv-Dateinamen: `create_new` statt `exists()` (`archive.rs`, `free_path`).**
|
||||
Die Kollisionsprüfung schaut vorab nach (`exists()`), die Garantie liegt aber
|
||||
nicht im Schreibvorgang — klassisches TOCTOU. Als Einbenutzer-App folgenlos,
|
||||
**aber nicht mehr beim Maschinen-Sync**: Zwei Rechner können in derselben
|
||||
Minute mit derselben Titelzeile ins synchronisierte Archiv schreiben, und
|
||||
dann greift der Vorabblick zu spät. `OpenOptions::new().create_new(true)` in
|
||||
der Schleife gibt dieselbe Struktur, holt die Kollisionsfreiheit aber vom
|
||||
Dateisystem. Mitzudenken: Was der Sync-Mechanismus selbst bei zwei gleichen
|
||||
Namen macht (Konfliktkopien?) — der Fix deckt nur die lokale Seite.
|
||||
|
||||
- [ ] **Projekt-Artefakte im Projektordner bündeln (`.ai-control/`?).**
|
||||
`ai-control.json` und das Projekt-Icon liegen heute lose im Projektordner.
|
||||
Idee: beides in ein Unterverzeichnis (z. B. `.ai-control/`) zusammenziehen,
|
||||
|
||||
Reference in New Issue
Block a user