@cleocode/core 2026.9.15 → 2026.9.17

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 (220) hide show
  1. package/dist/changesets/parser.d.ts.map +1 -1
  2. package/dist/changesets/parser.js +67 -0
  3. package/dist/changesets/parser.js.map +1 -1
  4. package/dist/crypto/credentials.d.ts +128 -26
  5. package/dist/crypto/credentials.d.ts.map +1 -1
  6. package/dist/crypto/credentials.js +183 -142
  7. package/dist/crypto/credentials.js.map +1 -1
  8. package/dist/docs/export-document.js +14705 -12949
  9. package/dist/docs/export-document.js.map +3 -3
  10. package/dist/doctor/index.d.ts +1 -1
  11. package/dist/doctor/index.d.ts.map +1 -1
  12. package/dist/doctor/index.js +1 -1
  13. package/dist/doctor/index.js.map +1 -1
  14. package/dist/doctor/nexus-schema-residency.d.ts +1 -1
  15. package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
  16. package/dist/doctor/nexus-schema-residency.js +1 -0
  17. package/dist/doctor/nexus-schema-residency.js.map +1 -1
  18. package/dist/doctor/project-identity.d.ts +124 -0
  19. package/dist/doctor/project-identity.d.ts.map +1 -0
  20. package/dist/doctor/project-identity.js +307 -0
  21. package/dist/doctor/project-identity.js.map +1 -0
  22. package/dist/doctor/superseded-store.d.ts +8 -0
  23. package/dist/doctor/superseded-store.d.ts.map +1 -1
  24. package/dist/doctor/superseded-store.js +48 -3
  25. package/dist/doctor/superseded-store.js.map +1 -1
  26. package/dist/init.d.ts +7 -0
  27. package/dist/init.d.ts.map +1 -1
  28. package/dist/init.js +17 -2
  29. package/dist/init.js.map +1 -1
  30. package/dist/internal.d.ts +5 -2
  31. package/dist/internal.d.ts.map +1 -1
  32. package/dist/internal.js +4 -2
  33. package/dist/internal.js.map +1 -1
  34. package/dist/llm/credentials-store.d.ts +10 -0
  35. package/dist/llm/credentials-store.d.ts.map +1 -1
  36. package/dist/llm/credentials-store.js +7 -1
  37. package/dist/llm/credentials-store.js.map +1 -1
  38. package/dist/llm/plugin-facade.js +13368 -1550
  39. package/dist/llm/plugin-facade.js.map +3 -3
  40. package/dist/nexus/analyze-orchestrator.d.ts +20 -3
  41. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  42. package/dist/nexus/analyze-orchestrator.js +159 -10
  43. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  44. package/dist/nexus/assessment-store.d.ts +57 -0
  45. package/dist/nexus/assessment-store.d.ts.map +1 -0
  46. package/dist/nexus/assessment-store.js +73 -0
  47. package/dist/nexus/assessment-store.js.map +1 -0
  48. package/dist/nexus/freshness.d.ts +131 -0
  49. package/dist/nexus/freshness.d.ts.map +1 -0
  50. package/dist/nexus/freshness.js +391 -0
  51. package/dist/nexus/freshness.js.map +1 -0
  52. package/dist/nexus/graph-manifest.d.ts +88 -0
  53. package/dist/nexus/graph-manifest.d.ts.map +1 -0
  54. package/dist/nexus/graph-manifest.js +114 -0
  55. package/dist/nexus/graph-manifest.js.map +1 -0
  56. package/dist/nexus/knowledge.d.ts +21 -1
  57. package/dist/nexus/knowledge.d.ts.map +1 -1
  58. package/dist/nexus/knowledge.js +76 -37
  59. package/dist/nexus/knowledge.js.map +1 -1
  60. package/dist/nexus/path-map.d.ts +55 -0
  61. package/dist/nexus/path-map.d.ts.map +1 -0
  62. package/dist/nexus/path-map.js +87 -0
  63. package/dist/nexus/path-map.js.map +1 -0
  64. package/dist/nexus/projects-clean.d.ts +21 -28
  65. package/dist/nexus/projects-clean.d.ts.map +1 -1
  66. package/dist/nexus/projects-clean.js +168 -85
  67. package/dist/nexus/projects-clean.js.map +1 -1
  68. package/dist/nexus/query.d.ts.map +1 -1
  69. package/dist/nexus/query.js +3 -2
  70. package/dist/nexus/query.js.map +1 -1
  71. package/dist/nexus/registry-hygiene.d.ts +70 -0
  72. package/dist/nexus/registry-hygiene.d.ts.map +1 -0
  73. package/dist/nexus/registry-hygiene.js +113 -0
  74. package/dist/nexus/registry-hygiene.js.map +1 -0
  75. package/dist/nexus/registry.d.ts +2 -2
  76. package/dist/nexus/registry.d.ts.map +1 -1
  77. package/dist/nexus/registry.js +48 -12
  78. package/dist/nexus/registry.js.map +1 -1
  79. package/dist/paths.d.ts +26 -0
  80. package/dist/paths.d.ts.map +1 -1
  81. package/dist/paths.js +99 -6
  82. package/dist/paths.js.map +1 -1
  83. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  84. package/dist/render/nexus/graph/index.js +8 -0
  85. package/dist/render/nexus/graph/index.js.map +1 -1
  86. package/dist/resources/spawn-wrapper.d.ts +0 -11
  87. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  88. package/dist/resources/spawn-wrapper.js +62 -6
  89. package/dist/resources/spawn-wrapper.js.map +1 -1
  90. package/dist/scaffold/ensure-config.d.ts +12 -3
  91. package/dist/scaffold/ensure-config.d.ts.map +1 -1
  92. package/dist/scaffold/ensure-config.js +61 -38
  93. package/dist/scaffold/ensure-config.js.map +1 -1
  94. package/dist/scaffold/project-identity.d.ts +136 -0
  95. package/dist/scaffold/project-identity.d.ts.map +1 -0
  96. package/dist/scaffold/project-identity.js +225 -0
  97. package/dist/scaffold/project-identity.js.map +1 -0
  98. package/dist/selfimprove/fix-gen.js +13319 -1556
  99. package/dist/selfimprove/fix-gen.js.map +3 -3
  100. package/dist/store/agent-api-key.d.ts +114 -0
  101. package/dist/store/agent-api-key.d.ts.map +1 -0
  102. package/dist/store/agent-api-key.js +136 -0
  103. package/dist/store/agent-api-key.js.map +1 -0
  104. package/dist/store/agent-registry-accessor.d.ts +4 -2
  105. package/dist/store/agent-registry-accessor.d.ts.map +1 -1
  106. package/dist/store/agent-registry-accessor.js +39 -89
  107. package/dist/store/agent-registry-accessor.js.map +1 -1
  108. package/dist/store/api-key-kdf.d.ts +7 -0
  109. package/dist/store/api-key-kdf.d.ts.map +1 -1
  110. package/dist/store/api-key-kdf.js +7 -0
  111. package/dist/store/api-key-kdf.js.map +1 -1
  112. package/dist/store/backup-crypto.d.ts +49 -0
  113. package/dist/store/backup-crypto.d.ts.map +1 -1
  114. package/dist/store/backup-crypto.js +154 -0
  115. package/dist/store/backup-crypto.js.map +1 -1
  116. package/dist/store/credential-transfer.d.ts +303 -0
  117. package/dist/store/credential-transfer.d.ts.map +1 -0
  118. package/dist/store/credential-transfer.js +774 -0
  119. package/dist/store/credential-transfer.js.map +1 -0
  120. package/dist/store/exodus/column-transforms.d.ts +79 -4
  121. package/dist/store/exodus/column-transforms.d.ts.map +1 -1
  122. package/dist/store/exodus/column-transforms.js +121 -4
  123. package/dist/store/exodus/column-transforms.js.map +1 -1
  124. package/dist/store/exodus/index.d.ts +1 -0
  125. package/dist/store/exodus/index.d.ts.map +1 -1
  126. package/dist/store/exodus/index.js +1 -0
  127. package/dist/store/exodus/index.js.map +1 -1
  128. package/dist/store/exodus/migrate.d.ts +17 -1
  129. package/dist/store/exodus/migrate.d.ts.map +1 -1
  130. package/dist/store/exodus/migrate.js +155 -33
  131. package/dist/store/exodus/migrate.js.map +1 -1
  132. package/dist/store/exodus/on-open.d.ts +14 -0
  133. package/dist/store/exodus/on-open.d.ts.map +1 -1
  134. package/dist/store/exodus/on-open.js +115 -6
  135. package/dist/store/exodus/on-open.js.map +1 -1
  136. package/dist/store/exodus/reconcile.d.ts +103 -0
  137. package/dist/store/exodus/reconcile.d.ts.map +1 -0
  138. package/dist/store/exodus/reconcile.js +728 -0
  139. package/dist/store/exodus/reconcile.js.map +1 -0
  140. package/dist/store/exodus/recovery.d.ts.map +1 -1
  141. package/dist/store/exodus/recovery.js +14 -2
  142. package/dist/store/exodus/recovery.js.map +1 -1
  143. package/dist/store/exodus/runtime-targets.d.ts +39 -0
  144. package/dist/store/exodus/runtime-targets.d.ts.map +1 -0
  145. package/dist/store/exodus/runtime-targets.js +63 -0
  146. package/dist/store/exodus/runtime-targets.js.map +1 -0
  147. package/dist/store/exodus/table-name-map.d.ts.map +1 -1
  148. package/dist/store/exodus/table-name-map.js +5 -0
  149. package/dist/store/exodus/table-name-map.js.map +1 -1
  150. package/dist/store/exodus/table-order.d.ts +35 -0
  151. package/dist/store/exodus/table-order.d.ts.map +1 -0
  152. package/dist/store/exodus/table-order.js +62 -0
  153. package/dist/store/exodus/table-order.js.map +1 -0
  154. package/dist/store/exodus/verify-migration.d.ts +4 -1
  155. package/dist/store/exodus/verify-migration.d.ts.map +1 -1
  156. package/dist/store/exodus/verify-migration.js +142 -10
  157. package/dist/store/exodus/verify-migration.js.map +1 -1
  158. package/dist/store/global-salt.d.ts +16 -0
  159. package/dist/store/global-salt.d.ts.map +1 -1
  160. package/dist/store/global-salt.js +22 -7
  161. package/dist/store/global-salt.js.map +1 -1
  162. package/dist/store/legacy-tasks-lineage.d.ts +86 -0
  163. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -0
  164. package/dist/store/legacy-tasks-lineage.js +285 -0
  165. package/dist/store/legacy-tasks-lineage.js.map +1 -0
  166. package/dist/store/migration-manager.d.ts +27 -0
  167. package/dist/store/migration-manager.d.ts.map +1 -1
  168. package/dist/store/migration-manager.js +63 -0
  169. package/dist/store/migration-manager.js.map +1 -1
  170. package/dist/store/portable-bundle-import.d.ts +117 -0
  171. package/dist/store/portable-bundle-import.d.ts.map +1 -0
  172. package/dist/store/portable-bundle-import.js +589 -0
  173. package/dist/store/portable-bundle-import.js.map +1 -0
  174. package/dist/store/portable-bundle-relocate.d.ts +66 -0
  175. package/dist/store/portable-bundle-relocate.d.ts.map +1 -0
  176. package/dist/store/portable-bundle-relocate.js +304 -0
  177. package/dist/store/portable-bundle-relocate.js.map +1 -0
  178. package/dist/store/portable-bundle-scan.d.ts +167 -0
  179. package/dist/store/portable-bundle-scan.d.ts.map +1 -0
  180. package/dist/store/portable-bundle-scan.js +569 -0
  181. package/dist/store/portable-bundle-scan.js.map +1 -0
  182. package/dist/store/portable-bundle.d.ts +146 -0
  183. package/dist/store/portable-bundle.d.ts.map +1 -0
  184. package/dist/store/portable-bundle.js +674 -0
  185. package/dist/store/portable-bundle.js.map +1 -0
  186. package/dist/store/regenerators.d.ts +3 -1
  187. package/dist/store/regenerators.d.ts.map +1 -1
  188. package/dist/store/regenerators.js +6 -2
  189. package/dist/store/regenerators.js.map +1 -1
  190. package/dist/store/schema/cleo-global/nexus.d.ts +98 -0
  191. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  192. package/dist/store/schema/cleo-global/nexus.js +19 -0
  193. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  194. package/dist/store/schema/nexus-schema.d.ts +102 -0
  195. package/dist/store/schema/nexus-schema.d.ts.map +1 -1
  196. package/dist/store/schema/nexus-schema.js +24 -0
  197. package/dist/store/schema/nexus-schema.js.map +1 -1
  198. package/dist/store/split-brain-import.d.ts +176 -0
  199. package/dist/store/split-brain-import.d.ts.map +1 -0
  200. package/dist/store/split-brain-import.js +680 -0
  201. package/dist/store/split-brain-import.js.map +1 -0
  202. package/dist/store/sqlite.d.ts +29 -0
  203. package/dist/store/sqlite.d.ts.map +1 -1
  204. package/dist/store/sqlite.js +57 -5
  205. package/dist/store/sqlite.js.map +1 -1
  206. package/dist/system/health.d.ts.map +1 -1
  207. package/dist/system/health.js +30 -5
  208. package/dist/system/health.js.map +1 -1
  209. package/dist/upgrade.d.ts.map +1 -1
  210. package/dist/upgrade.js +60 -0
  211. package/dist/upgrade.js.map +1 -1
  212. package/dist/validation/doctor/checks.d.ts +14 -0
  213. package/dist/validation/doctor/checks.d.ts.map +1 -1
  214. package/dist/validation/doctor/checks.js +33 -0
  215. package/dist/validation/doctor/checks.js.map +1 -1
  216. package/migrations/drizzle-cleo-global/20260924000000_t12354-project-paths/migration.sql +40 -0
  217. package/migrations/drizzle-nexus/20260924000000_t12315-nexus-parse-cache/migration.sql +21 -0
  218. package/package.json +13 -13
  219. package/templates/CLEO-INJECTION.md +3 -3
  220. package/templates/cleo-gitignore +7 -0
@@ -62,8 +62,9 @@
62
62
  * @see packages/core/src/store/exodus/verify-migration.ts — verifyMigration parity gate (T11551)
63
63
  * @see packages/core/src/store/dual-scope-db.ts — the open chokepoint that calls this
64
64
  */
65
- import { existsSync } from 'node:fs';
66
- import { resolve } from 'node:path';
65
+ import { existsSync, mkdtempSync, rmSync } from 'node:fs';
66
+ import { tmpdir } from 'node:os';
67
+ import { join, resolve } from 'node:path';
67
68
  import { getLogger } from '../../logger.js';
68
69
  import { withLock } from '../lock.js';
69
70
  import { archiveMigratedSources, hasExodusCompleteMarker } from './archive.js';
@@ -77,6 +78,43 @@ const log = getLogger('exodus-on-open');
77
78
  * migration is already in flight.
78
79
  */
79
80
  let _exodusInProgress = false;
81
+ /**
82
+ * Stores an explicit `cleo doctor superseded-store --reconcile` is working on
83
+ * in this process, by resolved path (T12355). exodus-on-open must never fire
84
+ * for such a store mid-reconcile: it would migrate and ARCHIVE the very legacy
85
+ * files the reconcile already planned to read ("unable to open database
86
+ * …/.cleo/tasks.db", found by the v2026.9.17 Stage A gate with
87
+ * CLEO_DISABLE_EXODUS_ON_OPEN unset). Scoped to the store and the reconcile's
88
+ * lifetime — never the env var, never other stores.
89
+ */
90
+ const _reconcileInProgress = new Map();
91
+ /**
92
+ * Run `fn` with exodus-on-open suppressed for the store at `dbPath`.
93
+ *
94
+ * Whichever runs first, the two converge: if on-open already migrated (and
95
+ * archived) the legacy files, the reconcile finds no legacy source and reports
96
+ * nothing to do; if the reconcile ran first, the store is populated and on-open
97
+ * skips it. Both place every row in the table the runtime reads.
98
+ *
99
+ * @param dbPath - The project `cleo.db` being reconciled.
100
+ * @param fn - The reconcile.
101
+ * @returns `fn`'s result.
102
+ * @task T12355
103
+ */
104
+ export async function withExodusOnOpenSuppressed(dbPath, fn) {
105
+ const key = resolve(dbPath);
106
+ _reconcileInProgress.set(key, (_reconcileInProgress.get(key) ?? 0) + 1);
107
+ try {
108
+ return await fn();
109
+ }
110
+ finally {
111
+ const left = (_reconcileInProgress.get(key) ?? 1) - 1;
112
+ if (left <= 0)
113
+ _reconcileInProgress.delete(key);
114
+ else
115
+ _reconcileInProgress.set(key, left);
116
+ }
117
+ }
80
118
  /**
81
119
  * Opt-out env flag. Set `CLEO_DISABLE_EXODUS_ON_OPEN=1` to skip the lazy
82
120
  * auto-migration entirely (e.g. for tooling that intentionally inspects an
@@ -115,6 +153,32 @@ function safeRowCount(nativeDb, table) {
115
153
  function consolidatedIsEmpty(nativeDb, scope) {
116
154
  return safeRowCount(nativeDb, baseTableForScope(scope)) === 0;
117
155
  }
156
+ /** Stranding warnings already emitted this process, keyed by target path. */
157
+ const _strandedWarned = new Set();
158
+ /** Log a stranded-data warning once per target per process (every open would repeat it). */
159
+ function warnStrandedOnce(dbPath, reason) {
160
+ if (_strandedWarned.has(dbPath))
161
+ return;
162
+ _strandedWarned.add(dbPath);
163
+ log.warn({ dbPath }, `exodus-on-open: STRANDED LEGACY DATA — ${reason}`);
164
+ }
165
+ /** The supported remedy for a stranded scope. */
166
+ function remedyFor(scope) {
167
+ return scope === 'project'
168
+ ? 'Run `cleo doctor superseded-store --reconcile --dry-run`, then `--reconcile`, to copy it in.'
169
+ : 'Run `cleo doctor exodus-health` and `cleo exodus migrate` to consolidate it.';
170
+ }
171
+ /**
172
+ * Names of this scope's legacy sources that still hold copyable rows. Only
173
+ * called once the consolidated store is known to be empty.
174
+ */
175
+ async function strandedLegacySources(scope, cwd) {
176
+ const { buildExodusPlan, legacySourcesHoldRows } = await import('./index.js');
177
+ return buildExodusPlan(cwd)
178
+ .sources.filter((s) => s.targetScope === scope && existsSync(s.path))
179
+ .filter((s) => legacySourcesHoldRows([s]))
180
+ .map((s) => s.name);
181
+ }
118
182
  /** Recover only the inserted resources recorded by this staging operation. */
119
183
  async function rollbackBothScopes(plan) {
120
184
  const { getDualScopeNativeDb, openDualScopeDbAtPath } = await import('../dual-scope-db.js');
@@ -293,20 +357,50 @@ async function runExodusOnOpen(scope, dbPath, nativeDb, cwd) {
293
357
  if (_exodusInProgress) {
294
358
  return { outcome: 'skipped', reason: 're-entrant open during active migration' };
295
359
  }
296
- if (isDisabledByEnv()) {
297
- return { outcome: 'skipped', reason: 'CLEO_DISABLE_EXODUS_ON_OPEN set' };
360
+ if (_reconcileInProgress.has(resolve(dbPath))) {
361
+ return {
362
+ outcome: 'skipped',
363
+ reason: 'an explicit superseded-store reconcile of this store is in progress',
364
+ };
298
365
  }
299
366
  // Fast path (unlocked): if the consolidated DB already has data, nothing to do.
300
367
  // This makes the second-open case a cheap COUNT(*) with no lock acquisition.
301
368
  if (!consolidatedIsEmpty(nativeDb, scope)) {
302
369
  return { outcome: 'skipped', reason: 'consolidated cleo.db already populated' };
303
370
  }
371
+ // Kill-switch (T12319): honoured, but never SILENTLY. Exported machine-wide
372
+ // as an incident stopgap on 2026-06-04, it left ~21 projects running on an
373
+ // empty cleo.db while their legacy stores held every task — and nothing said
374
+ // so. Skip as asked, but when the skip strands real rows, say so loudly.
375
+ if (isDisabledByEnv()) {
376
+ const stranded = await strandedLegacySources(scope, cwd);
377
+ if (stranded.length === 0) {
378
+ return { outcome: 'skipped', reason: 'CLEO_DISABLE_EXODUS_ON_OPEN set' };
379
+ }
380
+ const reason = `CLEO_DISABLE_EXODUS_ON_OPEN set while the consolidated ${scope} cleo.db is EMPTY and ` +
381
+ `legacy ${stranded.join(', ')} still hold rows — CLEO is running WITHOUT that data. ` +
382
+ remedyFor(scope);
383
+ warnStrandedOnce(dbPath, reason);
384
+ return { outcome: 'skipped', reason };
385
+ }
304
386
  // Completion-marker gate (T11777): once this scope's cutover is recorded, the
305
387
  // migration has already happened and the legacy sources have been archived.
306
388
  // Gate on the committed MARKER rather than (only) the source-file existsSync,
307
389
  // so a re-appearing or stranded legacy DB can NEVER re-arm exodus-on-open even
308
390
  // if the consolidated base table momentarily reads empty (DHQ-052 · T11662).
391
+ //
392
+ // T12319: the marker must never HIDE data, though. An empty consolidated
393
+ // store beside legacy files that still hold rows contradicts the marker's own
394
+ // claim, so this is an abort (writes refuse via `assertWriteDurable`), not a
395
+ // skip — re-arming stays forbidden, and the operator gets the explicit remedy.
309
396
  if (hasExodusCompleteMarker(scope, cwd, dbPath, nativeDb)) {
397
+ const stranded = await strandedLegacySources(scope, cwd);
398
+ if (stranded.length > 0) {
399
+ const reason = `exodus completion marker claims the ${scope} scope migrated, but its cleo.db is EMPTY ` +
400
+ `while legacy ${stranded.join(', ')} still hold rows. ${remedyFor(scope)}`;
401
+ warnStrandedOnce(dbPath, reason);
402
+ return { outcome: 'aborted', reason };
403
+ }
310
404
  return {
311
405
  outcome: 'skipped',
312
406
  reason: 'exodus completion marker present — scope already migrated (cutover sealed)',
@@ -352,9 +446,23 @@ async function runExodusOnOpen(scope, dbPath, nativeDb, cwd) {
352
446
  sources: plan.sources.filter((s) => existsSync(s.path)).map((s) => s.name),
353
447
  }, 'exodus-on-open: consolidated cleo.db is empty and legacy data present — auto-migrating');
354
448
  _exodusInProgress = true;
449
+ const bareScratch = mkdtempSync(join(tmpdir(), 'cleo-exodus-bare-'));
355
450
  try {
356
451
  // 1. Run the migration engine (copies BOTH scopes; idempotent + journaled).
357
- const migrateResult = await runExodusMigrate(plan, false, (msg) => log.debug({ scope }, `exodus-on-open: ${msg}`));
452
+ // T12355: land every row where the RUNTIME reads it — the same targets
453
+ // `cleo doctor superseded-store --reconcile` uses — creating the
454
+ // runtime-bound tables first, since several exist only once the
455
+ // tasks-domain lineage has run.
456
+ const { buildRuntimeTargetResolver } = await import('./runtime-targets.js');
457
+ const resolveTarget = await buildRuntimeTargetResolver();
458
+ // The same unmigrated-bare-family source the reconcile reads, so the two
459
+ // converge whichever runs first. Never archived: it is not a legacy file.
460
+ const { unmigratedBareSources } = await import('./reconcile.js');
461
+ const bare = scope === 'project'
462
+ ? await unmigratedBareSources(dbPath, resolveTarget, plan.sources.find((s) => s.name === 'tasks' && existsSync(s.path))?.path, bareScratch)
463
+ : { first: [], last: [] };
464
+ const migratePlan = { ...plan, sources: [...bare.first, ...plan.sources, ...bare.last] };
465
+ const migrateResult = await runExodusMigrate(migratePlan, false, (msg) => log.debug({ scope }, `exodus-on-open: ${msg}`), { resolveTarget, ensureRuntimeTables: true });
358
466
  if (!migrateResult.ok) {
359
467
  // Revert only migration-owned rows; retain conflicts and their evidence.
360
468
  const recovery = await rollbackBothScopes(plan);
@@ -374,7 +482,7 @@ async function runExodusOnOpen(scope, dbPath, nativeDb, cwd) {
374
482
  }
375
483
  // 2. PARITY GATE (AC2): verifyMigration (T11551) — row-count + content
376
484
  // digest + FK integrity + enum-drift equivalence legacy↔consolidated.
377
- const verifyResult = verifyMigration(plan.sources, plan.projectDbPath, plan.globalDbPath, (msg) => log.debug({ scope }, `exodus-on-open verify: ${msg}`));
485
+ const verifyResult = verifyMigration(migratePlan.sources, plan.projectDbPath, plan.globalDbPath, (msg) => log.debug({ scope }, `exodus-on-open verify: ${msg}`), resolveTarget);
378
486
  // Surface diagnostics (hash mismatch / source enum-drift) but do NOT
379
487
  // abort on them — see isDataContinuityOk(). A correct normalising
380
488
  // migration legitimately produces both; only a row-count deficit or an
@@ -459,6 +567,7 @@ async function runExodusOnOpen(scope, dbPath, nativeDb, cwd) {
459
567
  }
460
568
  finally {
461
569
  _exodusInProgress = false;
570
+ rmSync(bareScratch, { recursive: true, force: true });
462
571
  }
463
572
  },
464
573
  // Tolerate a slow migration: a large fleet copy can take a while, so allow a
@@ -1 +1 @@
1
- {"version":3,"file":"on-open.js","sourceRoot":"","sources":["../../../src/store/exodus/on-open.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"on-open.js","sourceRoot":"","sources":["../../../src/store/exodus/on-open.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Explicit, verified reconcile of stranded legacy project stores into `cleo.db`.
3
+ *
4
+ * ## Why this exists (T12319)
5
+ *
6
+ * Measured 2026-09-24: ~21 projects ran on an EMPTY consolidated `cleo.db`
7
+ * while their legacy `.cleo/tasks.db` / `.cleo/brain.db` still held everything
8
+ * (llmtxt: 849 tasks + 1,696 observations; claude-todo: 5,330 + 5,148). Two
9
+ * things kept exodus-on-open from ever copying them: a machine-wide
10
+ * `CLEO_DISABLE_EXODUS_ON_OPEN=1` incident kill-switch (skip, silently), and —
11
+ * with the switch off — a copy engine that aborted on real legacy data (FK
12
+ * order, pre-T1408 archive reasons, pre-T877 stages, grandfathered hierarchy
13
+ * rows, NULL `valid_at`). `cleo doctor superseded-store` saw the rows but
14
+ * could only say "reconcile the contents first", with no command to do it.
15
+ *
16
+ * This module is that command's engine. It does NOT write a second copier: the
17
+ * copy is {@link runExodusMigrate} (same transforms, receipts and recovery),
18
+ * restricted to the project target. What it adds is the envelope:
19
+ *
20
+ * - **Assessment by key, not count.** For every legacy table the number of
21
+ * source rows whose primary key is ABSENT from the live table. A count can
22
+ * look complete while unrelated rows written into the empty shell mask real
23
+ * gaps; a key cannot.
24
+ * - **Additive only.** `INSERT OR IGNORE` never overwrites or duplicates a row
25
+ * already in `cleo.db`; the legacy files are read-only inputs and are never
26
+ * moved, archived or deleted.
27
+ * - **Verified or reverted.** After the copy the assessment is re-run; any
28
+ * missing key (or a live table that shrank) reverts exactly the rows this run
29
+ * inserted, via their receipts, and the outcome is `refused`.
30
+ * - **Idempotent.** A fully reconciled project is a no-op: nothing is written.
31
+ *
32
+ * @module
33
+ * @task T12319
34
+ * @see ./migrate.ts — the single copy engine
35
+ * @see ../../doctor/superseded-store.ts — the survey that points here
36
+ */
37
+ import type { SupersededStoreReconcileResult, SupersededStoreTableCount } from '@cleocode/contracts';
38
+ import { type TargetResolver } from './runtime-targets.js';
39
+ import type { LegacyDbDescriptor } from './types.js';
40
+ /**
41
+ * Account for every data-bearing legacy project table against the live store.
42
+ *
43
+ * Read-only on both sides: the live store is opened `readOnly` and each legacy
44
+ * file is ATTACHed to that connection, which SQLite opens read-only too.
45
+ *
46
+ * @param liveStorePath - Absolute path of the live project `cleo.db`.
47
+ * @param sources - Existing project-scope legacy sources.
48
+ * @param resolveTarget - Where each legacy table lands; a reconcile passes the
49
+ * runtime-read targets ({@link buildRuntimeTargetResolver}).
50
+ * @returns One entry per legacy table holding rows, in copy order.
51
+ * @task T12319
52
+ */
53
+ export declare function assessSupersededProjectStores(liveStorePath: string, sources: readonly LegacyDbDescriptor[], resolveTarget?: TargetResolver): SupersededStoreTableCount[];
54
+ /**
55
+ * Whether any of `sources` holds at least one row in a table exodus would copy.
56
+ *
57
+ * Cheap by construction — stops at the first non-empty table — because it runs
58
+ * on the open path whenever a consolidated store is empty and its migration is
59
+ * being skipped, to decide whether that skip is stranding real data.
60
+ *
61
+ * @param sources - Legacy source descriptors of ONE scope.
62
+ * @returns `true` when a legacy file still holds copyable rows.
63
+ * @task T12319
64
+ */
65
+ export declare function legacySourcesHoldRows(sources: readonly LegacyDbDescriptor[]): boolean;
66
+ /**
67
+ * The unmigrated `cleo.db`'s own dead bare task-core family as exodus sources,
68
+ * for exodus-on-open (T12355): the same source the reconcile reads, so the two
69
+ * converge whichever runs first — without it, on-open left e.g. llmtxt's 1,972
70
+ * bare-only `task_labels` behind while a reconcile recovered them.
71
+ *
72
+ * @param liveStorePath - The project `cleo.db` being migrated.
73
+ * @param resolveTarget - The runtime target resolver.
74
+ * @param legacyTasksPath - The legacy `tasks.db`, if present (its fresher-row comparison).
75
+ * @param outDir - Scratch directory the materialised sources are written to.
76
+ * @returns Sources to copy BEFORE the legacy files (bare rows newer than their
77
+ * legacy copy) and AFTER them (the rest of the bare family); both empty when
78
+ * the bare family is not a source.
79
+ * @task T12355
80
+ */
81
+ export declare function unmigratedBareSources(liveStorePath: string, resolveTarget: TargetResolver, legacyTasksPath: string | undefined, outDir: string): Promise<{
82
+ first: LegacyDbDescriptor[];
83
+ last: LegacyDbDescriptor[];
84
+ }>;
85
+ /**
86
+ * Reconcile a project's stranded legacy stores into its live `cleo.db`.
87
+ *
88
+ * @param projectRoot - Absolute project root.
89
+ * @param options - `dryRun` assesses and reports without writing anything.
90
+ * @returns The receipt; `outcome: 'refused'` means the copy did not verify and
91
+ * every row it inserted was reverted.
92
+ * @example
93
+ * ```ts
94
+ * const plan = await reconcileSupersededStores('/mnt/projects/llmtxt', { dryRun: true });
95
+ * for (const t of plan.before) console.log(t.targetTable, t.missingInLive);
96
+ * ```
97
+ * @task T12319
98
+ */
99
+ export declare function reconcileSupersededStores(projectRoot: string, options?: {
100
+ readonly dryRun?: boolean;
101
+ readonly additive?: boolean;
102
+ }): Promise<SupersededStoreReconcileResult>;
103
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../src/store/exodus/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,KAAK,EAEV,8BAA8B,EAC9B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAA8B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8ErD;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,aAAa,GAAE,cAA6C,GAC3D,yBAAyB,EAAE,CAwC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CAerF;AAuXD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,cAAc,EAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAAC,IAAI,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC,CAWtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACvE,OAAO,CAAC,8BAA8B,CAAC,CASzC"}