Offene Punkte: CSP, App-ACL, Lösch-Stufen, Command-IDs, Robustheits-Trio abgehakt
This commit is contained in:
+25
-53
@@ -1,72 +1,44 @@
|
|||||||
# Offene Punkte — bei jedem Start prüfen und abhaken
|
# Offene Punkte — bei jedem Start prüfen und abhaken
|
||||||
|
|
||||||
Erledigt und rausgeräumt (2026-07-20, Details in der Git-Historie): Umbau auf
|
Zuletzt erledigt (2026-07-20 nachmittags, Details in der Git-Historie beider
|
||||||
`.ai-control/config.json` mit Projekt-UUID + Name (Registry maschinenlokal
|
Repos): CSP gesetzt (`default-src 'self'` + ipc, devCsp getrennt);
|
||||||
inkl. Pool, Icon im Projekt, Migration beim Start, Import-Prüfung);
|
App-ACL-Manifest eingeführt — deny-by-default, vier Capabilities pro Fenster
|
||||||
Settings-Dialog-Redesign (Gruppen, fester Kopf/Fuß, feste Höhe);
|
(main/popup/term-*/panel-*), neue Commands brauchen build.rs **und**
|
||||||
Sicherheitsrunde II: `term_start`-Label-Prüfung, `archive_panel` ohne `dir`,
|
Capability-Eintrag; Projekt-Löschen in drei Stufen mit Artefakt-Vorschau
|
||||||
`write_panel(path)` mit Allowlist + 2-MB-Limit, `write_atomic` überall,
|
(integration/archive/full); Command-History mit stabilen IDs;
|
||||||
`write_secret_file` mit `create_new`+0600, PTY-Env ohne ANTHROPIC-Keys,
|
`write_app_setting`-Lesepfad, Pool-Round-Trip, Archiv per `create_new`;
|
||||||
`check_name` in den Panel-Pfaden, Bidi-Filter in den Befehlskacheln.
|
Listen-Scroll (Toolbars stehen).
|
||||||
|
|
||||||
Die ACL-Frage aus der Sicherheitsrunde ist entschieden (gegen tauri 2.11.5
|
|
||||||
verifiziert): **Die Fenster-ACL greift für App-Commands nicht** — ohne
|
|
||||||
`__app-acl__`-Manifest prüft Tauri eigene Commands bei lokalem Origin gar
|
|
||||||
nicht; die `windows`-Liste in den Capabilities beschränkt nur die
|
|
||||||
Plugin-Permissions. Daraus folgt der erste Punkt unten.
|
|
||||||
|
|
||||||
## Entscheidungen nötig
|
## Entscheidungen nötig
|
||||||
|
|
||||||
- [ ] **App-ACL-Manifest einführen?** Jedes Fenster darf derzeit jedes
|
|
||||||
App-Command rufen (`delete_project`, `set_archive_home_cmd`, …);
|
|
||||||
abgesichert ist nur der PTY-Pfad (Label-Prüfung in `term_start`).
|
|
||||||
Ein App-Manifest (eigene Permissions pro Command, in den Capabilities
|
|
||||||
pro Fenster zugeteilt) wäre die strukturelle Antwort — spürbarer
|
|
||||||
Umbau, Umfang festlegen.
|
|
||||||
|
|
||||||
- [ ] **`csp: null` in `tauri.conf.json` ersetzen.** Zweite Schranke hinter
|
|
||||||
dem Markdown-Sanitizer; braucht eine Runde Prüfen, was inline nötig ist
|
|
||||||
(Themes, xterm). Schon `default-src 'self'` schnitte auswärtige
|
|
||||||
Requests und Fremdnavigation ab.
|
|
||||||
|
|
||||||
- [ ] **Archiv-Ordner-Handling.** Beim Setzen explizit bestätigen statt still
|
- [ ] **Archiv-Ordner-Handling.** Beim Setzen explizit bestätigen statt still
|
||||||
anlegen; Wechsel eines gesetzten Archiv-Homes braucht eine
|
anlegen; Wechsel eines gesetzten Archiv-Homes braucht eine
|
||||||
Migrationsmöglichkeit (Dokumente mitnehmen oder liegen lassen).
|
Migrationsmöglichkeit (Dokumente mitnehmen oder liegen lassen).
|
||||||
Kritisch: echte Nutzerdaten, nichts implizit verschieben.
|
Kritisch: echte Nutzerdaten, nichts implizit verschieben.
|
||||||
|
|
||||||
- [ ] **Projekt sauber löschen.** Alle Ressourcen des Projekts entfernen
|
|
||||||
(Config, Icon, Archiv-Rechte in `.claude/settings.json`,
|
|
||||||
Registry-Eintrag) — mit Vorschau, was entfernt wird. Umfang festlegen.
|
|
||||||
|
|
||||||
- [ ] **macOS: API-Key kurz in der `security`-Kommandozeile sichtbar**
|
- [ ] **macOS: API-Key kurz in der `security`-Kommandozeile sichtbar**
|
||||||
(`macos.rs`, `ps`-sichtbar). Bewusst zurückgestellt, bis eine
|
(`macos.rs`, `ps`-sichtbar). Vertagt, bis eine macOS-Session zum
|
||||||
macOS-Session zum Testen verfügbar ist.
|
Testen verfügbar ist.
|
||||||
|
|
||||||
## Go genügt (Weg ist klar)
|
## Beobachten (nach den Umbauten vom 2026-07-20)
|
||||||
|
|
||||||
- [ ] **Command-History: stabile ID je Eintrag.** Der cmd-Text-Abgleich in
|
- [ ] CSP + App-ACL im Alltag: tote Buttons oder fehlende Anzeigen wären
|
||||||
`commands_delete` ist ein Notnagel; ID beim Schreiben der JSONL
|
eine vergessene Capability-Zuteilung bzw. CSP-Fallout; die genaue
|
||||||
vergeben, Panel löscht über die ID.
|
Ablehnung steht im Terminal-Log des Debug-Builds.
|
||||||
|
- [ ] Lösch-Dialog Stufe „nur Integration" erst an einem Wegwerf-Projekt
|
||||||
|
durchspielen.
|
||||||
|
- [ ] `style-src 'unsafe-inline'` später härten: die Inline-`<style>`-Blöcke
|
||||||
|
von terminal.html/panel.html in Dateien auslagern.
|
||||||
|
|
||||||
- [ ] **`write_app_setting` verliert die übrigen App-Settings**
|
## Release-Themen (wenn es Richtung Veröffentlichung geht)
|
||||||
(`settings.rs`): `read_app_settings` wirft fehlende Datei, Lesefehler
|
|
||||||
und kaputtes JSON in denselben `None`; nur eine *fehlende* Datei
|
|
||||||
rechtfertigt ein frisches Objekt (Fix wie in `pool.rs`
|
|
||||||
`register_mcp_server`).
|
|
||||||
|
|
||||||
- [ ] **`struct Pool` verliert unbekannte Keys beim Umbenennen**
|
- README ist außer Sync (beschreibt teils den alten Stand).
|
||||||
(`pool.rs`). Entweder flatten-`rest` wie in `ProjectConfig` — oder
|
- GNOME-Extension via deb/rpm nach /usr/share ausrollen (postinst nur GNOME,
|
||||||
gleich der gemeinsame read-modify-write-Helfer auf
|
prerm für dconf); AppImage-Start unter GNOME ist schon gesperrt.
|
||||||
`serde_json::Value`, der die Fehlerklasse überall schließt.
|
- macOS/Windows-Angleich der Panel-UI; `publish`-Flow.
|
||||||
|
|
||||||
- [ ] **Archiv-Dateinamen: `create_new` statt `exists()`** (`free_path`,
|
|
||||||
TOCTOU). Beim Maschinen-Sync können zwei Rechner in derselben Minute
|
|
||||||
mit gleicher Titelzeile schreiben; Kollisionsfreiheit gehört ins
|
|
||||||
Dateisystem. Mitzudenken: was der Sync selbst bei Namensgleichheit tut.
|
|
||||||
|
|
||||||
## Hintergrund (unverändert gültig)
|
## Hintergrund (unverändert gültig)
|
||||||
|
|
||||||
Pools trennen Konfiguration, nicht Zugriff: Die Keychain-Einträge sind
|
Pools trennen Konfiguration, nicht Zugriff: Die Keychain-Einträge sind
|
||||||
bewusst über `/usr/bin/security` bzw. Keyring promptfrei lesbar — jeder
|
bewusst promptfrei lesbar — jeder Prozess des Nutzers kann jeden Pool-Key
|
||||||
Prozess des Nutzers kann jeden Pool-Key lesen. So gewollt, kein
|
lesen. So gewollt, kein Isolationsversprechen.
|
||||||
Isolationsversprechen.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user