@cleocode/core 2026.9.7 → 2026.9.9

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 (565) hide show
  1. package/dist/audit/reconstruct.d.ts +13 -43
  2. package/dist/audit/reconstruct.d.ts.map +1 -1
  3. package/dist/audit/reconstruct.js +295 -290
  4. package/dist/audit/reconstruct.js.map +1 -1
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +8 -2
  7. package/dist/bootstrap.js.map +1 -1
  8. package/dist/dispatch/mutate-projection.d.ts.map +1 -1
  9. package/dist/dispatch/mutate-projection.js +12 -0
  10. package/dist/dispatch/mutate-projection.js.map +1 -1
  11. package/dist/dispatch/mvi-projection.d.ts +29 -6
  12. package/dist/dispatch/mvi-projection.d.ts.map +1 -1
  13. package/dist/dispatch/mvi-projection.js +109 -139
  14. package/dist/dispatch/mvi-projection.js.map +1 -1
  15. package/dist/docs/docs-read-model.d.ts +3 -2
  16. package/dist/docs/docs-read-model.d.ts.map +1 -1
  17. package/dist/docs/docs-read-model.js +4 -3
  18. package/dist/docs/docs-read-model.js.map +1 -1
  19. package/dist/docs/export-document.js +5100 -2297
  20. package/dist/docs/export-document.js.map +3 -3
  21. package/dist/docs/projection.d.ts +67 -0
  22. package/dist/docs/projection.d.ts.map +1 -0
  23. package/dist/docs/projection.js +370 -0
  24. package/dist/docs/projection.js.map +1 -0
  25. package/dist/doctor/acceptance-drift.d.ts +6 -2
  26. package/dist/doctor/acceptance-drift.d.ts.map +1 -1
  27. package/dist/doctor/acceptance-drift.js +43 -5
  28. package/dist/doctor/acceptance-drift.js.map +1 -1
  29. package/dist/doctor/knowledge-summary.d.ts +41 -0
  30. package/dist/doctor/knowledge-summary.d.ts.map +1 -0
  31. package/dist/doctor/knowledge-summary.js +81 -0
  32. package/dist/doctor/knowledge-summary.js.map +1 -0
  33. package/dist/doctor/knowledge.d.ts +192 -0
  34. package/dist/doctor/knowledge.d.ts.map +1 -0
  35. package/dist/doctor/knowledge.js +1864 -0
  36. package/dist/doctor/knowledge.js.map +1 -0
  37. package/dist/git/work-tree.d.ts +64 -0
  38. package/dist/git/work-tree.d.ts.map +1 -0
  39. package/dist/git/work-tree.js +111 -0
  40. package/dist/git/work-tree.js.map +1 -0
  41. package/dist/hooks/handlers/task-hooks.d.ts +8 -5
  42. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  43. package/dist/hooks/handlers/task-hooks.js +15 -60
  44. package/dist/hooks/handlers/task-hooks.js.map +1 -1
  45. package/dist/identity/cleo-identity.d.ts +13 -0
  46. package/dist/identity/cleo-identity.d.ts.map +1 -1
  47. package/dist/identity/cleo-identity.js +20 -6
  48. package/dist/identity/cleo-identity.js.map +1 -1
  49. package/dist/injection.d.ts.map +1 -1
  50. package/dist/injection.js +29 -13
  51. package/dist/injection.js.map +1 -1
  52. package/dist/internal.d.ts +2 -0
  53. package/dist/internal.d.ts.map +1 -1
  54. package/dist/internal.js +2 -0
  55. package/dist/internal.js.map +1 -1
  56. package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
  57. package/dist/lifecycle/verification/satisfies-validator.js +124 -120
  58. package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
  59. package/dist/llm/plugin-facade.js +4018 -1726
  60. package/dist/llm/plugin-facade.js.map +3 -3
  61. package/dist/memory/brain-backfill.d.ts +27 -12
  62. package/dist/memory/brain-backfill.d.ts.map +1 -1
  63. package/dist/memory/brain-backfill.js +325 -134
  64. package/dist/memory/brain-backfill.js.map +1 -1
  65. package/dist/memory/brain-doctor.d.ts +21 -0
  66. package/dist/memory/brain-doctor.d.ts.map +1 -1
  67. package/dist/memory/brain-doctor.js +111 -53
  68. package/dist/memory/brain-doctor.js.map +1 -1
  69. package/dist/memory/brain-links.d.ts.map +1 -1
  70. package/dist/memory/brain-links.js +31 -4
  71. package/dist/memory/brain-links.js.map +1 -1
  72. package/dist/memory/brain-reasoning.d.ts.map +1 -1
  73. package/dist/memory/brain-reasoning.js +28 -2
  74. package/dist/memory/brain-reasoning.js.map +1 -1
  75. package/dist/memory/brain-reconciler.d.ts +14 -19
  76. package/dist/memory/brain-reconciler.d.ts.map +1 -1
  77. package/dist/memory/brain-reconciler.js +70 -97
  78. package/dist/memory/brain-reconciler.js.map +1 -1
  79. package/dist/memory/brain-search.d.ts +2 -0
  80. package/dist/memory/brain-search.d.ts.map +1 -1
  81. package/dist/memory/brain-search.js +59 -29
  82. package/dist/memory/brain-search.js.map +1 -1
  83. package/dist/memory/brain-similarity.d.ts.map +1 -1
  84. package/dist/memory/brain-similarity.js +5 -4
  85. package/dist/memory/brain-similarity.js.map +1 -1
  86. package/dist/memory/brain-stub-prune.d.ts +31 -9
  87. package/dist/memory/brain-stub-prune.d.ts.map +1 -1
  88. package/dist/memory/brain-stub-prune.js +65 -18
  89. package/dist/memory/brain-stub-prune.js.map +1 -1
  90. package/dist/memory/brain-writer-handlers.d.ts +10 -1
  91. package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
  92. package/dist/memory/brain-writer-handlers.js +23 -3
  93. package/dist/memory/brain-writer-handlers.js.map +1 -1
  94. package/dist/memory/brain-writer-thread.d.ts +31 -1
  95. package/dist/memory/brain-writer-thread.d.ts.map +1 -1
  96. package/dist/memory/brain-writer-thread.js +166 -24
  97. package/dist/memory/brain-writer-thread.js.map +1 -1
  98. package/dist/memory/brain-writer-worker.js +8 -1
  99. package/dist/memory/brain-writer-worker.js.map +1 -1
  100. package/dist/memory/decision-cross-link.d.ts +39 -0
  101. package/dist/memory/decision-cross-link.d.ts.map +1 -1
  102. package/dist/memory/decision-cross-link.js +316 -0
  103. package/dist/memory/decision-cross-link.js.map +1 -1
  104. package/dist/memory/decisions.d.ts +4 -1
  105. package/dist/memory/decisions.d.ts.map +1 -1
  106. package/dist/memory/decisions.js +7 -24
  107. package/dist/memory/decisions.js.map +1 -1
  108. package/dist/memory/dispatch-trace.d.ts +12 -5
  109. package/dist/memory/dispatch-trace.d.ts.map +1 -1
  110. package/dist/memory/dispatch-trace.js +17 -7
  111. package/dist/memory/dispatch-trace.js.map +1 -1
  112. package/dist/memory/eligibility.d.ts +51 -0
  113. package/dist/memory/eligibility.d.ts.map +1 -0
  114. package/dist/memory/eligibility.js +77 -0
  115. package/dist/memory/eligibility.js.map +1 -0
  116. package/dist/memory/engine-compat.d.ts +2 -0
  117. package/dist/memory/engine-compat.d.ts.map +1 -1
  118. package/dist/memory/engine-compat.js +10 -0
  119. package/dist/memory/engine-compat.js.map +1 -1
  120. package/dist/memory/extraction-gate.d.ts +21 -7
  121. package/dist/memory/extraction-gate.d.ts.map +1 -1
  122. package/dist/memory/extraction-gate.js +178 -216
  123. package/dist/memory/extraction-gate.js.map +1 -1
  124. package/dist/memory/graph-auto-populate.d.ts +38 -5
  125. package/dist/memory/graph-auto-populate.d.ts.map +1 -1
  126. package/dist/memory/graph-auto-populate.js +182 -60
  127. package/dist/memory/graph-auto-populate.js.map +1 -1
  128. package/dist/memory/graph-memory-bridge.d.ts +14 -1
  129. package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
  130. package/dist/memory/graph-memory-bridge.js +66 -28
  131. package/dist/memory/graph-memory-bridge.js.map +1 -1
  132. package/dist/memory/index.d.ts +1 -19
  133. package/dist/memory/index.d.ts.map +1 -1
  134. package/dist/memory/index.js +1 -50
  135. package/dist/memory/index.js.map +1 -1
  136. package/dist/memory/learnings.d.ts.map +1 -1
  137. package/dist/memory/learnings.js +2 -23
  138. package/dist/memory/learnings.js.map +1 -1
  139. package/dist/memory/manifest-filter.d.ts +21 -0
  140. package/dist/memory/manifest-filter.d.ts.map +1 -0
  141. package/dist/memory/manifest-filter.js +51 -0
  142. package/dist/memory/manifest-filter.js.map +1 -0
  143. package/dist/memory/manifest-ingestion.d.ts +28 -30
  144. package/dist/memory/manifest-ingestion.d.ts.map +1 -1
  145. package/dist/memory/manifest-ingestion.js +104 -235
  146. package/dist/memory/manifest-ingestion.js.map +1 -1
  147. package/dist/memory/observer-reflector.d.ts +2 -0
  148. package/dist/memory/observer-reflector.d.ts.map +1 -1
  149. package/dist/memory/observer-reflector.js +6 -49
  150. package/dist/memory/observer-reflector.js.map +1 -1
  151. package/dist/memory/patterns.d.ts +10 -0
  152. package/dist/memory/patterns.d.ts.map +1 -1
  153. package/dist/memory/patterns.js +25 -33
  154. package/dist/memory/patterns.js.map +1 -1
  155. package/dist/memory/pipeline-manifest-sqlite.d.ts +72 -9
  156. package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
  157. package/dist/memory/pipeline-manifest-sqlite.js +508 -412
  158. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
  159. package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
  160. package/dist/memory/retrieval/build-retrieval-bundle.js +16 -15
  161. package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
  162. package/dist/memory/retrieval/fetch.d.ts +7 -0
  163. package/dist/memory/retrieval/fetch.d.ts.map +1 -1
  164. package/dist/memory/retrieval/fetch.js +14 -11
  165. package/dist/memory/retrieval/fetch.js.map +1 -1
  166. package/dist/memory/retrieval/observe.d.ts +7 -1
  167. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  168. package/dist/memory/retrieval/observe.js +58 -4
  169. package/dist/memory/retrieval/observe.js.map +1 -1
  170. package/dist/memory/retrieval/search.d.ts +14 -1
  171. package/dist/memory/retrieval/search.d.ts.map +1 -1
  172. package/dist/memory/retrieval/search.js +133 -69
  173. package/dist/memory/retrieval/search.js.map +1 -1
  174. package/dist/memory/retrieval/telemetry.d.ts +31 -0
  175. package/dist/memory/retrieval/telemetry.d.ts.map +1 -0
  176. package/dist/memory/retrieval/telemetry.js +53 -0
  177. package/dist/memory/retrieval/telemetry.js.map +1 -0
  178. package/dist/nexus/analyze-orchestrator.d.ts +41 -9
  179. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  180. package/dist/nexus/analyze-orchestrator.js +257 -58
  181. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  182. package/dist/nexus/api-contracts.d.ts +2 -6
  183. package/dist/nexus/api-contracts.d.ts.map +1 -1
  184. package/dist/nexus/api-contracts.js +11 -2
  185. package/dist/nexus/api-contracts.js.map +1 -1
  186. package/dist/nexus/context.d.ts.map +1 -1
  187. package/dist/nexus/context.js +14 -37
  188. package/dist/nexus/context.js.map +1 -1
  189. package/dist/nexus/diff.d.ts.map +1 -1
  190. package/dist/nexus/diff.js +2 -1
  191. package/dist/nexus/diff.js.map +1 -1
  192. package/dist/nexus/identity.d.ts +29 -3
  193. package/dist/nexus/identity.d.ts.map +1 -1
  194. package/dist/nexus/identity.js +63 -12
  195. package/dist/nexus/identity.js.map +1 -1
  196. package/dist/nexus/impact.d.ts +21 -19
  197. package/dist/nexus/impact.d.ts.map +1 -1
  198. package/dist/nexus/impact.js +96 -192
  199. package/dist/nexus/impact.js.map +1 -1
  200. package/dist/nexus/knowledge.d.ts +80 -0
  201. package/dist/nexus/knowledge.d.ts.map +1 -0
  202. package/dist/nexus/knowledge.js +786 -0
  203. package/dist/nexus/knowledge.js.map +1 -0
  204. package/dist/nexus/living-brain.d.ts +8 -5
  205. package/dist/nexus/living-brain.d.ts.map +1 -1
  206. package/dist/nexus/living-brain.js +252 -188
  207. package/dist/nexus/living-brain.js.map +1 -1
  208. package/dist/nexus/registry.d.ts +11 -2
  209. package/dist/nexus/registry.d.ts.map +1 -1
  210. package/dist/nexus/registry.js +144 -128
  211. package/dist/nexus/registry.js.map +1 -1
  212. package/dist/nexus/source-roots.d.ts +16 -0
  213. package/dist/nexus/source-roots.d.ts.map +1 -0
  214. package/dist/nexus/source-roots.js +174 -0
  215. package/dist/nexus/source-roots.js.map +1 -0
  216. package/dist/nexus/task-evidence.d.ts +22 -0
  217. package/dist/nexus/task-evidence.d.ts.map +1 -0
  218. package/dist/nexus/task-evidence.js +210 -0
  219. package/dist/nexus/task-evidence.js.map +1 -0
  220. package/dist/nexus/tasks-bridge.d.ts +14 -7
  221. package/dist/nexus/tasks-bridge.d.ts.map +1 -1
  222. package/dist/nexus/tasks-bridge.js +81 -40
  223. package/dist/nexus/tasks-bridge.js.map +1 -1
  224. package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
  225. package/dist/orchestrate/lifecycle-ops.js +170 -120
  226. package/dist/orchestrate/lifecycle-ops.js.map +1 -1
  227. package/dist/orchestrate/query-ops.d.ts +6 -7
  228. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  229. package/dist/orchestrate/query-ops.js +509 -532
  230. package/dist/orchestrate/query-ops.js.map +1 -1
  231. package/dist/orchestration/bootstrap.d.ts +15 -1
  232. package/dist/orchestration/bootstrap.d.ts.map +1 -1
  233. package/dist/orchestration/bootstrap.js +21 -10
  234. package/dist/orchestration/bootstrap.js.map +1 -1
  235. package/dist/orchestration/index.d.ts +35 -3
  236. package/dist/orchestration/index.d.ts.map +1 -1
  237. package/dist/orchestration/index.js +64 -35
  238. package/dist/orchestration/index.js.map +1 -1
  239. package/dist/orchestration/lead-rollup.d.ts +24 -1
  240. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  241. package/dist/orchestration/lead-rollup.js +31 -11
  242. package/dist/orchestration/lead-rollup.js.map +1 -1
  243. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  244. package/dist/orchestration/spawn-prompt.js +16 -41
  245. package/dist/orchestration/spawn-prompt.js.map +1 -1
  246. package/dist/orchestration/unblock.d.ts +15 -1
  247. package/dist/orchestration/unblock.d.ts.map +1 -1
  248. package/dist/orchestration/unblock.js +23 -12
  249. package/dist/orchestration/unblock.js.map +1 -1
  250. package/dist/orchestration/validate-spawn.d.ts.map +1 -1
  251. package/dist/orchestration/validate-spawn.js +3 -3
  252. package/dist/orchestration/validate-spawn.js.map +1 -1
  253. package/dist/orchestration/waves.d.ts +29 -13
  254. package/dist/orchestration/waves.d.ts.map +1 -1
  255. package/dist/orchestration/waves.js +43 -55
  256. package/dist/orchestration/waves.js.map +1 -1
  257. package/dist/paths.d.ts +17 -163
  258. package/dist/paths.d.ts.map +1 -1
  259. package/dist/paths.js +145 -496
  260. package/dist/paths.js.map +1 -1
  261. package/dist/project-info.d.ts +2 -11
  262. package/dist/project-info.d.ts.map +1 -1
  263. package/dist/project-info.js +3 -31
  264. package/dist/project-info.js.map +1 -1
  265. package/dist/project-scope.d.ts +239 -0
  266. package/dist/project-scope.d.ts.map +1 -0
  267. package/dist/project-scope.js +473 -0
  268. package/dist/project-scope.js.map +1 -0
  269. package/dist/release/pr-evidence.d.ts +16 -3
  270. package/dist/release/pr-evidence.d.ts.map +1 -1
  271. package/dist/release/pr-evidence.js +53 -7
  272. package/dist/release/pr-evidence.js.map +1 -1
  273. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  274. package/dist/render/nexus/graph/index.js +4 -2
  275. package/dist/render/nexus/graph/index.js.map +1 -1
  276. package/dist/render/orchestration/audit-reconstruct.d.ts +11 -0
  277. package/dist/render/orchestration/audit-reconstruct.d.ts.map +1 -1
  278. package/dist/render/orchestration/audit-reconstruct.js +21 -6
  279. package/dist/render/orchestration/audit-reconstruct.js.map +1 -1
  280. package/dist/render/tasks/show.js +2 -1
  281. package/dist/render/tasks/show.js.map +1 -1
  282. package/dist/resources/spawn-wrapper.d.ts +82 -14
  283. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  284. package/dist/resources/spawn-wrapper.js +585 -27
  285. package/dist/resources/spawn-wrapper.js.map +1 -1
  286. package/dist/selfimprove/fix-gen.js +4026 -1734
  287. package/dist/selfimprove/fix-gen.js.map +3 -3
  288. package/dist/sequence/index.d.ts.map +1 -1
  289. package/dist/sequence/index.js +76 -68
  290. package/dist/sequence/index.js.map +1 -1
  291. package/dist/session/canon-lint.d.ts +24 -3
  292. package/dist/session/canon-lint.d.ts.map +1 -1
  293. package/dist/session/canon-lint.js +72 -31
  294. package/dist/session/canon-lint.js.map +1 -1
  295. package/dist/session/engine-ops.d.ts +1 -4
  296. package/dist/session/engine-ops.d.ts.map +1 -1
  297. package/dist/session/engine-ops.js +6 -2
  298. package/dist/session/engine-ops.js.map +1 -1
  299. package/dist/sessions/briefing.d.ts +11 -1
  300. package/dist/sessions/briefing.d.ts.map +1 -1
  301. package/dist/sessions/briefing.js +76 -8
  302. package/dist/sessions/briefing.js.map +1 -1
  303. package/dist/sessions/handoff.d.ts +3 -1
  304. package/dist/sessions/handoff.d.ts.map +1 -1
  305. package/dist/sessions/handoff.js +2 -0
  306. package/dist/sessions/handoff.js.map +1 -1
  307. package/dist/shutdown-deadline.d.ts +24 -33
  308. package/dist/shutdown-deadline.d.ts.map +1 -1
  309. package/dist/shutdown-deadline.js +71 -14
  310. package/dist/shutdown-deadline.js.map +1 -1
  311. package/dist/shutdown.d.ts +21 -10
  312. package/dist/shutdown.d.ts.map +1 -1
  313. package/dist/shutdown.js +91 -35
  314. package/dist/shutdown.js.map +1 -1
  315. package/dist/skills/index.d.ts +1 -1
  316. package/dist/skills/index.d.ts.map +1 -1
  317. package/dist/skills/index.js +1 -1
  318. package/dist/skills/index.js.map +1 -1
  319. package/dist/skills/orchestrator/validator.d.ts +87 -20
  320. package/dist/skills/orchestrator/validator.d.ts.map +1 -1
  321. package/dist/skills/orchestrator/validator.js +330 -241
  322. package/dist/skills/orchestrator/validator.js.map +1 -1
  323. package/dist/store/agent-resolver.d.ts.map +1 -1
  324. package/dist/store/agent-resolver.js +16 -9
  325. package/dist/store/agent-resolver.js.map +1 -1
  326. package/dist/store/attachment-store.d.ts +4 -1
  327. package/dist/store/attachment-store.d.ts.map +1 -1
  328. package/dist/store/attachment-store.js +20 -3
  329. package/dist/store/attachment-store.js.map +1 -1
  330. package/dist/store/background-jobs.d.ts +426 -105
  331. package/dist/store/background-jobs.d.ts.map +1 -1
  332. package/dist/store/background-jobs.js +1208 -252
  333. package/dist/store/background-jobs.js.map +1 -1
  334. package/dist/store/background-ops.d.ts +145 -8
  335. package/dist/store/background-ops.d.ts.map +1 -1
  336. package/dist/store/background-ops.js +459 -15
  337. package/dist/store/background-ops.js.map +1 -1
  338. package/dist/store/backup-inspect.d.ts +48 -4
  339. package/dist/store/backup-inspect.d.ts.map +1 -1
  340. package/dist/store/backup-inspect.js +384 -4
  341. package/dist/store/backup-inspect.js.map +1 -1
  342. package/dist/store/converters.d.ts.map +1 -1
  343. package/dist/store/converters.js +19 -2
  344. package/dist/store/converters.js.map +1 -1
  345. package/dist/store/data-accessor.d.ts +9 -1
  346. package/dist/store/data-accessor.d.ts.map +1 -1
  347. package/dist/store/data-accessor.js +22 -5
  348. package/dist/store/data-accessor.js.map +1 -1
  349. package/dist/store/data-safety-central.d.ts.map +1 -1
  350. package/dist/store/data-safety-central.js +272 -232
  351. package/dist/store/data-safety-central.js.map +1 -1
  352. package/dist/store/db-helpers.d.ts +19 -3
  353. package/dist/store/db-helpers.d.ts.map +1 -1
  354. package/dist/store/db-helpers.js +42 -58
  355. package/dist/store/db-helpers.js.map +1 -1
  356. package/dist/store/dual-scope-db.d.ts +63 -4
  357. package/dist/store/dual-scope-db.d.ts.map +1 -1
  358. package/dist/store/dual-scope-db.js +166 -19
  359. package/dist/store/dual-scope-db.js.map +1 -1
  360. package/dist/store/exodus/archive.d.ts +21 -7
  361. package/dist/store/exodus/archive.d.ts.map +1 -1
  362. package/dist/store/exodus/archive.js +60 -18
  363. package/dist/store/exodus/archive.js.map +1 -1
  364. package/dist/store/exodus/migrate.d.ts.map +1 -1
  365. package/dist/store/exodus/migrate.js +27 -23
  366. package/dist/store/exodus/migrate.js.map +1 -1
  367. package/dist/store/exodus/on-open.d.ts +16 -27
  368. package/dist/store/exodus/on-open.d.ts.map +1 -1
  369. package/dist/store/exodus/on-open.js +121 -169
  370. package/dist/store/exodus/on-open.js.map +1 -1
  371. package/dist/store/exodus/recovery.d.ts +90 -0
  372. package/dist/store/exodus/recovery.d.ts.map +1 -0
  373. package/dist/store/exodus/recovery.js +434 -0
  374. package/dist/store/exodus/recovery.js.map +1 -0
  375. package/dist/store/exodus/types.d.ts +15 -0
  376. package/dist/store/exodus/types.d.ts.map +1 -1
  377. package/dist/store/memory-accessor.d.ts +52 -3
  378. package/dist/store/memory-accessor.d.ts.map +1 -1
  379. package/dist/store/memory-accessor.js +122 -7
  380. package/dist/store/memory-accessor.js.map +1 -1
  381. package/dist/store/nexus-sqlite.d.ts +24 -6
  382. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  383. package/dist/store/nexus-sqlite.js +39 -20
  384. package/dist/store/nexus-sqlite.js.map +1 -1
  385. package/dist/store/ports/domain-binding.d.ts.map +1 -1
  386. package/dist/store/ports/domain-binding.js +27 -5
  387. package/dist/store/ports/domain-binding.js.map +1 -1
  388. package/dist/store/schema/background-jobs.d.ts +181 -2
  389. package/dist/store/schema/background-jobs.d.ts.map +1 -1
  390. package/dist/store/schema/background-jobs.js +27 -3
  391. package/dist/store/schema/background-jobs.js.map +1 -1
  392. package/dist/store/schema/cleo-global/skills.d.ts +2 -2
  393. package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
  394. package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
  395. package/dist/store/schema/cleo-project/tasks-core.d.ts +1 -1
  396. package/dist/store/schema/lifecycle.d.ts +2 -2
  397. package/dist/store/schema/skills-schema.d.ts +2 -2
  398. package/dist/store/schema/tasks.d.ts +1 -1
  399. package/dist/store/session-store.d.ts +3 -1
  400. package/dist/store/session-store.d.ts.map +1 -1
  401. package/dist/store/session-store.js +252 -207
  402. package/dist/store/session-store.js.map +1 -1
  403. package/dist/store/sqlite-data-accessor.d.ts +39 -4
  404. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  405. package/dist/store/sqlite-data-accessor.js +689 -527
  406. package/dist/store/sqlite-data-accessor.js.map +1 -1
  407. package/dist/store/tasks-sqlite.d.ts +3 -1
  408. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  409. package/dist/store/tasks-sqlite.js +309 -279
  410. package/dist/store/tasks-sqlite.js.map +1 -1
  411. package/dist/store/validation-schemas.d.ts +8 -8
  412. package/dist/store/writer-lease.d.ts +80 -8
  413. package/dist/store/writer-lease.d.ts.map +1 -1
  414. package/dist/store/writer-lease.js +503 -134
  415. package/dist/store/writer-lease.js.map +1 -1
  416. package/dist/system/audit.d.ts +2 -1
  417. package/dist/system/audit.d.ts.map +1 -1
  418. package/dist/system/audit.js +118 -71
  419. package/dist/system/audit.js.map +1 -1
  420. package/dist/system/backup.d.ts.map +1 -1
  421. package/dist/system/backup.js +5 -5
  422. package/dist/system/backup.js.map +1 -1
  423. package/dist/system/inject-generate.js +1 -1
  424. package/dist/task-work/index.d.ts +3 -0
  425. package/dist/task-work/index.d.ts.map +1 -1
  426. package/dist/task-work/index.js +34 -37
  427. package/dist/task-work/index.js.map +1 -1
  428. package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
  429. package/dist/tasks/ac-coverage-gate.js +4 -0
  430. package/dist/tasks/ac-coverage-gate.js.map +1 -1
  431. package/dist/tasks/ac-immutability.d.ts +7 -4
  432. package/dist/tasks/ac-immutability.d.ts.map +1 -1
  433. package/dist/tasks/ac-immutability.js +19 -17
  434. package/dist/tasks/ac-immutability.js.map +1 -1
  435. package/dist/tasks/ac-table.d.ts +5 -5
  436. package/dist/tasks/ac-table.d.ts.map +1 -1
  437. package/dist/tasks/ac-table.js +26 -12
  438. package/dist/tasks/ac-table.js.map +1 -1
  439. package/dist/tasks/acceptance-input.d.ts +52 -0
  440. package/dist/tasks/acceptance-input.d.ts.map +1 -0
  441. package/dist/tasks/acceptance-input.js +259 -0
  442. package/dist/tasks/acceptance-input.js.map +1 -0
  443. package/dist/tasks/add.d.ts +67 -29
  444. package/dist/tasks/add.d.ts.map +1 -1
  445. package/dist/tasks/add.js +255 -97
  446. package/dist/tasks/add.js.map +1 -1
  447. package/dist/tasks/complete.d.ts +16 -1
  448. package/dist/tasks/complete.d.ts.map +1 -1
  449. package/dist/tasks/complete.js +152 -55
  450. package/dist/tasks/complete.js.map +1 -1
  451. package/dist/tasks/decompose.d.ts +103 -0
  452. package/dist/tasks/decompose.d.ts.map +1 -0
  453. package/dist/tasks/decompose.js +224 -0
  454. package/dist/tasks/decompose.js.map +1 -0
  455. package/dist/tasks/delete.d.ts +5 -8
  456. package/dist/tasks/delete.d.ts.map +1 -1
  457. package/dist/tasks/delete.js +4 -3
  458. package/dist/tasks/delete.js.map +1 -1
  459. package/dist/tasks/dependency-check.d.ts +59 -0
  460. package/dist/tasks/dependency-check.d.ts.map +1 -1
  461. package/dist/tasks/dependency-check.js +73 -0
  462. package/dist/tasks/dependency-check.js.map +1 -1
  463. package/dist/tasks/deps-ready.d.ts +13 -1
  464. package/dist/tasks/deps-ready.d.ts.map +1 -1
  465. package/dist/tasks/deps-ready.js +16 -5
  466. package/dist/tasks/deps-ready.js.map +1 -1
  467. package/dist/tasks/engine-converters.d.ts +7 -0
  468. package/dist/tasks/engine-converters.d.ts.map +1 -1
  469. package/dist/tasks/engine-converters.js +8 -1
  470. package/dist/tasks/engine-converters.js.map +1 -1
  471. package/dist/tasks/evidence.d.ts +54 -26
  472. package/dist/tasks/evidence.d.ts.map +1 -1
  473. package/dist/tasks/evidence.js +292 -40
  474. package/dist/tasks/evidence.js.map +1 -1
  475. package/dist/tasks/find.d.ts +16 -12
  476. package/dist/tasks/find.d.ts.map +1 -1
  477. package/dist/tasks/find.js +107 -93
  478. package/dist/tasks/find.js.map +1 -1
  479. package/dist/tasks/gate-runner.d.ts +88 -14
  480. package/dist/tasks/gate-runner.d.ts.map +1 -1
  481. package/dist/tasks/gate-runner.js +596 -253
  482. package/dist/tasks/gate-runner.js.map +1 -1
  483. package/dist/tasks/hierarchy-policy.d.ts +8 -0
  484. package/dist/tasks/hierarchy-policy.d.ts.map +1 -1
  485. package/dist/tasks/hierarchy-policy.js +9 -2
  486. package/dist/tasks/hierarchy-policy.js.map +1 -1
  487. package/dist/tasks/hierarchy.d.ts +67 -1
  488. package/dist/tasks/hierarchy.d.ts.map +1 -1
  489. package/dist/tasks/hierarchy.js +81 -1
  490. package/dist/tasks/hierarchy.js.map +1 -1
  491. package/dist/tasks/index.d.ts +3 -0
  492. package/dist/tasks/index.d.ts.map +1 -1
  493. package/dist/tasks/index.js +3 -0
  494. package/dist/tasks/index.js.map +1 -1
  495. package/dist/tasks/infer-add-params.d.ts +1 -20
  496. package/dist/tasks/infer-add-params.d.ts.map +1 -1
  497. package/dist/tasks/infer-add-params.js +2 -203
  498. package/dist/tasks/infer-add-params.js.map +1 -1
  499. package/dist/tasks/list.d.ts +7 -2
  500. package/dist/tasks/list.d.ts.map +1 -1
  501. package/dist/tasks/list.js +24 -36
  502. package/dist/tasks/list.js.map +1 -1
  503. package/dist/tasks/ops.d.ts +6 -61
  504. package/dist/tasks/ops.d.ts.map +1 -1
  505. package/dist/tasks/ops.js +5 -53
  506. package/dist/tasks/ops.js.map +1 -1
  507. package/dist/tasks/plan.d.ts +15 -1
  508. package/dist/tasks/plan.d.ts.map +1 -1
  509. package/dist/tasks/plan.js +23 -25
  510. package/dist/tasks/plan.js.map +1 -1
  511. package/dist/tasks/population.d.ts +46 -0
  512. package/dist/tasks/population.d.ts.map +1 -0
  513. package/dist/tasks/population.js +88 -0
  514. package/dist/tasks/population.js.map +1 -0
  515. package/dist/tasks/reconcile-scope.d.ts +157 -0
  516. package/dist/tasks/reconcile-scope.d.ts.map +1 -0
  517. package/dist/tasks/reconcile-scope.js +242 -0
  518. package/dist/tasks/reconcile-scope.js.map +1 -0
  519. package/dist/tasks/req.d.ts +51 -12
  520. package/dist/tasks/req.d.ts.map +1 -1
  521. package/dist/tasks/req.js +125 -69
  522. package/dist/tasks/req.js.map +1 -1
  523. package/dist/tasks/session-scope.d.ts +6 -31
  524. package/dist/tasks/session-scope.d.ts.map +1 -1
  525. package/dist/tasks/session-scope.js +3 -17
  526. package/dist/tasks/session-scope.js.map +1 -1
  527. package/dist/tasks/severity-attestation.d.ts +39 -10
  528. package/dist/tasks/severity-attestation.d.ts.map +1 -1
  529. package/dist/tasks/severity-attestation.js +75 -36
  530. package/dist/tasks/severity-attestation.js.map +1 -1
  531. package/dist/tasks/task-next.d.ts +5 -0
  532. package/dist/tasks/task-next.d.ts.map +1 -1
  533. package/dist/tasks/task-next.js +10 -9
  534. package/dist/tasks/task-next.js.map +1 -1
  535. package/dist/tasks/task-reparent.d.ts.map +1 -1
  536. package/dist/tasks/task-reparent.js +3 -13
  537. package/dist/tasks/task-reparent.js.map +1 -1
  538. package/dist/tasks/update.d.ts +20 -43
  539. package/dist/tasks/update.d.ts.map +1 -1
  540. package/dist/tasks/update.js +64 -49
  541. package/dist/tasks/update.js.map +1 -1
  542. package/dist/teardown-signal.d.ts +72 -0
  543. package/dist/teardown-signal.d.ts.map +1 -0
  544. package/dist/teardown-signal.js +108 -0
  545. package/dist/teardown-signal.js.map +1 -0
  546. package/dist/validation/engine-ops.d.ts +17 -1
  547. package/dist/validation/engine-ops.d.ts.map +1 -1
  548. package/dist/validation/engine-ops.js +149 -11
  549. package/dist/validation/engine-ops.js.map +1 -1
  550. package/dist/workgraph/reparent-preflight.d.ts +1 -1
  551. package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
  552. package/dist/workgraph/reparent-preflight.js +6 -1
  553. package/dist/workgraph/reparent-preflight.js.map +1 -1
  554. package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
  555. package/dist/workgraph/scaffold-apply.js +81 -76
  556. package/dist/workgraph/scaffold-apply.js.map +1 -1
  557. package/dist/workgraph/structure-validation.d.ts +1 -1
  558. package/dist/workgraph/structure-validation.d.ts.map +1 -1
  559. package/dist/workgraph/structure-validation.js +6 -1
  560. package/dist/workgraph/structure-validation.js.map +1 -1
  561. package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
  562. package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
  563. package/package.json +18 -13
  564. package/schemas/config.schema.json +2 -2
  565. package/templates/CLEO-INJECTION.md +103 -101
@@ -37,22 +37,13 @@
37
37
  * drift are the expected normalisation diagnostics, and pre-existing SOURCE FK
38
38
  * orphans are tolerated as zero-loss — see {@link isDataContinuityOk}). If a
39
39
  * genuine deficit/introduced-orphan is detected the hook **aborts the cutover**:
40
- * it rolls the half-migrated consolidated tables back to EMPTY (`DELETE FROM`
41
- * every user table — see {@link rollbackConsolidatedToEmpty}) so the legacy DBs
42
- * remain the source of truth, no half-migrated `cleo.db` is exposed, and there
43
- * are no silent `INSERT OR IGNORE` row drops. The file is never unlinked; the
44
- * chokepoint re-opens a fresh handle afterwards (the migrate engine closes the
45
- * handles it opened, so the rollback re-opens the scope before truncating it).
40
+ * it removes only unchanged rows recorded in the migration's transaction-local
41
+ * receipts. Unrelated rows remain. Changed resources refuse recovery; outcomes
42
+ * identify each target and retain the journal and receipts for inspection.
43
+ * The caller handle stays open. A source transaction is not reported done in
44
+ * the staging journal until COMMIT; only fully successful recovery clears that
45
+ * journal so a retry can re-copy the preserved legacy sources.
46
46
  *
47
- * ## Retry correctness — journal invalidation on abort (T11572)
48
- *
49
- * `runExodusMigrate` is resumable: it journals each table `done` and SKIPS
50
- * already-`done` tables on a re-run. On abort we truncate the consolidated rows
51
- * back to empty, so a stale `done` journal would make the next open re-trigger
52
- * (target empty), copy NOTHING (journal says done), re-verify the still-empty
53
- * target, and re-abort — a permanent loop. The abort path therefore also calls
54
- * `clearExodusJournal(plan.stagingDir)` so a post-abort retry RE-COPIES from
55
- * scratch.
56
47
  *
57
48
  * ## Concurrency safety (AC6 · reconcile with T11554 / R13-T11278)
58
49
  *
@@ -72,9 +63,11 @@
72
63
  * @see packages/core/src/store/dual-scope-db.ts — the open chokepoint that calls this
73
64
  */
74
65
  import { existsSync } from 'node:fs';
66
+ import { resolve } from 'node:path';
75
67
  import { getLogger } from '../../logger.js';
76
68
  import { withLock } from '../lock.js';
77
69
  import { archiveMigratedSources, hasExodusCompleteMarker } from './archive.js';
70
+ import { rollbackExodusReceipts, sealExodusDatabase } from './recovery.js';
78
71
  const log = getLogger('exodus-on-open');
79
72
  /**
80
73
  * Re-entrancy guard. `runExodusMigrate` itself calls `openDualScopeDb` for both
@@ -104,19 +97,16 @@ function isDisabledByEnv() {
104
97
  function baseTableForScope(scope) {
105
98
  return scope === 'project' ? 'tasks_tasks' : 'nexus_project_registry';
106
99
  }
107
- /**
108
- * Count rows in `table` on `nativeDb`, returning `0` if the table does not yet
109
- * exist or the query fails. Used to decide whether the consolidated DB is empty.
110
- */
100
+ /** Count persisted rows; only an absent table is empty, never a failed read. */
111
101
  function safeRowCount(nativeDb, table) {
112
- try {
113
- const row = nativeDb.prepare(`SELECT COUNT(*) AS n FROM "${table}"`).get();
114
- return row?.n ?? 0;
115
- }
116
- catch {
117
- // Table missing (pre-migration) or other read error → treat as empty.
102
+ if (!nativeDb
103
+ .prepare("SELECT name FROM main.sqlite_master WHERE type='table' AND name=?")
104
+ .get(table))
118
105
  return 0;
119
- }
106
+ const count = nativeDb.prepare(`SELECT COUNT(*) AS n FROM main."${table}"`).get()?.n;
107
+ if (typeof count !== 'number' || !Number.isSafeInteger(count))
108
+ throw new Error(`Cannot assess migration population: ${table}`);
109
+ return count;
120
110
  }
121
111
  /**
122
112
  * Return `true` if the consolidated `cleo.db` for `scope` is empty — i.e. the
@@ -125,127 +115,56 @@ function safeRowCount(nativeDb, table) {
125
115
  function consolidatedIsEmpty(nativeDb, scope) {
126
116
  return safeRowCount(nativeDb, baseTableForScope(scope)) === 0;
127
117
  }
128
- /**
129
- * Roll a half-migrated consolidated `cleo.db` back to EMPTY on the given native
130
- * handle — without deleting the file.
131
- *
132
- * Called on a parity-failure abort. As of T11782 (FIX D) the handle passed here
133
- * is a DEDICATED, NON-cached connection opened by {@link rollbackBothScopes}, NOT
134
- * the cached caller handle. This is critical: a scope-wide `DELETE FROM` on the
135
- * CALLER's connection would roll back any concurrent task INSERT (`tasks.add`)
136
- * issued on that same connection during the migrate window. Truncating on an
137
- * isolated connection limits the blast radius to the migration's own writes —
138
- * the caller's concurrent INSERT on its own connection survives. We `DELETE FROM`
139
- * every user table inside a single transaction with foreign keys OFF, restoring
140
- * the post-migration *empty* schema, so the legacy DBs remain the source of
141
- * truth — exactly the AC2 "no half-migrated cleo.db" contract. The file is never
142
- * unlinked; the caller's (separate) cached handle stays valid and sees the
143
- * committed empty state on its next read (WAL).
144
- *
145
- * The schema (tables, indexes, drizzle journal) is preserved; only data rows are
146
- * removed. Idempotent and best-effort: a failure to clear one table is logged
147
- * but does not throw (the next open's emptiness check still sees a populated
148
- * base table and could re-attempt, which is acceptable — it will re-abort).
149
- *
150
- * @param nativeDb - The dedicated consolidated connection to truncate.
151
- * @param scope - Scope label for logging.
152
- */
153
- function rollbackConsolidatedToEmpty(nativeDb, scope) {
154
- let userTables = [];
155
- try {
156
- userTables = nativeDb
157
- .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '__drizzle_%'")
158
- .all().map((r) => r.name);
159
- }
160
- catch (err) {
161
- log.error({ err, scope }, 'exodus-on-open: failed to enumerate tables for rollback');
162
- return;
163
- }
164
- try {
165
- nativeDb.exec('PRAGMA foreign_keys = OFF');
166
- nativeDb.exec('BEGIN');
167
- for (const table of userTables) {
168
- try {
169
- nativeDb.exec(`DELETE FROM "${table}"`);
170
- }
171
- catch (err) {
172
- log.warn({ err, table, scope }, 'exodus-on-open: failed to clear table during rollback');
173
- }
174
- }
175
- nativeDb.exec('COMMIT');
176
- }
177
- catch (err) {
118
+ /** Recover only the inserted resources recorded by this staging operation. */
119
+ async function rollbackBothScopes(plan) {
120
+ const { getDualScopeNativeDb, openDualScopeDbAtPath } = await import('../dual-scope-db.js');
121
+ const scopes = [];
122
+ for (const scope of ['project', 'global']) {
123
+ const dbPath = scope === 'project' ? plan.projectDbPath : plan.globalDbPath;
124
+ let handle = null;
178
125
  try {
179
- nativeDb.exec('ROLLBACK');
180
- }
181
- catch {
182
- // ignore — nothing to roll back
126
+ handle =
127
+ scope === 'project'
128
+ ? await openDualScopeDbAtPath('project', dbPath, undefined, { dedicated: true })
129
+ : await openDualScopeDbAtPath('global', dbPath, undefined, { dedicated: true });
130
+ const native = getDualScopeNativeDb(handle);
131
+ const rowsReverted = rollbackExodusReceipts(native, plan.stagingDir);
132
+ scopes.push({ scope, dbPath, status: 'rolled_back', rowsReverted });
183
133
  }
184
- log.error({ err, scope }, 'exodus-on-open: rollback transaction failed');
185
- }
186
- finally {
187
- try {
188
- nativeDb.exec('PRAGMA foreign_keys = ON');
134
+ catch (error) {
135
+ const message = error instanceof Error ? error.message : String(error);
136
+ scopes.push({ scope, dbPath, status: 'failed', rowsReverted: 0, error: message });
137
+ log.error({ scope, dbPath, error }, 'exodus-on-open: guarded recovery incomplete; retained journal and receipts');
189
138
  }
190
- catch {
191
- // ignore
139
+ finally {
140
+ handle?.close();
192
141
  }
193
142
  }
143
+ return {
144
+ operationId: plan.stagingDir,
145
+ complete: scopes.every((entry) => entry.status === 'rolled_back'),
146
+ scopes,
147
+ };
194
148
  }
195
- /**
196
- * Roll BOTH consolidated scopes back to empty after a failed auto-migration.
197
- *
198
- * ## Connection isolation (T11782 · FIX D)
199
- *
200
- * The rollback opens each scope on a DEDICATED, NON-cached connection (a second
201
- * SQLite handle to the same file — WAL allows it) and truncates THAT, NEVER the
202
- * cached caller handle. This is the load-bearing half of the write-reliability
203
- * fix: a scope-wide `DELETE FROM`/`BEGIN…COMMIT` on the CALLER's shared
204
- * connection would sweep away any concurrent task INSERT (`tasks.add`) issued on
205
- * that same connection during the migrate window. Truncating on an isolated
206
- * connection means the abort can only ever clear the migration's own writes; a
207
- * caller's concurrent INSERT on its own connection is physically outside this
208
- * rollback's transaction and survives.
209
- *
210
- * `runExodusMigrate` already closed its dedicated migrate connections by the
211
- * time we get here, so the rows it wrote are still on disk; we re-open a fresh
212
- * dedicated connection per scope and truncate. `_exodusInProgress` is still
213
- * `true`, so these opens do not recurse into the hook (dedicated opens never arm
214
- * exodus-on-open anyway).
215
- *
216
- * @param scope - The scope being opened (logging context only; both
217
- * scopes are cleared because `runExodusMigrate` populates both).
218
- * @param projectDbPath - Absolute path to the consolidated project `cleo.db`.
219
- * @param globalDbPath - Absolute path to the consolidated global `cleo.db`.
220
- */
221
- async function rollbackBothScopes(scope, projectDbPath, globalDbPath) {
222
- const { openDualScopeDbAtPath } = await import('../dual-scope-db.js');
223
- for (const s of ['project', 'global']) {
224
- const path = s === 'project' ? projectDbPath : globalDbPath;
225
- let handle = null;
149
+ /** Seal only scopes whose sources were verified, without disturbing other cutovers. */
150
+ async function sealTargets(plan, consumed) {
151
+ const { getDualScopeNativeDb, openDualScopeDbAtPath } = await import('../dual-scope-db.js');
152
+ const identities = {};
153
+ for (const scope of ['project', 'global']) {
154
+ if (!consumed.some((source) => source.targetScope === scope))
155
+ continue;
156
+ const path = scope === 'project' ? plan.projectDbPath : plan.globalDbPath;
157
+ const handle = scope === 'project'
158
+ ? await openDualScopeDbAtPath('project', path, undefined, { dedicated: true })
159
+ : await openDualScopeDbAtPath('global', path, undefined, { dedicated: true });
226
160
  try {
227
- handle =
228
- s === 'project'
229
- ? await openDualScopeDbAtPath('project', path, undefined, { dedicated: true })
230
- : await openDualScopeDbAtPath('global', path, undefined, { dedicated: true });
231
- const native = handle.db.$client;
232
- if (native) {
233
- rollbackConsolidatedToEmpty(native, s);
234
- }
235
- }
236
- catch (err) {
237
- log.warn({ err, scope: s, openingScope: scope }, 'exodus-on-open: could not roll back scope (best-effort)');
161
+ identities[scope] = sealExodusDatabase(getDualScopeNativeDb(handle));
238
162
  }
239
163
  finally {
240
- // Close the dedicated rollback connection so it does not leak a descriptor.
241
- try {
242
- handle?.close();
243
- }
244
- catch {
245
- // ignore double-close
246
- }
164
+ handle.close();
247
165
  }
248
166
  }
167
+ return identities;
249
168
  }
250
169
  /**
251
170
  * Decide whether a {@link verifyMigration} result clears the **data-continuity**
@@ -344,17 +263,12 @@ export function isDataContinuityOk(result) {
344
263
  * function adds only the *when* (lazy trigger) and the *safety envelope*
345
264
  * (single-flight + verify-or-rollback).
346
265
  *
347
- * On a parity-failure abort the migration's writes are rolled back IN PLACE on
348
- * the caller's live handle (see {@link rollbackConsolidatedToEmpty}) — the
349
- * handle is never closed and the file is never deleted, so the chokepoint caller
350
- * (`getBrainDb`/`ensureConduitDb`/…) keeps a valid, empty `cleo.db` and the
351
- * legacy DBs remain the source of truth.
266
+ * On abort, dedicated target handles revert unchanged inserted rows proven by
267
+ * receipts. Conflicts are reported and retained; the caller handle stays open.
352
268
  *
353
- * @param scope - The scope being opened (`'project'` | `'global'`).
354
- * @param dbPath - Absolute path to the consolidated `cleo.db` for `scope`.
355
- * @param nativeDb - The freshly-opened native handle (post-migration). This is
356
- * the SAME cached handle `runExodusMigrate` writes through,
357
- * so the rollback truncates it in place rather than deleting.
269
+ * @param scope - The scope being opened.
270
+ * @param dbPath - Explicit consolidated database target for this scope.
271
+ * @param nativeDb - Fresh caller handle, never closed by recovery.
358
272
  * @param cwd - Working directory used to resolve the project root.
359
273
  * @returns The {@link ExodusOnOpenResult} describing what happened.
360
274
  *
@@ -363,6 +277,18 @@ export function isDataContinuityOk(result) {
363
277
  * @saga T11242
364
278
  */
365
279
  export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
280
+ try {
281
+ return await runExodusOnOpen(scope, dbPath, nativeDb, cwd);
282
+ }
283
+ catch (error) {
284
+ return {
285
+ outcome: 'aborted',
286
+ reason: `migration assessment failed: ${error instanceof Error ? error.message : String(error)}`,
287
+ };
288
+ }
289
+ }
290
+ /** Run the guarded assessment, copy and recovery behind the explicit abort boundary. */
291
+ async function runExodusOnOpen(scope, dbPath, nativeDb, cwd) {
366
292
  // Re-entrancy: the nested opens from runExodusMigrate must never recurse.
367
293
  if (_exodusInProgress) {
368
294
  return { outcome: 'skipped', reason: 're-entrant open during active migration' };
@@ -370,26 +296,33 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
370
296
  if (isDisabledByEnv()) {
371
297
  return { outcome: 'skipped', reason: 'CLEO_DISABLE_EXODUS_ON_OPEN set' };
372
298
  }
299
+ // Fast path (unlocked): if the consolidated DB already has data, nothing to do.
300
+ // This makes the second-open case a cheap COUNT(*) with no lock acquisition.
301
+ if (!consolidatedIsEmpty(nativeDb, scope)) {
302
+ return { outcome: 'skipped', reason: 'consolidated cleo.db already populated' };
303
+ }
373
304
  // Completion-marker gate (T11777): once this scope's cutover is recorded, the
374
305
  // migration has already happened and the legacy sources have been archived.
375
306
  // Gate on the committed MARKER rather than (only) the source-file existsSync,
376
307
  // so a re-appearing or stranded legacy DB can NEVER re-arm exodus-on-open even
377
308
  // if the consolidated base table momentarily reads empty (DHQ-052 · T11662).
378
- if (hasExodusCompleteMarker(scope, cwd)) {
309
+ if (hasExodusCompleteMarker(scope, cwd, dbPath, nativeDb)) {
379
310
  return {
380
311
  outcome: 'skipped',
381
312
  reason: 'exodus completion marker present — scope already migrated (cutover sealed)',
382
313
  };
383
314
  }
384
- // Fast path (unlocked): if the consolidated DB already has data, nothing to do.
385
- // This makes the second-open case a cheap COUNT(*) with no lock acquisition.
386
- if (!consolidatedIsEmpty(nativeDb, scope)) {
387
- return { outcome: 'skipped', reason: 'consolidated cleo.db already populated' };
388
- }
389
315
  // Lazy-load the exodus engine via dynamic import to break the import cycle
390
316
  // (exodus/migrate.ts imports openDualScopeDb from dual-scope-db.ts).
391
317
  const { buildExodusPlan, runExodusMigrate, verifyMigration, clearExodusJournal } = await import('./index.js');
392
318
  const plan = buildExodusPlan(cwd);
319
+ const plannedTarget = scope === 'project' ? plan.projectDbPath : plan.globalDbPath;
320
+ if (resolve(plannedTarget) !== resolve(dbPath)) {
321
+ return {
322
+ outcome: 'aborted',
323
+ reason: `migration plan target ${plannedTarget} does not match opened database ${dbPath}; no migration applied`,
324
+ };
325
+ }
393
326
  // Trigger ONLY on sources that belong to the SCOPE being opened. A
394
327
  // project-scope open must not fire because a GLOBAL legacy DB (e.g.
395
328
  // signaldock.db) happens to exist — that would (a) wrongly migrate global
@@ -423,17 +356,21 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
423
356
  // 1. Run the migration engine (copies BOTH scopes; idempotent + journaled).
424
357
  const migrateResult = await runExodusMigrate(plan, false, (msg) => log.debug({ scope }, `exodus-on-open: ${msg}`));
425
358
  if (!migrateResult.ok) {
426
- // Migration itself failed mid-copy — abort the cutover cleanly by
427
- // rolling the consolidated tables back to empty on a DEDICATED
428
- // connection (T11782 FIX D — caller's concurrent writes survive; legacy
429
- // DBs remain the source of truth).
430
- await rollbackBothScopes(scope, plan.projectDbPath, plan.globalDbPath);
359
+ // Revert only migration-owned rows; retain conflicts and their evidence.
360
+ const recovery = await rollbackBothScopes(plan);
431
361
  // T11572: invalidate the journal so the NEXT open re-copies instead of
432
362
  // resuming a half-done journal against the now-empty target (abort loop).
433
- clearExodusJournal(migrateResult.stagingDir);
363
+ if (recovery.complete)
364
+ clearExodusJournal(migrateResult.stagingDir);
434
365
  const reason = `migration failed: ${migrateResult.error ?? 'unknown error'} — legacy DBs kept as source`;
435
366
  log.error({ scope, error: migrateResult.error }, `exodus-on-open: ${reason}`);
436
- return { outcome: 'aborted', reason };
367
+ return {
368
+ outcome: 'aborted',
369
+ reason: recovery.complete
370
+ ? reason
371
+ : `${reason}; recovery incomplete — journal and receipts retained`,
372
+ recovery,
373
+ };
437
374
  }
438
375
  // 2. PARITY GATE (AC2): verifyMigration (T11551) — row-count + content
439
376
  // digest + FK integrity + enum-drift equivalence legacy↔consolidated.
@@ -450,14 +387,11 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
450
387
  }, 'exodus-on-open: verifyMigration reported non-fatal drift (normalisation expected); checking data-continuity gate');
451
388
  }
452
389
  if (!isDataContinuityOk(verifyResult)) {
453
- // DATA LOSS (count deficit or FK orphan) → abort. Roll the half-migrated
454
- // consolidated tables back to EMPTY on a DEDICATED connection (T11782
455
- // FIX D) so legacy remains the source of truth AND any concurrent caller
456
- // INSERT on its own connection survives. Never expose a lossy
457
- // consolidated DB; never close the caller's handle.
458
- await rollbackBothScopes(scope, plan.projectDbPath, plan.globalDbPath);
390
+ // A parity failure invokes the same guarded, resource-scoped recovery.
391
+ const recovery = await rollbackBothScopes(plan);
459
392
  // T11572: invalidate the journal so a retry re-copies (see above).
460
- clearExodusJournal(plan.stagingDir);
393
+ if (recovery.complete)
394
+ clearExodusJournal(plan.stagingDir);
461
395
  // T11577: report only genuine DEFICITS (target < source) — a surplus
462
396
  // is tolerated by isDataContinuityOk() and must not appear as a cause.
463
397
  const deficits = verifyResult.tables
@@ -473,8 +407,14 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
473
407
  countDeficits: deficits,
474
408
  introducedFkViolations: verifyResult.introducedForeignKeyViolations.length,
475
409
  preExistingFkViolations: verifyResult.preExistingForeignKeyViolations.length,
476
- }, 'exodus-on-open: data-continuity FAILED — consolidated cleo.db rolled back to empty, legacy kept');
477
- return { outcome: 'aborted', reason };
410
+ }, 'exodus-on-open: data-continuity FAILED — guarded recovery attempted; legacy kept');
411
+ return {
412
+ outcome: 'aborted',
413
+ reason: recovery.complete
414
+ ? reason
415
+ : `${reason}; recovery incomplete — journal and receipts retained`,
416
+ recovery,
417
+ };
478
418
  }
479
419
  const rowsCopied = migrateResult.tables
480
420
  .filter((t) => !t.skipped)
@@ -489,7 +429,8 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
489
429
  // so it is logged but does not flip the outcome to 'aborted'.
490
430
  try {
491
431
  const consumed = plan.sources.filter((s) => existsSync(s.path));
492
- const archiveResult = archiveMigratedSources(consumed, cwd);
432
+ const identities = await sealTargets(plan, consumed);
433
+ const archiveResult = archiveMigratedSources(consumed, cwd, plan, identities);
493
434
  log.info({
494
435
  scope,
495
436
  archived: archiveResult.sources.filter((s) => s.action === 'archived').length,
@@ -505,6 +446,17 @@ export async function maybeRunExodusOnOpen(scope, dbPath, nativeDb, cwd) {
505
446
  rowsCopied,
506
447
  };
507
448
  }
449
+ catch (error) {
450
+ const recovery = await rollbackBothScopes(plan);
451
+ if (recovery.complete)
452
+ clearExodusJournal(plan.stagingDir);
453
+ const message = error instanceof Error ? error.message : String(error);
454
+ return {
455
+ outcome: 'aborted',
456
+ reason: `migration verification failed: ${message}; ${recovery.complete ? 'owned rows reverted' : 'recovery incomplete — journal and receipts retained'}`,
457
+ recovery,
458
+ };
459
+ }
508
460
  finally {
509
461
  _exodusInProgress = false;
510
462
  }
@@ -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,90 @@
1
+ import { type DatabaseSync } from 'node:sqlite';
2
+ /**
3
+ * A copy whose effects cannot be recovered must abort the source transaction.
4
+ * @remarks The migration caller retains its staging journal for explicit recovery.
5
+ */
6
+ export declare class ExodusRecoveryError extends Error {
7
+ }
8
+ /**
9
+ * Inspect durable ownership for an existing staging operation.
10
+ *
11
+ * @param db - Exact target database connection.
12
+ * @param operation - Existing Exodus staging-directory identity.
13
+ * @returns Whether this target records the operation.
14
+ * @remarks A staging journal alone cannot prove ownership of target rows.
15
+ * @example
16
+ * ```ts
17
+ * hasExodusRecovery(db, stagingDirectory);
18
+ * ```
19
+ */
20
+ export declare function hasExodusRecovery(db: DatabaseSync, operation: string): boolean;
21
+ /**
22
+ * Register the staging operation on the exact target before copying.
23
+ *
24
+ * @param db - Exact target database connection.
25
+ * @param operation - Existing Exodus staging-directory identity.
26
+ * @param schema - Target schema containing the receipt tables.
27
+ * @remarks Call within the source transaction so operation ownership commits with its rows.
28
+ * @example
29
+ * ```ts
30
+ * prepareExodusRecovery(db, stagingDirectory, 'main');
31
+ * ```
32
+ */
33
+ export declare function prepareExodusRecovery(db: DatabaseSync, operation: string, schema?: string): void;
34
+ /**
35
+ * Insert rows with transactional ownership and effect receipts.
36
+ *
37
+ * @param db - Target connection inside the source transaction.
38
+ * @param schema - Target schema receiving rows.
39
+ * @param table - Target table with a stable declared primary key.
40
+ * @param insertSql - Migration INSERT statement whose effects are assessed.
41
+ * @param operation - Existing Exodus staging-directory identity.
42
+ * @param sourceDb - Source database identity recorded as provenance.
43
+ * @param sourceTable - Original source table name.
44
+ * @returns Number of directly inserted rows.
45
+ * @remarks Rows and receipts share a savepoint. Ignored rows have no receipt. Read-only guard triggers and recorded handoff mirrors are supported; other effects are refused.
46
+ * @example
47
+ * ```ts
48
+ * insertWithExodusReceipts(db, 'main', 'tasks_tasks', insertSql, stagingDirectory, sourcePath, 'tasks');
49
+ * ```
50
+ */
51
+ export declare function insertWithExodusReceipts(db: DatabaseSync, schema: string, table: string, insertSql: string, operation: string, sourceDb: string, sourceTable: string): number;
52
+ /**
53
+ * Recover unchanged resources owned by one staging operation.
54
+ *
55
+ * @param db - Exact target database connection.
56
+ * @param operation - Existing Exodus staging-directory identity.
57
+ * @returns Number of reverted inserted rows and mirror effects.
58
+ * @remarks All owned resources are checked before any mutation. Conflicts refuse the whole target scope; unrelated resources remain intact. Separate database files are not one atomic transaction.
59
+ * @example
60
+ * ```ts
61
+ * rollbackExodusReceipts(db, stagingDirectory);
62
+ * ```
63
+ */
64
+ export declare function rollbackExodusReceipts(db: DatabaseSync, operation: string): number;
65
+ /**
66
+ * Commit a fresh cutover token before publishing its marker.
67
+ *
68
+ * @param db - Exact target database connection after migration verification.
69
+ * @returns Persisted token identifying this verified cutover.
70
+ * @remarks The marker and target token must agree; replacing or restoring the file invalidates an old marker.
71
+ * @example
72
+ * ```ts
73
+ * const token = sealExodusDatabase(db);
74
+ * ```
75
+ */
76
+ export declare function sealExodusDatabase(db: DatabaseSync): string;
77
+ /**
78
+ * Check a marker against the current database cutover identity.
79
+ *
80
+ * @param db - Existing caller connection to the target database.
81
+ * @param token - Cutover token read from the completion marker.
82
+ * @returns Whether the current database stores the expected cutover token.
83
+ * @remarks This read never creates missing identity state and does not trust a pathname alone.
84
+ * @example
85
+ * ```ts
86
+ * hasExodusDatabaseIdentity(db, marker.databaseIdentity);
87
+ * ```
88
+ */
89
+ export declare function hasExodusDatabaseIdentity(db: DatabaseSync, token: string): boolean;
90
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../src/store/exodus/recovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,YAAY,EAAsB,MAAM,aAAa,CAAC;AAQ/E;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAuEjD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAgB9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,IAAI,CAqBhG;AA+FD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAwER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA0HlF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAkB3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWlF"}