@cleocode/core 2026.9.8 → 2026.9.10

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 (569) 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/compliance/protocol-rules.d.ts.map +1 -1
  9. package/dist/compliance/protocol-rules.js +3 -1
  10. package/dist/compliance/protocol-rules.js.map +1 -1
  11. package/dist/dispatch/mutate-projection.d.ts.map +1 -1
  12. package/dist/dispatch/mutate-projection.js +12 -0
  13. package/dist/dispatch/mutate-projection.js.map +1 -1
  14. package/dist/dispatch/mvi-projection.d.ts +29 -6
  15. package/dist/dispatch/mvi-projection.d.ts.map +1 -1
  16. package/dist/dispatch/mvi-projection.js +109 -139
  17. package/dist/dispatch/mvi-projection.js.map +1 -1
  18. package/dist/docs/docs-read-model.d.ts +3 -2
  19. package/dist/docs/docs-read-model.d.ts.map +1 -1
  20. package/dist/docs/docs-read-model.js +4 -3
  21. package/dist/docs/docs-read-model.js.map +1 -1
  22. package/dist/docs/export-document.js +5129 -2297
  23. package/dist/docs/export-document.js.map +3 -3
  24. package/dist/docs/projection.d.ts +67 -0
  25. package/dist/docs/projection.d.ts.map +1 -0
  26. package/dist/docs/projection.js +370 -0
  27. package/dist/docs/projection.js.map +1 -0
  28. package/dist/doctor/acceptance-drift.d.ts +6 -2
  29. package/dist/doctor/acceptance-drift.d.ts.map +1 -1
  30. package/dist/doctor/acceptance-drift.js +43 -5
  31. package/dist/doctor/acceptance-drift.js.map +1 -1
  32. package/dist/doctor/knowledge-summary.d.ts +41 -0
  33. package/dist/doctor/knowledge-summary.d.ts.map +1 -0
  34. package/dist/doctor/knowledge-summary.js +81 -0
  35. package/dist/doctor/knowledge-summary.js.map +1 -0
  36. package/dist/doctor/knowledge.d.ts +192 -0
  37. package/dist/doctor/knowledge.d.ts.map +1 -0
  38. package/dist/doctor/knowledge.js +1864 -0
  39. package/dist/doctor/knowledge.js.map +1 -0
  40. package/dist/git/work-tree.d.ts +169 -0
  41. package/dist/git/work-tree.d.ts.map +1 -0
  42. package/dist/git/work-tree.js +341 -0
  43. package/dist/git/work-tree.js.map +1 -0
  44. package/dist/hooks/handlers/task-hooks.d.ts +8 -5
  45. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  46. package/dist/hooks/handlers/task-hooks.js +15 -60
  47. package/dist/hooks/handlers/task-hooks.js.map +1 -1
  48. package/dist/identity/cleo-identity.d.ts +13 -0
  49. package/dist/identity/cleo-identity.d.ts.map +1 -1
  50. package/dist/identity/cleo-identity.js +20 -6
  51. package/dist/identity/cleo-identity.js.map +1 -1
  52. package/dist/injection.d.ts.map +1 -1
  53. package/dist/injection.js +29 -13
  54. package/dist/injection.js.map +1 -1
  55. package/dist/internal.d.ts +3 -0
  56. package/dist/internal.d.ts.map +1 -1
  57. package/dist/internal.js +4 -0
  58. package/dist/internal.js.map +1 -1
  59. package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
  60. package/dist/lifecycle/verification/satisfies-validator.js +124 -120
  61. package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
  62. package/dist/llm/plugin-facade.js +4047 -1726
  63. package/dist/llm/plugin-facade.js.map +3 -3
  64. package/dist/memory/brain-backfill.d.ts +27 -12
  65. package/dist/memory/brain-backfill.d.ts.map +1 -1
  66. package/dist/memory/brain-backfill.js +325 -134
  67. package/dist/memory/brain-backfill.js.map +1 -1
  68. package/dist/memory/brain-doctor.d.ts +21 -0
  69. package/dist/memory/brain-doctor.d.ts.map +1 -1
  70. package/dist/memory/brain-doctor.js +111 -53
  71. package/dist/memory/brain-doctor.js.map +1 -1
  72. package/dist/memory/brain-links.d.ts.map +1 -1
  73. package/dist/memory/brain-links.js +31 -4
  74. package/dist/memory/brain-links.js.map +1 -1
  75. package/dist/memory/brain-reasoning.d.ts.map +1 -1
  76. package/dist/memory/brain-reasoning.js +28 -2
  77. package/dist/memory/brain-reasoning.js.map +1 -1
  78. package/dist/memory/brain-reconciler.d.ts +14 -19
  79. package/dist/memory/brain-reconciler.d.ts.map +1 -1
  80. package/dist/memory/brain-reconciler.js +70 -97
  81. package/dist/memory/brain-reconciler.js.map +1 -1
  82. package/dist/memory/brain-search.d.ts +2 -0
  83. package/dist/memory/brain-search.d.ts.map +1 -1
  84. package/dist/memory/brain-search.js +59 -29
  85. package/dist/memory/brain-search.js.map +1 -1
  86. package/dist/memory/brain-similarity.d.ts.map +1 -1
  87. package/dist/memory/brain-similarity.js +5 -4
  88. package/dist/memory/brain-similarity.js.map +1 -1
  89. package/dist/memory/brain-stub-prune.d.ts +31 -9
  90. package/dist/memory/brain-stub-prune.d.ts.map +1 -1
  91. package/dist/memory/brain-stub-prune.js +65 -18
  92. package/dist/memory/brain-stub-prune.js.map +1 -1
  93. package/dist/memory/brain-writer-handlers.d.ts +10 -1
  94. package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
  95. package/dist/memory/brain-writer-handlers.js +23 -3
  96. package/dist/memory/brain-writer-handlers.js.map +1 -1
  97. package/dist/memory/brain-writer-thread.d.ts +11 -1
  98. package/dist/memory/brain-writer-thread.d.ts.map +1 -1
  99. package/dist/memory/brain-writer-thread.js +87 -20
  100. package/dist/memory/brain-writer-thread.js.map +1 -1
  101. package/dist/memory/brain-writer-worker.js +8 -1
  102. package/dist/memory/brain-writer-worker.js.map +1 -1
  103. package/dist/memory/decision-cross-link.d.ts +39 -0
  104. package/dist/memory/decision-cross-link.d.ts.map +1 -1
  105. package/dist/memory/decision-cross-link.js +316 -0
  106. package/dist/memory/decision-cross-link.js.map +1 -1
  107. package/dist/memory/decisions.d.ts +4 -1
  108. package/dist/memory/decisions.d.ts.map +1 -1
  109. package/dist/memory/decisions.js +7 -24
  110. package/dist/memory/decisions.js.map +1 -1
  111. package/dist/memory/dispatch-trace.d.ts +12 -5
  112. package/dist/memory/dispatch-trace.d.ts.map +1 -1
  113. package/dist/memory/dispatch-trace.js +17 -7
  114. package/dist/memory/dispatch-trace.js.map +1 -1
  115. package/dist/memory/eligibility.d.ts +51 -0
  116. package/dist/memory/eligibility.d.ts.map +1 -0
  117. package/dist/memory/eligibility.js +77 -0
  118. package/dist/memory/eligibility.js.map +1 -0
  119. package/dist/memory/engine-compat.d.ts +2 -0
  120. package/dist/memory/engine-compat.d.ts.map +1 -1
  121. package/dist/memory/engine-compat.js +10 -0
  122. package/dist/memory/engine-compat.js.map +1 -1
  123. package/dist/memory/extraction-gate.d.ts +21 -7
  124. package/dist/memory/extraction-gate.d.ts.map +1 -1
  125. package/dist/memory/extraction-gate.js +178 -216
  126. package/dist/memory/extraction-gate.js.map +1 -1
  127. package/dist/memory/graph-auto-populate.d.ts +38 -5
  128. package/dist/memory/graph-auto-populate.d.ts.map +1 -1
  129. package/dist/memory/graph-auto-populate.js +182 -60
  130. package/dist/memory/graph-auto-populate.js.map +1 -1
  131. package/dist/memory/graph-memory-bridge.d.ts +14 -1
  132. package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
  133. package/dist/memory/graph-memory-bridge.js +66 -28
  134. package/dist/memory/graph-memory-bridge.js.map +1 -1
  135. package/dist/memory/index.d.ts +1 -19
  136. package/dist/memory/index.d.ts.map +1 -1
  137. package/dist/memory/index.js +1 -50
  138. package/dist/memory/index.js.map +1 -1
  139. package/dist/memory/learnings.d.ts.map +1 -1
  140. package/dist/memory/learnings.js +2 -23
  141. package/dist/memory/learnings.js.map +1 -1
  142. package/dist/memory/manifest-filter.d.ts +21 -0
  143. package/dist/memory/manifest-filter.d.ts.map +1 -0
  144. package/dist/memory/manifest-filter.js +51 -0
  145. package/dist/memory/manifest-filter.js.map +1 -0
  146. package/dist/memory/manifest-ingestion.d.ts +28 -30
  147. package/dist/memory/manifest-ingestion.d.ts.map +1 -1
  148. package/dist/memory/manifest-ingestion.js +104 -235
  149. package/dist/memory/manifest-ingestion.js.map +1 -1
  150. package/dist/memory/observer-reflector.d.ts +2 -0
  151. package/dist/memory/observer-reflector.d.ts.map +1 -1
  152. package/dist/memory/observer-reflector.js +6 -49
  153. package/dist/memory/observer-reflector.js.map +1 -1
  154. package/dist/memory/patterns.d.ts +10 -0
  155. package/dist/memory/patterns.d.ts.map +1 -1
  156. package/dist/memory/patterns.js +25 -33
  157. package/dist/memory/patterns.js.map +1 -1
  158. package/dist/memory/pipeline-manifest-sqlite.d.ts +72 -9
  159. package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
  160. package/dist/memory/pipeline-manifest-sqlite.js +508 -412
  161. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
  162. package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
  163. package/dist/memory/retrieval/build-retrieval-bundle.js +16 -15
  164. package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
  165. package/dist/memory/retrieval/fetch.d.ts +7 -0
  166. package/dist/memory/retrieval/fetch.d.ts.map +1 -1
  167. package/dist/memory/retrieval/fetch.js +14 -11
  168. package/dist/memory/retrieval/fetch.js.map +1 -1
  169. package/dist/memory/retrieval/observe.d.ts +7 -1
  170. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  171. package/dist/memory/retrieval/observe.js +58 -4
  172. package/dist/memory/retrieval/observe.js.map +1 -1
  173. package/dist/memory/retrieval/search.d.ts +14 -1
  174. package/dist/memory/retrieval/search.d.ts.map +1 -1
  175. package/dist/memory/retrieval/search.js +133 -69
  176. package/dist/memory/retrieval/search.js.map +1 -1
  177. package/dist/memory/retrieval/telemetry.d.ts +31 -0
  178. package/dist/memory/retrieval/telemetry.d.ts.map +1 -0
  179. package/dist/memory/retrieval/telemetry.js +53 -0
  180. package/dist/memory/retrieval/telemetry.js.map +1 -0
  181. package/dist/nexus/analyze-orchestrator.d.ts +41 -9
  182. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  183. package/dist/nexus/analyze-orchestrator.js +257 -58
  184. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  185. package/dist/nexus/api-contracts.d.ts +2 -6
  186. package/dist/nexus/api-contracts.d.ts.map +1 -1
  187. package/dist/nexus/api-contracts.js +11 -2
  188. package/dist/nexus/api-contracts.js.map +1 -1
  189. package/dist/nexus/context.d.ts.map +1 -1
  190. package/dist/nexus/context.js +14 -37
  191. package/dist/nexus/context.js.map +1 -1
  192. package/dist/nexus/diff.d.ts.map +1 -1
  193. package/dist/nexus/diff.js +2 -1
  194. package/dist/nexus/diff.js.map +1 -1
  195. package/dist/nexus/identity.d.ts +29 -3
  196. package/dist/nexus/identity.d.ts.map +1 -1
  197. package/dist/nexus/identity.js +63 -12
  198. package/dist/nexus/identity.js.map +1 -1
  199. package/dist/nexus/impact.d.ts +21 -19
  200. package/dist/nexus/impact.d.ts.map +1 -1
  201. package/dist/nexus/impact.js +96 -192
  202. package/dist/nexus/impact.js.map +1 -1
  203. package/dist/nexus/knowledge.d.ts +80 -0
  204. package/dist/nexus/knowledge.d.ts.map +1 -0
  205. package/dist/nexus/knowledge.js +786 -0
  206. package/dist/nexus/knowledge.js.map +1 -0
  207. package/dist/nexus/living-brain.d.ts +8 -5
  208. package/dist/nexus/living-brain.d.ts.map +1 -1
  209. package/dist/nexus/living-brain.js +252 -188
  210. package/dist/nexus/living-brain.js.map +1 -1
  211. package/dist/nexus/registry.d.ts +11 -2
  212. package/dist/nexus/registry.d.ts.map +1 -1
  213. package/dist/nexus/registry.js +144 -128
  214. package/dist/nexus/registry.js.map +1 -1
  215. package/dist/nexus/source-roots.d.ts +16 -0
  216. package/dist/nexus/source-roots.d.ts.map +1 -0
  217. package/dist/nexus/source-roots.js +174 -0
  218. package/dist/nexus/source-roots.js.map +1 -0
  219. package/dist/nexus/task-evidence.d.ts +22 -0
  220. package/dist/nexus/task-evidence.d.ts.map +1 -0
  221. package/dist/nexus/task-evidence.js +210 -0
  222. package/dist/nexus/task-evidence.js.map +1 -0
  223. package/dist/nexus/tasks-bridge.d.ts +14 -7
  224. package/dist/nexus/tasks-bridge.d.ts.map +1 -1
  225. package/dist/nexus/tasks-bridge.js +81 -40
  226. package/dist/nexus/tasks-bridge.js.map +1 -1
  227. package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
  228. package/dist/orchestrate/lifecycle-ops.js +170 -120
  229. package/dist/orchestrate/lifecycle-ops.js.map +1 -1
  230. package/dist/orchestrate/query-ops.d.ts +6 -7
  231. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  232. package/dist/orchestrate/query-ops.js +509 -532
  233. package/dist/orchestrate/query-ops.js.map +1 -1
  234. package/dist/orchestration/bootstrap.d.ts +15 -1
  235. package/dist/orchestration/bootstrap.d.ts.map +1 -1
  236. package/dist/orchestration/bootstrap.js +21 -10
  237. package/dist/orchestration/bootstrap.js.map +1 -1
  238. package/dist/orchestration/index.d.ts +35 -3
  239. package/dist/orchestration/index.d.ts.map +1 -1
  240. package/dist/orchestration/index.js +64 -35
  241. package/dist/orchestration/index.js.map +1 -1
  242. package/dist/orchestration/lead-rollup.d.ts +24 -1
  243. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  244. package/dist/orchestration/lead-rollup.js +31 -11
  245. package/dist/orchestration/lead-rollup.js.map +1 -1
  246. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  247. package/dist/orchestration/spawn-prompt.js +25 -45
  248. package/dist/orchestration/spawn-prompt.js.map +1 -1
  249. package/dist/orchestration/unblock.d.ts +15 -1
  250. package/dist/orchestration/unblock.d.ts.map +1 -1
  251. package/dist/orchestration/unblock.js +23 -12
  252. package/dist/orchestration/unblock.js.map +1 -1
  253. package/dist/orchestration/validate-spawn.d.ts.map +1 -1
  254. package/dist/orchestration/validate-spawn.js +3 -3
  255. package/dist/orchestration/validate-spawn.js.map +1 -1
  256. package/dist/orchestration/waves.d.ts +29 -13
  257. package/dist/orchestration/waves.d.ts.map +1 -1
  258. package/dist/orchestration/waves.js +43 -55
  259. package/dist/orchestration/waves.js.map +1 -1
  260. package/dist/paths.d.ts +17 -163
  261. package/dist/paths.d.ts.map +1 -1
  262. package/dist/paths.js +145 -496
  263. package/dist/paths.js.map +1 -1
  264. package/dist/project-info.d.ts +2 -11
  265. package/dist/project-info.d.ts.map +1 -1
  266. package/dist/project-info.js +3 -31
  267. package/dist/project-info.js.map +1 -1
  268. package/dist/project-scope.d.ts +239 -0
  269. package/dist/project-scope.d.ts.map +1 -0
  270. package/dist/project-scope.js +473 -0
  271. package/dist/project-scope.js.map +1 -0
  272. package/dist/release/pr-evidence.d.ts +23 -4
  273. package/dist/release/pr-evidence.d.ts.map +1 -1
  274. package/dist/release/pr-evidence.js +65 -9
  275. package/dist/release/pr-evidence.js.map +1 -1
  276. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  277. package/dist/render/nexus/graph/index.js +4 -2
  278. package/dist/render/nexus/graph/index.js.map +1 -1
  279. package/dist/render/orchestration/audit-reconstruct.d.ts +11 -0
  280. package/dist/render/orchestration/audit-reconstruct.d.ts.map +1 -1
  281. package/dist/render/orchestration/audit-reconstruct.js +21 -6
  282. package/dist/render/orchestration/audit-reconstruct.js.map +1 -1
  283. package/dist/render/tasks/show.js +2 -1
  284. package/dist/render/tasks/show.js.map +1 -1
  285. package/dist/resources/spawn-wrapper.d.ts +82 -14
  286. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  287. package/dist/resources/spawn-wrapper.js +585 -27
  288. package/dist/resources/spawn-wrapper.js.map +1 -1
  289. package/dist/selfimprove/fix-gen.js +4055 -1734
  290. package/dist/selfimprove/fix-gen.js.map +3 -3
  291. package/dist/sequence/index.d.ts.map +1 -1
  292. package/dist/sequence/index.js +76 -68
  293. package/dist/sequence/index.js.map +1 -1
  294. package/dist/session/canon-lint.d.ts +24 -3
  295. package/dist/session/canon-lint.d.ts.map +1 -1
  296. package/dist/session/canon-lint.js +72 -31
  297. package/dist/session/canon-lint.js.map +1 -1
  298. package/dist/session/engine-ops.d.ts +1 -4
  299. package/dist/session/engine-ops.d.ts.map +1 -1
  300. package/dist/session/engine-ops.js +42 -6
  301. package/dist/session/engine-ops.js.map +1 -1
  302. package/dist/sessions/briefing.d.ts +11 -1
  303. package/dist/sessions/briefing.d.ts.map +1 -1
  304. package/dist/sessions/briefing.js +76 -8
  305. package/dist/sessions/briefing.js.map +1 -1
  306. package/dist/sessions/handoff.d.ts +3 -1
  307. package/dist/sessions/handoff.d.ts.map +1 -1
  308. package/dist/sessions/handoff.js +2 -0
  309. package/dist/sessions/handoff.js.map +1 -1
  310. package/dist/shutdown-deadline.d.ts +24 -33
  311. package/dist/shutdown-deadline.d.ts.map +1 -1
  312. package/dist/shutdown-deadline.js +71 -14
  313. package/dist/shutdown-deadline.js.map +1 -1
  314. package/dist/shutdown.d.ts +21 -10
  315. package/dist/shutdown.d.ts.map +1 -1
  316. package/dist/shutdown.js +89 -42
  317. package/dist/shutdown.js.map +1 -1
  318. package/dist/skills/index.d.ts +1 -1
  319. package/dist/skills/index.d.ts.map +1 -1
  320. package/dist/skills/index.js +1 -1
  321. package/dist/skills/index.js.map +1 -1
  322. package/dist/skills/orchestrator/validator.d.ts +87 -20
  323. package/dist/skills/orchestrator/validator.d.ts.map +1 -1
  324. package/dist/skills/orchestrator/validator.js +330 -241
  325. package/dist/skills/orchestrator/validator.js.map +1 -1
  326. package/dist/store/agent-resolver.d.ts.map +1 -1
  327. package/dist/store/agent-resolver.js +16 -9
  328. package/dist/store/agent-resolver.js.map +1 -1
  329. package/dist/store/attachment-store.d.ts +4 -1
  330. package/dist/store/attachment-store.d.ts.map +1 -1
  331. package/dist/store/attachment-store.js +20 -3
  332. package/dist/store/attachment-store.js.map +1 -1
  333. package/dist/store/background-jobs.d.ts +426 -105
  334. package/dist/store/background-jobs.d.ts.map +1 -1
  335. package/dist/store/background-jobs.js +1208 -252
  336. package/dist/store/background-jobs.js.map +1 -1
  337. package/dist/store/background-ops.d.ts +145 -8
  338. package/dist/store/background-ops.d.ts.map +1 -1
  339. package/dist/store/background-ops.js +459 -15
  340. package/dist/store/background-ops.js.map +1 -1
  341. package/dist/store/backup-inspect.d.ts +48 -4
  342. package/dist/store/backup-inspect.d.ts.map +1 -1
  343. package/dist/store/backup-inspect.js +384 -4
  344. package/dist/store/backup-inspect.js.map +1 -1
  345. package/dist/store/converters.d.ts.map +1 -1
  346. package/dist/store/converters.js +19 -2
  347. package/dist/store/converters.js.map +1 -1
  348. package/dist/store/data-accessor.d.ts +9 -1
  349. package/dist/store/data-accessor.d.ts.map +1 -1
  350. package/dist/store/data-accessor.js +22 -5
  351. package/dist/store/data-accessor.js.map +1 -1
  352. package/dist/store/data-safety-central.d.ts.map +1 -1
  353. package/dist/store/data-safety-central.js +272 -232
  354. package/dist/store/data-safety-central.js.map +1 -1
  355. package/dist/store/db-helpers.d.ts +19 -3
  356. package/dist/store/db-helpers.d.ts.map +1 -1
  357. package/dist/store/db-helpers.js +42 -58
  358. package/dist/store/db-helpers.js.map +1 -1
  359. package/dist/store/dual-scope-db.d.ts +63 -4
  360. package/dist/store/dual-scope-db.d.ts.map +1 -1
  361. package/dist/store/dual-scope-db.js +166 -19
  362. package/dist/store/dual-scope-db.js.map +1 -1
  363. package/dist/store/exodus/archive.d.ts +21 -7
  364. package/dist/store/exodus/archive.d.ts.map +1 -1
  365. package/dist/store/exodus/archive.js +60 -18
  366. package/dist/store/exodus/archive.js.map +1 -1
  367. package/dist/store/exodus/migrate.d.ts.map +1 -1
  368. package/dist/store/exodus/migrate.js +27 -23
  369. package/dist/store/exodus/migrate.js.map +1 -1
  370. package/dist/store/exodus/on-open.d.ts +16 -27
  371. package/dist/store/exodus/on-open.d.ts.map +1 -1
  372. package/dist/store/exodus/on-open.js +121 -169
  373. package/dist/store/exodus/on-open.js.map +1 -1
  374. package/dist/store/exodus/recovery.d.ts +90 -0
  375. package/dist/store/exodus/recovery.d.ts.map +1 -0
  376. package/dist/store/exodus/recovery.js +434 -0
  377. package/dist/store/exodus/recovery.js.map +1 -0
  378. package/dist/store/exodus/types.d.ts +15 -0
  379. package/dist/store/exodus/types.d.ts.map +1 -1
  380. package/dist/store/memory-accessor.d.ts +52 -3
  381. package/dist/store/memory-accessor.d.ts.map +1 -1
  382. package/dist/store/memory-accessor.js +122 -7
  383. package/dist/store/memory-accessor.js.map +1 -1
  384. package/dist/store/nexus-sqlite.d.ts +24 -6
  385. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  386. package/dist/store/nexus-sqlite.js +39 -20
  387. package/dist/store/nexus-sqlite.js.map +1 -1
  388. package/dist/store/ports/domain-binding.d.ts.map +1 -1
  389. package/dist/store/ports/domain-binding.js +27 -5
  390. package/dist/store/ports/domain-binding.js.map +1 -1
  391. package/dist/store/schema/background-jobs.d.ts +181 -2
  392. package/dist/store/schema/background-jobs.d.ts.map +1 -1
  393. package/dist/store/schema/background-jobs.js +27 -3
  394. package/dist/store/schema/background-jobs.js.map +1 -1
  395. package/dist/store/schema/cleo-global/skills.d.ts +2 -2
  396. package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
  397. package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
  398. package/dist/store/schema/cleo-project/tasks-core.d.ts +1 -1
  399. package/dist/store/schema/lifecycle.d.ts +2 -2
  400. package/dist/store/schema/skills-schema.d.ts +2 -2
  401. package/dist/store/schema/tasks.d.ts +1 -1
  402. package/dist/store/session-store.d.ts +3 -1
  403. package/dist/store/session-store.d.ts.map +1 -1
  404. package/dist/store/session-store.js +252 -207
  405. package/dist/store/session-store.js.map +1 -1
  406. package/dist/store/sqlite-data-accessor.d.ts +39 -4
  407. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  408. package/dist/store/sqlite-data-accessor.js +689 -527
  409. package/dist/store/sqlite-data-accessor.js.map +1 -1
  410. package/dist/store/tasks-sqlite.d.ts +3 -1
  411. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  412. package/dist/store/tasks-sqlite.js +309 -279
  413. package/dist/store/tasks-sqlite.js.map +1 -1
  414. package/dist/store/validation-schemas.d.ts +8 -8
  415. package/dist/store/writer-lease.d.ts +80 -8
  416. package/dist/store/writer-lease.d.ts.map +1 -1
  417. package/dist/store/writer-lease.js +503 -134
  418. package/dist/store/writer-lease.js.map +1 -1
  419. package/dist/system/audit.d.ts +2 -1
  420. package/dist/system/audit.d.ts.map +1 -1
  421. package/dist/system/audit.js +118 -71
  422. package/dist/system/audit.js.map +1 -1
  423. package/dist/system/backup.d.ts.map +1 -1
  424. package/dist/system/backup.js +5 -5
  425. package/dist/system/backup.js.map +1 -1
  426. package/dist/system/inject-generate.js +1 -1
  427. package/dist/task-work/index.d.ts +3 -0
  428. package/dist/task-work/index.d.ts.map +1 -1
  429. package/dist/task-work/index.js +34 -37
  430. package/dist/task-work/index.js.map +1 -1
  431. package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
  432. package/dist/tasks/ac-coverage-gate.js +4 -0
  433. package/dist/tasks/ac-coverage-gate.js.map +1 -1
  434. package/dist/tasks/ac-immutability.d.ts +7 -4
  435. package/dist/tasks/ac-immutability.d.ts.map +1 -1
  436. package/dist/tasks/ac-immutability.js +19 -17
  437. package/dist/tasks/ac-immutability.js.map +1 -1
  438. package/dist/tasks/ac-table.d.ts +5 -5
  439. package/dist/tasks/ac-table.d.ts.map +1 -1
  440. package/dist/tasks/ac-table.js +26 -12
  441. package/dist/tasks/ac-table.js.map +1 -1
  442. package/dist/tasks/acceptance-input.d.ts +52 -0
  443. package/dist/tasks/acceptance-input.d.ts.map +1 -0
  444. package/dist/tasks/acceptance-input.js +259 -0
  445. package/dist/tasks/acceptance-input.js.map +1 -0
  446. package/dist/tasks/add.d.ts +67 -29
  447. package/dist/tasks/add.d.ts.map +1 -1
  448. package/dist/tasks/add.js +255 -97
  449. package/dist/tasks/add.js.map +1 -1
  450. package/dist/tasks/complete.d.ts +16 -1
  451. package/dist/tasks/complete.d.ts.map +1 -1
  452. package/dist/tasks/complete.js +152 -55
  453. package/dist/tasks/complete.js.map +1 -1
  454. package/dist/tasks/decompose.d.ts +103 -0
  455. package/dist/tasks/decompose.d.ts.map +1 -0
  456. package/dist/tasks/decompose.js +224 -0
  457. package/dist/tasks/decompose.js.map +1 -0
  458. package/dist/tasks/delete.d.ts +5 -8
  459. package/dist/tasks/delete.d.ts.map +1 -1
  460. package/dist/tasks/delete.js +4 -3
  461. package/dist/tasks/delete.js.map +1 -1
  462. package/dist/tasks/dependency-check.d.ts +59 -0
  463. package/dist/tasks/dependency-check.d.ts.map +1 -1
  464. package/dist/tasks/dependency-check.js +73 -0
  465. package/dist/tasks/dependency-check.js.map +1 -1
  466. package/dist/tasks/deps-ready.d.ts +13 -1
  467. package/dist/tasks/deps-ready.d.ts.map +1 -1
  468. package/dist/tasks/deps-ready.js +16 -5
  469. package/dist/tasks/deps-ready.js.map +1 -1
  470. package/dist/tasks/engine-converters.d.ts +7 -0
  471. package/dist/tasks/engine-converters.d.ts.map +1 -1
  472. package/dist/tasks/engine-converters.js +8 -1
  473. package/dist/tasks/engine-converters.js.map +1 -1
  474. package/dist/tasks/evidence.d.ts +88 -27
  475. package/dist/tasks/evidence.d.ts.map +1 -1
  476. package/dist/tasks/evidence.js +344 -43
  477. package/dist/tasks/evidence.js.map +1 -1
  478. package/dist/tasks/find.d.ts +16 -12
  479. package/dist/tasks/find.d.ts.map +1 -1
  480. package/dist/tasks/find.js +107 -93
  481. package/dist/tasks/find.js.map +1 -1
  482. package/dist/tasks/gate-preview.d.ts +73 -0
  483. package/dist/tasks/gate-preview.d.ts.map +1 -0
  484. package/dist/tasks/gate-preview.js +119 -0
  485. package/dist/tasks/gate-preview.js.map +1 -0
  486. package/dist/tasks/gate-runner.d.ts +88 -14
  487. package/dist/tasks/gate-runner.d.ts.map +1 -1
  488. package/dist/tasks/gate-runner.js +719 -250
  489. package/dist/tasks/gate-runner.js.map +1 -1
  490. package/dist/tasks/hierarchy-policy.d.ts +8 -0
  491. package/dist/tasks/hierarchy-policy.d.ts.map +1 -1
  492. package/dist/tasks/hierarchy-policy.js +9 -2
  493. package/dist/tasks/hierarchy-policy.js.map +1 -1
  494. package/dist/tasks/hierarchy.d.ts +67 -1
  495. package/dist/tasks/hierarchy.d.ts.map +1 -1
  496. package/dist/tasks/hierarchy.js +81 -1
  497. package/dist/tasks/hierarchy.js.map +1 -1
  498. package/dist/tasks/index.d.ts +3 -0
  499. package/dist/tasks/index.d.ts.map +1 -1
  500. package/dist/tasks/index.js +3 -0
  501. package/dist/tasks/index.js.map +1 -1
  502. package/dist/tasks/infer-add-params.d.ts +1 -20
  503. package/dist/tasks/infer-add-params.d.ts.map +1 -1
  504. package/dist/tasks/infer-add-params.js +2 -203
  505. package/dist/tasks/infer-add-params.js.map +1 -1
  506. package/dist/tasks/list.d.ts +7 -2
  507. package/dist/tasks/list.d.ts.map +1 -1
  508. package/dist/tasks/list.js +24 -36
  509. package/dist/tasks/list.js.map +1 -1
  510. package/dist/tasks/ops.d.ts +6 -61
  511. package/dist/tasks/ops.d.ts.map +1 -1
  512. package/dist/tasks/ops.js +5 -53
  513. package/dist/tasks/ops.js.map +1 -1
  514. package/dist/tasks/plan.d.ts +15 -1
  515. package/dist/tasks/plan.d.ts.map +1 -1
  516. package/dist/tasks/plan.js +23 -25
  517. package/dist/tasks/plan.js.map +1 -1
  518. package/dist/tasks/population.d.ts +46 -0
  519. package/dist/tasks/population.d.ts.map +1 -0
  520. package/dist/tasks/population.js +88 -0
  521. package/dist/tasks/population.js.map +1 -0
  522. package/dist/tasks/reconcile-scope.d.ts +157 -0
  523. package/dist/tasks/reconcile-scope.d.ts.map +1 -0
  524. package/dist/tasks/reconcile-scope.js +242 -0
  525. package/dist/tasks/reconcile-scope.js.map +1 -0
  526. package/dist/tasks/req.d.ts +51 -12
  527. package/dist/tasks/req.d.ts.map +1 -1
  528. package/dist/tasks/req.js +125 -69
  529. package/dist/tasks/req.js.map +1 -1
  530. package/dist/tasks/session-scope.d.ts +6 -31
  531. package/dist/tasks/session-scope.d.ts.map +1 -1
  532. package/dist/tasks/session-scope.js +3 -17
  533. package/dist/tasks/session-scope.js.map +1 -1
  534. package/dist/tasks/severity-attestation.d.ts +39 -10
  535. package/dist/tasks/severity-attestation.d.ts.map +1 -1
  536. package/dist/tasks/severity-attestation.js +75 -36
  537. package/dist/tasks/severity-attestation.js.map +1 -1
  538. package/dist/tasks/task-next.d.ts +5 -0
  539. package/dist/tasks/task-next.d.ts.map +1 -1
  540. package/dist/tasks/task-next.js +10 -9
  541. package/dist/tasks/task-next.js.map +1 -1
  542. package/dist/tasks/task-reparent.d.ts.map +1 -1
  543. package/dist/tasks/task-reparent.js +3 -13
  544. package/dist/tasks/task-reparent.js.map +1 -1
  545. package/dist/tasks/update.d.ts +20 -43
  546. package/dist/tasks/update.d.ts.map +1 -1
  547. package/dist/tasks/update.js +64 -49
  548. package/dist/tasks/update.js.map +1 -1
  549. package/dist/validation/engine-ops.d.ts +17 -1
  550. package/dist/validation/engine-ops.d.ts.map +1 -1
  551. package/dist/validation/engine-ops.js +149 -11
  552. package/dist/validation/engine-ops.js.map +1 -1
  553. package/dist/workgraph/reparent-preflight.d.ts +1 -1
  554. package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
  555. package/dist/workgraph/reparent-preflight.js +6 -1
  556. package/dist/workgraph/reparent-preflight.js.map +1 -1
  557. package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
  558. package/dist/workgraph/scaffold-apply.js +81 -76
  559. package/dist/workgraph/scaffold-apply.js.map +1 -1
  560. package/dist/workgraph/structure-validation.d.ts +1 -1
  561. package/dist/workgraph/structure-validation.d.ts.map +1 -1
  562. package/dist/workgraph/structure-validation.js +6 -1
  563. package/dist/workgraph/structure-validation.js.map +1 -1
  564. package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
  565. package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
  566. package/package.json +18 -13
  567. package/schemas/config.schema.json +2 -2
  568. package/schemas/project-context.schema.json +12 -0
  569. package/templates/CLEO-INJECTION.md +114 -101
@@ -0,0 +1,67 @@
1
+ import type { OperationExecutionContext } from '@cleocode/contracts/jobs';
2
+ import { type DocsProjectionCapture, type DocsProjectionOutcome, type DocsProjectionPreparation, type DocsProjectionReceipt, type DocsProjectionSource } from '@cleocode/contracts/operations/docs';
3
+ /**
4
+ * Capture a canonical project identity and one optional-maintenance deadline before storage.
5
+ * @param projectRoot - Explicit root captured synchronously by the calling surface.
6
+ * @param actor - Foreground caller provenance.
7
+ * @param idempotencyKey - Immutable operation key; explicit resume reuses the prepared job identity.
8
+ * @param budgetMs - Shared foreground budget, defaulting to two seconds.
9
+ * @returns Captured scope or explicit missing coverage; no guessed project identity.
10
+ * @throws RangeError when the caller supplies an invalid foreground budget.
11
+ * @remarks The metadata read is read-only. Its elapsed time is charged to the same
12
+ * deadline; slow filesystem I/O is not claimed to be synchronously preempted. Missing,
13
+ * malformed or mismatched identity never prevents the independent canonical attachment write.
14
+ * @example
15
+ * ```ts
16
+ * const captured = await captureDocumentProjection(root, actor, invocationId);
17
+ * ```
18
+ */
19
+ export declare function captureDocumentProjection(projectRoot: string, actor: string, idempotencyKey: string, budgetMs?: number): Promise<DocsProjectionCapture>;
20
+ /**
21
+ * Persist authentic optional work before an executor can be scheduled.
22
+ *
23
+ * @param context - Captured project, actor, retry identity and shared deadline.
24
+ * @param source - Canonical attachment and owner to independently verify.
25
+ * @returns Durable pending or coalesced job identity, never projection completion.
26
+ * @throws Error - Missing/changed canonical evidence, cancellation, storage or retry conflict.
27
+ * @remarks Canonical bytes are only read. The existing job store owns the atomic
28
+ * proposal insertion and immutable retry check. No executor, embedding or model
29
+ * starts here. An admitted synchronous store call cannot be timer-preempted;
30
+ * committed preparation is returned with its actual deadline observation.
31
+ * @example
32
+ * ```ts
33
+ * const pending = await prepareDocumentProjection(context, source);
34
+ * // Inspect pending.jobId before explicitly resuming this domain operation.
35
+ * ```
36
+ */
37
+ export declare function prepareDocumentProjection(context: OperationExecutionContext, source: DocsProjectionSource): Promise<DocsProjectionPreparation>;
38
+ /**
39
+ * Execute only the authentic supported document proposal using its original foreground scope.
40
+ * @param context - Captured routing and shared lifetime; a resume may use a new caller lifetime.
41
+ * @param jobId - Existing durable pending or explicitly expired job identity.
42
+ * @returns Actual verified domain result after the existing job store records completion.
43
+ * @throws Error on stale inputs, ownership, cancellation, unavailable workers or verification failure.
44
+ * @remarks Graph and observation writes commit separately. Lost acknowledgements leave the
45
+ * job inspectable and require explicit resume after expiry; observation replay is idempotent.
46
+ * No uncertain worker write is replayed inline and no model is used. The receipt is not an
47
+ * atomic cross-database repair guarantee. Synchronous SQLite is cooperatively guarded only.
48
+ * @example
49
+ * ```ts
50
+ * const receipt = await resumeDocumentProjection(capturedContext, pending.jobId);
51
+ * ```
52
+ */
53
+ export declare function resumeDocumentProjection(context: OperationExecutionContext, jobId: string): Promise<DocsProjectionReceipt>;
54
+ /**
55
+ * Prepare authentic optional work and observe its execution within one shared budget.
56
+ * @param context - Context captured before canonical attachment storage or other awaits.
57
+ * @param source - The accepted canonical attachment, preserved on every optional failure.
58
+ * @returns Explicit completion, durable pending identity, or a diagnostic with missing preparation.
59
+ * @remarks A timeout ends observation, not arbitrary work. The hardcoded domain executor
60
+ * guards later handles and writes; teardown cancellation reaches its worker. No model starts.
61
+ * @example
62
+ * ```ts
63
+ * const projection = await projectDocumentAttachment(context, acceptedSource);
64
+ * ```
65
+ */
66
+ export declare function projectDocumentAttachment(context: OperationExecutionContext, source: DocsProjectionSource): Promise<DocsProjectionOutcome>;
67
+ //# sourceMappingURL=projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/docs/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAE9B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,qCAAqC,CAAC;AAkB7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,QAAQ,SAAO,GACd,OAAO,CAAC,qBAAqB,CAAC,CA8ChC;AA4CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,yBAAyB,CAAC,CA0CpC;AA6CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAsHhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAmDhC"}
@@ -0,0 +1,370 @@
1
+ /** Captured, durable preparation of optional projections after canonical docs storage. */
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { DOCS_PROJECTION_PROPOSAL_SCHEMA, DOCS_PROJECTION_RECEIPT_SCHEMA, } from '@cleocode/contracts/operations/docs';
4
+ import { loadProjectInfo } from '../config/registry.js';
5
+ import { enqueueBrainWrite } from '../memory/brain-writer-thread.js';
6
+ import { ensureLlmtxtNodeScoped } from '../memory/graph-auto-populate.js';
7
+ import { generateProjectHash } from '../nexus/hash.js';
8
+ import { worktreeScope } from '../paths.js';
9
+ import { createAttachmentStore } from '../store/attachment-store.js';
10
+ import { assertOperationWriteFence, DurableJobStore } from '../store/background-jobs.js';
11
+ import { bindOperationWriteFence, createOperationExecutionContext, observeOperation, trackBackgroundOp, } from '../store/background-ops.js';
12
+ import { resolveDualScopeDbPath } from '../store/dual-scope-db.js';
13
+ import { getBrainAccessor } from '../store/memory-accessor.js';
14
+ import { getDb } from '../store/sqlite.js';
15
+ /**
16
+ * Capture a canonical project identity and one optional-maintenance deadline before storage.
17
+ * @param projectRoot - Explicit root captured synchronously by the calling surface.
18
+ * @param actor - Foreground caller provenance.
19
+ * @param idempotencyKey - Immutable operation key; explicit resume reuses the prepared job identity.
20
+ * @param budgetMs - Shared foreground budget, defaulting to two seconds.
21
+ * @returns Captured scope or explicit missing coverage; no guessed project identity.
22
+ * @throws RangeError when the caller supplies an invalid foreground budget.
23
+ * @remarks The metadata read is read-only. Its elapsed time is charged to the same
24
+ * deadline; slow filesystem I/O is not claimed to be synchronously preempted. Missing,
25
+ * malformed or mismatched identity never prevents the independent canonical attachment write.
26
+ * @example
27
+ * ```ts
28
+ * const captured = await captureDocumentProjection(root, actor, invocationId);
29
+ * ```
30
+ */
31
+ export async function captureDocumentProjection(projectRoot, actor, idempotencyKey, budgetMs = 2000) {
32
+ if (!Number.isSafeInteger(budgetMs) || budgetMs < 0)
33
+ throw new RangeError('Document projection budget must be a nonnegative safe integer');
34
+ const deadlineAt = Date.now() + budgetMs;
35
+ try {
36
+ const info = await worktreeScope.run({ worktreeRoot: projectRoot, projectHash: generateProjectHash(projectRoot) }, () => loadProjectInfo(projectRoot));
37
+ if (!info || typeof info.projectId !== 'string' || !info.projectId.trim()) {
38
+ throw new Error('Canonical project-info lacks a stable projectId');
39
+ }
40
+ if (info.projectRoot !== undefined && info.projectRoot !== projectRoot) {
41
+ throw new Error('Canonical project-info root differs from the captured project root');
42
+ }
43
+ const context = createOperationExecutionContext({
44
+ projectId: info.projectId,
45
+ projectRoot,
46
+ actor,
47
+ operation: 'docs.projection',
48
+ idempotencyKey,
49
+ }, { budgetMs, deadlineAt });
50
+ try {
51
+ context.assertActive();
52
+ }
53
+ catch (error) {
54
+ context.close();
55
+ throw error;
56
+ }
57
+ return { status: 'ready', context };
58
+ }
59
+ catch (error) {
60
+ return {
61
+ status: 'unavailable',
62
+ outcome: {
63
+ projectId: null,
64
+ projectRoot,
65
+ status: 'failed',
66
+ coverage: 'missing',
67
+ deadlineAt,
68
+ deadlineExceeded: Date.now() >= deadlineAt,
69
+ diagnostics: [error instanceof Error ? error.message : String(error)],
70
+ },
71
+ };
72
+ }
73
+ }
74
+ /** Load actual canonical evidence without changing it or admitting an executor. */
75
+ async function readProjectionProposal(context, captured) {
76
+ const root = context.identity.projectRoot;
77
+ const attachments = createAttachmentStore();
78
+ context.assertActive();
79
+ const owners = await attachments.listByOwner(captured.ownerType, captured.ownerId, root);
80
+ context.assertActive();
81
+ const metadata = owners.find((entry) => entry.id === captured.attachmentId);
82
+ if (!metadata || metadata.sha256 !== captured.sha256) {
83
+ throw new Error('Document projection source or owner no longer matches canonical evidence');
84
+ }
85
+ if ('size' in metadata.attachment)
86
+ context.consume({ bytes: metadata.attachment.size });
87
+ const stored = await attachments.get(captured.sha256, root);
88
+ context.assertActive();
89
+ if (!stored || stored.metadata.id !== captured.attachmentId) {
90
+ throw new Error('Document projection canonical bytes are unavailable');
91
+ }
92
+ if (createHash('sha256').update(stored.bytes).digest('hex') !== captured.sha256) {
93
+ throw new Error('Document projection canonical bytes fail SHA-256 verification');
94
+ }
95
+ const extras = await attachments.getExtras(captured.attachmentId, root);
96
+ context.assertActive();
97
+ const proposal = {
98
+ version: 1,
99
+ operation: 'docs.projection',
100
+ identity: context.identity,
101
+ source: captured,
102
+ observation: {
103
+ kind: 'doc-attachment',
104
+ attachmentId: metadata.id,
105
+ ownerId: captured.ownerId,
106
+ addedAt: metadata.createdAt,
107
+ ...(extras?.slug ? { slug: extras.slug } : {}),
108
+ ...(extras?.type ? { type: extras.type } : {}),
109
+ },
110
+ };
111
+ return proposal;
112
+ }
113
+ /**
114
+ * Persist authentic optional work before an executor can be scheduled.
115
+ *
116
+ * @param context - Captured project, actor, retry identity and shared deadline.
117
+ * @param source - Canonical attachment and owner to independently verify.
118
+ * @returns Durable pending or coalesced job identity, never projection completion.
119
+ * @throws Error - Missing/changed canonical evidence, cancellation, storage or retry conflict.
120
+ * @remarks Canonical bytes are only read. The existing job store owns the atomic
121
+ * proposal insertion and immutable retry check. No executor, embedding or model
122
+ * starts here. An admitted synchronous store call cannot be timer-preempted;
123
+ * committed preparation is returned with its actual deadline observation.
124
+ * @example
125
+ * ```ts
126
+ * const pending = await prepareDocumentProjection(context, source);
127
+ * // Inspect pending.jobId before explicitly resuming this domain operation.
128
+ * ```
129
+ */
130
+ export async function prepareDocumentProjection(context, source) {
131
+ context.assertActive();
132
+ if (context.identity.operation !== 'docs.projection') {
133
+ throw new Error('Document projection requires its captured docs.projection operation');
134
+ }
135
+ const captured = Object.freeze({ ...source });
136
+ if (!/^[a-f0-9]{64}$/.test(captured.sha256)) {
137
+ throw new Error('Document projection requires a canonical SHA-256');
138
+ }
139
+ return worktreeScope.run({
140
+ worktreeRoot: context.identity.projectRoot,
141
+ projectHash: generateProjectHash(context.identity.projectRoot),
142
+ execution: context,
143
+ }, async () => {
144
+ const root = context.identity.projectRoot;
145
+ const proposal = await readProjectionProposal(context, captured);
146
+ const proposalJson = JSON.stringify(DOCS_PROJECTION_PROPOSAL_SCHEMA.parse(proposal));
147
+ context.consume({ bytes: Buffer.byteLength(proposalJson, 'utf8'), items: 1 });
148
+ const db = await getDb(root);
149
+ context.assertActive();
150
+ const store = new DurableJobStore(db, {
151
+ projectId: context.identity.projectId,
152
+ actor: context.identity.actor,
153
+ });
154
+ const job = store.defer(randomUUID(), proposal.operation, Date.now(), {
155
+ projectId: context.identity.projectId,
156
+ idempotencyKey: context.identity.idempotencyKey,
157
+ proposalJson,
158
+ });
159
+ return {
160
+ jobId: job.id,
161
+ proposalHash: createHash('sha256').update(proposalJson).digest('hex'),
162
+ projectId: context.identity.projectId,
163
+ projectRoot: root,
164
+ jobStatus: job.status,
165
+ deadlineAt: context.deadlineAt,
166
+ deadlineExceeded: Date.now() >= context.deadlineAt,
167
+ };
168
+ });
169
+ }
170
+ /** Verify actual domain records after writes or when inspecting a completed operation. */
171
+ async function verifyProjection(context, proposal, receipt) {
172
+ context.assertActive();
173
+ const accessor = await getBrainAccessor(context.identity.projectRoot);
174
+ context.assertActive();
175
+ const observation = await accessor.getObservation(receipt.observationId);
176
+ context.assertActive();
177
+ if (!observation ||
178
+ observation.narrative !== JSON.stringify(proposal.observation) ||
179
+ observation.project !== context.identity.projectId ||
180
+ observation.invalidAt !== null ||
181
+ observation.expiredAt !== null ||
182
+ receipt.sourceHash !== proposal.source.sha256) {
183
+ throw new Error('Document observation verification failed');
184
+ }
185
+ if (receipt.graph === 'completed') {
186
+ const nodeId = `llmtxt:${proposal.source.sha256}`;
187
+ const node = await accessor.getPageNode(nodeId);
188
+ context.assertActive();
189
+ const edges = await accessor.getPageEdges(nodeId, 'in');
190
+ context.assertActive();
191
+ if (!node ||
192
+ node.nodeType !== 'llmtxt' ||
193
+ node.label !== proposal.source.label ||
194
+ !edges.some((edge) => edge.fromId === `${proposal.source.ownerType}:${proposal.source.ownerId}` &&
195
+ edge.edgeType === 'embeds' &&
196
+ edge.provenance === 'auto:docs-add')) {
197
+ throw new Error('Document graph verification failed');
198
+ }
199
+ }
200
+ }
201
+ /**
202
+ * Execute only the authentic supported document proposal using its original foreground scope.
203
+ * @param context - Captured routing and shared lifetime; a resume may use a new caller lifetime.
204
+ * @param jobId - Existing durable pending or explicitly expired job identity.
205
+ * @returns Actual verified domain result after the existing job store records completion.
206
+ * @throws Error on stale inputs, ownership, cancellation, unavailable workers or verification failure.
207
+ * @remarks Graph and observation writes commit separately. Lost acknowledgements leave the
208
+ * job inspectable and require explicit resume after expiry; observation replay is idempotent.
209
+ * No uncertain worker write is replayed inline and no model is used. The receipt is not an
210
+ * atomic cross-database repair guarantee. Synchronous SQLite is cooperatively guarded only.
211
+ * @example
212
+ * ```ts
213
+ * const receipt = await resumeDocumentProjection(capturedContext, pending.jobId);
214
+ * ```
215
+ */
216
+ export async function resumeDocumentProjection(context, jobId) {
217
+ context.assertActive();
218
+ return worktreeScope.run({
219
+ worktreeRoot: context.identity.projectRoot,
220
+ projectHash: generateProjectHash(context.identity.projectRoot),
221
+ execution: context,
222
+ }, async () => {
223
+ const db = await getDb(context.identity.projectRoot);
224
+ context.assertActive();
225
+ const store = new DurableJobStore(db, {
226
+ projectId: context.identity.projectId,
227
+ actor: context.identity.actor,
228
+ });
229
+ const job = store.get(jobId);
230
+ if (!job?.proposalJson ||
231
+ !job.proposalHash ||
232
+ job.operation !== 'docs.projection' ||
233
+ createHash('sha256').update(job.proposalJson).digest('hex') !== job.proposalHash) {
234
+ throw new Error('Document projection requires authentic persisted proposal bytes');
235
+ }
236
+ const proposal = DOCS_PROJECTION_PROPOSAL_SCHEMA.parse(JSON.parse(job.proposalJson));
237
+ if (proposal.identity.projectId !== context.identity.projectId ||
238
+ proposal.identity.projectRoot !== context.identity.projectRoot ||
239
+ context.identity.operation !== proposal.operation ||
240
+ proposal.identity.idempotencyKey !== context.identity.idempotencyKey) {
241
+ throw new Error('Document projection scope differs from the immutable proposal');
242
+ }
243
+ const actual = await readProjectionProposal(context, proposal.source);
244
+ if (JSON.stringify(actual.observation) !== JSON.stringify(proposal.observation)) {
245
+ throw new Error('Document projection source metadata changed after preparation');
246
+ }
247
+ if (job.status === 'complete') {
248
+ const receipt = DOCS_PROJECTION_RECEIPT_SCHEMA.parse(job.result);
249
+ await verifyProjection(context, proposal, receipt);
250
+ return receipt;
251
+ }
252
+ context.assertActive();
253
+ const lease = store.claim(job.id, Date.now());
254
+ const execution = bindOperationWriteFence(context, {
255
+ dbPath: resolveDualScopeDbPath('project', context.identity.projectRoot),
256
+ proposalHash: job.proposalHash,
257
+ lease,
258
+ });
259
+ return worktreeScope.run({
260
+ worktreeRoot: context.identity.projectRoot,
261
+ projectHash: generateProjectHash(context.identity.projectRoot),
262
+ execution,
263
+ }, async () => {
264
+ execution.assertActive();
265
+ store.checkpoint(job.id, JSON.stringify({ stage: 'graph', sourceHash: proposal.source.sha256 }), Date.now());
266
+ const graph = await ensureLlmtxtNodeScoped(execution, proposal.source.sha256, `${proposal.source.ownerType}:${proposal.source.ownerId}`, proposal.source.label);
267
+ execution.assertActive();
268
+ store.checkpoint(job.id, JSON.stringify({ stage: 'observation', graph: graph.status }), Date.now());
269
+ const observation = await enqueueBrainWrite({
270
+ kind: 'observe',
271
+ projectRoot: context.identity.projectRoot,
272
+ params: {
273
+ text: JSON.stringify(proposal.observation),
274
+ title: `Doc attached: ${proposal.observation.slug ?? proposal.source.attachmentId}`,
275
+ type: 'feature',
276
+ sourceType: 'agent',
277
+ sourceConfidence: 'agent',
278
+ agent: proposal.identity.actor,
279
+ project: proposal.identity.projectId,
280
+ attachmentRefs: [proposal.source.sha256],
281
+ origin: 'docs.projection',
282
+ _skipGate: true,
283
+ },
284
+ }, execution);
285
+ if (observation.kind !== 'observe')
286
+ throw new Error('Document writer returned an unrelated result');
287
+ const receipt = {
288
+ version: 1,
289
+ sourceHash: proposal.source.sha256,
290
+ graph: graph.status,
291
+ observationId: observation.result.id,
292
+ verifiedAt: new Date().toISOString(),
293
+ actor: context.identity.actor,
294
+ };
295
+ await verifyProjection(execution, proposal, receipt);
296
+ const finalSource = await readProjectionProposal(execution, proposal.source);
297
+ if (JSON.stringify(finalSource.observation) !== JSON.stringify(proposal.observation)) {
298
+ throw new Error('Document source changed before completion');
299
+ }
300
+ execution.assertActive();
301
+ // Finalization uses the existing store transaction. The earlier domain commits
302
+ // remain separately inspectable if ownership/cancellation blocks finalization.
303
+ assertOperationWriteFence(db, execution);
304
+ store.complete(job.id, receipt, Date.now());
305
+ return receipt;
306
+ });
307
+ });
308
+ }
309
+ /**
310
+ * Prepare authentic optional work and observe its execution within one shared budget.
311
+ * @param context - Context captured before canonical attachment storage or other awaits.
312
+ * @param source - The accepted canonical attachment, preserved on every optional failure.
313
+ * @returns Explicit completion, durable pending identity, or a diagnostic with missing preparation.
314
+ * @remarks A timeout ends observation, not arbitrary work. The hardcoded domain executor
315
+ * guards later handles and writes; teardown cancellation reaches its worker. No model starts.
316
+ * @example
317
+ * ```ts
318
+ * const projection = await projectDocumentAttachment(context, acceptedSource);
319
+ * ```
320
+ */
321
+ export async function projectDocumentAttachment(context, source) {
322
+ let prepared;
323
+ const work = (async () => {
324
+ prepared = await prepareDocumentProjection(context, source);
325
+ context.assertActive();
326
+ return resumeDocumentProjection(context, prepared.jobId);
327
+ })();
328
+ trackBackgroundOp(work);
329
+ const observed = await observeOperation(context, work);
330
+ const base = {
331
+ projectId: context.identity.projectId,
332
+ projectRoot: context.identity.projectRoot,
333
+ deadlineAt: context.deadlineAt,
334
+ deadlineExceeded: observed.deadlineExceeded,
335
+ ...(prepared
336
+ ? {
337
+ jobId: prepared.jobId,
338
+ }
339
+ : {}),
340
+ };
341
+ if (observed.settled && observed.success)
342
+ return {
343
+ ...base,
344
+ status: 'completed',
345
+ coverage: 'current',
346
+ receipt: observed.value,
347
+ diagnostics: [],
348
+ };
349
+ const diagnostics = [];
350
+ if (observed.settled) {
351
+ // Preserve nested SQLite diagnostics without allowing cyclic causes to loop.
352
+ let error = observed.error;
353
+ for (let depth = 0; error && depth < 16; depth++) {
354
+ diagnostics.push(error.message);
355
+ error = error.cause instanceof Error ? error.cause : undefined;
356
+ }
357
+ }
358
+ else {
359
+ diagnostics.push(`Foreground observation ended (${observed.reason}); underlying outcome remains unresolved`);
360
+ }
361
+ if (!prepared)
362
+ diagnostics.push('No durable pending identity was observed; inspect the accepted attachment before retrying');
363
+ return {
364
+ ...base,
365
+ status: observed.settled ? 'failed' : 'pending',
366
+ coverage: prepared ? (observed.settled ? 'failed' : 'partial') : 'missing',
367
+ diagnostics,
368
+ };
369
+ }
370
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/docs/projection.ts"],"names":[],"mappings":"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"}
@@ -131,7 +131,9 @@ export type AcceptanceDriftKind =
131
131
  | 'legacy-children-omitted'
132
132
  /** Both populated and disagreeing by something other than the child
133
133
  * projections. */
134
- | 'count-mismatch';
134
+ | 'count-mismatch'
135
+ /** Equal populations carry different criterion text or ordering. */
136
+ | 'content-mismatch';
135
137
  /** One task whose acceptance stores disagree. */
136
138
  export interface AcceptanceDriftEntry {
137
139
  /** Task id, e.g. `T11176`. */
@@ -142,7 +144,7 @@ export interface AcceptanceDriftEntry {
142
144
  readonly kind: AcceptanceDriftKind;
143
145
  /** Number of entries in `acceptance_json`. */
144
146
  readonly jsonCount: number;
145
- /** Rows in `tasks_task_acceptance_criteria` with `kind='text'`. */
147
+ /** Non-child rows in `tasks_task_acceptance_criteria` (text or evidence-bound). */
146
148
  readonly textRowCount: number;
147
149
  /** Rows with `kind='child_task'` — container projections, not text. */
148
150
  readonly childRowCount: number;
@@ -234,6 +236,8 @@ export declare function classifyAcceptanceDrift(row: {
234
236
  jsonCount: number;
235
237
  textRowCount: number;
236
238
  childRowCount: number;
239
+ /** Whether persisted criterion text and ordering agree when assessed. */
240
+ contentMatches?: boolean;
237
241
  }): AcceptanceDriftKind | null;
238
242
  /**
239
243
  * Scan a project's store for acceptance drift.
@@ -1 +1 @@
1
- {"version":3,"file":"acceptance-drift.d.ts","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAUH;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,mBAAmB;AAC7B,2DAA2D;AACzD,sBAAsB;AACxB;yEACyE;GACvE,iBAAiB;AACnB;;YAEY;GACV,yBAAyB;AAC3B;mBACmB;GACjB,gBAAgB,CAAC;AAErB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CASrF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAmBpF;AA+ED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,mBAAmB,GAAG,IAAI,CAuB7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,CAqGlF"}
1
+ {"version":3,"file":"acceptance-drift.d.ts","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAYH;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,mBAAmB;AAC7B,2DAA2D;AACzD,sBAAsB;AACxB;yEACyE;GACvE,iBAAiB;AACnB;;YAEY;GACV,yBAAyB;AAC3B;mBACmB;GACjB,gBAAgB;AAClB,oEAAoE;GAClE,kBAAkB,CAAC;AAEvB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CASrF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAmBpF;AA+FD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,mBAAmB,GAAG,IAAI,CAuB7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,CA8HlF"}
@@ -96,7 +96,9 @@
96
96
  */
97
97
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
98
98
  import { join } from 'node:path';
99
+ import { acceptanceItemSchema } from '@cleocode/contracts';
99
100
  import { openCleoDbSnapshot } from '../store/open-cleo-db.js';
101
+ import { acItemToText } from '../tasks/ac-table.js';
100
102
  /** The dual-scope store filename (ADR-068). */
101
103
  const LIVE_STORE_FILENAME = 'cleo.db';
102
104
  /**
@@ -192,6 +194,8 @@ function toScanRow(record) {
192
194
  const jsonN = columnAsCount(record['json_n']);
193
195
  const textN = columnAsCount(record['text_n']);
194
196
  const childN = columnAsCount(record['child_n']);
197
+ const acceptanceJson = columnAsStringOrNull(record['acceptance_json']);
198
+ const rowTextsJson = columnAsStringOrNull(record['row_texts_json']);
195
199
  // Name the offending column. An error that says only "the shape is wrong"
196
200
  // sends the reader to the SQL when the problem is one value in one row —
197
201
  // the failure describing the wrong thing with full confidence (ADR-092).
@@ -200,8 +204,16 @@ function toScanRow(record) {
200
204
  ['json_n', jsonN],
201
205
  ['text_n', textN],
202
206
  ['child_n', childN],
207
+ ['acceptance_json', acceptanceJson],
208
+ ['row_texts_json', rowTextsJson],
203
209
  ].find(([, value]) => value === null)?.[0];
204
- if (bad !== undefined || id === null || jsonN === null || textN === null || childN === null) {
210
+ if (bad !== undefined ||
211
+ id === null ||
212
+ jsonN === null ||
213
+ textN === null ||
214
+ childN === null ||
215
+ acceptanceJson === null ||
216
+ rowTextsJson === null) {
205
217
  throw new Error(`acceptance-drift: scan column "${String(bad)}" had an unexpected type ` +
206
218
  `(got ${typeof record[String(bad)]}) for task ${String(record['id'] ?? '<unknown>')}. ` +
207
219
  'The SQL and ScanRow have drifted apart.');
@@ -216,6 +228,8 @@ function toScanRow(record) {
216
228
  json_n: jsonN,
217
229
  text_n: textN,
218
230
  child_n: childN,
231
+ acceptance_json: acceptanceJson,
232
+ row_texts_json: rowTextsJson,
219
233
  };
220
234
  }
221
235
  /**
@@ -237,7 +251,7 @@ export function classifyAcceptanceDrift(row) {
237
251
  // child projection alike. Measured at 607/608 for tasks created since the
238
252
  // convention settled in 2026-06.
239
253
  if (jsonCount === expected)
240
- return null;
254
+ return row.contentMatches === false ? 'content-mismatch' : null;
241
255
  if (jsonCount > 0 && expected === 0)
242
256
  return 'json-never-projected';
243
257
  // Rows exist and the JSON column is empty. This is the only shape where the
@@ -278,6 +292,7 @@ export function scanAcceptanceDrift(projectRoot) {
278
292
  'rows-unreadable': 0,
279
293
  'legacy-children-omitted': 0,
280
294
  'count-mismatch': 0,
295
+ 'content-mismatch': 0,
281
296
  };
282
297
  if (!existsSync(storePath)) {
283
298
  return {
@@ -308,8 +323,13 @@ export function scanAcceptanceDrift(projectRoot) {
308
323
  OR t.acceptance_json IN ('', '[]', 'null')
309
324
  THEN 0
310
325
  ELSE json_array_length(t.acceptance_json) END AS json_n,
311
- COALESCE(SUM(CASE WHEN c.kind = 'text' THEN 1 ELSE 0 END), 0) AS text_n,
312
- COALESCE(SUM(CASE WHEN c.kind = 'child_task' THEN 1 ELSE 0 END), 0) AS child_n
326
+ COALESCE(SUM(CASE WHEN c.kind IN ('text', 'evidence_bound') THEN 1 ELSE 0 END), 0) AS text_n,
327
+ COALESCE(SUM(CASE WHEN c.kind = 'child_task' THEN 1 ELSE 0 END), 0) AS child_n,
328
+ CASE WHEN t.acceptance_json IS NULL OR t.acceptance_json IN ('', 'null')
329
+ THEN '[]' ELSE t.acceptance_json END AS acceptance_json,
330
+ (SELECT json_group_array(text) FROM
331
+ (SELECT c2.text FROM main.tasks_task_acceptance_criteria c2
332
+ WHERE c2.task_id = t.id ORDER BY c2.ordinal)) AS row_texts_json
313
333
  FROM main.tasks_tasks t
314
334
  LEFT JOIN main.tasks_task_acceptance_criteria c ON c.task_id = t.id
315
335
  GROUP BY t.id`)
@@ -325,7 +345,25 @@ export function scanAcceptanceDrift(projectRoot) {
325
345
  const totalRows = textRowCount + childRowCount;
326
346
  if (jsonCount !== totalRows)
327
347
  rawDisagreements += 1;
328
- const kind = classifyAcceptanceDrift({ jsonCount, textRowCount, childRowCount });
348
+ // Validate persisted payloads rather than silently coercing malformed
349
+ // records into empty arrays. The canonical formatter preserves structured
350
+ // gates while comparing their serialized representation to row text.
351
+ const legacy = acceptanceItemSchema
352
+ .array()
353
+ .parse(JSON.parse(row.acceptance_json))
354
+ .map(acItemToText);
355
+ const projected = acceptanceItemSchema
356
+ .array()
357
+ .parse(JSON.parse(row.row_texts_json))
358
+ .map(acItemToText);
359
+ const contentMatches = legacy.length === projected.length &&
360
+ legacy.every((text, index) => text === projected[index]);
361
+ const kind = classifyAcceptanceDrift({
362
+ jsonCount,
363
+ textRowCount,
364
+ childRowCount,
365
+ contentMatches,
366
+ });
329
367
  if (kind === null)
330
368
  continue;
331
369
  byKind[kind] += 1;
@@ -1 +1 @@
1
- {"version":3,"file":"acceptance-drift.js","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acceptance-drift.js","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,+CAA+C;AAC/C,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,gCAAgC,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,YAAY,CAAC;AAkG7D;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,YAAoB;IAC9D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAA0B,CAAC;QACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QACrD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAA+B;IAC1E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,aAAa,CACX,IAAI,CAAC,YAAY,EACjB,GAAG,IAAI,CAAC,SAAS,CACf;QACE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,IAAI,EACF,wFAAwF;YACxF,qFAAqF;YACrF,mDAAmD;QACrD,OAAO;KACR,EACD,IAAI,EACJ,CAAC,CACF,IAAI,EACL,OAAO,CACR,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAcD,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,KAAiC;IAC7D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAiC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,SAAS,CAAC,MAAsC;IACvD,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEpE,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,GAAG,GAAG;QACV,CAAC,IAAI,EAAE,EAAE,CAAC;QACV,CAAC,QAAQ,EAAE,KAAK,CAAC;QACjB,CAAC,QAAQ,EAAE,KAAK,CAAC;QACjB,CAAC,SAAS,EAAE,MAAM,CAAC;QACnB,CAAC,iBAAiB,EAAE,cAAc,CAAC;QACnC,CAAC,gBAAgB,EAAE,YAAY,CAAC;KACjC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3C,IACE,GAAG,KAAK,SAAS;QACjB,EAAE,KAAK,IAAI;QACX,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,MAAM,KAAK,IAAI;QACf,cAAc,KAAK,IAAI;QACvB,YAAY,KAAK,IAAI,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,CAAC,GAAG,CAAC,2BAA2B;YACtE,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI;YACvF,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE;QACF,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS;QACvD,UAAU,EAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,cAAc;QAC/B,cAAc,EAAE,YAAY;KAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAMvC;IACC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;IAE9C,0CAA0C;IAC1C,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnD,yEAAyE;IACzE,0EAA0E;IAC1E,iCAAiC;IACjC,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,IAAI,SAAS,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAEnE,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAE9C,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,yBAAyB;IACzB,OAAO,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAkD;QAC3D,sBAAsB,EAAE,CAAC;QACzB,iBAAiB,EAAE,CAAC;QACpB,yBAAyB,EAAE,CAAC;QAC5B,gBAAgB,EAAE,CAAC;QACnB,kBAAkB,EAAE,CAAC;KACtB,CAAC;IAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,SAAS;YACT,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,KAAK;YACb,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;YACpB,YAAY;SACb,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,2EAA2E;QAC3E,2EAA2E;QAC3E,sEAAsE;QACtE,yEAAyE;QACzE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE;aACrB,OAAO,CACN;;;;;;;;;;;;;;;;wBAgBgB,CACjB;aACA,GAAG,EAAE;aACL,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAwC,EAAE,GAAG,KAAK,EAAE,CAAC;QACjE,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;YAC7B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;YAChC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YAClC,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;YAE/C,IAAI,SAAS,KAAK,SAAS;gBAAE,gBAAgB,IAAI,CAAC,CAAC;YAEnD,sEAAsE;YACtE,0EAA0E;YAC1E,qEAAqE;YACrE,MAAM,MAAM,GAAG,oBAAoB;iBAChC,KAAK,EAAE;iBACP,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;iBACtC,GAAG,CAAC,YAAY,CAAC,CAAC;YACrB,MAAM,SAAS,GAAG,oBAAoB;iBACnC,KAAK,EAAE;iBACP,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;iBACrC,GAAG,CAAC,YAAY,CAAC,CAAC;YACrB,MAAM,cAAc,GAClB,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;gBAClC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,uBAAuB,CAAC;gBACnC,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,cAAc;aACf,CAAC,CAAC;YACH,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YAE5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,GAAG,CAAC,EAAE;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI;gBACJ,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAChD,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,mEAAmE;gBACnE,iEAAiE;gBACjE,iDAAiD;gBACjD,SAAS,EACP,GAAG,CAAC,UAAU,KAAK,IAAI;oBACvB,GAAG,CAAC,UAAU,KAAK,EAAE;oBACrB,GAAG,CAAC,UAAU,GAAG,gCAAgC;aACpD,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,SAAS;YACT,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,gBAAgB;YAChB,OAAO;YACP,MAAM;YACN,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YAC3D,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5D,gBAAgB,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;YACtF,YAAY;SACb,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}