@isaacriehm/cairn-core 0.6.0 → 0.7.1

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 (431) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/align-undo/undo.js +2 -2
  3. package/dist/align-undo/undo.js.map +1 -1
  4. package/dist/attention/bulk-accept.js +104 -55
  5. package/dist/attention/bulk-accept.js.map +1 -1
  6. package/dist/attention/dedup.js +23 -10
  7. package/dist/attention/dedup.js.map +1 -1
  8. package/dist/attention/restore.js +2 -2
  9. package/dist/attention/restore.js.map +1 -1
  10. package/dist/attention/scoring.js +1 -1
  11. package/dist/attention/scoring.js.map +1 -1
  12. package/dist/attention/serve/api.d.ts +1 -0
  13. package/dist/attention/serve/api.js +130 -77
  14. package/dist/attention/serve/api.js.map +1 -1
  15. package/dist/attention/serve/index.d.ts +1 -0
  16. package/dist/attention/serve/index.js +21 -7
  17. package/dist/attention/serve/index.js.map +1 -1
  18. package/dist/attention/source-strip.js +41 -46
  19. package/dist/attention/source-strip.js.map +1 -1
  20. package/dist/claude/cache.d.ts +10 -19
  21. package/dist/claude/cache.js +0 -0
  22. package/dist/claude/cache.js.map +1 -1
  23. package/dist/claude/runner.d.ts +4 -6
  24. package/dist/claude/runner.js +242 -203
  25. package/dist/claude/runner.js.map +1 -1
  26. package/dist/claude/types.d.ts +5 -5
  27. package/dist/context/handoff-builder.d.ts +28 -4
  28. package/dist/context/handoff-builder.js +75 -157
  29. package/dist/context/handoff-builder.js.map +1 -1
  30. package/dist/context/spec-delta.js +61 -9
  31. package/dist/context/spec-delta.js.map +1 -1
  32. package/dist/context/task-summary.js +5 -1
  33. package/dist/context/task-summary.js.map +1 -1
  34. package/dist/decision-capture/id.js +1 -1
  35. package/dist/decision-capture/id.js.map +1 -1
  36. package/dist/doctor/index.d.ts +9 -11
  37. package/dist/doctor/index.js +118 -175
  38. package/dist/doctor/index.js.map +1 -1
  39. package/dist/drain/drain.d.ts +1 -1
  40. package/dist/drain/drain.js +16 -16
  41. package/dist/drain/drain.js.map +1 -1
  42. package/dist/drain/index.d.ts +1 -1
  43. package/dist/drain/index.js +1 -1
  44. package/dist/events/reader.d.ts +9 -10
  45. package/dist/events/reader.js +46 -57
  46. package/dist/events/reader.js.map +1 -1
  47. package/dist/events/writer.js +1 -1
  48. package/dist/events/writer.js.map +1 -1
  49. package/dist/fix-align/index.d.ts +1 -1
  50. package/dist/fix-align/index.js +1 -1
  51. package/dist/fix-align/run.d.ts +1 -1
  52. package/dist/fix-align/run.js +4 -3
  53. package/dist/fix-align/run.js.map +1 -1
  54. package/dist/fix-align/sentinel.d.ts +1 -2
  55. package/dist/fix-align/sentinel.js +3 -4
  56. package/dist/fix-align/sentinel.js.map +1 -1
  57. package/dist/gc/apply.js +1 -1
  58. package/dist/gc/apply.js.map +1 -1
  59. package/dist/gc/attested-commits.d.ts +19 -0
  60. package/dist/gc/attested-commits.js +48 -0
  61. package/dist/gc/attested-commits.js.map +1 -0
  62. package/dist/gc/canary.d.ts +11 -21
  63. package/dist/gc/canary.js +18 -24
  64. package/dist/gc/canary.js.map +1 -1
  65. package/dist/gc/citation-integrity.d.ts +11 -14
  66. package/dist/gc/citation-integrity.js +124 -125
  67. package/dist/gc/citation-integrity.js.map +1 -1
  68. package/dist/gc/classify.d.ts +1 -1
  69. package/dist/gc/classify.js +2 -2
  70. package/dist/gc/classify.js.map +1 -1
  71. package/dist/gc/completion-integrity.d.ts +6 -7
  72. package/dist/gc/completion-integrity.js +45 -53
  73. package/dist/gc/completion-integrity.js.map +1 -1
  74. package/dist/gc/doc-gardening.js +1 -9
  75. package/dist/gc/doc-gardening.js.map +1 -1
  76. package/dist/gc/frontmatter.js +2 -2
  77. package/dist/gc/frontmatter.js.map +1 -1
  78. package/dist/gc/index.d.ts +7 -6
  79. package/dist/gc/index.js +3 -2
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/gc/quality-update.d.ts +6 -10
  82. package/dist/gc/quality-update.js +12 -15
  83. package/dist/gc/quality-update.js.map +1 -1
  84. package/dist/gc/scope-coverage.js +1 -1
  85. package/dist/gc/scope-coverage.js.map +1 -1
  86. package/dist/gc/stub-hits.d.ts +7 -25
  87. package/dist/gc/stub-hits.js +14 -40
  88. package/dist/gc/stub-hits.js.map +1 -1
  89. package/dist/gc/sweep.js +15 -6
  90. package/dist/gc/sweep.js.map +1 -1
  91. package/dist/gc/types.d.ts +5 -5
  92. package/dist/gc/types.js +2 -2
  93. package/dist/gc/walk-source.js +8 -28
  94. package/dist/gc/walk-source.js.map +1 -1
  95. package/dist/hooks/defer.d.ts +9 -20
  96. package/dist/hooks/defer.js +10 -27
  97. package/dist/hooks/defer.js.map +1 -1
  98. package/dist/hooks/post-tool-use/allowlist-reader.d.ts +2 -1
  99. package/dist/hooks/post-tool-use/allowlist-reader.js +49 -34
  100. package/dist/hooks/post-tool-use/allowlist-reader.js.map +1 -1
  101. package/dist/hooks/post-tool-use/index.d.ts +3 -4
  102. package/dist/hooks/post-tool-use/index.js +3 -3
  103. package/dist/hooks/post-tool-use/index.js.map +1 -1
  104. package/dist/hooks/post-tool-use/legend-builder.d.ts +11 -2
  105. package/dist/hooks/post-tool-use/legend-builder.js +27 -2
  106. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  107. package/dist/hooks/post-tool-use/post-write.d.ts +8 -0
  108. package/dist/hooks/post-tool-use/post-write.js +112 -0
  109. package/dist/hooks/post-tool-use/post-write.js.map +1 -0
  110. package/dist/hooks/post-tool-use/read-enricher.d.ts +10 -5
  111. package/dist/hooks/post-tool-use/read-enricher.js +114 -149
  112. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
  113. package/dist/hooks/post-tool-use/sot-align.d.ts +12 -0
  114. package/dist/hooks/post-tool-use/sot-align.js +73 -49
  115. package/dist/hooks/post-tool-use/sot-align.js.map +1 -1
  116. package/dist/hooks/post-tool-use/write-guardian.d.ts +40 -8
  117. package/dist/hooks/post-tool-use/write-guardian.js +202 -254
  118. package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
  119. package/dist/hooks/pre-commit/sot-align-precommit.js +2 -2
  120. package/dist/hooks/pre-commit/sot-align-precommit.js.map +1 -1
  121. package/dist/hooks/runners/index.d.ts +2 -2
  122. package/dist/hooks/runners/index.js +1 -1
  123. package/dist/hooks/runners/index.js.map +1 -1
  124. package/dist/hooks/runners/payload.d.ts +34 -19
  125. package/dist/hooks/runners/payload.js +47 -44
  126. package/dist/hooks/runners/payload.js.map +1 -1
  127. package/dist/hooks/runners/session-end.js +12 -11
  128. package/dist/hooks/runners/session-end.js.map +1 -1
  129. package/dist/hooks/runners/session-start.d.ts +4 -2
  130. package/dist/hooks/runners/session-start.js +88 -261
  131. package/dist/hooks/runners/session-start.js.map +1 -1
  132. package/dist/hooks/runners/stop.js +27 -8
  133. package/dist/hooks/runners/stop.js.map +1 -1
  134. package/dist/hooks/runners/user-prompt-submit.js +7 -1
  135. package/dist/hooks/runners/user-prompt-submit.js.map +1 -1
  136. package/dist/hooks/sot-align-common.d.ts +1 -2
  137. package/dist/hooks/sot-align-common.js +2 -2
  138. package/dist/hooks/sot-align-common.js.map +1 -1
  139. package/dist/index.d.ts +1 -1
  140. package/dist/index.js +12 -3
  141. package/dist/index.js.map +1 -1
  142. package/dist/init/baseline-audit.d.ts +14 -58
  143. package/dist/init/baseline-audit.js +92 -320
  144. package/dist/init/baseline-audit.js.map +1 -1
  145. package/dist/init/brand-derive.d.ts +11 -15
  146. package/dist/init/brand-derive.js +21 -46
  147. package/dist/init/brand-derive.js.map +1 -1
  148. package/dist/init/brand-setup.d.ts +1 -1
  149. package/dist/init/brand-setup.js +1 -1
  150. package/dist/init/detect.d.ts +25 -6
  151. package/dist/init/detect.js +107 -136
  152. package/dist/init/detect.js.map +1 -1
  153. package/dist/init/index.d.ts +4 -4
  154. package/dist/init/index.js +2 -2
  155. package/dist/init/index.js.map +1 -1
  156. package/dist/init/ingest-docs.d.ts +83 -23
  157. package/dist/init/ingest-docs.js +648 -136
  158. package/dist/init/ingest-docs.js.map +1 -1
  159. package/dist/init/init.d.ts +29 -20
  160. package/dist/init/init.js +132 -290
  161. package/dist/init/init.js.map +1 -1
  162. package/dist/init/mapper-merge.js +1 -1
  163. package/dist/init/mapper-merge.js.map +1 -1
  164. package/dist/init/mapper-parallel.d.ts +1 -1
  165. package/dist/init/mapper-parallel.js +10 -1
  166. package/dist/init/mapper-parallel.js.map +1 -1
  167. package/dist/init/mapper.js +1 -1
  168. package/dist/init/mapper.js.map +1 -1
  169. package/dist/init/multi-dev/install.d.ts +5 -5
  170. package/dist/init/multi-dev/install.js +4 -4
  171. package/dist/init/overlay.js +1 -0
  172. package/dist/init/overlay.js.map +1 -1
  173. package/dist/init/phases/1-detect.js +1 -1
  174. package/dist/init/phases/1-detect.js.map +1 -1
  175. package/dist/init/phases/{7c-rules-merge.d.ts → 10-rules-merge.d.ts} +2 -2
  176. package/dist/init/phases/{7c-rules-merge.js → 10-rules-merge.js} +6 -12
  177. package/dist/init/phases/10-rules-merge.js.map +1 -0
  178. package/dist/init/phases/11-baseline.d.ts +7 -0
  179. package/dist/init/phases/{8-baseline.js → 11-baseline.js} +5 -9
  180. package/dist/init/phases/11-baseline.js.map +1 -0
  181. package/dist/init/phases/12-strip.d.ts +10 -0
  182. package/dist/init/phases/{10-strip.js → 12-strip.js} +10 -14
  183. package/dist/init/phases/12-strip.js.map +1 -0
  184. package/dist/init/phases/{12-multidev.d.ts → 13-multidev.d.ts} +2 -2
  185. package/dist/init/phases/{12-multidev.js → 13-multidev.js} +4 -4
  186. package/dist/init/phases/{12-multidev.js.map → 13-multidev.js.map} +1 -1
  187. package/dist/init/phases/3-mapper.d.ts +1 -1
  188. package/dist/init/phases/3-mapper.js +2 -2
  189. package/dist/init/phases/3-mapper.js.map +1 -1
  190. package/dist/init/phases/{3b-seed.d.ts → 4-seed.d.ts} +2 -2
  191. package/dist/init/phases/{3b-seed.js → 4-seed.js} +7 -7
  192. package/dist/init/phases/4-seed.js.map +1 -0
  193. package/dist/init/phases/{4-pilot.d.ts → 5-pilot.d.ts} +2 -2
  194. package/dist/init/phases/{4-pilot.js → 5-pilot.js} +9 -9
  195. package/dist/init/phases/{4-pilot.js.map → 5-pilot.js.map} +1 -1
  196. package/dist/init/phases/{5-brand.d.ts → 6-brand.d.ts} +2 -7
  197. package/dist/init/phases/{5-brand.js → 6-brand.js} +6 -14
  198. package/dist/init/phases/6-brand.js.map +1 -0
  199. package/dist/init/phases/{5b-topic-index.d.ts → 7-topic-index.d.ts} +2 -11
  200. package/dist/init/phases/{5b-topic-index.js → 7-topic-index.js} +9 -18
  201. package/dist/init/phases/7-topic-index.js.map +1 -0
  202. package/dist/init/phases/8-docs-ingest.d.ts +10 -0
  203. package/dist/init/phases/{6-docs-ingest.js → 8-docs-ingest.js} +12 -14
  204. package/dist/init/phases/8-docs-ingest.js.map +1 -0
  205. package/dist/init/phases/9-source-comments.d.ts +6 -0
  206. package/dist/init/phases/{7b-source-comments.js → 9-source-comments.js} +7 -26
  207. package/dist/init/phases/9-source-comments.js.map +1 -0
  208. package/dist/init/phases/index.d.ts +12 -12
  209. package/dist/init/phases/index.js +11 -11
  210. package/dist/init/phases/index.js.map +1 -1
  211. package/dist/init/phases/{parallel-678.d.ts → parallel-8910.d.ts} +7 -8
  212. package/dist/init/phases/{parallel-678.js → parallel-8910.js} +34 -46
  213. package/dist/init/phases/parallel-8910.js.map +1 -0
  214. package/dist/init/phases/source-comments-output-io.d.ts +3 -3
  215. package/dist/init/phases/source-comments-output-io.js +3 -3
  216. package/dist/init/phases/types.d.ts +1 -1
  217. package/dist/init/phases/types.js +10 -10
  218. package/dist/init/phases/types.js.map +1 -1
  219. package/dist/init/rules-merge/discover.d.ts +2 -2
  220. package/dist/init/rules-merge/discover.js +28 -43
  221. package/dist/init/rules-merge/discover.js.map +1 -1
  222. package/dist/init/rules-merge/ingest.d.ts +6 -6
  223. package/dist/init/rules-merge/ingest.js +9 -10
  224. package/dist/init/rules-merge/ingest.js.map +1 -1
  225. package/dist/init/rules-merge/keep-markers.d.ts +1 -1
  226. package/dist/init/rules-merge/keep-markers.js +1 -1
  227. package/dist/init/rules-merge/regenerate.d.ts +3 -3
  228. package/dist/init/rules-merge/regenerate.js +3 -3
  229. package/dist/init/seed.js +17 -24
  230. package/dist/init/seed.js.map +1 -1
  231. package/dist/init/sot-emit.d.ts +48 -8
  232. package/dist/init/sot-emit.js +88 -10
  233. package/dist/init/sot-emit.js.map +1 -1
  234. package/dist/init/source-comments/classify.d.ts +2 -2
  235. package/dist/init/source-comments/classify.js +9 -1
  236. package/dist/init/source-comments/classify.js.map +1 -1
  237. package/dist/init/source-comments/index.d.ts +1 -1
  238. package/dist/init/source-comments/index.js.map +1 -1
  239. package/dist/init/source-comments/ingest.d.ts +2 -2
  240. package/dist/init/source-comments/ingest.js +110 -12
  241. package/dist/init/source-comments/ingest.js.map +1 -1
  242. package/dist/init/source-comments/strip-replace.js +3 -2
  243. package/dist/init/source-comments/strip-replace.js.map +1 -1
  244. package/dist/init/source-comments/walker.d.ts +3 -26
  245. package/dist/init/source-comments/walker.js +18 -30
  246. package/dist/init/source-comments/walker.js.map +1 -1
  247. package/dist/init/topic-index/index.d.ts +15 -1
  248. package/dist/init/topic-index/index.js +84 -5
  249. package/dist/init/topic-index/index.js.map +1 -1
  250. package/dist/init/topic-index/judge.d.ts +5 -9
  251. package/dist/init/topic-index/judge.js +25 -17
  252. package/dist/init/topic-index/judge.js.map +1 -1
  253. package/dist/init/topic-index/resolve.d.ts +23 -3
  254. package/dist/init/topic-index/resolve.js +102 -16
  255. package/dist/init/topic-index/resolve.js.map +1 -1
  256. package/dist/init/topic-index/walk.d.ts +36 -4
  257. package/dist/init/topic-index/walk.js +78 -12
  258. package/dist/init/topic-index/walk.js.map +1 -1
  259. package/dist/lock.js +4 -1
  260. package/dist/lock.js.map +1 -1
  261. package/dist/logger.js +3 -0
  262. package/dist/logger.js.map +1 -1
  263. package/dist/mcp/history/summarizer.js +6 -1
  264. package/dist/mcp/history/summarizer.js.map +1 -1
  265. package/dist/mcp/history/walker.js +1 -1
  266. package/dist/mcp/history/walker.js.map +1 -1
  267. package/dist/mcp/path-allowlist.js +1 -1
  268. package/dist/mcp/path-allowlist.js.map +1 -1
  269. package/dist/mcp/schemas.d.ts +47 -21
  270. package/dist/mcp/schemas.js +38 -9
  271. package/dist/mcp/schemas.js.map +1 -1
  272. package/dist/mcp/server.js +10 -0
  273. package/dist/mcp/server.js.map +1 -1
  274. package/dist/mcp/tools/archive.js +1 -1
  275. package/dist/mcp/tools/archive.js.map +1 -1
  276. package/dist/mcp/tools/attention-wait.js +12 -2
  277. package/dist/mcp/tools/attention-wait.js.map +1 -1
  278. package/dist/mcp/tools/bulk-accept-attention.js +29 -30
  279. package/dist/mcp/tools/bulk-accept-attention.js.map +1 -1
  280. package/dist/mcp/tools/canonical-for-topic.js +37 -15
  281. package/dist/mcp/tools/canonical-for-topic.js.map +1 -1
  282. package/dist/mcp/tools/decision-get.js +2 -2
  283. package/dist/mcp/tools/decision-get.js.map +1 -1
  284. package/dist/mcp/tools/decisions-for-symbol.js +2 -2
  285. package/dist/mcp/tools/decisions-for-symbol.js.map +1 -1
  286. package/dist/mcp/tools/get-full.js +1 -1
  287. package/dist/mcp/tools/get-full.js.map +1 -1
  288. package/dist/mcp/tools/ground-get.js +1 -1
  289. package/dist/mcp/tools/ground-get.js.map +1 -1
  290. package/dist/mcp/tools/in-scope.d.ts +8 -0
  291. package/dist/mcp/tools/in-scope.js +125 -0
  292. package/dist/mcp/tools/in-scope.js.map +1 -0
  293. package/dist/mcp/tools/index.js +11 -6
  294. package/dist/mcp/tools/index.js.map +1 -1
  295. package/dist/mcp/tools/init-phases.d.ts +3 -2
  296. package/dist/mcp/tools/init-phases.js +125 -124
  297. package/dist/mcp/tools/init-phases.js.map +1 -1
  298. package/dist/mcp/tools/invariant-get.js +2 -2
  299. package/dist/mcp/tools/invariant-get.js.map +1 -1
  300. package/dist/mcp/tools/record-decision.d.ts +4 -3
  301. package/dist/mcp/tools/record-decision.js +111 -36
  302. package/dist/mcp/tools/record-decision.js.map +1 -1
  303. package/dist/mcp/tools/reject-candidate.d.ts +24 -0
  304. package/dist/mcp/tools/reject-candidate.js +71 -0
  305. package/dist/mcp/tools/reject-candidate.js.map +1 -0
  306. package/dist/mcp/tools/resolve-attention.d.ts +5 -18
  307. package/dist/mcp/tools/resolve-attention.js +58 -158
  308. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  309. package/dist/mcp/tools/search-candidates.d.ts +20 -0
  310. package/dist/mcp/tools/search-candidates.js +93 -0
  311. package/dist/mcp/tools/search-candidates.js.map +1 -0
  312. package/dist/mcp/tools/search.js +5 -4
  313. package/dist/mcp/tools/search.js.map +1 -1
  314. package/dist/mcp/tools/supersedes-chain.js +2 -2
  315. package/dist/mcp/tools/supersedes-chain.js.map +1 -1
  316. package/dist/mcp/tools/task-create.d.ts +1 -0
  317. package/dist/mcp/tools/task-create.js +2 -0
  318. package/dist/mcp/tools/task-create.js.map +1 -1
  319. package/dist/mcp/tools/timeline.js +1 -1
  320. package/dist/mcp/tools/timeline.js.map +1 -1
  321. package/dist/mcp/tools/types.d.ts +1 -0
  322. package/dist/mcp/tools/types.js +9 -1
  323. package/dist/mcp/tools/types.js.map +1 -1
  324. package/dist/sensors/attestation.d.ts +1 -1
  325. package/dist/sensors/attestation.js +2 -2
  326. package/dist/sensors/attestation.js.map +1 -1
  327. package/dist/sensors/catalog.d.ts +26 -28
  328. package/dist/sensors/catalog.js +79 -81
  329. package/dist/sensors/catalog.js.map +1 -1
  330. package/dist/sensors/decisions.d.ts +1 -1
  331. package/dist/sensors/decisions.js +15 -14
  332. package/dist/sensors/decisions.js.map +1 -1
  333. package/dist/sensors/diff.js +46 -22
  334. package/dist/sensors/diff.js.map +1 -1
  335. package/dist/sensors/runner.d.ts +2 -2
  336. package/dist/sensors/runner.js +3 -3
  337. package/dist/sensors/shell.d.ts +4 -0
  338. package/dist/sensors/shell.js +16 -0
  339. package/dist/sensors/shell.js.map +1 -0
  340. package/dist/sensors/structural.d.ts +3 -2
  341. package/dist/sensors/structural.js +3 -11
  342. package/dist/sensors/structural.js.map +1 -1
  343. package/dist/sensors/stub-catalog.d.ts +2 -1
  344. package/dist/sensors/stub-catalog.js +2 -9
  345. package/dist/sensors/stub-catalog.js.map +1 -1
  346. package/dist/sensors/types.d.ts +3 -4
  347. package/dist/sensors/types.js +1 -2
  348. package/dist/sensors/types.js.map +1 -1
  349. package/dist/session-start/build.js +1 -1
  350. package/dist/session-start/build.js.map +1 -1
  351. package/dist/status-line/event-queue.js +1 -1
  352. package/dist/status-line/index.d.ts +1 -1
  353. package/package.json +3 -2
  354. package/templates/.cairn/config/sensors.yaml +8 -8
  355. package/templates/attention-ui/app.js +101 -39
  356. package/dist/fs.d.ts +0 -5
  357. package/dist/fs.js +0 -11
  358. package/dist/fs.js.map +0 -1
  359. package/dist/ground/alignment-pending.d.ts +0 -28
  360. package/dist/ground/alignment-pending.js +0 -83
  361. package/dist/ground/alignment-pending.js.map +0 -1
  362. package/dist/ground/anchor-map.d.ts +0 -14
  363. package/dist/ground/anchor-map.js +0 -56
  364. package/dist/ground/anchor-map.js.map +0 -1
  365. package/dist/ground/drift.d.ts +0 -8
  366. package/dist/ground/drift.js +0 -23
  367. package/dist/ground/drift.js.map +0 -1
  368. package/dist/ground/frontmatter.d.ts +0 -32
  369. package/dist/ground/frontmatter.js +0 -77
  370. package/dist/ground/frontmatter.js.map +0 -1
  371. package/dist/ground/glob.d.ts +0 -10
  372. package/dist/ground/glob.js +0 -46
  373. package/dist/ground/glob.js.map +0 -1
  374. package/dist/ground/index.d.ts +0 -23
  375. package/dist/ground/index.js +0 -17
  376. package/dist/ground/index.js.map +0 -1
  377. package/dist/ground/ledgers.d.ts +0 -14
  378. package/dist/ground/ledgers.js +0 -105
  379. package/dist/ground/ledgers.js.map +0 -1
  380. package/dist/ground/manifest.d.ts +0 -10
  381. package/dist/ground/manifest.js +0 -84
  382. package/dist/ground/manifest.js.map +0 -1
  383. package/dist/ground/paths.d.ts +0 -41
  384. package/dist/ground/paths.js +0 -103
  385. package/dist/ground/paths.js.map +0 -1
  386. package/dist/ground/quality-grades.d.ts +0 -11
  387. package/dist/ground/quality-grades.js +0 -100
  388. package/dist/ground/quality-grades.js.map +0 -1
  389. package/dist/ground/schemas.d.ts +0 -502
  390. package/dist/ground/schemas.js +0 -318
  391. package/dist/ground/schemas.js.map +0 -1
  392. package/dist/ground/scope-index.d.ts +0 -96
  393. package/dist/ground/scope-index.js +0 -290
  394. package/dist/ground/scope-index.js.map +0 -1
  395. package/dist/ground/slug.d.ts +0 -60
  396. package/dist/ground/slug.js +0 -103
  397. package/dist/ground/slug.js.map +0 -1
  398. package/dist/ground/sot-bindings.d.ts +0 -14
  399. package/dist/ground/sot-bindings.js +0 -79
  400. package/dist/ground/sot-bindings.js.map +0 -1
  401. package/dist/ground/sot-cache.d.ts +0 -18
  402. package/dist/ground/sot-cache.js +0 -62
  403. package/dist/ground/sot-cache.js.map +0 -1
  404. package/dist/ground/topic-index.d.ts +0 -27
  405. package/dist/ground/topic-index.js +0 -82
  406. package/dist/ground/topic-index.js.map +0 -1
  407. package/dist/ground/walk.d.ts +0 -7
  408. package/dist/ground/walk.js +0 -53
  409. package/dist/ground/walk.js.map +0 -1
  410. package/dist/hooks/post-tool-use/ledger-cache.d.ts +0 -40
  411. package/dist/hooks/post-tool-use/ledger-cache.js +0 -290
  412. package/dist/hooks/post-tool-use/ledger-cache.js.map +0 -1
  413. package/dist/init/phases/10-strip.d.ts +0 -11
  414. package/dist/init/phases/10-strip.js.map +0 -1
  415. package/dist/init/phases/3b-seed.js.map +0 -1
  416. package/dist/init/phases/5-brand.js.map +0 -1
  417. package/dist/init/phases/5b-topic-index.js.map +0 -1
  418. package/dist/init/phases/6-docs-ingest.d.ts +0 -10
  419. package/dist/init/phases/6-docs-ingest.js.map +0 -1
  420. package/dist/init/phases/7b-source-comments.d.ts +0 -15
  421. package/dist/init/phases/7b-source-comments.js.map +0 -1
  422. package/dist/init/phases/7c-rules-merge.js.map +0 -1
  423. package/dist/init/phases/8-baseline.d.ts +0 -10
  424. package/dist/init/phases/8-baseline.js.map +0 -1
  425. package/dist/init/phases/parallel-678.js.map +0 -1
  426. package/dist/mcp/tools/decisions-in-scope.d.ts +0 -7
  427. package/dist/mcp/tools/decisions-in-scope.js +0 -66
  428. package/dist/mcp/tools/decisions-in-scope.js.map +0 -1
  429. package/dist/mcp/tools/invariants-in-scope.d.ts +0 -7
  430. package/dist/mcp/tools/invariants-in-scope.js +0 -81
  431. package/dist/mcp/tools/invariants-in-scope.js.map +0 -1
@@ -1,9 +1,10 @@
1
1
  import type { ToolDef } from "./types.js";
2
2
  interface Input {
3
3
  id?: string;
4
- title: string;
5
- summary: string;
6
- scope_globs: string[];
4
+ slug?: string;
5
+ title?: string;
6
+ summary?: string;
7
+ scope_globs?: string[];
7
8
  supersedes?: string;
8
9
  assertions?: unknown[];
9
10
  human_review_hint?: string;
@@ -3,19 +3,20 @@ import { join } from "node:path";
3
3
  import { stringify as stringifyYaml } from "yaml";
4
4
  import { computeDecisionId, scanExistingDecisionIds, } from "../../decision-capture/index.js";
5
5
  import { writeInvalidationEvent } from "../../events/index.js";
6
- import { bodyContentHash, decisionsDir } from "../../ground/index.js";
7
- import { DecisionAssertion } from "../../ground/index.js";
6
+ import { bodyContentHash, decisionsDir, deriveDecId, readAnchorMap, readRejectedYaml, readTopicIndex, setTopic, writeFileCandidatesMap, writeTopicIndex, } from "@isaacriehm/cairn-state";
7
+ import { DecisionAssertion } from "@isaacriehm/cairn-state";
8
8
  import { withWriteLock } from "../../lock.js";
9
9
  import { requireBootstrap } from "../bootstrap-guard.js";
10
10
  import { mcpError } from "../errors.js";
11
11
  import { recordDecisionInput } from "../schemas.js";
12
+ import { readSotBody } from "../../init/sot-emit.js";
12
13
  async function handler(ctx, input) {
13
14
  const block = requireBootstrap(ctx.repoRoot);
14
15
  if (block !== null)
15
16
  return block;
16
17
  const dir = decisionsDir(ctx.repoRoot);
17
18
  const inboxDir = join(dir, "_inbox");
18
- // Validate assertions, if provided. (Pre-lock — pure schema check.)
19
+ // Validate assertions, if provided.
19
20
  if (input.assertions !== undefined) {
20
21
  for (const a of input.assertions) {
21
22
  const result = DecisionAssertion.safeParse(a);
@@ -27,86 +28,160 @@ async function handler(ctx, input) {
27
28
  }
28
29
  }
29
30
  }
30
- return withWriteLock(ctx.repoRoot, () => {
31
- // Re-scan inside the lock so concurrent allocators see each other's writes.
31
+ return withWriteLock(ctx.repoRoot, async () => {
32
32
  const existingIds = scanExistingDecisionIds(ctx.repoRoot);
33
+ const target = input.target ?? "inbox";
34
+ const outDir = target === "accepted" ? dir : inboxDir;
33
35
  let id;
34
- if (input.id !== undefined) {
35
- if (existingIds.has(input.id)) {
36
- return mcpError("DECISION_ID_TAKEN", `${input.id} already exists`);
36
+ let body;
37
+ let title;
38
+ let scopeGlobs = input.scope_globs ?? [];
39
+ let decidedBy = ctx.sessionId ? `session:${ctx.sessionId}` : "user";
40
+ let sotKind = "ledger";
41
+ let sotPath = "ledger";
42
+ let sourceFile;
43
+ if (input.slug) {
44
+ // AI Candidate Promotion path
45
+ const topicIndex = readTopicIndex(ctx.repoRoot);
46
+ const entry = topicIndex.topics[input.slug];
47
+ if (entry === undefined) {
48
+ return mcpError("VALIDATION_FAILED", `slug "${input.slug}" not in topic-index`);
49
+ }
50
+ if (entry.dec_id !== undefined) {
51
+ return {
52
+ ok: true,
53
+ id: entry.dec_id,
54
+ target,
55
+ path: relativePath(entry.dec_id, target),
56
+ warning: `DEC already exists for slug ${input.slug}`,
57
+ };
58
+ }
59
+ const rejected = readRejectedYaml(ctx.repoRoot);
60
+ if (rejected.has(input.slug)) {
61
+ return mcpError("VALIDATION_FAILED", `slug "${input.slug}" was previously rejected`);
62
+ }
63
+ const anchorMap = readAnchorMap(ctx.repoRoot);
64
+ const sotBody = readSotBody(ctx.repoRoot, entry, anchorMap);
65
+ if (sotBody === null) {
66
+ return mcpError("VALIDATION_FAILED", "source body unreadable");
37
67
  }
38
- id = input.id;
68
+ // Drift check
69
+ if (entry.content_hash !== undefined && bodyContentHash(sotBody) !== entry.content_hash) {
70
+ return mcpError("VALIDATION_FAILED", "Source file modified since index build");
71
+ }
72
+ title = input.title ?? firstLineFallback(sotBody);
73
+ body = sotBody;
74
+ sotKind = "path";
75
+ sotPath = entryToSotPath(entry);
76
+ sourceFile = entry.sot_source;
77
+ decidedBy = "ai-curator";
78
+ id = allocateUniqueDecId({ sot_path: sotPath, title, capture_source: "ai-proposed" }, existingIds);
79
+ // Update topic index
80
+ const updatedTopicIndex = setTopic(topicIndex, input.slug, {
81
+ ...entry,
82
+ dec_id: id,
83
+ });
84
+ writeTopicIndex(ctx.repoRoot, updatedTopicIndex);
85
+ writeFileCandidatesMap(ctx.repoRoot, updatedTopicIndex);
39
86
  }
40
87
  else {
41
- // Manual user-record path has no source provenance — fold a
42
- // millisecond timestamp in so two distinct decisions with
43
- // identical title + summary still hash to different ids.
44
- id = computeDecisionId({
45
- title: input.title,
88
+ // Manual path
89
+ if (!input.title || !input.summary) {
90
+ return mcpError("VALIDATION_FAILED", "title and summary required for manual record");
91
+ }
92
+ title = input.title;
93
+ id = input.id ?? computeDecisionId({
94
+ title,
46
95
  rationale: input.summary,
47
96
  capture_source: "user-record",
48
- scope_globs: input.scope_globs,
49
- ...(input.body_markdown !== undefined
50
- ? { body_markdown: input.body_markdown }
51
- : {}),
97
+ scope_globs: scopeGlobs,
98
+ ...(input.body_markdown ? { body_markdown: input.body_markdown } : {}),
52
99
  timestamp_ms: Date.now(),
53
100
  }, existingIds);
101
+ body = input.body_markdown ?? `# ${id} — ${title}\n\n## Summary\n\n${input.summary}\n`;
54
102
  }
55
103
  if (input.supersedes !== undefined && !existingIds.has(input.supersedes)) {
56
104
  return mcpError("SUPERSEDES_NOT_FOUND", `supersedes target "${input.supersedes}" not found`);
57
105
  }
58
- const target = input.target ?? "inbox";
59
- const outDir = target === "accepted" ? dir : inboxDir;
60
106
  mkdirSync(outDir, { recursive: true });
61
- const body = input.body_markdown ?? `# ${id} — ${input.title}\n\n## Summary\n\n${input.summary}\n`;
62
107
  const frontmatter = {
63
108
  id,
64
- title: input.title,
109
+ title,
65
110
  type: "adr",
66
111
  status: target === "accepted" ? "accepted" : "draft",
67
112
  audience: "dual",
68
113
  generated: new Date().toISOString(),
69
114
  "verified-at": new Date().toISOString(),
70
115
  decided_at: new Date().toISOString().slice(0, 10),
71
- scope_globs: input.scope_globs,
72
- sot_kind: "ledger",
73
- sot_path: "ledger",
116
+ decided_by: decidedBy,
117
+ scope_globs: scopeGlobs,
118
+ sot_kind: sotKind,
119
+ sot_path: sotPath,
74
120
  sot_content_hash: bodyContentHash(body),
121
+ source_file: sourceFile,
75
122
  ...(input.supersedes !== undefined ? { supersedes: input.supersedes } : {}),
76
123
  ...(input.assertions !== undefined ? { assertions: input.assertions } : {}),
77
- ...(input.human_review_hint !== undefined
78
- ? { human_review_hint: input.human_review_hint }
79
- : {}),
124
+ ...(input.human_review_hint !== undefined ? { human_review_hint: input.human_review_hint } : {}),
80
125
  };
81
126
  const filename = target === "accepted" ? `${id}.md` : `${id}.draft.md`;
82
127
  const path = join(outDir, filename);
83
128
  const content = `---\n${stringifyYaml(frontmatter)}---\n\n${body}`;
84
129
  writeFileSync(path, content, "utf8");
85
- const relPath = target === "accepted"
86
- ? `.cairn/ground/decisions/${filename}`
87
- : `.cairn/ground/decisions/_inbox/${filename}`;
130
+ const relPath = relativePath(id, target);
88
131
  try {
89
132
  writeInvalidationEvent(ctx.repoRoot, {
90
133
  kind: target === "accepted" ? "decision_accepted" : "decision_drafted",
91
134
  refs: [
92
135
  { kind: "decision", id },
93
- ...(input.supersedes !== undefined
94
- ? [{ kind: "decision", id: input.supersedes }]
95
- : []),
136
+ ...(input.supersedes !== undefined ? [{ kind: "decision", id: input.supersedes }] : []),
96
137
  ],
97
138
  path: relPath,
98
139
  source: { session_id: ctx.sessionId ?? null, tool: "cairn_record_decision" },
99
140
  });
100
141
  }
101
142
  catch {
102
- // Event emission must never roll back the underlying write.
143
+ /* ignore */
103
144
  }
104
145
  return { ok: true, id, target, path: relPath };
105
146
  });
106
147
  }
148
+ function relativePath(id, target) {
149
+ return target === "accepted"
150
+ ? `.cairn/ground/decisions/${id}.md`
151
+ : `.cairn/ground/decisions/_inbox/${id}.draft.md`;
152
+ }
153
+ function entryToSotPath(entry) {
154
+ const sot = entry.candidates.find((c) => c.file === entry.sot_source);
155
+ if (sot === undefined)
156
+ return entry.sot_source;
157
+ if (sot.anchor !== undefined && sot.anchor.length > 0) {
158
+ return `${entry.sot_source}#${sot.anchor}`;
159
+ }
160
+ return entry.sot_source;
161
+ }
162
+ function firstLineFallback(body) {
163
+ const first = body.split("\n").find((l) => l.trim().length > 0) ?? "";
164
+ return first.replace(/^#+\s*/, "").trim().slice(0, 120) || "(untitled)";
165
+ }
166
+ function allocateUniqueDecId(input, existingIds) {
167
+ const id = deriveDecId(input);
168
+ if (!existingIds.has(id)) {
169
+ existingIds.add(id);
170
+ return id;
171
+ }
172
+ for (let suffix = 2; suffix < 1_000; suffix += 1) {
173
+ const tagged = deriveDecId({ ...input, title: `${input.title} #${suffix}` });
174
+ if (!existingIds.has(tagged)) {
175
+ existingIds.add(tagged);
176
+ return tagged;
177
+ }
178
+ }
179
+ existingIds.add(id);
180
+ return id;
181
+ }
107
182
  export const recordDecisionTool = {
108
183
  name: "cairn_record_decision",
109
- description: "Drop a decision draft to .cairn/ground/decisions/_inbox/ (target=inbox, default) or canonical (target=accepted; operator-only override). Validates assertion schemas. Allocates the next DEC-NNNN if id omitted.",
184
+ description: "Record a decision in the ledger or inbox. Use `slug` to promote a candidate from the topic index, or provide `title` and `summary` for a manual entry. Use `target=accepted` (operator only) to bypass the inbox.",
110
185
  inputSchema: recordDecisionInput,
111
186
  handler,
112
187
  };
@@ -1 +1 @@
1
- {"version":3,"file":"record-decision.js","sourceRoot":"","sources":["../../../src/mcp/tools/record-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAepD,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAErC,oEAAoE;IACpE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,QAAQ,CAAC,wBAAwB,EAAE,yBAAyB,EAAE;oBACnE,SAAS,EAAE,CAAC;oBACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtC,4EAA4E;QAC5E,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1D,IAAI,EAAU,CAAC;QACf,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACrE,CAAC;YACD,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,0DAA0D;YAC1D,yDAAyD;YACzD,EAAE,GAAG,iBAAiB,CACpB;gBACE,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,OAAO;gBACxB,cAAc,EAAE,aAAa;gBAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;oBACnC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;gBACP,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,EACD,WAAW,CACZ,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,OAAO,QAAQ,CACb,sBAAsB,EACtB,sBAAsB,KAAK,CAAC,UAAU,aAAa,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,IAAI,GACR,KAAK,CAAC,aAAa,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,qBAAqB,KAAK,CAAC,OAAO,IAAI,CAAC;QACxF,MAAM,WAAW,GAAG;YAClB,EAAE;YACF,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YACpD,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACvC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACjD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;gBAChD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,aAAa,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;QACnE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,OAAO,GACX,MAAM,KAAK,UAAU;YACnB,CAAC,CAAC,2BAA2B,QAAQ,EAAE;YACvC,CAAC,CAAC,kCAAkC,QAAQ,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACnC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;gBACtE,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;oBACxB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;wBAChC,CAAC,CAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAW;wBACzD,CAAC,CAAC,EAAE,CAAC;iBACR;gBACD,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,kNAAkN;IACpN,WAAW,EAAE,mBAAmB;IAChC,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"record-decision.js","sourceRoot":"","sources":["../../../src/mcp/tools/record-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,sBAAsB,EACtB,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAgBrD,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAErC,oCAAoC;IACpC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,QAAQ,CAAC,wBAAwB,EAAE,yBAAyB,EAAE;oBACnE,SAAS,EAAE,CAAC;oBACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEtD,IAAI,EAAU,CAAC;QACf,IAAI,IAAY,CAAC;QACjB,IAAI,KAAa,CAAC;QAClB,IAAI,UAAU,GAAa,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;QACnD,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACpE,IAAI,OAAO,GAAsB,QAAQ,CAAC;QAC1C,IAAI,OAAO,GAAG,QAAQ,CAAC;QACvB,IAAI,UAA8B,CAAC;QAEnC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,8BAA8B;YAC9B,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,QAAQ,CAAC,mBAAmB,EAAE,SAAS,KAAK,CAAC,IAAI,sBAAsB,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,KAAK,CAAC,MAAM;oBAChB,MAAM;oBACN,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;oBACxC,OAAO,EAAE,+BAA+B,KAAK,CAAC,IAAI,EAAE;iBACrD,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC,mBAAmB,EAAE,SAAS,KAAK,CAAC,IAAI,2BAA2B,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,QAAQ,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;YACjE,CAAC;YAED,cAAc;YACd,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;gBACxF,OAAO,QAAQ,CAAC,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;YACjF,CAAC;YAED,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,GAAG,OAAO,CAAC;YACf,OAAO,GAAG,MAAM,CAAC;YACjB,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAChC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,SAAS,GAAG,YAAY,CAAC;YAEzB,EAAE,GAAG,mBAAmB,CACtB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,EAC3D,WAAW,CACZ,CAAC;YAEF,qBAAqB;YACrB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;gBACzD,GAAG,KAAK;gBACR,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YACH,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YACjD,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,cAAc;YACd,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO,QAAQ,CAAC,mBAAmB,EAAE,8CAA8C,CAAC,CAAC;YACvF,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,iBAAiB,CAChC;gBACE,KAAK;gBACL,SAAS,EAAE,KAAK,CAAC,OAAO;gBACxB,cAAc,EAAE,aAAa;gBAC7B,WAAW,EAAE,UAAU;gBACvB,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,EACD,WAAW,CACZ,CAAC;YACF,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,EAAE,MAAM,KAAK,qBAAqB,KAAK,CAAC,OAAO,IAAI,CAAC;QACzF,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,OAAO,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,KAAK,CAAC,UAAU,aAAa,CAAC,CAAC;QAC/F,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,WAAW,GAAG;YAClB,EAAE;YACF,KAAK;YACL,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YACpD,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACvC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACjD,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,OAAO;YACjB,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC;YACvC,WAAW,EAAE,UAAU;YACvB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjG,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,aAAa,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;QACnE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACnC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;gBACtE,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;oBACxB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnG;gBACD,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,MAA4B;IAC5D,OAAO,MAAM,KAAK,UAAU;QAC1B,CAAC,CAAC,2BAA2B,EAAE,KAAK;QACpC,CAAC,CAAC,kCAAkC,EAAE,WAAW,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC;IAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC;AAC1E,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkE,EAClE,WAAwB;IAExB,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,mNAAmN;IACrN,WAAW,EAAE,mBAAmB;IAChC,OAAO;CACR,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `cairn_reject_candidate` — append a topic-index slug to
3
+ * `.cairn/ground/_rejected.yaml` so phase 6 / `cairn ingest` /
4
+ * `cairn_propose_decision` skip it on the next pass.
5
+ *
6
+ * Dedup by slug — first writer wins the
7
+ * `reason` string; subsequent writes only refresh `rejected_at`. The
8
+ * AI-curator path stamps `rejected_by: "ai-curator"`; operator-driven
9
+ * rejections (`cairn-attention` skill) reuse the same writer with
10
+ * `rejected_by: "operator"`.
11
+ *
12
+ * Refusal modes:
13
+ * - `not_found` — slug not present in the topic-index. We refuse so
14
+ * stale agent calls can't poison the rejection
15
+ * ledger with phantom slugs that the GC pass would
16
+ * immediately drop.
17
+ */
18
+ import type { ToolDef } from "./types.js";
19
+ interface Input {
20
+ slug: string;
21
+ reason: string;
22
+ }
23
+ export declare const rejectCandidateTool: ToolDef<Input>;
24
+ export {};
@@ -0,0 +1,71 @@
1
+ /**
2
+ * `cairn_reject_candidate` — append a topic-index slug to
3
+ * `.cairn/ground/_rejected.yaml` so phase 6 / `cairn ingest` /
4
+ * `cairn_propose_decision` skip it on the next pass.
5
+ *
6
+ * Dedup by slug — first writer wins the
7
+ * `reason` string; subsequent writes only refresh `rejected_at`. The
8
+ * AI-curator path stamps `rejected_by: "ai-curator"`; operator-driven
9
+ * rejections (`cairn-attention` skill) reuse the same writer with
10
+ * `rejected_by: "operator"`.
11
+ *
12
+ * Refusal modes:
13
+ * - `not_found` — slug not present in the topic-index. We refuse so
14
+ * stale agent calls can't poison the rejection
15
+ * ledger with phantom slugs that the GC pass would
16
+ * immediately drop.
17
+ */
18
+ import { appendRejected, readRejectedYaml, readTopicIndex, writeRejectedYaml, } from "@isaacriehm/cairn-state";
19
+ import { withWriteLock } from "../../lock.js";
20
+ import { requireBootstrap } from "../bootstrap-guard.js";
21
+ import { rejectCandidateInput } from "../schemas.js";
22
+ const REJECTED_BY = "ai-curator";
23
+ async function handler(ctx, input) {
24
+ const block = requireBootstrap(ctx.repoRoot);
25
+ if (block !== null)
26
+ return block;
27
+ return withWriteLock(ctx.repoRoot, () => {
28
+ const topicIndex = readTopicIndex(ctx.repoRoot);
29
+ const entry = topicIndex.topics[input.slug];
30
+ if (entry === undefined) {
31
+ return {
32
+ ok: false,
33
+ reason: "not_found",
34
+ detail: `slug "${input.slug}" not in topic-index`,
35
+ };
36
+ }
37
+ const sot = entry.candidates.find((c) => c.file === entry.sot_source);
38
+ const now = new Date().toISOString();
39
+ const record = {
40
+ slug: input.slug,
41
+ rejected_at: now,
42
+ rejected_by: REJECTED_BY,
43
+ reason: input.reason,
44
+ sot_source: entry.sot_source,
45
+ ...(sot?.line_range !== undefined ? { line_range: sot.line_range } : {}),
46
+ };
47
+ const current = readRejectedYaml(ctx.repoRoot);
48
+ const existing = current.get(input.slug);
49
+ const next = appendRejected(current, record);
50
+ writeRejectedYaml(ctx.repoRoot, next);
51
+ if (existing !== undefined) {
52
+ return {
53
+ ok: true,
54
+ slug: input.slug,
55
+ warning: `Slug ${input.slug} was already rejected by ${existing.rejected_by} (${existing.reason}). ` +
56
+ `Refreshed rejected_at; original reason preserved.`,
57
+ };
58
+ }
59
+ return {
60
+ ok: true,
61
+ slug: input.slug,
62
+ };
63
+ });
64
+ }
65
+ export const rejectCandidateTool = {
66
+ name: "cairn_reject_candidate",
67
+ description: "Mark a topic-index slug as not-a-decision in `.cairn/ground/_rejected.yaml`. Phase 6 / cairn ingest skip rejected slugs. Dedup by slug; first writer wins the reason string. Use when the candidate is research, narrative, plan, status, or otherwise not a binding rule.",
68
+ inputSchema: rejectCandidateInput,
69
+ handler,
70
+ };
71
+ //# sourceMappingURL=reject-candidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject-candidate.js","sourceRoot":"","sources":["../../../src/mcp/tools/reject-candidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAgBrD,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEjC,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,sBAAsB;aAClB,CAAC;QACpC,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAkB;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,GAAG;YAChB,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;QAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EACL,QAAQ,KAAK,CAAC,IAAI,4BAA4B,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,MAAM,KAAK;oBAC3F,mDAAmD;aACtB,CAAC;QACpC,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;SACe,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,4QAA4Q;IAC9Q,WAAW,EAAE,oBAAoB;IACjC,OAAO;CACR,CAAC"}
@@ -4,30 +4,17 @@
4
4
  * Spec: PLUGIN_ARCHITECTURE §9 (MCP write tools — plugin-era addition).
5
5
  *
6
6
  * The cairn-attention skill calls this after the operator picks an
7
- * option. It maps `kind × choice` onto the canonical resolution
8
- * pathway:
9
- *
10
- * | kind | choice | resolution |
11
- * |---------------------|--------|---------------------------------------------|
12
- * | decision_draft | a | accept — move `_inbox/<id>.draft.md` → `<id>.md`, status=accepted |
13
- * | decision_draft | b | reject — rename draft to .rejected.md (id reserved forever) |
14
- * | decision_draft | c | edit-pending — return draft body (no write) |
15
- * | baseline_finding | a | triage-now — no-op (skill opens the file) |
16
- * | baseline_finding | b | suppress — append to baseline/suppressions.yaml |
17
- * | baseline_finding | c | defer — no-op |
18
- * | invalidation_event | a | refresh — re-read in-scope DECs/§INVs |
19
- * | invalidation_event | b | continue-under-old — no-op |
20
- * | invalidation_event | c | abort — caller archives task (no-op here) |
21
- * | drift | a/b/c | acknowledged (drift surface not yet active) |
7
+ * option. It maps the option (a/b/c/d) to a ground-state write (promote
8
+ * draft, suppress finding, record resolution event).
22
9
  */
23
10
  import type { ToolDef } from "./types.js";
24
11
  interface Input {
12
+ kind: "decision_draft" | "baseline_finding" | "invalidation_event" | "drift" | "bypass" | "review" | "conflict" | "alignment_pending";
25
13
  item_id: string;
26
14
  choice: "a" | "b" | "c" | "d";
27
- kind: "decision_draft" | "baseline_finding" | "invalidation_event" | "drift" | "bypass" | "review" | "conflict" | "alignment_pending";
28
- flagged_items?: string[];
29
- defer_hours?: number;
30
15
  rationale?: string;
16
+ defer_hours?: number;
17
+ flagged_items?: string[];
31
18
  }
32
19
  export declare const resolveAttentionTool: ToolDef<Input>;
33
20
  export {};