@claudexor/daemon 5.0.2 → 5.1.0

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.
Files changed (156) hide show
  1. package/dist/client.d.ts +56 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/deferred-message-owner.d.ts +4 -0
  4. package/dist/deferred-message-owner.d.ts.map +1 -1
  5. package/dist/deferred-messages.d.ts +22 -1
  6. package/dist/deferred-messages.d.ts.map +1 -1
  7. package/dist/deferred-messages.js +50 -15
  8. package/dist/deferred-messages.js.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/interactions.d.ts.map +1 -1
  14. package/dist/interactions.js +29 -7
  15. package/dist/interactions.js.map +1 -1
  16. package/dist/model-operation-execution.d.ts +10 -0
  17. package/dist/model-operation-execution.d.ts.map +1 -1
  18. package/dist/model-operation-execution.js +12 -5
  19. package/dist/model-operation-execution.js.map +1 -1
  20. package/dist/model-operations.d.ts +1 -0
  21. package/dist/model-operations.d.ts.map +1 -1
  22. package/dist/model-operations.js +20 -10
  23. package/dist/model-operations.js.map +1 -1
  24. package/dist/quota-registry-support.d.ts.map +1 -1
  25. package/dist/quota-registry-support.js +14 -9
  26. package/dist/quota-registry-support.js.map +1 -1
  27. package/dist/server.d.ts +2 -2
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js.map +1 -1
  30. package/dist/store/blob-files.d.ts +2 -2
  31. package/dist/store/blob-files.d.ts.map +1 -1
  32. package/dist/store/blob-files.js +1 -0
  33. package/dist/store/blob-files.js.map +1 -1
  34. package/dist/store/command-prune.d.ts.map +1 -1
  35. package/dist/store/command-prune.js +4 -0
  36. package/dist/store/command-prune.js.map +1 -1
  37. package/dist/store/commands.d.ts +7 -2
  38. package/dist/store/commands.d.ts.map +1 -1
  39. package/dist/store/commands.js +38 -11
  40. package/dist/store/commands.js.map +1 -1
  41. package/dist/store/deferred-message-rows.d.ts +10 -0
  42. package/dist/store/deferred-message-rows.d.ts.map +1 -1
  43. package/dist/store/deferred-message-rows.js +28 -1
  44. package/dist/store/deferred-message-rows.js.map +1 -1
  45. package/dist/store/deferred-messages.d.ts +10 -3
  46. package/dist/store/deferred-messages.d.ts.map +1 -1
  47. package/dist/store/deferred-messages.js +45 -9
  48. package/dist/store/deferred-messages.js.map +1 -1
  49. package/dist/store/external-files.d.ts +17 -0
  50. package/dist/store/external-files.d.ts.map +1 -1
  51. package/dist/store/external-files.js +54 -0
  52. package/dist/store/external-files.js.map +1 -1
  53. package/dist/store/idempotency.d.ts +1 -1
  54. package/dist/store/idempotency.d.ts.map +1 -1
  55. package/dist/store/idempotency.js +2 -1
  56. package/dist/store/idempotency.js.map +1 -1
  57. package/dist/store/libuv-pool.d.ts +25 -0
  58. package/dist/store/libuv-pool.d.ts.map +1 -0
  59. package/dist/store/libuv-pool.js +96 -0
  60. package/dist/store/libuv-pool.js.map +1 -0
  61. package/dist/store/maintenance-worker.d.ts.map +1 -1
  62. package/dist/store/maintenance-worker.js +45 -0
  63. package/dist/store/maintenance-worker.js.map +1 -1
  64. package/dist/store/maintenance.d.ts +28 -2
  65. package/dist/store/maintenance.d.ts.map +1 -1
  66. package/dist/store/maintenance.js +36 -6
  67. package/dist/store/maintenance.js.map +1 -1
  68. package/dist/store/project-router.d.ts +107 -1
  69. package/dist/store/project-router.d.ts.map +1 -1
  70. package/dist/store/project-router.js +30 -0
  71. package/dist/store/project-router.js.map +1 -1
  72. package/dist/store/publish-blob.d.ts.map +1 -1
  73. package/dist/store/publish-blob.js +36 -14
  74. package/dist/store/publish-blob.js.map +1 -1
  75. package/dist/store/purge-files.d.ts +11 -2
  76. package/dist/store/purge-files.d.ts.map +1 -1
  77. package/dist/store/purge-files.js +34 -7
  78. package/dist/store/purge-files.js.map +1 -1
  79. package/dist/store/resource-release.d.ts +15 -0
  80. package/dist/store/resource-release.d.ts.map +1 -0
  81. package/dist/store/resource-release.js +56 -0
  82. package/dist/store/resource-release.js.map +1 -0
  83. package/dist/store/resource-rows.d.ts +2 -0
  84. package/dist/store/resource-rows.d.ts.map +1 -1
  85. package/dist/store/resource-rows.js.map +1 -1
  86. package/dist/store/resource-uses.d.ts +84 -0
  87. package/dist/store/resource-uses.d.ts.map +1 -0
  88. package/dist/store/resource-uses.js +129 -0
  89. package/dist/store/resource-uses.js.map +1 -0
  90. package/dist/store/resources.d.ts +16 -2
  91. package/dist/store/resources.d.ts.map +1 -1
  92. package/dist/store/resources.js +42 -3
  93. package/dist/store/resources.js.map +1 -1
  94. package/dist/store/retention-changes.d.ts +8 -2
  95. package/dist/store/retention-changes.d.ts.map +1 -1
  96. package/dist/store/retention-changes.js +24 -11
  97. package/dist/store/retention-changes.js.map +1 -1
  98. package/dist/store/retention-generations.d.ts +7 -2
  99. package/dist/store/retention-generations.d.ts.map +1 -1
  100. package/dist/store/retention-generations.js +71 -26
  101. package/dist/store/retention-generations.js.map +1 -1
  102. package/dist/store/retention-reference-reader.d.ts +26 -1
  103. package/dist/store/retention-reference-reader.d.ts.map +1 -1
  104. package/dist/store/retention-reference-reader.js +31 -7
  105. package/dist/store/retention-reference-reader.js.map +1 -1
  106. package/dist/store/retention-references.d.ts +5 -0
  107. package/dist/store/retention-references.d.ts.map +1 -1
  108. package/dist/store/retention-references.js +35 -6
  109. package/dist/store/retention-references.js.map +1 -1
  110. package/dist/store/schema.d.ts +2 -2
  111. package/dist/store/schema.d.ts.map +1 -1
  112. package/dist/store/schema.js +17 -2
  113. package/dist/store/schema.js.map +1 -1
  114. package/dist/store/sql-command-router.d.ts +10 -1
  115. package/dist/store/sql-command-router.d.ts.map +1 -1
  116. package/dist/store/sql-command-router.js +10 -1
  117. package/dist/store/sql-command-router.js.map +1 -1
  118. package/dist/store/sql-daemon-services.d.ts.map +1 -1
  119. package/dist/store/sql-daemon-services.js +9 -8
  120. package/dist/store/sql-daemon-services.js.map +1 -1
  121. package/dist/store/sql-validation.d.ts.map +1 -1
  122. package/dist/store/sql-validation.js +1 -0
  123. package/dist/store/sql-validation.js.map +1 -1
  124. package/dist/store/terminal-files.d.ts +6 -3
  125. package/dist/store/terminal-files.d.ts.map +1 -1
  126. package/dist/store/terminal-files.js +6 -38
  127. package/dist/store/terminal-files.js.map +1 -1
  128. package/dist/store/thread-closure.d.ts +62 -0
  129. package/dist/store/thread-closure.d.ts.map +1 -0
  130. package/dist/store/thread-closure.js +290 -0
  131. package/dist/store/thread-closure.js.map +1 -0
  132. package/dist/store/thread-retirement.d.ts +29 -0
  133. package/dist/store/thread-retirement.d.ts.map +1 -0
  134. package/dist/store/thread-retirement.js +123 -0
  135. package/dist/store/thread-retirement.js.map +1 -0
  136. package/dist/store/threads.d.ts.map +1 -1
  137. package/dist/store/threads.js +6 -1
  138. package/dist/store/threads.js.map +1 -1
  139. package/dist/store/upload-imports.d.ts.map +1 -1
  140. package/dist/store/upload-imports.js +16 -3
  141. package/dist/store/upload-imports.js.map +1 -1
  142. package/dist/store/uploads.d.ts +13 -2
  143. package/dist/store/uploads.d.ts.map +1 -1
  144. package/dist/store/uploads.js +76 -30
  145. package/dist/store/uploads.js.map +1 -1
  146. package/dist/store-contracts.d.ts +25 -2
  147. package/dist/store-contracts.d.ts.map +1 -1
  148. package/dist/terminal-authority.d.ts +1 -1
  149. package/dist/thread-lifecycle.d.ts +3 -1
  150. package/dist/thread-lifecycle.d.ts.map +1 -1
  151. package/dist/thread-lifecycle.js +2 -2
  152. package/dist/thread-lifecycle.js.map +1 -1
  153. package/dist/writer-lease.d.ts.map +1 -1
  154. package/dist/writer-lease.js +6 -3
  155. package/dist/writer-lease.js.map +1 -1
  156. package/package.json +5 -5
@@ -27,11 +27,15 @@ function observe(store, listener) {
27
27
  let listeners = observers.get(store);
28
28
  if (!listeners) {
29
29
  const targets = new Set();
30
- store.db.function("disk_retention_changed", (table, id, operation) => {
30
+ store.db.function("disk_retention_changed", (table, id, root) => {
31
31
  // Node 24.15 truncates TEXT at NUL; interaction keys must arrive as bytes.
32
32
  const decodedId = Buffer.from(id).toString("utf8");
33
33
  for (const target of targets)
34
- target({ table: table, id: decodedId, operation: String(operation) });
34
+ target({
35
+ table: table,
36
+ id: decodedId,
37
+ roots: new Set(root === null ? [] : [Buffer.from(root).toString("utf8")]),
38
+ });
35
39
  return null;
36
40
  });
37
41
  for (const [table, fields] of Object.entries(columns)) {
@@ -47,7 +51,7 @@ function observe(store, listener) {
47
51
  const rows = operation === "UPDATE" ? ["OLD", "NEW"] : [operation === "DELETE" ? "OLD" : "NEW"];
48
52
  store.exec(`CREATE TEMP TRIGGER disk_retention_${table}_${operation}
49
53
  AFTER ${operation} ON main.${table} ${changed} BEGIN
50
- ${rows.map((row) => `SELECT disk_retention_changed('${table}',CAST(${row}.${key} AS BLOB),'${operation}');`).join("\n")}
54
+ ${rows.map((row) => `SELECT disk_retention_changed('${table}',CAST(${row}.${key} AS BLOB),${table === "project" ? `CAST(${row}.root AS BLOB)` : "NULL"});`).join("\n")}
51
55
  END`);
52
56
  }
53
57
  }
@@ -58,15 +62,19 @@ function observe(store, listener) {
58
62
  return () => void listeners.delete(listener);
59
63
  }
60
64
  /** Subscribe BEFORE the cooperative read. Drain changed row identities only;
61
- * quota/event traffic and unrelated metadata never restart the full inventory. */
65
+ * quota/event traffic and unrelated metadata never restart the full inventory.
66
+ * Project and partition changes reach the reader like every other owner row: it
67
+ * defers the affected namespaces or, only when rows were never inventoried,
68
+ * holds the whole pass (`hold`). A change that cannot be read holds it too. */
62
69
  export function retentionChanges(store) {
63
70
  const pending = new Map();
64
71
  let closed = false;
65
- let topologyChanged = false;
72
+ let held = null;
66
73
  const stop = observe(store, (change) => {
67
- pending.set(`${change.table}:${change.id}`, change);
68
- if (change.table === "project" || change.table === "partition")
69
- topologyChanged = true;
74
+ const key = `${change.table}:${change.id}`;
75
+ for (const root of pending.get(key)?.roots ?? [])
76
+ change.roots.add(root);
77
+ pending.set(key, change);
70
78
  });
71
79
  const readOne = (key, read) => {
72
80
  const change = pending.get(key);
@@ -77,11 +85,16 @@ export function retentionChanges(store) {
77
85
  read(change);
78
86
  }
79
87
  catch (error) {
80
- topologyChanged = true;
88
+ held ??= String(error);
81
89
  throw error;
82
90
  }
83
91
  };
84
92
  return {
93
+ /** Why the whole pass holds, once a change named a reason. */
94
+ hold(reason) {
95
+ held ??= reason;
96
+ },
97
+ held: () => held,
85
98
  async refresh(read, signal) {
86
99
  // Capture a finite batch; newly arriving work is handled by the final
87
100
  // synchronous check or the next cooperative refresh.
@@ -92,7 +105,7 @@ export function retentionChanges(store) {
92
105
  }
93
106
  },
94
107
  current(read) {
95
- if (closed || topologyChanged)
108
+ if (closed || held)
96
109
  return false;
97
110
  // Same physical read budget as a SQL inventory page. An exceptional
98
111
  // burst stays for the next cooperative pass, never a long admission lock.
@@ -100,7 +113,7 @@ export function retentionChanges(store) {
100
113
  return false;
101
114
  for (const key of pending.keys())
102
115
  readOne(key, read);
103
- return !topologyChanged;
116
+ return !held;
104
117
  },
105
118
  close() {
106
119
  closed = true;
@@ -1 +1 @@
1
- {"version":3,"file":"retention-changes.js","sourceRoot":"","sources":["../../src/store/retention-changes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention-changes.js","sourceRoot":"","sources":["../../src/store/retention-changes.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import type { EngineStore } from "./store.js";
2
2
  /** Quarantine completes recovery: those rows are evidence, never live owners.
3
3
  * Archived generations remain restorable owners. Unknown/pending states cannot
4
- * prove absence and hold run retirement install-wide. */
4
+ * prove absence and hold run retirement install-wide. A partition created after
5
+ * the snapshot (a late registration's fresh generation) is read on demand; its
6
+ * rows were all written after the change observer subscribed, so they reach the
7
+ * pass through its queue. */
5
8
  export declare function retentionGenerations(store: EngineStore): {
6
9
  retained: (pid: number) => boolean;
10
+ changed: (pid: number) => string | null;
11
+ refreshProject: (id?: string) => void;
7
12
  registeredProjectRoots: Set<string>;
8
13
  archivedProjectRoots: Set<string>;
9
14
  protectedProjectRoots: Set<string>;
@@ -13,6 +18,6 @@ export declare function retentionGenerations(store: EngineStore): {
13
18
  count: number;
14
19
  example: string;
15
20
  }[];
16
- blocked: string | undefined;
21
+ readonly blocked: string | undefined;
17
22
  };
18
23
  //# sourceMappingURL=retention-generations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retention-generations.d.ts","sourceRoot":"","sources":["../../src/store/retention-generations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C;;yDAEyD;AACzD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW;oBAmB9B,MAAM;;;;;;;;;;;EAmE9B"}
1
+ {"version":3,"file":"retention-generations.d.ts","sourceRoot":"","sources":["../../src/store/retention-generations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAc9C;;;;;6BAK6B;AAC7B,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW;oBAa9B,MAAM;mBAeP,MAAM,KAAG,MAAM,GAAG,IAAI;0BAoDf,MAAM;;;;;;;;;;;EAoCpC"}
@@ -1,22 +1,56 @@
1
+ const PARTITIONS = `SELECT q.id,q.name,q.status,q.project_id,p.root,g.status AS registry_status
2
+ FROM partition q LEFT JOIN project p ON p.id=q.project_id LEFT JOIN partition g ON g.id=p.pid`;
1
3
  /** Quarantine completes recovery: those rows are evidence, never live owners.
2
4
  * Archived generations remain restorable owners. Unknown/pending states cannot
3
- * prove absence and hold run retirement install-wide. */
5
+ * prove absence and hold run retirement install-wide. A partition created after
6
+ * the snapshot (a late registration's fresh generation) is read on demand; its
7
+ * rows were all written after the change observer subscribed, so they reach the
8
+ * pass through its queue. */
4
9
  export function retentionGenerations(store) {
5
- const rows = store
6
- .prepare(`SELECT q.id,q.name,q.status,q.project_id,p.root,g.status AS registry_status FROM partition q
7
- LEFT JOIN project p ON p.id=q.project_id LEFT JOIN partition g ON g.id=p.pid`)
8
- .all();
10
+ const rows = store.prepare(PARTITIONS).all();
9
11
  const known = new Map(rows.map((row) => [row.id, row]));
12
+ const read = (pid) => store.prepare(`${PARTITIONS} WHERE q.id=?`).get(pid);
10
13
  // A completed global quarantine also retires its project descendants. Their
11
14
  // own ready/archived/pending bits are historical, not an independent owner.
12
15
  const retired = (row) => row.status === "quarantined" || row.registry_status === "quarantined";
16
+ const owns = (row) => !retired(row) &&
17
+ (!row.project_id || row.registry_status === "ready" || row.registry_status === "archived") &&
18
+ (row.status === "ready" || row.status === "archived");
13
19
  const retained = (pid) => {
14
- const row = known.get(pid);
20
+ let row = known.get(pid);
21
+ if (!row) {
22
+ row = read(pid);
23
+ if (row) {
24
+ known.set(pid, row);
25
+ observe(row);
26
+ }
27
+ }
15
28
  if (!row)
16
29
  throw new Error(`retention owner names missing partition ${pid}`);
17
- return (!retired(row) &&
18
- (!row.project_id || row.registry_status === "ready" || row.registry_status === "archived") &&
19
- (row.status === "ready" || row.status === "archived"));
30
+ return owns(row);
31
+ };
32
+ /** A partition row changed during the pass. A generation the pass excluded that
33
+ * now owns rows was never inventoried: the reason holds the whole pass. Growth
34
+ * of protection, and a fresh partition, need nothing more. */
35
+ const changed = (pid) => {
36
+ const before = known.get(pid);
37
+ const after = read(pid);
38
+ if (!after)
39
+ return null;
40
+ observe(after);
41
+ if (blocked)
42
+ return blocked;
43
+ if (!before) {
44
+ known.set(pid, after);
45
+ return null;
46
+ }
47
+ if (!owns(before) && owns(after))
48
+ return `partition ${after.name} (${pid}) became a retained owner during inventory`;
49
+ // A registry's status decides many generations at once: none is rechecked alone.
50
+ if (before.status !== after.status &&
51
+ store.prepare("SELECT 1 FROM project WHERE pid=? LIMIT 1").get(pid))
52
+ return `registry partition ${after.name} (${pid}) changed during inventory`;
53
+ return null;
20
54
  };
21
55
  const registered = store
22
56
  .prepare(`SELECT p.root,p.status FROM project p
@@ -33,39 +67,50 @@ export function retentionGenerations(store) {
33
67
  const errors = [];
34
68
  const holds = [];
35
69
  let blocked;
36
- for (const row of rows) {
37
- if (retained(row.id) || retired(row))
38
- continue;
70
+ const recoveryHolds = new Set();
71
+ const observe = (row) => {
72
+ if (owns(row) || retired(row) || recoveryHolds.has(row.id))
73
+ return;
74
+ recoveryHolds.add(row.id);
39
75
  const reason = `partition ${row.name} (${row.id}, ${row.status}) awaits journal recovery`;
40
- // Scope roots do not bound dependencies: a continuation may name any namespace.
41
76
  blocked ??= reason;
42
77
  errors.push(`all namespaces kept: ${reason}`);
43
78
  holds.push({ class: "recovery_pending", count: 1, example: reason });
44
- }
79
+ };
80
+ for (const row of rows)
81
+ observe(row);
45
82
  const bindingHolds = new Set();
46
- for (const row of store
47
- .prepare(`SELECT p.root,p.current_pid FROM project p
83
+ const refreshProject = (id) => {
84
+ for (const row of store
85
+ .prepare(`SELECT p.root,p.current_pid FROM project p
48
86
  JOIN partition g ON g.id=p.pid LEFT JOIN partition q ON q.id=p.current_pid
49
87
  WHERE g.status IN ('ready','archived') AND
50
88
  ((p.current_pid IS NOT NULL AND q.id IS NULL) OR
51
- (p.status='active' AND p.current_pid IS NULL))`)
52
- .all()) {
53
- const reason = row.current_pid === null ? "unbound_active_registration" : "missing_partition";
54
- const holdKey = `${reason}\0${row.root}`;
55
- if (!bindingHolds.has(holdKey))
89
+ (p.status='active' AND p.current_pid IS NULL))${id === undefined ? "" : " AND p.id=?"}`)
90
+ .all(...(id === undefined ? [] : [id]))) {
91
+ const reason = row.current_pid === null ? "unbound_active_registration" : "missing_partition";
92
+ const holdKey = `${reason}\0${row.root}`;
93
+ if (bindingHolds.has(holdKey))
94
+ continue;
56
95
  holds.push({ class: reason, count: 1, example: row.root });
57
- bindingHolds.add(holdKey);
58
- protectedProjectRoots.add(row.root);
59
- errors.push(`namespace ${row.root} kept: ${reason} (${row.current_pid ?? "NULL"})`);
60
- }
96
+ bindingHolds.add(holdKey);
97
+ protectedProjectRoots.add(row.root);
98
+ errors.push(`namespace ${row.root} kept: ${reason} (${row.current_pid ?? "NULL"})`);
99
+ }
100
+ };
101
+ refreshProject();
61
102
  return {
62
103
  retained,
104
+ changed,
105
+ refreshProject,
63
106
  registeredProjectRoots,
64
107
  archivedProjectRoots,
65
108
  protectedProjectRoots,
66
109
  errors,
67
110
  holds,
68
- blocked,
111
+ get blocked() {
112
+ return blocked;
113
+ },
69
114
  };
70
115
  }
71
116
  //# sourceMappingURL=retention-generations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retention-generations.js","sourceRoot":"","sources":["../../src/store/retention-generations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention-generations.js","sourceRoot":"","sources":["../../src/store/retention-generations.ts"],"names":[],"mappings":"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"}
@@ -24,10 +24,19 @@ export declare class RetentionReferenceReader {
24
24
  readonly runs: Set<string>;
25
25
  readonly sessions: Map<string, Set<string>>;
26
26
  readonly roots: Set<string>;
27
- readonly lanes: Map<string, Set<string>>;
27
+ /** Lane directories are named by globally unique thread id, independent of
28
+ * the project spelling that happened to produce their runtime namespace. */
29
+ readonly laneThreadIds: Set<string>;
28
30
  constructor(store: EngineStore, ignored: ReadonlySet<string>, retained: (pid: number) => boolean);
29
31
  add: (id: string | null | undefined) => void;
30
32
  thread(row: ThreadRow): Thread | undefined;
33
+ /** A purge obligation still open owns its lane: only the purge owner removes
34
+ * it, after rechecking what a conditional retirement accepted; the orphan
35
+ * sweep must not delete those bytes first. */
36
+ private purgedLane;
37
+ /** Add lane owners from a quarantined partition without decoding its body.
38
+ * Quarantine is precisely the state in which the body may be malformed. */
39
+ addQuarantinedLaneThreadIds(pid?: number): void;
31
40
  turn(row: TurnRow, owner?: {
32
41
  schema_version: 2;
33
42
  id: string;
@@ -58,6 +67,14 @@ export declare class RetentionReferenceReader {
58
67
  trashed_at: string | null;
59
68
  purge_after: string | null;
60
69
  pre_trash_state: "active" | "closed" | null;
70
+ retirement?: {
71
+ operationId: string;
72
+ exportId: string;
73
+ closureDigest: string;
74
+ contentDigest: string;
75
+ laneDigest: string;
76
+ acceptedAt: string;
77
+ } | undefined;
61
78
  } | undefined): void;
62
79
  session(row: SessionRow, owner?: {
63
80
  schema_version: 2;
@@ -89,6 +106,14 @@ export declare class RetentionReferenceReader {
89
106
  trashed_at: string | null;
90
107
  purge_after: string | null;
91
108
  pre_trash_state: "active" | "closed" | null;
109
+ retirement?: {
110
+ operationId: string;
111
+ exportId: string;
112
+ closureDigest: string;
113
+ contentDigest: string;
114
+ laneDigest: string;
115
+ acceptedAt: string;
116
+ } | undefined;
92
117
  } | undefined): void;
93
118
  refresh(table: "thread" | "turn" | "session" | "interaction", id: string): void;
94
119
  private read;
@@ -1 +1 @@
1
- {"version":3,"file":"retention-reference-reader.d.ts","sourceRoot":"","sources":["../../src/store/retention-reference-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAC1D,KAAK,SAAS,GAAG,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1C,KAAK,UAAU,GAAG,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,KAAK,OAAO,GAAG,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C;kFACkF;AAClF,qBAAa,wBAAwB;IAOjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR3B,QAAQ,CAAC,IAAI,cAAqB;IAClC,QAAQ,CAAC,QAAQ,2BAAkC;IACnD,QAAQ,CAAC,KAAK,cAAqB;IACnC,QAAQ,CAAC,KAAK,2BAAkC;IAEhD,YACmB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACjD;IAEJ,GAAG,OAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,UAElC;IAEF,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAgBzC;IAED,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4B,GAAG,IAAI,CAM1D;IAED,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4B,GAAG,IAAI,CAchE;IAED,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAmB9E;IAED,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,KAAK;CASd"}
1
+ {"version":3,"file":"retention-reference-reader.d.ts","sourceRoot":"","sources":["../../src/store/retention-reference-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAC1D,KAAK,SAAS,GAAG,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1C,KAAK,UAAU,GAAG,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,KAAK,OAAO,GAAG,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C;kFACkF;AAClF,qBAAa,wBAAwB;IASjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,QAAQ,CAAC,IAAI,cAAqB;IAClC,QAAQ,CAAC,QAAQ,2BAAkC;IACnD,QAAQ,CAAC,KAAK,cAAqB;IACnC;gFAC4E;IAC5E,QAAQ,CAAC,aAAa,cAAqB;IAE3C,YACmB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACjD;IAEJ,GAAG,OAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,UAElC;IAEF,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAiBzC;IAED;;kDAE8C;IAC9C,OAAO,CAAC,UAAU;IAUlB;+EAC2E;IAC3E,2BAA2B,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAU9C;IAED,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4B,GAAG,IAAI,CAM1D;IAED,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4B,GAAG,IAAI,CAchE;IAED,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAmB9E;IAED,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,KAAK;CASd"}
@@ -1,5 +1,4 @@
1
1
  import { Session, Thread, ThreadTurn } from "@claudexor/schema";
2
- import { noProjectRepoRoot } from "@claudexor/util";
3
2
  import { decodeBody } from "./thread-rows.js";
4
3
  const RetainedTurn = ThreadTurn.omit({ prompt: true });
5
4
  /** One typed reader for the initial inventory AND changed-owner rechecks.
@@ -11,7 +10,9 @@ export class RetentionReferenceReader {
11
10
  runs = new Set();
12
11
  sessions = new Map();
13
12
  roots = new Set();
14
- lanes = new Map();
13
+ /** Lane directories are named by globally unique thread id, independent of
14
+ * the project spelling that happened to produce their runtime namespace. */
15
+ laneThreadIds = new Set();
15
16
  constructor(store, ignored, retained) {
16
17
  this.store = store;
17
18
  this.ignored = ignored;
@@ -22,23 +23,46 @@ export class RetentionReferenceReader {
22
23
  this.runs.add(id);
23
24
  };
24
25
  thread(row) {
25
- if (!this.retained(row.pid) || row.state === "purged")
26
+ if (row.state === "purged") {
27
+ this.purgedLane(row);
28
+ return;
29
+ }
30
+ if (!this.retained(row.pid))
26
31
  return;
27
32
  const thread = this.read("thread", row, () => Thread.parse(decodeBody(row)));
28
33
  if (thread.state !== row.state || thread.id !== row.id)
29
34
  throw new Error(`thread ${row.id} in partition ${row.pid}: retention state or identity disagrees`);
30
35
  if (thread.repo)
31
36
  this.roots.add(thread.repo.root);
32
- const root = thread.repo?.root ?? noProjectRepoRoot();
33
- const lanes = this.lanes.get(root) ?? new Set();
34
- lanes.add(thread.id);
35
- this.lanes.set(root, lanes);
37
+ this.laneThreadIds.add(thread.id);
36
38
  if (this.ignored.has(thread.id) && thread.state === "trashed")
37
39
  return;
38
40
  thread.run_ids.forEach(this.add);
39
41
  this.add(thread.head_run_id);
40
42
  return thread;
41
43
  }
44
+ /** A purge obligation still open owns its lane: only the purge owner removes
45
+ * it, after rechecking what a conditional retirement accepted; the orphan
46
+ * sweep must not delete those bytes first. */
47
+ purgedLane(row) {
48
+ if (!this.store
49
+ .prepare("SELECT 1 FROM effect_obligation WHERE kind='purge_fs' AND key=?")
50
+ .get(row.id))
51
+ return;
52
+ this.laneThreadIds.add(row.id);
53
+ }
54
+ /** Add lane owners from a quarantined partition without decoding its body.
55
+ * Quarantine is precisely the state in which the body may be malformed. */
56
+ addQuarantinedLaneThreadIds(pid) {
57
+ const rows = this.store
58
+ .prepare(`SELECT t.id FROM thread t JOIN partition q ON q.id=t.pid
59
+ LEFT JOIN project p ON p.id=q.project_id LEFT JOIN partition g ON g.id=p.pid
60
+ WHERE t.state<>'purged' AND (q.status='quarantined' OR g.status='quarantined')
61
+ ${pid === undefined ? "" : "AND (q.id=? OR p.pid=?)"}`)
62
+ .all(...(pid === undefined ? [] : [pid, pid]));
63
+ for (const row of rows)
64
+ this.laneThreadIds.add(row.id);
65
+ }
42
66
  turn(row, owner = this.owner(row.thread_id)) {
43
67
  if (!this.retained(row.pid) || !owner)
44
68
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"retention-reference-reader.js","sourceRoot":"","sources":["../../src/store/retention-reference-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention-reference-reader.js","sourceRoot":"","sources":["../../src/store/retention-reference-reader.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface DiskRetentionReferences {
6
6
  /** Cooperatively absorb changed owners, then synchronously recheck before expiry. */
7
7
  refresh?: () => Promise<void>;
8
8
  recheck?: () => boolean;
9
+ /** Latched changed-owner cause when the proof is no longer current. */
10
+ held?: () => string | null;
9
11
  /** Native callers absorb the same changed owners before per-file rechecks. */
10
12
  nativeCurrent?: () => boolean;
11
13
  /** Pass-local ownership, refreshed synchronously at each lane sweep boundary. */
@@ -14,6 +16,9 @@ export interface DiskRetentionReferences {
14
16
  nativeWatchRunDirs?: ReadonlySet<string>;
15
17
  nativeReferenceError?: () => string | null;
16
18
  hasActiveCommands?: () => boolean;
19
+ /** Runtime namespaces whose registration (root, status, generation) changed during
20
+ * the pass: their keep-last and ownership are unknown until a fresh pass (#503). */
21
+ deferredRuntimes?: () => ReadonlySet<string>;
17
22
  /** Caller releases the observation after all deletions, including error paths. */
18
23
  close?: () => void;
19
24
  /** Recovery holds are receipt facts; completed quarantine is not a hold. */
@@ -1 +1 @@
1
- {"version":3,"file":"retention-references.d.ts","sourceRoot":"","sources":["../../src/store/retention-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,iFAAiF;IACjF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClC,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yFAAyF;IACzF,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;gFACgF;AAChF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8CnB;AAED;wFACwF;AACxF,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,WAAW,EAClB,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,EAChD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,uBAAuB,CAAC,CAiHlC"}
1
+ {"version":3,"file":"retention-references.d.ts","sourceRoot":"","sources":["../../src/store/retention-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,iFAAiF;IACjF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClC;wFACoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yFAAyF;IACzF,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;gFACgF;AAChF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8CnB;AAED;wFACwF;AACxF,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,WAAW,EAClB,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,EAChD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,uBAAuB,CAAC,CA2IlC"}
@@ -1,6 +1,7 @@
1
1
  import { Thread } from "@claudexor/schema";
2
2
  import { setImmediate as yieldToAdmission } from "node:timers/promises";
3
3
  import { access } from "node:fs/promises";
4
+ import { projectRuntimeDir } from "@claudexor/util";
4
5
  import { decodeBody } from "./thread-rows.js";
5
6
  import { isServedPid } from "./generations.js";
6
7
  import { retentionPages } from "./retention-pages.js";
@@ -57,10 +58,24 @@ export async function diskRetentionReferences(store, ignoreThreadIds = new Set()
57
58
  const version = changes.get().n;
58
59
  const isCurrent = () => changes.get().n === version;
59
60
  const generations = retentionGenerations(store);
61
+ // The observer retains every spelling through queued relinks and deletion.
62
+ const deferred = new Set();
63
+ const runtimeByRoot = new Map();
64
+ const deferRoots = (changedRoots) => {
65
+ for (const root of changedRoots) {
66
+ let runtime = runtimeByRoot.get(root);
67
+ if (!runtime) {
68
+ runtime = projectRuntimeDir(root);
69
+ runtimeByRoot.set(root, runtime);
70
+ }
71
+ deferred.add(runtime);
72
+ }
73
+ };
60
74
  const { registeredProjectRoots, archivedProjectRoots, protectedProjectRoots, errors, blocked } = generations;
61
75
  const roots = new Set([...registeredProjectRoots, ...protectedProjectRoots]);
62
76
  const retained = blocked ? () => false : generations.retained;
63
77
  const reader = new RetentionReferenceReader(store, ignoreThreadIds, retained);
78
+ reader.addQuarantinedLaneThreadIds();
64
79
  for await (const rows of retentionPages(store, "thread", "id,pid,state,body", signal)) {
65
80
  for (const row of rows) {
66
81
  await yieldToAdmission();
@@ -88,7 +103,7 @@ export async function diskRetentionReferences(store, ignoreThreadIds = new Set()
88
103
  reader.add(row.run_id);
89
104
  const refreshDraft = await deferredRetentionReferences(store, retained, (id) => reader.add(id), signal);
90
105
  const commands = await commandRetentionReferences(store, retained, reader.runs, signal);
91
- const readChange = ({ table, id, }) => {
106
+ const readChange = ({ table, id, roots: changedRoots, }) => {
92
107
  if (table === "command")
93
108
  commands.refresh(id);
94
109
  else if (table === "deferred_message")
@@ -100,10 +115,20 @@ export async function diskRetentionReferences(store, ignoreThreadIds = new Set()
100
115
  if (owner)
101
116
  throw new Error(`immutable retention command ${owner.id} in partition ${owner.pid}: params blob ${id} changed during inventory`);
102
117
  }
103
- else if (table !== "project" && table !== "partition")
118
+ else if (table === "project") {
119
+ deferRoots(changedRoots);
120
+ generations.refreshProject(id);
121
+ }
122
+ else if (table === "partition") {
123
+ const reason = generations.changed(Number(id));
124
+ if (reason)
125
+ changesObserved.hold(reason);
126
+ reader.addQuarantinedLaneThreadIds(Number(id));
127
+ }
128
+ else
104
129
  reader.refresh(table, id);
105
130
  };
106
- const recheck = () => changesObserved.current(readChange);
131
+ const recheck = () => changesObserved.current(readChange) && !generations.blocked;
107
132
  const refresh = () => changesObserved.refresh(readChange, signal);
108
133
  await refresh();
109
134
  for (const root of reader.roots)
@@ -112,18 +137,22 @@ export async function diskRetentionReferences(store, ignoreThreadIds = new Set()
112
137
  isCurrent,
113
138
  refresh,
114
139
  recheck,
140
+ held: changesObserved.held,
115
141
  nativeCurrent: recheck,
116
- laneThreadIds: (root) => {
142
+ laneThreadIds: () => {
117
143
  if (!recheck())
118
144
  throw new Error("lane ownership changed; a fresh retention pass must resume");
119
- return reader.lanes.get(root) ?? new Set();
145
+ return reader.laneThreadIds;
120
146
  },
121
147
  nativeRunDirs: commands.nativeRunDirs,
122
148
  nativeWatchRunDirs: commands.nativeWatchRunDirs,
123
149
  nativeReferenceError: commands.nativeReferenceError,
124
150
  hasActiveCommands: commands.hasActiveCommands,
151
+ deferredRuntimes: () => deferred,
125
152
  close: changesObserved.close,
126
- blocked,
153
+ get blocked() {
154
+ return generations.blocked;
155
+ },
127
156
  errors,
128
157
  holds: generations.holds,
129
158
  projectRoots: [...roots],
@@ -1 +1 @@
1
- {"version":3,"file":"retention-references.js","sourceRoot":"","sources":["../../src/store/retention-references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention-references.js","sourceRoot":"","sources":["../../src/store/retention-references.ts"],"names":[],"mappings":"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"}