Get started
Pad 3 SQLite-sessieartefactfamilie
Pad 3 SQLite-sessieartefactfamilie
Deze notitie bakent clawdbot-d63.2 af, terwijl clawdbot-d63.1 de overlappende
helper voor het resetten/verwijderen van archieven in src/config/sessions/session-accessor.sqlite.ts beheert.
Het implementatiebestand bevatte tijdens deze ronde niet-vastgelegde wijzigingen, dus dit artefact legt
het exacte contract en de patchpunten vast zonder de parallelle worker te hinderen.
Gezaghebbende familie
Na de overstap naar SQLite zijn actieve sessietranscripten SQLite-rijen. De archieffamilie van een sessie is:
- De rijen
transcript_events,transcript_event_identitiesensessionsvoor de huidigesessionIdvan de vermelding. - Dezelfde verzameling SQLite-transcriptrijen voor elke
sessionIdwaarnaar wordt verwezen doorentry.compactionCheckpoints[*].preCompaction.sessionId. - Dezelfde verzameling SQLite-transcriptrijen voor elke
sessionIdwaarnaar wordt verwezen doorentry.compactionCheckpoints[*].postCompaction.sessionId. - Dezelfde verzameling SQLite-transcriptrijen voor elke
sessionIdinentry.usageFamilySessionIds.
Archiveer alleen rijen waarnaar niet langer wordt verwezen door een resterende
session_entries-rij of door metadata van de Compaction- of gebruiksfamilie van een resterende
vermelding. Dit behoudt de status van checkpointvertakkingen/-herstel en gebruiksaggregatie totdat
de laatste actieve verwijzing verdwenen is.
Artefacten buiten de familie na de overstap
Gegenereerde varianten van topictranscriptbestanden en trajectory-sidecars zijn geen actieve SQLite-runtimestatus. Het zijn verouderde bestandsartefacten:
- Topicvarianten zoals
<sessionId>-topic-<thread>.jsonlbestaan alleen voor de bestandsgebaseerde transcriptindeling. SQLite gebruikt de canonieke sessie-id plussession_routes/afleveringsmetadata van de vermelding in plaats van JSONL-bestanden per topic. - Trajectory-sidecars zoals
.trajectory.jsonlen.trajectory-path.jsonworden benoemd op basis van echte JSONL-paden vansessionFile. SQLite-waarden vansessionFilezijnsqlite:<agentId>:<sessionId>:<storePath>-markeringen en benoemen geen sidecarbestanden. - Lezers van de archieflaag moeten verouderde gearchiveerde JSONL-bestanden blijven lezen, maar runtimebewaring mag geen actieve sessiemappen scannen of JSONL- transcriptbestanden voor SQLite-sessies opnieuw openen.
Doctor-import blijft de migratie-eigenaar voor verouderde primaire JSONL-bestanden en de aangrenzende trajectory-sidecars. Runtimebewaring in SQLite mag geen tweede importer of bestandsterugval toevoegen.
Patchpunten
Breid de SQLite-archiefhelper uit die door clawdbot-d63.1 is geïntroduceerd, in plaats van
een parallel pad toe te voegen.
-
Voeg een lokale collector toe nabij
deleteSqliteSessionStateIfUnreferenced:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>- Neem
entry.sessionId, sessie-id's vóór/na checkpoints enusageFamilySessionIdsop. - Filter lege tekenreeksen en dedupliceer deterministisch.
-
Voeg een verwijzingscollector toe voor de opslag na verwijdering:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Doorloop de huidige
session_entries, parse elkeentry_jsonen verzamel dezelfde familie-id's uit elke resterende vermelding.
-
Wijzig de aanroepers voor resetten/verwijderen/onderhoud die momenteel één verwijderde
sessionIdarchiveren, zodat ze de volledige familie van de verwijderde vermelding doorgeven. -
Archiveer voor elke familie-id de SQLite-transcriptrijen met de reden van de aanroeper (
resetofdeleted) en verwijder vervolgens desessions-rij alleen wanneer de familie-id niet voorkomt in de verzameling verwijzingen na verwijdering. -
Houd het verwijderen van transcriptgebeurtenissen gecentraliseerd via het bestaande SQLite- opschoonpad voor sessierijen. Voeg geen actieve JSONL-leesbewerkingen toe.
Gerichte tests
Voeg alleen-voor-SQLite-tests toe aan src/config/sessions/session-accessor.conformance.test.ts
of aan de parallelle levenscyclustest nadat clawdbot-d63.1 is vastgelegd:
- Het verwijderen van een vermelding met een transcript van vóór Compaction archiveert zowel de huidige sessie als de sessie van vóór Compaction en verwijdert vervolgens beide verzamelingen SQLite-rijen.
- Het verwijderen van één van twee vermeldingen die een Compaction-voorsessie delen, archiveert niets voor de gedeelde voorsessie totdat de laatste verwijzende vermelding is verwijderd.
- Het verwijderen van een vermelding met
usageFamilySessionIdsarchiveert voorgaande SQLite- transcriptrijen wanneer geen andere vermelding naar die gebruiksfamilie verwijst. - Een topicvormige sessiesleutel met een SQLite-markering veroorzaakt geen leesbewerking van een gegenereerd topic-JSONL-bestand of zoekactie naar sidecars.
Gebruik voor het gerichte bewijs:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsBrede pnpm-controles moeten voor deze Codex-worktree op Crabbox/Testbox blijven.