@cleocode/core 2026.9.8 → 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 (561) 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 +11 -1
  95. package/dist/memory/brain-writer-thread.d.ts.map +1 -1
  96. package/dist/memory/brain-writer-thread.js +87 -20
  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 +89 -42
  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/validation/engine-ops.d.ts +17 -1
  543. package/dist/validation/engine-ops.d.ts.map +1 -1
  544. package/dist/validation/engine-ops.js +149 -11
  545. package/dist/validation/engine-ops.js.map +1 -1
  546. package/dist/workgraph/reparent-preflight.d.ts +1 -1
  547. package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
  548. package/dist/workgraph/reparent-preflight.js +6 -1
  549. package/dist/workgraph/reparent-preflight.js.map +1 -1
  550. package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
  551. package/dist/workgraph/scaffold-apply.js +81 -76
  552. package/dist/workgraph/scaffold-apply.js.map +1 -1
  553. package/dist/workgraph/structure-validation.d.ts +1 -1
  554. package/dist/workgraph/structure-validation.d.ts.map +1 -1
  555. package/dist/workgraph/structure-validation.js +6 -1
  556. package/dist/workgraph/structure-validation.js.map +1 -1
  557. package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
  558. package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
  559. package/package.json +18 -13
  560. package/schemas/config.schema.json +2 -2
  561. package/templates/CLEO-INJECTION.md +103 -101
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * Wraps all memory writes with three ordered checks:
5
5
  * A. Content-hash deduplication (always runs — fast, no embedding needed)
6
- * B. Cosine similarity deduplication (runs when embedding is available; skipped for trusted sources)
6
+ * B. Similarity candidate discovery (runs when embedding is available; skipped for trusted sources)
7
7
  * C. Confidence threshold enforcement (always runs)
8
8
  *
9
9
  * Trusted sources (manual, owner) bypass Check B but still run A and C.
10
10
  *
11
11
  * Design goals:
12
- * - NEVER block the primary write path on error — all checks wrapped in try/catch
12
+ * - Failed required checks reject storage rather than authorize unverified writes
13
13
  * - Degrade gracefully to hash-only dedup when embedding is unavailable
14
14
  * - Contradiction detection uses a polarity-flip heuristic (no LLM required)
15
15
  *
@@ -17,13 +17,14 @@
17
17
  * @epic T549
18
18
  */
19
19
  import { createHash } from 'node:crypto';
20
+ import { captureProjectScope, worktreeScope } from '../project-scope.js';
21
+ import { assertOperationWriteFence } from '../store/background-jobs.js';
20
22
  import { isEmbeddingAvailable } from './brain-embedding.js';
21
23
  import { searchSimilar } from './brain-similarity.js';
22
- import { addGraphEdge } from './graph-auto-populate.js';
23
24
  // ============================================================================
24
25
  // Constants
25
26
  // ============================================================================
26
- /** Cosine distance below which two entries are considered exact duplicates. */
27
+ /** Cosine distance below which two entries are flagged as potential duplicate candidates. */
27
28
  const DUPLICATE_THRESHOLD = 0.15;
28
29
  /** Cosine distance below which two entries are considered closely related. */
29
30
  const SIMILAR_THRESHOLD = 0.3;
@@ -104,86 +105,38 @@ function hasContradictingPolarity(existingText, newText) {
104
105
  const overlap = [...newWords].filter((w) => existingWords.has(w));
105
106
  return overlap.length >= 3;
106
107
  }
107
- /**
108
- * Mark an existing entry as invalid (superseded).
109
- * Sets the invalid_at column to now on whichever typed table owns the entry.
110
- *
111
- * Determined by ID prefix conventions:
112
- * D... → brain_decisions
113
- * P... → brain_patterns
114
- * L... → brain_learnings
115
- * O... / CM-... → brain_observations
116
- */
117
- async function invalidateEntry(projectRoot, entryId) {
118
- const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
119
- try {
120
- const { getBrainNativeDb, getBrainDb } = await import('../store/memory-sqlite.js');
121
- await getBrainDb(projectRoot);
122
- const nativeDb = getBrainNativeDb(projectRoot);
123
- if (!nativeDb)
124
- return;
125
- // Route by ID prefix to correct table
126
- if (entryId.startsWith('D-') || /^D\d/.test(entryId)) {
127
- nativeDb
128
- .prepare('UPDATE brain_decisions SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
129
- .run(now, entryId);
130
- }
131
- else if (entryId.startsWith('P-') || /^P\d/.test(entryId)) {
132
- nativeDb
133
- .prepare('UPDATE brain_patterns SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
134
- .run(now, entryId);
135
- }
136
- else if (entryId.startsWith('L-') || /^L\d/.test(entryId)) {
137
- nativeDb
138
- .prepare('UPDATE brain_learnings SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
139
- .run(now, entryId);
140
- }
141
- else {
142
- // O-, O[base36], CM- → observations
143
- nativeDb
144
- .prepare('UPDATE brain_observations SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
145
- .run(now, entryId);
146
- }
147
- }
148
- catch {
149
- // Best-effort — invalidation failure must not block the primary write
150
- }
151
- }
152
108
  /**
153
109
  * Increment the citation_count of an existing entry by 1.
154
- * Routes by the same ID-prefix convention as invalidateEntry.
110
+ * Routes to the canonical typed table using the record identifier.
155
111
  */
156
112
  async function incrementCitationCount(projectRoot, entryId) {
157
- try {
158
- const { getBrainNativeDb, getBrainDb } = await import('../store/memory-sqlite.js');
159
- await getBrainDb(projectRoot);
160
- const nativeDb = getBrainNativeDb(projectRoot);
161
- if (!nativeDb)
162
- return;
163
- if (entryId.startsWith('D-') || /^D\d/.test(entryId)) {
164
- nativeDb
165
- .prepare('UPDATE brain_decisions SET citation_count = citation_count + 1 WHERE id = ?')
166
- .run(entryId);
167
- }
168
- else if (entryId.startsWith('P-') || /^P\d/.test(entryId)) {
169
- nativeDb
170
- .prepare('UPDATE brain_patterns SET citation_count = citation_count + 1 WHERE id = ?')
171
- .run(entryId);
172
- }
173
- else if (entryId.startsWith('L-') || /^L\d/.test(entryId)) {
174
- nativeDb
175
- .prepare('UPDATE brain_learnings SET citation_count = citation_count + 1 WHERE id = ?')
176
- .run(entryId);
177
- }
178
- else {
179
- nativeDb
180
- .prepare('UPDATE brain_observations SET citation_count = citation_count + 1 WHERE id = ?')
181
- .run(entryId);
182
- }
183
- }
184
- catch {
185
- // Best-effort
186
- }
113
+ const scope = captureProjectScope(projectRoot, worktreeScope.getStore());
114
+ const { getBrainNativeDb, getBrainDb } = await import('../store/memory-sqlite.js');
115
+ scope.execution?.assertActive();
116
+ const db = await getBrainDb(scope.worktreeRoot);
117
+ scope.execution?.assertActive();
118
+ const nativeDb = getBrainNativeDb(scope.worktreeRoot);
119
+ if (!nativeDb)
120
+ throw new Error('E_CITATION_STORAGE_UNAVAILABLE: canonical native handle absent');
121
+ if (scope.execution && nativeDb.isTransaction)
122
+ throw new Error('Citation write cannot join an unowned native transaction');
123
+ const table = entryId.startsWith('D-') || /^D\d/.test(entryId)
124
+ ? 'brain_decisions'
125
+ : entryId.startsWith('P-') || /^P\d/.test(entryId)
126
+ ? 'brain_patterns'
127
+ : entryId.startsWith('L-') || /^L\d/.test(entryId)
128
+ ? 'brain_learnings'
129
+ : 'brain_observations';
130
+ db.transaction((tx) => {
131
+ scope.execution?.assertActive();
132
+ if (scope.execution)
133
+ assertOperationWriteFence(tx, scope.execution);
134
+ const result = nativeDb
135
+ .prepare(`UPDATE ${table} SET citation_count = citation_count + 1 WHERE id = ?`)
136
+ .run(entryId);
137
+ if (Number(result.changes) !== 1)
138
+ throw new Error('E_CITATION_TARGET_MISSING: assessed entry changed before citation write');
139
+ });
187
140
  }
188
141
  /**
189
142
  * Check A: SHA-256 content-hash deduplication for any of the four brain tables.
@@ -201,25 +154,23 @@ async function incrementCitationCount(projectRoot, entryId) {
201
154
  * @param text - Candidate content text (hashed internally)
202
155
  */
203
156
  async function hashDedupCheck(projectRoot, text, table = 'brain_observations') {
204
- try {
205
- const { getBrainNativeDb, getBrainDb } = await import('../store/memory-sqlite.js');
206
- await getBrainDb(projectRoot);
207
- const nativeDb = getBrainNativeDb(projectRoot);
208
- if (!nativeDb)
209
- return { matched: false };
210
- const hash = contentHashPrefix(text);
211
- // Permanent dedup — no time window. A hash match means exact duplicate regardless of age.
212
- const rows = nativeDb
213
- .prepare(`SELECT id FROM ${table} WHERE content_hash = ? AND invalid_at IS NULL LIMIT 1`)
214
- .all(hash);
215
- if (rows.length > 0) {
216
- return { matched: true, id: rows[0].id };
217
- }
218
- }
219
- catch {
220
- // Degrade gracefully — if dedup check fails, allow the write
221
- }
222
- return { matched: false };
157
+ const scope = captureProjectScope(projectRoot, worktreeScope.getStore());
158
+ const { getBrainNativeDb, getBrainDb } = await import('../store/memory-sqlite.js');
159
+ scope.execution?.assertActive();
160
+ await getBrainDb(scope.worktreeRoot);
161
+ scope.execution?.assertActive();
162
+ const nativeDb = getBrainNativeDb(scope.worktreeRoot);
163
+ if (!nativeDb)
164
+ throw new Error('E_DEDUP_STORAGE_UNAVAILABLE: canonical native handle absent');
165
+ const hash = contentHashPrefix(text);
166
+ const row = nativeDb
167
+ .prepare(`SELECT id FROM ${table} WHERE content_hash = ? AND invalid_at IS NULL LIMIT 1`)
168
+ .all(hash)[0];
169
+ if (!row)
170
+ return { matched: false };
171
+ if (typeof row.id !== 'string' || !row.id)
172
+ throw new Error('E_DEDUP_INVALID_RECORD: canonical duplicate has no valid identity');
173
+ return { matched: true, id: row.id };
223
174
  }
224
175
  /**
225
176
  * Determine whether the candidate is from a trusted source that bypasses
@@ -260,8 +211,8 @@ export async function checkHashDedup(projectRoot, text, table) {
260
211
  *
261
212
  * Checks (in order):
262
213
  * A0. Title-prefix blocklist (T993) — rejects known-noise titles before any DB work
263
- * A. Content-hash deduplication (always; degrades to observations-only when DB unavailable)
264
- * B. Cosine similarity deduplication + contradiction detection (skipped for trusted sources)
214
+ * A. Content-hash deduplication (required; unavailable reads reject verification)
215
+ * B. Similarity and contradiction candidates (skipped for trusted sources)
265
216
  * C. Confidence threshold >= 0.40 (always)
266
217
  *
267
218
  * The gate NEVER stores the entry itself — it only decides whether the caller
@@ -272,116 +223,122 @@ export async function checkHashDedup(projectRoot, text, table) {
272
223
  *
273
224
  * @param projectRoot - Project root for brain.db access
274
225
  * @param candidate - Candidate to verify
275
- * @returns GateResult describing what should happen
226
+ * @returns GateResult describing what should happen, including explicit verification failures.
227
+ * @remarks A duplicate citation is awaited before reporting merged. Required read/write
228
+ * failure cannot authorize storage; inherited deadlines and cancellation are retained.
229
+ * @example
230
+ * ```ts
231
+ * const result = await verifyCandidate(projectRoot, candidate);
232
+ * ```
276
233
  */
277
234
  export async function verifyCandidate(projectRoot, candidate) {
278
- try {
279
- // -----------------------------------------------------------------------
280
- // Check A0: Title-prefix blocklist (T993) — fastest possible rejection.
281
- // Rejects known-noise titles before any hash/similarity work runs.
282
- // -----------------------------------------------------------------------
283
- const candidateTitle = candidate.title ?? '';
284
- if (BRAIN_NOISE_PREFIXES.some((prefix) => candidateTitle.startsWith(prefix))) {
285
- return { action: 'rejected', id: null, reason: 'noise-prefix' };
286
- }
287
- // -----------------------------------------------------------------------
288
- // Check A: Content-hash dedup (always, fast)
289
- // T737: Route to the correct typed table based on the candidate's memory type.
290
- // -----------------------------------------------------------------------
291
- const dedupTable = candidate.memoryType === 'semantic'
292
- ? // semantic defaults to learnings unless the caller routes to decisions
293
- // (decisions bypass verifyCandidate and call storeDecision directly via
294
- // llm-extraction storeExtracted — this branch covers learnings path)
295
- 'brain_learnings'
296
- : candidate.memoryType === 'procedural'
297
- ? 'brain_patterns'
298
- : 'brain_observations'; // episodic → observations
299
- const hashCheck = await hashDedupCheck(projectRoot, candidate.text, dedupTable);
300
- if (hashCheck.matched) {
301
- // Bump citation count on the existing entry (fire-and-forget)
302
- incrementCitationCount(projectRoot, hashCheck.id).catch(() => undefined);
303
- return {
304
- action: 'merged',
305
- id: hashCheck.id,
306
- reason: `exact-duplicate (hash match) of ${hashCheck.id}`,
307
- };
308
- }
309
- // -----------------------------------------------------------------------
310
- // Check B: Cosine similarity + contradiction (skip for trusted sources)
311
- // -----------------------------------------------------------------------
312
- const trusted = isTrustedSource(candidate);
313
- if (!trusted && isEmbeddingAvailable()) {
314
- try {
315
- const similar = await searchSimilar(candidate.text, projectRoot, 5);
316
- if (similar.length > 0) {
317
- const nearest = similar[0];
318
- if (nearest.distance < DUPLICATE_THRESHOLD) {
319
- // Near-identical — merge into existing
320
- incrementCitationCount(projectRoot, nearest.id).catch(() => undefined);
321
- return {
322
- action: 'merged',
323
- id: nearest.id,
324
- reason: `near-duplicate of ${nearest.id} (cosine distance=${nearest.distance.toFixed(3)})`,
325
- similarity: nearest.distance,
326
- };
327
- }
328
- if (nearest.distance < SIMILAR_THRESHOLD) {
329
- // Related — check for contradiction
330
- if (hasContradictingPolarity(nearest.text, candidate.text)) {
331
- // New text supersedes old — invalidate old entry
332
- await invalidateEntry(projectRoot, nearest.id);
333
- // Record supersession graph edge (fire-and-forget)
334
- // Note: we don't have the new entry's ID yet so we'll skip the edge here.
335
- // The caller should add the supersedes edge after storage using the returned existingId.
235
+ const scope = captureProjectScope(projectRoot, worktreeScope.getStore());
236
+ return worktreeScope.run(scope, async () => {
237
+ try {
238
+ // -----------------------------------------------------------------------
239
+ // Check A0: Title-prefix blocklist (T993) — fastest possible rejection.
240
+ // Rejects known-noise titles before any hash/similarity work runs.
241
+ // -----------------------------------------------------------------------
242
+ const candidateTitle = candidate.title ?? '';
243
+ if (BRAIN_NOISE_PREFIXES.some((prefix) => candidateTitle.startsWith(prefix))) {
244
+ return { action: 'rejected', id: null, reason: 'noise-prefix' };
245
+ }
246
+ // -----------------------------------------------------------------------
247
+ // Check A: Content-hash dedup (always, fast)
248
+ // T737: Route to the correct typed table based on the candidate's memory type.
249
+ // -----------------------------------------------------------------------
250
+ const dedupTable = candidate.memoryType === 'semantic'
251
+ ? // semantic defaults to learnings unless the caller routes to decisions
252
+ // (decisions bypass verifyCandidate and call storeDecision directly via
253
+ // llm-extraction storeExtracted — this branch covers learnings path)
254
+ 'brain_learnings'
255
+ : candidate.memoryType === 'procedural'
256
+ ? 'brain_patterns'
257
+ : 'brain_observations'; // episodic → observations
258
+ const hashCheck = await hashDedupCheck(scope.worktreeRoot, candidate.text, dedupTable);
259
+ if (hashCheck.matched) {
260
+ // A merged result is truthful only after its citation write settles.
261
+ await incrementCitationCount(scope.worktreeRoot, hashCheck.id);
262
+ return {
263
+ action: 'merged',
264
+ id: hashCheck.id,
265
+ reason: `exact-duplicate (hash match) of ${hashCheck.id}`,
266
+ };
267
+ }
268
+ // -----------------------------------------------------------------------
269
+ // Check B: Cosine similarity + contradiction (skip for trusted sources)
270
+ // -----------------------------------------------------------------------
271
+ const trusted = isTrustedSource(candidate);
272
+ if (!trusted && isEmbeddingAvailable()) {
273
+ try {
274
+ const similar = await searchSimilar(candidate.text, scope.worktreeRoot, 5);
275
+ if (similar.length > 0) {
276
+ const nearest = similar[0];
277
+ if (nearest.distance < DUPLICATE_THRESHOLD) {
278
+ // Similarity cannot establish that two claims are interchangeable.
279
+ return {
280
+ action: 'stored',
281
+ id: null,
282
+ candidateIds: [nearest.id],
283
+ reason: `potential-duplicate of ${nearest.id} (cosine distance=${nearest.distance.toFixed(3)})`,
284
+ similarity: nearest.distance,
285
+ };
286
+ }
287
+ if (nearest.distance < SIMILAR_THRESHOLD) {
288
+ // Related — check for contradiction
289
+ if (hasContradictingPolarity(nearest.text, candidate.text)) {
290
+ // Preserve both claims until the caller supplies sourced authority.
291
+ return {
292
+ action: 'stored',
293
+ id: null,
294
+ reason: `potential-contradiction ${nearest.id}`,
295
+ candidateIds: [nearest.id],
296
+ similarity: nearest.distance,
297
+ };
298
+ }
299
+ // Similar but not contradicting — store as new (link will be added post-storage)
336
300
  return {
337
301
  action: 'stored',
338
302
  id: null,
339
- reason: `contradiction-supersedes ${nearest.id}`,
303
+ reason: `similar-but-distinct to ${nearest.id} (distance=${nearest.distance.toFixed(3)})`,
340
304
  similarity: nearest.distance,
341
305
  };
342
306
  }
343
- // Similar but not contradicting — store as new (link will be added post-storage)
344
- return {
345
- action: 'stored',
346
- id: null,
347
- reason: `similar-but-distinct to ${nearest.id} (distance=${nearest.distance.toFixed(3)})`,
348
- similarity: nearest.distance,
349
- };
350
307
  }
351
308
  }
309
+ catch {
310
+ scope.execution?.assertActive();
311
+ // Embedding/similarity check failed — degrade to hash-only (already passed above)
312
+ }
352
313
  }
353
- catch {
354
- // Embedding/similarity check failed — degrade to hash-only (already passed above)
314
+ // -----------------------------------------------------------------------
315
+ // Check C: Confidence threshold
316
+ // -----------------------------------------------------------------------
317
+ if (candidate.confidence < MINIMUM_CONFIDENCE) {
318
+ return {
319
+ action: 'pending',
320
+ id: null,
321
+ reason: `confidence ${candidate.confidence.toFixed(2)} below minimum ${MINIMUM_CONFIDENCE}`,
322
+ };
355
323
  }
324
+ // All checks passed — caller may store only within the original lifetime.
325
+ scope.execution?.assertActive();
326
+ return {
327
+ action: 'stored',
328
+ id: null,
329
+ reason: 'verified-new',
330
+ };
356
331
  }
357
- // -----------------------------------------------------------------------
358
- // Check C: Confidence threshold
359
- // -----------------------------------------------------------------------
360
- if (candidate.confidence < MINIMUM_CONFIDENCE) {
332
+ catch (err) {
333
+ // Unavailable verification cannot authorize a new write.
334
+ const message = err instanceof Error ? err.message : String(err);
361
335
  return {
362
- action: 'pending',
336
+ action: 'rejected',
363
337
  id: null,
364
- reason: `confidence ${candidate.confidence.toFixed(2)} below minimum ${MINIMUM_CONFIDENCE}`,
338
+ reason: `gate-error: ${message}`,
365
339
  };
366
340
  }
367
- // All checks passed — caller should store
368
- return {
369
- action: 'stored',
370
- id: null,
371
- reason: 'verified-new',
372
- };
373
- }
374
- catch (err) {
375
- // Safety net: gate errors must never block writes.
376
- // Log a warning and allow the store to proceed.
377
- const message = err instanceof Error ? err.message : String(err);
378
- console.warn(`[extraction-gate] verifyCandidate error (allowing store): ${message}`);
379
- return {
380
- action: 'stored',
381
- id: null,
382
- reason: `gate-error-passthrough: ${message}`,
383
- };
384
- }
341
+ });
385
342
  }
386
343
  /**
387
344
  * Run a batch of candidates through the verification gate sequentially.
@@ -477,34 +434,39 @@ export async function storeVerifiedCandidate(projectRoot, candidate) {
477
434
  * For 'merged', increments the existing entry's citation_count (already done inside verifyCandidate).
478
435
  * For 'pending' and 'rejected', returns the GateResult with no storage.
479
436
  *
480
- * After storage, adds a supersedes edge when the gate returned a contradiction reason.
437
+ * Similarity findings remain review candidates and never create supersession edges.
481
438
  *
482
439
  * @param projectRoot - Project root for brain.db access
483
440
  * @param candidate - Candidate to verify and store
484
- * @returns Final GateResult with the stored/merged entry ID populated
441
+ * @returns Final GateResult with the stored/merged entry ID populated.
442
+ * @remarks Runs under captured project ownership and the original execution lifetime.
443
+ * Rejected verification is retained; cancellation cannot become authorization to store.
444
+ * @example
445
+ * ```ts
446
+ * const result = await verifyAndStore(projectRoot, candidate);
447
+ * ```
485
448
  */
486
449
  export async function verifyAndStore(projectRoot, candidate) {
487
- const gateResult = await verifyCandidate(projectRoot, candidate);
488
- if (gateResult.action !== 'stored') {
489
- return gateResult;
490
- }
491
- try {
492
- const newId = await storeVerifiedCandidate(projectRoot, candidate);
493
- // If this was a contradiction supersession, add a graph edge (best-effort)
494
- if (gateResult.reason.startsWith('contradiction-supersedes ')) {
495
- const oldId = gateResult.reason.replace('contradiction-supersedes ', '');
496
- addGraphEdge(projectRoot, `observation:${newId}`, `observation:${oldId}`, 'supersedes', 1.0, 'extraction-gate').catch(() => undefined);
450
+ const scope = captureProjectScope(projectRoot, worktreeScope.getStore());
451
+ return worktreeScope.run(scope, async () => {
452
+ const gateResult = await verifyCandidate(scope.worktreeRoot, candidate);
453
+ if (gateResult.action !== 'stored') {
454
+ return gateResult;
497
455
  }
498
- return { ...gateResult, id: newId };
499
- }
500
- catch (err) {
501
- const message = err instanceof Error ? err.message : String(err);
502
- return {
503
- action: 'rejected',
504
- id: null,
505
- reason: `storage-error: ${message}`,
506
- };
507
- }
456
+ try {
457
+ scope.execution?.assertActive();
458
+ const newId = await storeVerifiedCandidate(scope.worktreeRoot, candidate);
459
+ return { ...gateResult, id: newId };
460
+ }
461
+ catch (err) {
462
+ const message = err instanceof Error ? err.message : String(err);
463
+ return {
464
+ action: 'rejected',
465
+ id: null,
466
+ reason: `storage-error: ${message}`,
467
+ };
468
+ }
469
+ });
508
470
  }
509
471
  /**
510
472
  * Full gate-and-store pipeline for a batch of candidates.
@@ -1 +1 @@
1
- {"version":3,"file":"extraction-gate.js","sourceRoot":"","sources":["../../src/memory/extraction-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extraction-gate.js","sourceRoot":"","sources":["../../src/memory/extraction-gate.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * storePattern, storeLearning, and task completion).
8
8
  *
9
9
  * Design constraints:
10
- * - All writes are BEST-EFFORT — never block or fail the primary operation.
10
+ * - Legacy writes are best-effort; scoped projections propagate failures.
11
11
  * - All writes are gated on brain.autoCapture via isAutoCaptureEnabled.
12
12
  * - Uses INSERT OR REPLACE (onConflictDoUpdate) for upsert semantics.
13
13
  * - Edge inserts are idempotent via the composite PK (fromId, toId, edgeType).
@@ -15,6 +15,8 @@
15
15
  * @task T537
16
16
  * @epic T523
17
17
  */
18
+ import type { OperationExecutionContext } from '@cleocode/contracts/jobs';
19
+ import type { DocsGraphProjectionResult } from '@cleocode/contracts/operations/docs';
18
20
  import type { BrainEdgeType, BrainNodeType } from '../store/schema/memory-schema.js';
19
21
  export type { BrainEdgeType, BrainNodeType };
20
22
  /**
@@ -29,7 +31,7 @@ export type { BrainEdgeType, BrainNodeType };
29
31
  * content; their hash will be null so duplicates are not rejected.
30
32
  *
31
33
  * This function is gated on brain.autoCapture. If the gate is disabled or any
32
- * error occurs, it returns silently without throwing.
34
+ * error occurs, legacy calls return silently. Context-aware calls throw failures.
33
35
  *
34
36
  * @param projectRoot - Absolute path to the project root directory.
35
37
  * @param nodeId - Stable composite ID in the form '<type>:<source-id>'.
@@ -38,10 +40,16 @@ export type { BrainEdgeType, BrainNodeType };
38
40
  * @param qualityScore - 0.0 (noise) to 1.0 (canonical).
39
41
  * @param content - Canonical text used to derive the content hash.
40
42
  * @param metadata - Optional type-specific metadata blob.
43
+ * @param context - Captured scope; when supplied, failures throw and writes check cancellation.
41
44
  *
45
+ * @remarks Scoped calls pin storage routing and refuse to join an unowned transaction.
46
+ * @example
47
+ * ```ts
48
+ * await upsertGraphNode(root, 'task:T123', 'task', 'Task', 0.7, '');
49
+ * ```
42
50
  * @task T537
43
51
  */
44
- export declare function upsertGraphNode(projectRoot: string, nodeId: string, nodeType: BrainNodeType, label: string, qualityScore: number, content: string, metadata?: Record<string, unknown>): Promise<void>;
52
+ export declare function upsertGraphNode(projectRoot: string, nodeId: string, nodeType: BrainNodeType, label: string, qualityScore: number, content: string, metadata?: Record<string, unknown>, context?: OperationExecutionContext): Promise<void>;
45
53
  /**
46
54
  * Add a directed, typed edge between two graph nodes (idempotent).
47
55
  *
@@ -50,7 +58,7 @@ export declare function upsertGraphNode(projectRoot: string, nodeId: string, nod
50
58
  * multiple times with the same arguments.
51
59
  *
52
60
  * This function is gated on brain.autoCapture. If the gate is disabled or any
53
- * error occurs, it returns silently without throwing.
61
+ * error occurs, legacy calls return silently. Context-aware calls throw failures.
54
62
  *
55
63
  * @param projectRoot - Absolute path to the project root directory.
56
64
  * @param fromId - Source node ID (brain_page_nodes.id).
@@ -58,10 +66,16 @@ export declare function upsertGraphNode(projectRoot: string, nodeId: string, nod
58
66
  * @param edgeType - Typed relationship from BRAIN_EDGE_TYPES.
59
67
  * @param weight - Edge confidence/weight (0.0–1.0). Defaults to 1.0.
60
68
  * @param provenance - Human-readable note on why this edge was emitted.
69
+ * @param context - Captured scope; when supplied, failures throw and writes check cancellation.
61
70
  *
71
+ * @remarks Scoped calls pin storage routing and refuse to join an unowned transaction.
72
+ * @example
73
+ * ```ts
74
+ * await addGraphEdge(root, 'task:T123', 'llmtxt:hash', 'embeds');
75
+ * ```
62
76
  * @task T537
63
77
  */
64
- export declare function addGraphEdge(projectRoot: string, fromId: string, toId: string, edgeType: BrainEdgeType, weight?: number, provenance?: string): Promise<void>;
78
+ export declare function addGraphEdge(projectRoot: string, fromId: string, toId: string, edgeType: BrainEdgeType, weight?: number, provenance?: string, context?: OperationExecutionContext): Promise<void>;
65
79
  /**
66
80
  * Upsert a `task:T###` graph node for a task at creation time (not completion).
67
81
  *
@@ -99,6 +113,25 @@ export declare function ensureTaskNode(projectRoot: string, taskId: string, titl
99
113
  * @task T945
100
114
  */
101
115
  export declare function ensureLlmtxtNode(projectRoot: string, sha256: string, ownerId: string, label: string): Promise<void>;
116
+ /**
117
+ * Project a canonical document into the graph with captured scope and visible failures.
118
+ *
119
+ * @remarks Each synchronous write checks the same absolute deadline. This does not preempt
120
+ * SQLite or promise atomicity across the node and edge; a failed edge leaves an
121
+ * idempotently resumable partial projection. Canonical document bytes are untouched.
122
+ *
123
+ * @param context - Caller-owned immutable identity, deadline and cancellation.
124
+ * @param sha256 - Canonical document content hash.
125
+ * @param ownerId - Qualified graph owner identity.
126
+ * @param label - Document display label.
127
+ * @returns Completed or explicitly disabled graph projection in the captured project.
128
+ * @throws Error - Configuration, storage, cancellation or deadline failure.
129
+ * @example
130
+ * ```ts
131
+ * const result = await ensureLlmtxtNodeScoped(context, sha256, 'task:T123', 'Design');
132
+ * ```
133
+ */
134
+ export declare function ensureLlmtxtNodeScoped(context: OperationExecutionContext, sha256: string, ownerId: string, label: string): Promise<DocsGraphProjectionResult>;
102
135
  /**
103
136
  * Upsert a `msg:<id>` graph node for a CONDUIT message and, when the message
104
137
  * body references one or more `T###` task IDs, emit `discusses` edges from