Get started
Pfad 3: Familie der SQLite-Sitzungsartefakte
Pfad 3: Familie der SQLite-Sitzungsartefakte
Diese Notiz grenzt clawdbot-d63.2 ab, während clawdbot-d63.1 für die sich überschneidende
Hilfsfunktion zum Archivieren bei Zurücksetzen/Löschen in src/config/sessions/session-accessor.sqlite.ts
zuständig ist. Die Implementierungsdatei enthielt während dieses Durchlaufs nicht übernommene Änderungen, daher dokumentiert dieses Artefakt
den exakten Vertrag und die Änderungspunkte, ohne mit dem parallel arbeitenden Worker in Konflikt zu geraten.
Maßgebliche Familie
Nach der Umstellung auf SQLite sind aktive Sitzungstranskripte SQLite-Zeilen. Die Archivfamilie einer Sitzung umfasst:
- Die Zeilen in
transcript_events,transcript_event_identitiesundsessionsfür die aktuellesessionIddes Eintrags. - Dieselbe Menge von SQLite-Transkriptzeilen für jede
sessionId, auf dieentry.compactionCheckpoints[*].preCompaction.sessionIdverweist. - Dieselbe Menge von SQLite-Transkriptzeilen für jede
sessionId, auf dieentry.compactionCheckpoints[*].postCompaction.sessionIdverweist. - Dieselbe Menge von SQLite-Transkriptzeilen für jede
sessionIdinentry.usageFamilySessionIds.
Archivieren Sie nur Zeilen, auf die weder eine verbleibende
session_entries-Zeile noch die Compaction- oder Nutzungsfamilien-Metadaten
eines verbleibenden Eintrags verweisen. Dadurch bleiben der Verzweigungs-/Wiederherstellungszustand
von Prüfpunkten und der Nutzungsaggregationszustand erhalten, bis die
letzte aktive Referenz entfernt wurde.
Artefakte außerhalb der Familie nach der Umstellung
Generierte Varianten von Themen-Transkriptdateien und Trajektorien-Sidecars sind kein aktiver SQLite-Laufzeitzustand. Es handelt sich um Legacy-Dateiartefakte:
- Themenvarianten wie
<sessionId>-topic-<thread>.jsonlexistieren nur für das dateibasierte Transkriptformat. SQLite verwendet die kanonische Sitzungs-ID sowiesession_routes/Zustellungsmetadaten des Eintrags anstelle themenspezifischer JSONL-Dateien. - Trajektorien-Sidecars wie
.trajectory.jsonlund.trajectory-path.jsonwerden anhand tatsächlicher JSONL-sessionFile-Pfade benannt. SQLite-sessionFile-Werte sindsqlite:<agentId>:<sessionId>:<storePath>-Marker und benennen keine Sidecar- Dateien. - Lesekomponenten der Archivebene müssen weiterhin archivierte Legacy-JSONL-Dateien lesen, aber die Laufzeitaufbewahrung darf weder aktive Sitzungsverzeichnisse durchsuchen noch JSONL- Transkriptdateien für SQLite-Sitzungen erneut öffnen.
Der Doctor-Import bleibt für die Migration von primären Legacy-JSONL-Dateien und ihren angrenzenden Trajektorien-Sidecars zuständig. Die SQLite-Laufzeitaufbewahrung darf keinen zweiten Importer oder Datei-Fallback hinzufügen.
Änderungspunkte
Erweitern Sie die durch clawdbot-d63.1 eingeführte SQLite-Archivhilfsfunktion, statt
einen parallelen Pfad hinzuzufügen.
-
Fügen Sie nahe
deleteSqliteSessionStateIfUnreferencedeinen lokalen Collector hinzu:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>- Beziehen Sie
entry.sessionId, die Sitzungs-IDs vor/nach den Prüfpunkten undusageFamilySessionIdsein. - Filtern Sie leere Zeichenfolgen und entfernen Sie Duplikate deterministisch.
-
Fügen Sie einen Referenz-Collector für den Store nach der Entfernung hinzu:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Durchlaufen Sie die aktuellen
session_entries, parsen Sie jeweilsentry_jsonund erfassen Sie dieselben Familien-IDs aus jedem verbleibenden Eintrag.
-
Ändern Sie die Aufrufer für Zurücksetzen/Löschen/Wartung, die derzeit eine entfernte
sessionIdarchivieren, sodass sie die vollständige Familie des entfernten Eintrags übergeben. -
Archivieren Sie für jede Familien-ID die SQLite-Transkriptzeilen mit dem Grund des Aufrufers (
resetoderdeleted) und löschen Sie anschließend diesessions-Zeile nur, wenn die Familien-ID nicht in der Referenzmenge nach der Entfernung enthalten ist. -
Halten Sie das Löschen von Transkriptereignissen über den vorhandenen SQLite- Bereinigungspfad für Sitzungszeilen zentralisiert. Fügen Sie keine aktiven JSONL-Lesezugriffe hinzu.
Fokussierte Tests
Fügen Sie nach dem Commit von clawdbot-d63.1 reine SQLite-Tests zu
src/config/sessions/session-accessor.conformance.test.ts
oder zum benachbarten Lebenszyklustest hinzu:
- Beim Löschen eines Eintrags mit einem Transkript vor der Compaction werden sowohl die aktuelle Sitzung als auch die Sitzung vor der Compaction archiviert und anschließend beide SQLite-Zeilenmengen entfernt.
- Beim Löschen eines von zwei Einträgen, die sich eine Sitzung vor der Compaction teilen, wird für die gemeinsam verwendete Sitzung vor der Compaction nichts archiviert, bis der letzte referenzierende Eintrag entfernt wurde.
- Beim Löschen eines Eintrags mit
usageFamilySessionIdswerden die SQLite- Transkriptzeilen des Vorgängers archiviert, wenn kein anderer Eintrag auf diese Nutzungsfamilie verweist. - Ein themenförmiger Sitzungsschlüssel mit einem SQLite-Marker verursacht weder das Lesen einer generierten Themen-JSONL-Datei noch die Suche nach einem Sidecar.
Für den fokussierten Nachweis sollte Folgendes verwendet werden:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsWenn sich die finalen Tests in store.session-lifecycle-mutation.test.ts befinden, führen Sie diese
Datei ausdrücklich mit demselben Wrapper aus. Umfassende pnpm-Prüfungen sollten für diesen
Codex-Worktree auf Crabbox/Testbox verbleiben.