Skip to Content
DesignPersistenz von File-History-Snapshots

Persistenz von File-History-Snapshots

Zusammenfassung

Diese Änderung schließt die A+C-Persistenzlücken für die /rewind-File-History, ohne das persistierte JSONL-Schema zu ändern.

file_history_snapshot-Datensätze bleiben append-only Systemdatensätze. Resume rekonstruiert die File-History, indem es alle Snapshot-Datensätze in der linearen Historie liest und nach promptId mit Last-Wins-Semantik dedupliziert. Das bedeutet, dass ein aktualisierter Snapshot für denselben Prompt später angehängt werden kann, ohne alte Logs umzuschreiben.

Aufzeichnung von Snapshot-Updates

makeSnapshot(promptId) erstellt weiterhin den Turn-Boundary-Snapshot und der Caller zeichnet ihn weiterhin explizit auf. Der fehlende Last-Turn-Fall wird behandelt, indem FileHistoryService ein optionaler Recorder-Callback übergeben wird. Wenn trackEdit(filePath) erfolgreich ein neues Backup zum neuesten Snapshot hinzufügt oder einen fehlgeschlagenen Backup-Eintrag in diesem Snapshot repariert, ruft es den Recorder mit dem aktualisierten Snapshot auf.

Doppelte trackEdit-Aufrufe für eine bereits erfasste, nicht fehlgeschlagene Datei zeichnen nicht erneut auf, da sich der Snapshot nicht geändert hat.

Recorder-Fehler werden unterdrückt und geloggt. Die Dateibearbeitung muss Best-Effort bleiben: Die Persistenz der File-History darf nicht dazu führen, dass Edit- oder Write-Tools fehlschlagen.

Persistenz-Struktur

Es wird keine Schema-Version hinzugefügt. Der bestehende Payload hat bereits genug Struktur für eine abwärtskompatible Rekonstruktion:

{ "type": "system", "subtype": "file_history_snapshot", "systemPayload": { "snapshots": [] } }

Alte Logs ohne diese Datensätze setzen weiterhin ohne File-History-Status fort. Fehlerhafte Snapshot-Datensätze werden mit einer Warnung übersprungen, und gültige spätere Datensätze bleiben nutzbar.

Es wird kein explizites isSnapshotUpdate-Flag hinzugefügt. Das Anhängen eines weiteren file_history_snapshot-Datensatzes mit derselben promptId hat dasselbe praktische Verhalten, da SessionService.loadSession() bereits eine Last-Wins-Deduplizierung nach promptId anwendet.

Umfang

Dies betrifft nur A+C.

Die Abdeckung für simuliertes sed -i in B1 wird für einen separaten PR offengelassen. Generisches Shell-Edit-Tracking, getDiffStats-Concurrency-Limitierung und Fehlerursachen pro Datei werden ebenfalls zurückgestellt. Claude Code unterstützt diese Verhaltensweisen heute nicht, daher sollte qwen-code sie nicht als Teil dieses Kompatibilitätsdurchlaufs hinzufügen.

Es ist keine Migration erforderlich, da die Struktur der persistierten Datensätze unverändert bleibt.

Last updated on