@osolmaz/pi-workflows 0.16.3 → 0.16.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/server.d.ts +13 -0
- package/dist/server/server.js +138 -6
- package/dist/server/server.js.map +1 -1
- package/dist/state/prune.d.ts +28 -0
- package/dist/state/prune.js +278 -76
- package/dist/state/prune.js.map +1 -1
- package/docs/SQLITE_STATE.md +21 -3
- package/docs/WORKFLOW_SERVER.md +29 -1
- package/docs/plans/2026-09-04-automatic-state-retention-plan.md +283 -0
- package/docs/workflows.md +16 -0
- package/herdr-plugin.toml +1 -1
- package/package.json +8 -7
- package/src/server/server.ts +156 -7
- package/src/state/prune.ts +409 -83
package/dist/state/prune.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
1
2
|
import { StateDatabase } from "./database.js";
|
|
3
|
+
export declare const AUTOMATIC_STATE_RETENTION_MS: number;
|
|
4
|
+
export declare const AUTOMATIC_STATE_PRUNE_INTERVAL_MS: number;
|
|
5
|
+
export declare const AUTOMATIC_STATE_VACUUM_MIN_BYTES: number;
|
|
6
|
+
export declare const AUTOMATIC_STATE_VACUUM_MIN_FREE_RATIO = 0.2;
|
|
2
7
|
export type StatePruneOptions = {
|
|
3
8
|
before: string;
|
|
4
9
|
apply: boolean;
|
|
@@ -16,5 +21,28 @@ export type StatePruneReport = {
|
|
|
16
21
|
databaseBytesAfter: number;
|
|
17
22
|
applied: boolean;
|
|
18
23
|
};
|
|
24
|
+
export type AutomaticStatePruneOptions = {
|
|
25
|
+
now?: number;
|
|
26
|
+
activeBlobHashes?: () => readonly Buffer[];
|
|
27
|
+
shouldContinue?: () => boolean;
|
|
28
|
+
yieldControl?: () => Promise<void>;
|
|
29
|
+
vacuumMinBytes?: number;
|
|
30
|
+
vacuumMinFreeRatio?: number;
|
|
31
|
+
vacuum?: (database: Database.Database) => void;
|
|
32
|
+
};
|
|
33
|
+
export type AutomaticStatePruneReport = StatePruneReport & {
|
|
34
|
+
completed: boolean;
|
|
35
|
+
compacted: boolean;
|
|
36
|
+
pageCount: number;
|
|
37
|
+
freePageCount: number;
|
|
38
|
+
pageSize: number;
|
|
39
|
+
reclaimableBytes: number;
|
|
40
|
+
freePageRatio: number;
|
|
41
|
+
compactionError?: string;
|
|
42
|
+
};
|
|
43
|
+
type DatabasePageMetrics = Pick<AutomaticStatePruneReport, "pageCount" | "freePageCount" | "pageSize" | "reclaimableBytes" | "freePageRatio">;
|
|
19
44
|
export declare function validateStatePruneOptions(options: StatePruneOptions): void;
|
|
20
45
|
export declare function pruneState(state: StateDatabase, databasePath: string, options: StatePruneOptions, activeBlobHashes?: () => readonly Buffer[]): Promise<StatePruneReport>;
|
|
46
|
+
export declare function pruneStateAutomatically(state: StateDatabase, databasePath: string, options?: AutomaticStatePruneOptions): Promise<AutomaticStatePruneReport>;
|
|
47
|
+
export declare function shouldVacuumStateAutomatically(metrics: DatabasePageMetrics, minimumBytes?: number, minimumFreeRatio?: number): boolean;
|
|
48
|
+
export {};
|
package/dist/state/prune.js
CHANGED
|
@@ -3,7 +3,13 @@ import path from "node:path";
|
|
|
3
3
|
import { StateDatabase } from "./database.js";
|
|
4
4
|
const TERMINAL_RUN_STATUSES = new Set(["completed", "failed", "timed_out", "cancelled"]);
|
|
5
5
|
const LIVE_QUEUE_STATUSES = ["queued", "starting", "running", "parked"];
|
|
6
|
+
const ACTIVE_RUNNER_STATUSES = ["starting", "ready", "running"];
|
|
7
|
+
const ACTIVE_ATTEMPT_STATUSES = ["pending", "running", "waiting", "interrupted"];
|
|
6
8
|
const UNSETTLED_EFFECT_STATUSES = ["pending", "applying", "ambiguous"];
|
|
9
|
+
export const AUTOMATIC_STATE_RETENTION_MS = 30 * 24 * 60 * 60 * 1_000;
|
|
10
|
+
export const AUTOMATIC_STATE_PRUNE_INTERVAL_MS = 24 * 60 * 60 * 1_000;
|
|
11
|
+
export const AUTOMATIC_STATE_VACUUM_MIN_BYTES = 64 * 1024 * 1024;
|
|
12
|
+
export const AUTOMATIC_STATE_VACUUM_MIN_FREE_RATIO = 0.2;
|
|
7
13
|
export function validateStatePruneOptions(options) {
|
|
8
14
|
parseCutoff(options.before);
|
|
9
15
|
if (options.apply && options.backupPath === undefined) {
|
|
@@ -21,13 +27,7 @@ export async function pruneState(state, databasePath, options, activeBlobHashes
|
|
|
21
27
|
try {
|
|
22
28
|
const selection = selectRunTrees(state, cutoff);
|
|
23
29
|
const sizeBefore = databaseBytes(databasePath);
|
|
24
|
-
const base =
|
|
25
|
-
cutoff: new Date(cutoff).toISOString(),
|
|
26
|
-
candidateTrees: selection.candidateTrees,
|
|
27
|
-
blockedTrees: selection.blockedTrees,
|
|
28
|
-
selectedRuns: selection.runIds.length,
|
|
29
|
-
databaseBytesBefore: sizeBefore,
|
|
30
|
-
};
|
|
30
|
+
const base = reportBase(cutoff, selection, sizeBefore);
|
|
31
31
|
if (!options.apply) {
|
|
32
32
|
return {
|
|
33
33
|
...base,
|
|
@@ -43,40 +43,14 @@ export async function pruneState(state, databasePath, options, activeBlobHashes
|
|
|
43
43
|
throw new Error(`Backup destination already exists: ${backupPath}`);
|
|
44
44
|
}
|
|
45
45
|
await state.backup(backupPath);
|
|
46
|
-
let
|
|
47
|
-
let deletedBlobs = 0;
|
|
48
|
-
let deletedBlobBytes = 0;
|
|
46
|
+
let deleted;
|
|
49
47
|
state.connection.exec("BEGIN EXCLUSIVE");
|
|
50
48
|
try {
|
|
51
49
|
const checked = selectRunTrees(state, cutoff);
|
|
52
|
-
if (checked
|
|
53
|
-
checked.signature !== selection.signature) {
|
|
50
|
+
if (!sameSelection(checked, selection)) {
|
|
54
51
|
throw new Error("Prune selection changed after backup; run the command again");
|
|
55
52
|
}
|
|
56
|
-
|
|
57
|
-
if (checked.runIds.length !== 0) {
|
|
58
|
-
deleteRunAggregates(state.connection, checked.runIds);
|
|
59
|
-
}
|
|
60
|
-
state.connection
|
|
61
|
-
.prepare(`DELETE FROM workflow_definitions
|
|
62
|
-
WHERE NOT EXISTS (
|
|
63
|
-
SELECT 1 FROM runs WHERE runs.definition_digest = workflow_definitions.definition_digest
|
|
64
|
-
)`)
|
|
65
|
-
.run();
|
|
66
|
-
state.connection
|
|
67
|
-
.prepare(`DELETE FROM projects
|
|
68
|
-
WHERE NOT EXISTS (SELECT 1 FROM runs WHERE runs.project_id = projects.project_id)
|
|
69
|
-
AND NOT EXISTS (
|
|
70
|
-
SELECT 1 FROM controller_resources
|
|
71
|
-
WHERE controller_resources.project_id = projects.project_id
|
|
72
|
-
)`)
|
|
73
|
-
.run();
|
|
74
|
-
const retainedBlobHashes = activeBlobHashes();
|
|
75
|
-
const blobStats = unreferencedBlobStats(state.connection, retainedBlobHashes);
|
|
76
|
-
deleteUnreferencedBlobs(state.connection, retainedBlobHashes);
|
|
77
|
-
deletedRows = totalChanges(state.connection) - beforeChanges;
|
|
78
|
-
deletedBlobs = blobStats.count;
|
|
79
|
-
deletedBlobBytes = blobStats.bytes;
|
|
53
|
+
deleted = deleteSelectedState(state.connection, checked.runIds, activeBlobHashes());
|
|
80
54
|
state.connection.exec("COMMIT");
|
|
81
55
|
}
|
|
82
56
|
catch (error) {
|
|
@@ -90,22 +64,140 @@ export async function pruneState(state, databasePath, options, activeBlobHashes
|
|
|
90
64
|
state.integrityCheck();
|
|
91
65
|
return {
|
|
92
66
|
...base,
|
|
67
|
+
...deleted,
|
|
68
|
+
databaseBytesAfter: databaseBytes(databasePath),
|
|
69
|
+
applied: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
if (lock !== undefined)
|
|
74
|
+
releaseMaintenanceLock(lockPath, lock);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export async function pruneStateAutomatically(state, databasePath, options = {}) {
|
|
78
|
+
const now = options.now ?? Date.now();
|
|
79
|
+
const cutoff = now - AUTOMATIC_STATE_RETENTION_MS;
|
|
80
|
+
const shouldContinue = options.shouldContinue ?? (() => true);
|
|
81
|
+
const yieldControl = options.yieldControl ?? yieldToEventLoop;
|
|
82
|
+
const activeBlobHashes = options.activeBlobHashes ?? (() => []);
|
|
83
|
+
const sizeBefore = databaseBytes(databasePath);
|
|
84
|
+
const lockPath = `${databasePath}.maintenance.lock`;
|
|
85
|
+
const lock = acquireMaintenanceLock(lockPath);
|
|
86
|
+
let initial = emptySelection();
|
|
87
|
+
let deletedRows = 0;
|
|
88
|
+
let deletedBlobs = 0;
|
|
89
|
+
let deletedBlobBytes = 0;
|
|
90
|
+
let completed = true;
|
|
91
|
+
let compacted = false;
|
|
92
|
+
let compactionError;
|
|
93
|
+
let metrics = {
|
|
94
|
+
pageCount: 0,
|
|
95
|
+
freePageCount: 0,
|
|
96
|
+
pageSize: 0,
|
|
97
|
+
reclaimableBytes: 0,
|
|
98
|
+
freePageRatio: 0,
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
metrics = databasePageMetrics(state.connection);
|
|
102
|
+
initial = selectRunTrees(state, cutoff, now);
|
|
103
|
+
for (const selectedTree of initial.trees) {
|
|
104
|
+
if (!shouldContinue()) {
|
|
105
|
+
completed = false;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
state.connection.exec("BEGIN IMMEDIATE");
|
|
109
|
+
try {
|
|
110
|
+
const checked = selectRunTrees(state, cutoff, now).trees.find((tree) => tree.rootRunId === selectedTree.rootRunId);
|
|
111
|
+
if (checked === undefined || !sameTree(checked, selectedTree)) {
|
|
112
|
+
completed = false;
|
|
113
|
+
state.connection.exec("ROLLBACK");
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
const beforeChanges = totalChanges(state.connection);
|
|
117
|
+
deleteRunAggregates(state.connection, checked.runIds);
|
|
118
|
+
deleteUnusedDefinitionsAndProjects(state.connection);
|
|
119
|
+
deletedRows += totalChanges(state.connection) - beforeChanges;
|
|
120
|
+
state.connection.exec("COMMIT");
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (state.connection.inTransaction)
|
|
124
|
+
state.connection.exec("ROLLBACK");
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
await yieldControl();
|
|
128
|
+
}
|
|
129
|
+
if (completed && shouldContinue()) {
|
|
130
|
+
state.connection.exec("BEGIN IMMEDIATE");
|
|
131
|
+
try {
|
|
132
|
+
const beforeChanges = totalChanges(state.connection);
|
|
133
|
+
deleteUnusedDefinitionsAndProjects(state.connection);
|
|
134
|
+
const retainedBlobHashes = activeBlobHashes();
|
|
135
|
+
const blobStats = unreferencedBlobStats(state.connection, retainedBlobHashes);
|
|
136
|
+
deleteUnreferencedBlobs(state.connection, retainedBlobHashes);
|
|
137
|
+
deletedRows += totalChanges(state.connection) - beforeChanges;
|
|
138
|
+
deletedBlobs = blobStats.count;
|
|
139
|
+
deletedBlobBytes = blobStats.bytes;
|
|
140
|
+
state.connection.exec("COMMIT");
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (state.connection.inTransaction)
|
|
144
|
+
state.connection.exec("ROLLBACK");
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
completed = false;
|
|
150
|
+
}
|
|
151
|
+
if (completed && shouldContinue()) {
|
|
152
|
+
try {
|
|
153
|
+
state.connection.pragma("wal_checkpoint(TRUNCATE)");
|
|
154
|
+
metrics = databasePageMetrics(state.connection);
|
|
155
|
+
if (shouldContinue() &&
|
|
156
|
+
shouldVacuumStateAutomatically(metrics, options.vacuumMinBytes ?? AUTOMATIC_STATE_VACUUM_MIN_BYTES, options.vacuumMinFreeRatio ?? AUTOMATIC_STATE_VACUUM_MIN_FREE_RATIO)) {
|
|
157
|
+
(options.vacuum ?? vacuumDatabase)(state.connection);
|
|
158
|
+
compacted = true;
|
|
159
|
+
state.connection.pragma("wal_checkpoint(TRUNCATE)");
|
|
160
|
+
metrics = databasePageMetrics(state.connection);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
compactionError = errorMessage(error);
|
|
165
|
+
metrics = databasePageMetrics(state.connection);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
...reportBase(cutoff, initial, sizeBefore),
|
|
93
170
|
deletedRows,
|
|
94
171
|
deletedBlobs,
|
|
95
172
|
deletedBlobBytes,
|
|
96
173
|
databaseBytesAfter: databaseBytes(databasePath),
|
|
97
174
|
applied: true,
|
|
175
|
+
completed,
|
|
176
|
+
compacted,
|
|
177
|
+
...metrics,
|
|
178
|
+
...(compactionError === undefined ? {} : { compactionError }),
|
|
98
179
|
};
|
|
99
180
|
}
|
|
100
181
|
finally {
|
|
101
|
-
|
|
102
|
-
releaseMaintenanceLock(lockPath, lock);
|
|
182
|
+
releaseMaintenanceLock(lockPath, lock);
|
|
103
183
|
}
|
|
104
184
|
}
|
|
105
|
-
function
|
|
185
|
+
export function shouldVacuumStateAutomatically(metrics, minimumBytes = AUTOMATIC_STATE_VACUUM_MIN_BYTES, minimumFreeRatio = AUTOMATIC_STATE_VACUUM_MIN_FREE_RATIO) {
|
|
186
|
+
return metrics.reclaimableBytes >= minimumBytes && metrics.freePageRatio >= minimumFreeRatio;
|
|
187
|
+
}
|
|
188
|
+
function reportBase(cutoff, selection, databaseBytesBefore) {
|
|
189
|
+
return {
|
|
190
|
+
cutoff: new Date(cutoff).toISOString(),
|
|
191
|
+
candidateTrees: selection.candidateTrees,
|
|
192
|
+
blockedTrees: selection.blockedTrees,
|
|
193
|
+
selectedRuns: selection.runIds.length,
|
|
194
|
+
databaseBytesBefore,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function selectRunTrees(state, cutoff, observedAt = Date.now()) {
|
|
106
198
|
const { connection: database } = state;
|
|
107
199
|
const rows = database
|
|
108
|
-
.prepare(`SELECT run_id AS runId, parent_run_id AS parentRunId,
|
|
200
|
+
.prepare(`SELECT run_id AS runId, parent_run_id AS parentRunId, root_run_id AS rootRunId,
|
|
109
201
|
launch_options_hash AS launchOptionsHash, status, finished_at AS finishedAt
|
|
110
202
|
FROM runs ORDER BY created_at, run_id`)
|
|
111
203
|
.all()
|
|
@@ -115,52 +207,79 @@ function selectRunTrees(state, cutoff) {
|
|
|
115
207
|
row.finishedAt !== null &&
|
|
116
208
|
row.finishedAt < cutoff)
|
|
117
209
|
.map((row) => row.runId));
|
|
118
|
-
const
|
|
119
|
-
const
|
|
210
|
+
const rowIds = new Set(rows.map((row) => row.runId));
|
|
211
|
+
const links = new Map(rows.map((row) => [row.runId, new Set()]));
|
|
120
212
|
for (const row of rows) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const restartParentRunId = restartParentFromLaunchOptions(state.readJson(row.launchOptionsHash));
|
|
125
|
-
if (restartParentRunId !== null)
|
|
126
|
-
runParents.add(restartParentRunId);
|
|
127
|
-
parents.set(row.runId, [...runParents]);
|
|
128
|
-
for (const parentRunId of runParents) {
|
|
129
|
-
const values = children.get(parentRunId) ?? [];
|
|
130
|
-
values.push(row.runId);
|
|
131
|
-
children.set(parentRunId, values);
|
|
132
|
-
}
|
|
213
|
+
linkRuns(links, rowIds, row.runId, row.parentRunId);
|
|
214
|
+
linkRuns(links, rowIds, row.runId, row.rootRunId);
|
|
215
|
+
linkRuns(links, rowIds, row.runId, restartParentFromLaunchOptions(state.readJson(row.launchOptionsHash)));
|
|
133
216
|
}
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
const
|
|
217
|
+
const components = [];
|
|
218
|
+
const visited = new Set();
|
|
219
|
+
for (const row of rows) {
|
|
220
|
+
if (visited.has(row.runId))
|
|
221
|
+
continue;
|
|
222
|
+
const component = descendants(row.runId, links);
|
|
223
|
+
for (const runId of component)
|
|
224
|
+
visited.add(runId);
|
|
225
|
+
components.push(component.sort());
|
|
226
|
+
}
|
|
227
|
+
const trees = [];
|
|
228
|
+
let candidateTrees = 0;
|
|
137
229
|
let blockedTrees = 0;
|
|
138
|
-
for (const
|
|
139
|
-
|
|
140
|
-
|
|
230
|
+
for (const runIds of components) {
|
|
231
|
+
if (!runIds.some((runId) => eligible.has(runId)))
|
|
232
|
+
continue;
|
|
233
|
+
candidateTrees += 1;
|
|
234
|
+
if (runIds.some((runId) => !eligible.has(runId)) ||
|
|
235
|
+
treeHasBlocker(database, runIds, observedAt)) {
|
|
141
236
|
blockedTrees += 1;
|
|
142
237
|
continue;
|
|
143
238
|
}
|
|
144
|
-
|
|
145
|
-
|
|
239
|
+
const rootRunId = chooseRootRunId(rows, runIds);
|
|
240
|
+
trees.push({
|
|
241
|
+
rootRunId,
|
|
242
|
+
runIds,
|
|
243
|
+
signature: selectionSignature(database, runIds),
|
|
244
|
+
});
|
|
146
245
|
}
|
|
147
|
-
|
|
246
|
+
trees.sort((left, right) => left.rootRunId.localeCompare(right.rootRunId));
|
|
247
|
+
const runIds = trees.flatMap((tree) => tree.runIds).sort();
|
|
148
248
|
return {
|
|
149
|
-
candidateTrees
|
|
249
|
+
candidateTrees,
|
|
150
250
|
blockedTrees,
|
|
251
|
+
trees,
|
|
151
252
|
runIds,
|
|
152
|
-
signature:
|
|
253
|
+
signature: JSON.stringify(trees),
|
|
153
254
|
};
|
|
154
255
|
}
|
|
155
|
-
function treeHasBlocker(database, runIds) {
|
|
256
|
+
function treeHasBlocker(database, runIds, observedAt) {
|
|
156
257
|
const values = placeholders(runIds);
|
|
157
258
|
if (hasRow(database, `SELECT 1 FROM run_queue WHERE run_id IN (${values}) AND status IN (${placeholders(LIVE_QUEUE_STATUSES)})`, [...runIds, ...LIVE_QUEUE_STATUSES]) ||
|
|
259
|
+
hasRow(database, `SELECT 1 FROM run_workers
|
|
260
|
+
WHERE run_id IN (${values}) AND status IN (${placeholders(ACTIVE_RUNNER_STATUSES)})`, [...runIds, ...ACTIVE_RUNNER_STATUSES]) ||
|
|
261
|
+
hasRow(database, `SELECT 1 FROM node_attempts
|
|
262
|
+
WHERE run_id IN (${values}) AND status IN (${placeholders(ACTIVE_ATTEMPT_STATUSES)})`, [...runIds, ...ACTIVE_ATTEMPT_STATUSES]) ||
|
|
263
|
+
hasRow(database, `SELECT 1 FROM session_segments WHERE run_id IN (${values}) AND status = 'recording'`, runIds) ||
|
|
264
|
+
hasRow(database, `SELECT 1 FROM interactive_requests WHERE run_id IN (${values}) AND status = 'pending'`, runIds) ||
|
|
265
|
+
hasRow(database, `SELECT 1 FROM human_decisions d
|
|
266
|
+
LEFT JOIN human_decision_resolutions r ON r.decision_id = d.decision_id
|
|
267
|
+
WHERE d.run_id IN (${values}) AND r.decision_id IS NULL`, runIds) ||
|
|
268
|
+
hasRow(database, `SELECT 1 FROM workflow_messages WHERE run_id IN (${values}) AND status = 'pending'`, runIds) ||
|
|
269
|
+
hasRow(database, `SELECT 1 FROM workflow_turns WHERE run_id IN (${values}) AND state = 'started'`, runIds) ||
|
|
270
|
+
hasRow(database, `SELECT 1 FROM run_bindings b
|
|
271
|
+
WHERE b.run_id IN (${values}) AND b.execution_mode = 'interactive'
|
|
272
|
+
AND NOT EXISTS (
|
|
273
|
+
SELECT 1 FROM workflow_messages m
|
|
274
|
+
WHERE m.run_id = b.run_id AND m.kind = 'terminal' AND m.status = 'sent'
|
|
275
|
+
)`, runIds) ||
|
|
158
276
|
hasRow(database, `SELECT 1 FROM workflow_follow_ups
|
|
159
277
|
WHERE run_id IN (${values}) AND status = 'queued'`, runIds) ||
|
|
160
278
|
hasRow(database, `SELECT 1 FROM controller_workflows
|
|
161
279
|
WHERE run_id IN (${values}) OR reserved_run_id IN (${values})`, [...runIds, ...runIds]) ||
|
|
162
280
|
hasRow(database, `SELECT 1 FROM run_steps s JOIN node_attempts a ON a.attempt_id = s.attempt_id
|
|
163
|
-
WHERE a.run_id IN (${values}) AND s.run_id NOT IN (${values})
|
|
281
|
+
WHERE (a.run_id IN (${values}) AND s.run_id NOT IN (${values}))
|
|
282
|
+
OR (s.run_id IN (${values}) AND a.run_id NOT IN (${values}))`, [...runIds, ...runIds, ...runIds, ...runIds]) ||
|
|
164
283
|
hasRow(database, `SELECT 1 FROM continuations
|
|
165
284
|
WHERE (parent_run_id IN (${values}) AND continuation_run_id NOT IN (${values}))
|
|
166
285
|
OR (continuation_run_id IN (${values}) AND parent_run_id NOT IN (${values}))`, [...runIds, ...runIds, ...runIds, ...runIds]) ||
|
|
@@ -171,16 +290,42 @@ function treeHasBlocker(database, runIds) {
|
|
|
171
290
|
}
|
|
172
291
|
const resources = relatedResourceIds(database, runIds);
|
|
173
292
|
const resourceValues = placeholders(resources);
|
|
174
|
-
|
|
175
|
-
WHERE resource_id IN (${resourceValues}) AND owner_id IS NOT NULL AND expires_at > ?`, [...resources,
|
|
293
|
+
return (hasRow(database, `SELECT 1 FROM leases
|
|
294
|
+
WHERE resource_id IN (${resourceValues}) AND owner_id IS NOT NULL AND expires_at > ?`, [...resources, observedAt]) ||
|
|
176
295
|
hasRow(database, `SELECT 1 FROM effects
|
|
177
296
|
WHERE source_resource_id IN (${resourceValues})
|
|
178
297
|
AND status IN (${placeholders(UNSETTLED_EFFECT_STATUSES)})`, [...resources, ...UNSETTLED_EFFECT_STATUSES]) ||
|
|
179
298
|
hasRow(database, `SELECT 1 FROM channel_messages m JOIN human_decisions d ON d.decision_id = m.decision_id
|
|
180
|
-
WHERE d.run_id IN (${values})`, runIds))
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
299
|
+
WHERE d.run_id IN (${values})`, runIds));
|
|
300
|
+
}
|
|
301
|
+
function deleteSelectedState(database, runIds, retainedBlobHashes) {
|
|
302
|
+
const beforeChanges = totalChanges(database);
|
|
303
|
+
if (runIds.length !== 0)
|
|
304
|
+
deleteRunAggregates(database, runIds);
|
|
305
|
+
deleteUnusedDefinitionsAndProjects(database);
|
|
306
|
+
const blobStats = unreferencedBlobStats(database, retainedBlobHashes);
|
|
307
|
+
deleteUnreferencedBlobs(database, retainedBlobHashes);
|
|
308
|
+
return {
|
|
309
|
+
deletedRows: totalChanges(database) - beforeChanges,
|
|
310
|
+
deletedBlobs: blobStats.count,
|
|
311
|
+
deletedBlobBytes: blobStats.bytes,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
function deleteUnusedDefinitionsAndProjects(database) {
|
|
315
|
+
database
|
|
316
|
+
.prepare(`DELETE FROM workflow_definitions
|
|
317
|
+
WHERE NOT EXISTS (
|
|
318
|
+
SELECT 1 FROM runs WHERE runs.definition_digest = workflow_definitions.definition_digest
|
|
319
|
+
)`)
|
|
320
|
+
.run();
|
|
321
|
+
database
|
|
322
|
+
.prepare(`DELETE FROM projects
|
|
323
|
+
WHERE NOT EXISTS (SELECT 1 FROM runs WHERE runs.project_id = projects.project_id)
|
|
324
|
+
AND NOT EXISTS (
|
|
325
|
+
SELECT 1 FROM controller_resources
|
|
326
|
+
WHERE controller_resources.project_id = projects.project_id
|
|
327
|
+
)`)
|
|
328
|
+
.run();
|
|
184
329
|
}
|
|
185
330
|
function deleteRunAggregates(database, runIds) {
|
|
186
331
|
const values = placeholders(runIds);
|
|
@@ -286,7 +431,49 @@ function blobReferencePredicate(database, retainedBlobCount) {
|
|
|
286
431
|
const retainedPlaceholders = placeholders(Array.from({ length: retainedBlobCount }, () => undefined));
|
|
287
432
|
return `${unreferenced} AND blob_hash NOT IN (${retainedPlaceholders})`;
|
|
288
433
|
}
|
|
289
|
-
function
|
|
434
|
+
function vacuumDatabase(database) {
|
|
435
|
+
database.exec("VACUUM");
|
|
436
|
+
}
|
|
437
|
+
function databasePageMetrics(database) {
|
|
438
|
+
const pageCount = pragmaNumber(database, "page_count");
|
|
439
|
+
const freePageCount = pragmaNumber(database, "freelist_count");
|
|
440
|
+
const pageSize = pragmaNumber(database, "page_size");
|
|
441
|
+
return {
|
|
442
|
+
pageCount,
|
|
443
|
+
freePageCount,
|
|
444
|
+
pageSize,
|
|
445
|
+
reclaimableBytes: freePageCount * pageSize,
|
|
446
|
+
freePageRatio: pageCount === 0 ? 0 : freePageCount / pageCount,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
function pragmaNumber(database, name) {
|
|
450
|
+
const value = database.pragma(name, { simple: true });
|
|
451
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
|
|
452
|
+
throw new Error(`SQLite ${name} returned an invalid value`);
|
|
453
|
+
}
|
|
454
|
+
return value;
|
|
455
|
+
}
|
|
456
|
+
function sameSelection(left, right) {
|
|
457
|
+
return left.runIds.join("\0") === right.runIds.join("\0") && left.signature === right.signature;
|
|
458
|
+
}
|
|
459
|
+
function sameTree(left, right) {
|
|
460
|
+
return left.runIds.join("\0") === right.runIds.join("\0") && left.signature === right.signature;
|
|
461
|
+
}
|
|
462
|
+
function chooseRootRunId(rows, runIds) {
|
|
463
|
+
const runIdSet = new Set(runIds);
|
|
464
|
+
const candidates = rows
|
|
465
|
+
.filter((row) => runIdSet.has(row.runId) && row.rootRunId === row.runId)
|
|
466
|
+
.map((row) => row.runId)
|
|
467
|
+
.sort();
|
|
468
|
+
return candidates[0] ?? runIds[0] ?? "";
|
|
469
|
+
}
|
|
470
|
+
function linkRuns(links, rowIds, left, right) {
|
|
471
|
+
if (right === null || right === left || !rowIds.has(right))
|
|
472
|
+
return;
|
|
473
|
+
links.get(left)?.add(right);
|
|
474
|
+
links.get(right)?.add(left);
|
|
475
|
+
}
|
|
476
|
+
function descendants(root, links) {
|
|
290
477
|
const result = [];
|
|
291
478
|
const seen = new Set();
|
|
292
479
|
const pending = [root];
|
|
@@ -296,7 +483,7 @@ function descendants(root, children) {
|
|
|
296
483
|
continue;
|
|
297
484
|
seen.add(runId);
|
|
298
485
|
result.push(runId);
|
|
299
|
-
pending.push(...(
|
|
486
|
+
pending.push(...(links.get(runId) ?? []));
|
|
300
487
|
}
|
|
301
488
|
return result;
|
|
302
489
|
}
|
|
@@ -322,6 +509,9 @@ function databaseBytes(databasePath) {
|
|
|
322
509
|
.filter((filePath) => fs.existsSync(filePath))
|
|
323
510
|
.reduce((total, filePath) => total + fs.statSync(filePath).size, 0);
|
|
324
511
|
}
|
|
512
|
+
function emptySelection() {
|
|
513
|
+
return { candidateTrees: 0, blockedTrees: 0, trees: [], runIds: [], signature: "" };
|
|
514
|
+
}
|
|
325
515
|
function acquireMaintenanceLock(lockPath) {
|
|
326
516
|
try {
|
|
327
517
|
return fs.openSync(lockPath, "wx", 0o600);
|
|
@@ -352,11 +542,23 @@ function placeholders(values) {
|
|
|
352
542
|
function quoteIdentifier(value) {
|
|
353
543
|
return `"${value.replaceAll('"', '""')}"`;
|
|
354
544
|
}
|
|
545
|
+
function errorMessage(error) {
|
|
546
|
+
return error instanceof Error ? error.message : String(error);
|
|
547
|
+
}
|
|
548
|
+
async function yieldToEventLoop() {
|
|
549
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
550
|
+
}
|
|
355
551
|
function isRecord(value) {
|
|
356
552
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
357
553
|
}
|
|
358
554
|
function isRunAgeRow(value) {
|
|
359
|
-
return isRecord(value)
|
|
555
|
+
return (isRecord(value) &&
|
|
556
|
+
typeof value.runId === "string" &&
|
|
557
|
+
(value.parentRunId === null || typeof value.parentRunId === "string") &&
|
|
558
|
+
typeof value.rootRunId === "string" &&
|
|
559
|
+
Buffer.isBuffer(value.launchOptionsHash) &&
|
|
560
|
+
typeof value.status === "string" &&
|
|
561
|
+
(value.finishedAt === null || typeof value.finishedAt === "number"));
|
|
360
562
|
}
|
|
361
563
|
function isResourceRow(value) {
|
|
362
564
|
return isRecord(value) && typeof value.resourceId === "string";
|
package/dist/state/prune.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/state/prune.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AACzF,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxE,MAAM,yBAAyB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AA6BvE,MAAM,UAAU,yBAAyB,CAAC,OAA0B;IAClE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAoB,EACpB,YAAoB,EACpB,OAA0B,EAC1B,gBAAgB,GAA4B,GAAG,EAAE,CAAC,EAAE;IAEpD,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,YAAY,mBAAmB,CAAC;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG;YACX,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;YACtC,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM;YACrC,mBAAmB,EAAE,UAAU;SAChC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;gBACL,GAAG,IAAI;gBACP,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,kBAAkB,EAAE,UAAU;gBAC9B,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAoB,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,IACE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EACzC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,CAAC,UAAU;iBACb,OAAO,CACN;;;WAGC,CACF;iBACA,GAAG,EAAE,CAAC;YACT,KAAK,CAAC,UAAU;iBACb,OAAO,CACN;;;;;aAKG,CACJ;iBACA,GAAG,EAAE,CAAC;YACT,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;YAC9E,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;YAC9D,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;YAC7D,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC;YACnC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa;gBAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACpD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACpD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,OAAO;YACL,GAAG,IAAI;YACP,WAAW;YACX,YAAY;YACZ,gBAAgB;YAChB,kBAAkB,EAAE,aAAa,CAAC,YAAY,CAAC;YAC/C,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,IAAI,KAAK,SAAS;YAAE,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAAoB,EACpB,MAAc;IAEd,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CACN;;6CAEuC,CACxC;SACA,GAAG,EAAE;SACL,MAAM,CAAC,WAAW,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,IAAI;SACD,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QACrC,GAAG,CAAC,UAAU,KAAK,IAAI;QACvB,GAAG,CAAC,UAAU,GAAG,MAAM,CAC1B;SACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAC3B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,8BAA8B,CACvD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CACtC,CAAC;QACF,IAAI,kBAAkB,KAAK,IAAI;YAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CACvB,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CACpF,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YACjF,YAAY,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO;QACL,cAAc,EAAE,KAAK,CAAC,MAAM;QAC5B,YAAY;QACZ,MAAM;QACN,SAAS,EAAE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,QAA2B,EAAE,MAAgB;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IACE,MAAM,CACJ,QAAQ,EACR,4CAA4C,MAAM,oBAAoB,YAAY,CAAC,mBAAmB,CAAC,GAAG,EAC1G,CAAC,GAAG,MAAM,EAAE,GAAG,mBAAmB,CAAC,CACpC;QACD,MAAM,CACJ,QAAQ,EACR;0BACoB,MAAM,yBAAyB,EACnD,MAAM,CACP;QACD,MAAM,CACJ,QAAQ,EACR;0BACoB,MAAM,4BAA4B,MAAM,GAAG,EAC/D,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CACvB;QACD,MAAM,CACJ,QAAQ,EACR;4BACsB,MAAM,0BAA0B,MAAM,GAAG,EAC/D,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CACvB;QACD,MAAM,CACJ,QAAQ,EACR;kCAC4B,MAAM,qCAAqC,MAAM;wCAC3C,MAAM,+BAA+B,MAAM,IAAI,EACjF,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAC7C;QACD,MAAM,CACJ,QAAQ,EACR;kCAC4B,MAAM,+BAA+B,MAAM;kCAC3C,MAAM,+BAA+B,MAAM,IAAI,EAC3E,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAC7C,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC/C,IACE,MAAM,CACJ,QAAQ,EACR;+BACyB,cAAc,+CAA+C,EACtF,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAC3B;QACD,MAAM,CACJ,QAAQ,EACR;sCACgC,cAAc;0BAC1B,YAAY,CAAC,yBAAyB,CAAC,GAAG,EAC9D,CAAC,GAAG,SAAS,EAAE,GAAG,yBAAyB,CAAC,CAC7C;QACD,MAAM,CACJ,QAAQ,EACR;4BACsB,MAAM,GAAG,EAC/B,MAAM,CACP,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA2B,EAAE,MAAgB;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,QAAQ;SACxB,OAAO,CACN;mDAC6C,YAAY,CAAC,SAAS,CAAC,GAAG,CACxE;SACA,GAAG,CAAC,GAAG,SAAS,CAAC;SACjB,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7C,QAAQ,CAAC,OAAO,CAAC,2CAA2C,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACjG,CAAC;IACD,QAAQ;SACL,OAAO,CACN;iCAC2B,MAAM,gCAAgC,MAAM,GAAG,CAC3E;SACA,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,QAAQ;aACL,OAAO,CAAC,4CAA4C,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC;aAClF,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,QAAQ,CAAC,OAAO,CAAC,qCAAqC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,QAAQ;aACL,OAAO,CAAC,+CAA+C,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC;aACrF,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAA2B,EAAE,MAAgB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CACN,+DAA+D,MAAM;yEACF,MAAM;wEACP,MAAM;;mCAE3C,MAAM,0BAA0B,MAAM;4EACG,MAAM,GAAG,CAChF;SACA,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;SACrE,MAAM,CAAC,aAAa,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,eAAe,GAAG,QAAQ;SAC7B,OAAO,CACN;sCACgC,YAAY,CAAC,SAAS,CAAC,GAAG,CAC3D;SACA,GAAG,CAAC,GAAG,SAAS,CAAC;SACjB,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,QAA2B,EAAE,MAAgB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,QAAQ;SAC1B,OAAO,CACN;8CACwC,YAAY,CAAC,SAAS,CAAC;4BACzC,CACvB;SACA,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACrB,MAAM,SAAS,GAAG,QAAQ;SACvB,OAAO,CACN;yCACmC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAC3E;SACA,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAA2B,EAC3B,kBAAqC;IAErC,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ;SACjB,OAAO,CACN,qFAAqF,SAAS,EAAE,CACjG;SACA,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAC9B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAA2B,EAC3B,kBAAqC;IAErC,QAAQ;SACL,OAAO,CACN,2BAA2B,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CACzF;SACA,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA2B,EAAE,iBAAyB;IACpF,MAAM,MAAM,GAAG,QAAQ;SACpB,OAAO,CAAC,kFAAkF,CAAC;SAC3F,GAAG,EAAE;SACL,MAAM,CAAC,UAAU,CAAC,CAAC;IACtB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,oBAAoB,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,SAAS;QAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,EAAE,KAAK,WAAW;gBAAE,SAAS;YAC7F,UAAU,CAAC,IAAI,CACb,UAAU,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBAC1E,SAAS,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAChB,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACzF,IAAI,iBAAiB,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACjD,MAAM,oBAAoB,GAAG,YAAY,CACvC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAC3D,CAAC;IACF,OAAO,GAAG,YAAY,0BAA0B,oBAAoB,GAAG,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAA+B;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAY,CAAC;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,YAAoB;IACzC,OAAO,CAAC,YAAY,EAAE,GAAG,YAAY,MAAM,CAAC;SACzC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB,EAAE,UAAkB;IAClE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACzB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,MAAM,CAAC,QAA2B,EAAE,GAAW,EAAE,MAAiB;IACzE,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,SAAS,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,QAA2B;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,MAA0B;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAC9F,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC/F,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/state/prune.ts"],"names":[],"mappings":"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"}
|
package/docs/SQLITE_STATE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SQLite state
|
|
2
2
|
|
|
3
|
-
Status: this is the implemented single-server database contract. The [workflow-message plan](2026-09-02-unify-workflow-messages-plan.md) records the schema version 1 hard cut that unified Pi message state and restored hosted behavior.
|
|
3
|
+
Status: this is the implemented single-server database contract. The [workflow-message plan](2026-09-02-unify-workflow-messages-plan.md) records the schema version 1 hard cut that unified Pi message state and restored hosted behavior. The [automatic state-retention plan](plans/2026-09-04-automatic-state-retention-plan.md) records the approved 30-day cleanup contract.
|
|
4
4
|
|
|
5
5
|
Pi Workflows stores all live durable state in one database:
|
|
6
6
|
|
|
@@ -156,7 +156,7 @@ state-changing child messages.
|
|
|
156
156
|
|
|
157
157
|
`blobs` stores canonical JSON and UTF-8 text as bytes. Its primary key is the 32-byte SHA-256 digest of the bytes. An oversized required runner result uses this same content-addressed store, and the runner reads and verifies it in bounded parts. It does not copy session history into runner resume state. `run_view_content` separately keeps server-generated large view values reachable for the life of the run, including aggregate outputs that do not exist as one source record. The server creates this link before it sends a content reference. Deleting the run removes the link, and normal blob pruning can then remove unreferenced content.
|
|
158
158
|
|
|
159
|
-
Insertion verifies the digest, media type, byte length, and exact bytes. Repeated content adopts the existing row. This replaces separate artifact files while keeping outputs, errors, settled Pi entries, and rendered channel text deduplicated.
|
|
159
|
+
Insertion verifies the digest, media type, byte length, and exact bytes. Repeated content adopts the existing row. This replaces separate artifact files while keeping outputs, errors, settled Pi entries, and rendered channel text deduplicated. Automatic retention and explicit prune remove unreferenced blobs after they delete safe old run trees. They retain each blob referenced by a database foreign key or active runner transfer.
|
|
160
160
|
|
|
161
161
|
Runs do not store a nested `WorkflowRunState` blob. `runs` stores run-level facts and hashes for independent values. `run_sources` stores source identity without source JSON blobs. `node_attempts` stores structured workflow outputs and small execution receipts. `session_entries` is the only stored copy of each settled Pi entry. `attempt_entries` links an attempt to its prompt, response, first, and last Pi entries. `run_steps` stores ordered attempt membership and only stores an output override when a continuation changes a carried checkpoint answer.
|
|
162
162
|
|
|
@@ -247,6 +247,24 @@ SQLite WAL keeps bounded projection reads consistent with commits. Writers are s
|
|
|
247
247
|
|
|
248
248
|
This contract is for local storage on one machine. It does not claim distributed consensus or network-filesystem safety.
|
|
249
249
|
|
|
250
|
+
## Automatic retention
|
|
251
|
+
|
|
252
|
+
The server keeps terminal root-run trees for 30 days from `finished_at`. A tree is eligible only when every restart or continuation descendant is terminal, older than the cutoff, free of protected work, and free of references from outside the tree.
|
|
253
|
+
|
|
254
|
+
Automatic cleanup keeps a tree when it has a waiting or parked run, a live queue row, a pending workflow message, an open workflow turn, a pending interaction or human decision, a recording session segment, a queued follow-up, an active lease, an unsettled effect, controller ownership, an active runner content hash, a resumable checkpoint, an undelivered terminal result, or a continuation or step reference from outside the tree. Unknown or conflicting ownership also blocks deletion.
|
|
255
|
+
|
|
256
|
+
The server requests cleanup after startup recovery and after workflow runners exit. It also schedules the next daily check after a completed sweep. Overlapping requests use one in-process task. Cleanup starts only while there is no active or pending workflow runner, resource-manager runner, state-maintenance command, or shutdown. One server process completes no more than one sweep in 24 hours. A due sweep that finds work active or stops between trees remains due. The next idle lifecycle trigger or a five-minute idle retry continues it.
|
|
257
|
+
|
|
258
|
+
Automatic cleanup does not create a backup. It rechecks and deletes one complete root tree in one transaction, yields, and checks for new work before it selects another tree. Manual prune uses the same selection and deletion code, but keeps its backup requirement.
|
|
259
|
+
|
|
260
|
+
After logical deletion, the server truncates the WAL while idle and measures `page_count`, `freelist_count`, and `page_size`. SQLite can reuse free pages without shrinking the main file. Automatic cleanup runs `VACUUM` only while the server remains idle, at least 64 MiB is reclaimable, and at least 20 percent of pages are free. A skipped or failed `VACUUM` does not undo committed deletion. The server reports the result and leaves the free pages available for reuse.
|
|
261
|
+
|
|
262
|
+
A cleanup error does not fail a workflow or stop the server. The server records one bounded diagnostic and waits five minutes before another safe attempt. It does not retry in a tight loop.
|
|
263
|
+
|
|
264
|
+
Retained runs keep their current resume, viewer, content-reference, and terminal-result behavior. A deleted run is absent from run lists and direct views. Cleanup never edits Pi session history.
|
|
265
|
+
|
|
266
|
+
The retention policy does not promise a hard database-size limit. Recent or protected work can be large, and physical file shrink depends on a safe, successful `VACUUM`.
|
|
267
|
+
|
|
250
268
|
## Backup and verification
|
|
251
269
|
|
|
252
270
|
An active database must be backed up with the SQLite backup API. Copying only `state.sqlite` while WAL writes are active is not supported.
|
|
@@ -275,7 +293,7 @@ These commands send maintenance operations to the server when they target the ac
|
|
|
275
293
|
`status` reports only safe counts, file size, active leases, and unsettled effects.
|
|
276
294
|
It does not print actor IDs, channel references, payloads, or credentials.
|
|
277
295
|
|
|
278
|
-
`prune --dry-run` reports complete terminal run trees older than the cutoff and the trees that safety checks block. It does not change the database. `prune --apply` requires a new absolute backup path. It verifies the backup, locks maintenance, rechecks the same selection in an exclusive transaction,
|
|
296
|
+
`prune --dry-run` reports complete terminal run trees older than the cutoff and the trees that safety checks block. It does not change the database. `prune --apply` requires a new absolute backup path. It verifies the backup, locks maintenance, rechecks the same selection in an exclusive transaction, deletes safe aggregates and unreferenced blobs, checkpoints the WAL, vacuums the file, and runs integrity and foreign-key checks. The manual command and automatic retention use the same blocker rules. Automatic retention starts after server recovery and does not create a backup.
|
|
279
297
|
|
|
280
298
|
## Alpha cutover
|
|
281
299
|
|