Comenzar
Familia de artefactos de sesión SQLite de la ruta 3
Familia de artefactos de sesión SQLite de la ruta 3
Esta nota delimita clawdbot-d63.2, mientras que clawdbot-d63.1 se ocupa del auxiliar superpuesto de
archivado para restablecimiento/eliminación en src/config/sessions/session-accessor.sqlite.ts.
El archivo de implementación tenía cambios sin confirmar durante esta revisión, por lo que este artefacto registra
el contrato exacto y los puntos de modificación sin interferir con el trabajador paralelo.
Familia autoritativa
Tras la migración a SQLite, las transcripciones de sesiones activas son filas de SQLite. La familia de archivado de una sesión es:
- Las filas
transcript_events,transcript_event_identitiesysessionsdelsessionIdactual de la entrada. - El mismo conjunto de filas de transcripción de SQLite para cada
sessionIdal que haga referenciaentry.compactionCheckpoints[*].preCompaction.sessionId. - El mismo conjunto de filas de transcripción de SQLite para cada
sessionIdal que haga referenciaentry.compactionCheckpoints[*].postCompaction.sessionId. - El mismo conjunto de filas de transcripción de SQLite para cada
sessionIddeentry.usageFamilySessionIds.
Archivar únicamente las filas a las que ya no haga referencia ninguna fila
session_entries restante ni los metadatos de Compaction o de la familia de uso
de ninguna entrada restante. Esto conserva el estado de ramificación/restauración de puntos de control y de agregación de uso hasta
que desaparezca la última referencia activa.
Artefactos ajenos a la familia tras la migración
Las variantes generadas de archivos de transcripción por tema y los archivos auxiliares de trayectoria no constituyen estado activo del entorno de ejecución de SQLite. Son artefactos de archivos heredados:
- Las variantes por tema, como
<sessionId>-topic-<thread>.jsonl, solo existen para el formato de transcripción basado en archivos. SQLite utiliza el identificador de sesión canónico junto con los metadatos de entrega desession_routes/la entrada en lugar de archivos JSONL por tema. - Los archivos auxiliares de trayectoria, como
.trajectory.jsonly.trajectory-path.json, reciben su nombre a partir de rutassessionFilede archivos JSONL reales. Los valoressessionFilede SQLite son marcadoressqlite:<agentId>:<sessionId>:<storePath>y no designan archivos auxiliares. - Los lectores del nivel de archivo deben seguir leyendo los archivos JSONL heredados archivados, pero la retención del entorno de ejecución no debe explorar los directorios de sesiones activas ni volver a abrir archivos de transcripción JSONL para las sesiones de SQLite.
La importación de Doctor sigue siendo la responsable de la migración de los archivos JSONL principales heredados y sus archivos auxiliares de trayectoria adyacentes. La retención de SQLite en el entorno de ejecución no debe añadir un segundo importador ni un mecanismo alternativo basado en archivos.
Puntos de modificación
Ampliar el auxiliar de archivado de SQLite introducido por clawdbot-d63.1 en lugar de
añadir una ruta paralela.
-
Añadir un recopilador local cerca de
deleteSqliteSessionStateIfUnreferenced:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>- Incluir
entry.sessionId, los identificadores de sesión anteriores y posteriores al punto de control, yusageFamilySessionIds. - Filtrar las cadenas vacías y eliminar duplicados de forma determinista.
-
Añadir un recopilador de referencias para el almacén posterior a la eliminación:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Recorrer los
session_entriesactuales, analizar cadaentry_jsony recopilar los mismos identificadores de familia de cada entrada restante.
-
Cambiar los llamadores de restablecimiento/eliminación/mantenimiento que actualmente archivan un único
sessionIdeliminado para que pasen la familia completa de la entrada eliminada. -
Para cada identificador de familia, archivar las filas de transcripción de SQLite con el motivo del llamador (
resetodeleted) y, a continuación, eliminar la filasessionsúnicamente cuando el identificador de familia no esté presente en el conjunto de referencias posterior a la eliminación. -
Mantener centralizada la eliminación de eventos de transcripción mediante la ruta existente de limpieza de filas de sesión de SQLite. No añadir lecturas de archivos JSONL activos.
Pruebas específicas
Añadir pruebas exclusivas de SQLite a src/config/sessions/session-accessor.conformance.test.ts
o a la prueba paralela del ciclo de vida después de que se confirme clawdbot-d63.1:
- Al eliminar una entrada con una transcripción anterior a Compaction, se archivan tanto la sesión actual como la sesión anterior a Compaction y, a continuación, se eliminan ambos conjuntos de filas de SQLite.
- Al eliminar una de dos entradas que comparten una sesión anterior a Compaction, no se archiva nada de la sesión anterior compartida hasta que se elimina la última entrada que hace referencia a ella.
- Al eliminar una entrada con
usageFamilySessionIds, se archivan las filas de transcripción de SQLite predecesoras cuando ninguna otra entrada hace referencia a esa familia de uso. - Una clave de sesión con forma de tema y un marcador de SQLite no provoca ninguna lectura de archivos JSONL generados por tema ni ninguna búsqueda de archivos auxiliares.
La comprobación específica debe utilizar:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsLas comprobaciones generales de pnpm deben permanecer en Crabbox/Testbox para este árbol de trabajo de Codex.