@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,21 +1,12 @@
1
1
  /**
2
- * Phase 7b-source-comments — walk every source file's docblock-class
2
+ * Phase 9-source-comments — walk every source file's docblock-class
3
3
  * comment, classify via Haiku, write DEC drafts / invariant proposals.
4
- *
5
- * Heavy walk + per-block classifications spill to
6
- * `.cairn/init/source-comments-walk.json`; only the lightweight projection
7
- * (counts, ledger paths, kindCounts) lives on the persisted phase output.
8
- *
9
- * Project globs from the mapper + the 4-pilot picked module flow into
10
- * scoring so every DEC draft + invariant gets `capture_confidence`
11
- * stamped at write time — `cairn attention bulk-accept` becomes an
12
- * O(1) file move instead of a re-score sweep.
13
4
  */
14
5
  import { runSourceCommentsIngestion, } from "../source-comments/index.js";
15
- import { clearProgress, writeProgress } from "../progress.js";
6
+ import { clearProgress } from "../progress.js";
16
7
  import { advancePhase } from "./orchestrator.js";
17
8
  import { to7bResultPersisted, writeSourceCommentsWalkFile, } from "./source-comments-output-io.js";
18
- export async function runPhase7bSourceComments(state) {
9
+ export async function runPhase9SourceComments(state) {
19
10
  const mapper = state.outputs["3-mapper"];
20
11
  const globs = mapper
21
12
  ? {
@@ -26,7 +17,7 @@ export async function runPhase7bSourceComments(state) {
26
17
  off_limits: mapper.output.off_limits_globs,
27
18
  }
28
19
  : {};
29
- const pilotOut = state.outputs["4-pilot"];
20
+ const pilotOut = state.outputs["5-pilot"];
30
21
  const pilotModule = typeof pilotOut?.picked === "string" && pilotOut.picked.length > 0
31
22
  ? pilotOut.picked
32
23
  : undefined;
@@ -34,27 +25,17 @@ export async function runPhase7bSourceComments(state) {
34
25
  try {
35
26
  const result = await runSourceCommentsIngestion({
36
27
  repoRoot: state.repoRoot,
37
- globs,
38
- ...(pilotModule !== undefined ? { pilotModule } : {}),
39
- onBatchProgress: (row) => writeProgress(state.repoRoot, {
40
- phase: "7b-source-comments",
41
- batch: row.index + 1,
42
- total: row.total,
43
- classified: row.classified,
44
- failed: row.failed,
45
- startedAt,
46
- }),
47
28
  });
48
29
  writeSourceCommentsWalkFile(state.repoRoot, result);
49
30
  const persisted = to7bResultPersisted(result);
50
31
  clearProgress(state.repoRoot);
51
32
  const next = {
52
33
  ...state,
53
- outputs: { ...state.outputs, "7b-source-comments": persisted },
34
+ outputs: { ...state.outputs, "9-source-comments": persisted },
54
35
  };
55
36
  return {
56
37
  status: "complete",
57
- nextPhase: "7c-rules-merge",
38
+ nextPhase: "10-rules-merge",
58
39
  state: advancePhase(next),
59
40
  };
60
41
  }
@@ -71,4 +52,4 @@ export async function runPhase7bSourceComments(state) {
71
52
  };
72
53
  }
73
54
  }
74
- //# sourceMappingURL=7b-source-comments.js.map
55
+ //# sourceMappingURL=9-source-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"9-source-comments.js","sourceRoot":"","sources":["../../../src/init/phases/9-source-comments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,0BAA0B,GAE3B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAiB;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsC,CAAC;IAC9E,MAAM,KAAK,GAAiB,MAAM;QAChC,CAAC,CAAC;YACE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB;YACtD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB;YAC5D,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;YAClD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;SAC3C;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAoC,CAAC;IAC7E,MAAM,WAAW,GACf,OAAO,QAAQ,EAAE,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAChE,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAA+B,MAAM,0BAA0B,CAAC;YAC1E,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC9C,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE;SAC9D,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,iCAAiC;gBAC1C,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -5,16 +5,16 @@ export { freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, } from "./
5
5
  export { runPhase1Detect } from "./1-detect.js";
6
6
  export { runPhase2Walker } from "./2-walker.js";
7
7
  export { runPhase3Mapper } from "./3-mapper.js";
8
- export { runPhase3bSeed } from "./3b-seed.js";
9
- export { runPhase4Pilot } from "./4-pilot.js";
10
- export { runPhase5Brand } from "./5-brand.js";
11
- export { runPhase5bTopicIndex } from "./5b-topic-index.js";
12
- export type { TopicIndexPhaseOutput } from "./5b-topic-index.js";
13
- export { runPhase6DocsIngest } from "./6-docs-ingest.js";
14
- export { runPhase7bSourceComments } from "./7b-source-comments.js";
15
- export { runPhase7cRulesMerge } from "./7c-rules-merge.js";
16
- export { runPhase8Baseline } from "./8-baseline.js";
17
- export { runPhase10Strip } from "./10-strip.js";
18
- export { runPhase12Multidev } from "./12-multidev.js";
19
- export { runPhases678Parallel } from "./parallel-678.js";
8
+ export { runPhase4Seed } from "./4-seed.js";
9
+ export { runPhase5Pilot } from "./5-pilot.js";
10
+ export { runPhase6Brand } from "./6-brand.js";
11
+ export { runPhase7TopicIndex } from "./7-topic-index.js";
12
+ export type { TopicIndexPhaseOutput } from "./7-topic-index.js";
13
+ export { runPhase8DocsIngest } from "./8-docs-ingest.js";
14
+ export { runPhase9SourceComments } from "./9-source-comments.js";
15
+ export { runPhase10RulesMerge } from "./10-rules-merge.js";
16
+ export { runPhase11Baseline } from "./11-baseline.js";
17
+ export { runPhase12Strip } from "./12-strip.js";
18
+ export { runPhase13Multidev } from "./13-multidev.js";
19
+ export { runPhases8910Parallel } from "./parallel-8910.js";
20
20
  export { SOURCE_COMMENTS_WALK_PATH, sourceCommentsWalkAbsPath, readSourceCommentsWalkFile, writeSourceCommentsWalkFile, to7bResultPersisted, type IngestSourceCommentsResultPersisted, } from "./source-comments-output-io.js";
@@ -5,16 +5,16 @@ export { freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, } from "./
5
5
  export { runPhase1Detect } from "./1-detect.js";
6
6
  export { runPhase2Walker } from "./2-walker.js";
7
7
  export { runPhase3Mapper } from "./3-mapper.js";
8
- export { runPhase3bSeed } from "./3b-seed.js";
9
- export { runPhase4Pilot } from "./4-pilot.js";
10
- export { runPhase5Brand } from "./5-brand.js";
11
- export { runPhase5bTopicIndex } from "./5b-topic-index.js";
12
- export { runPhase6DocsIngest } from "./6-docs-ingest.js";
13
- export { runPhase7bSourceComments } from "./7b-source-comments.js";
14
- export { runPhase7cRulesMerge } from "./7c-rules-merge.js";
15
- export { runPhase8Baseline } from "./8-baseline.js";
16
- export { runPhase10Strip } from "./10-strip.js";
17
- export { runPhase12Multidev } from "./12-multidev.js";
18
- export { runPhases678Parallel } from "./parallel-678.js";
8
+ export { runPhase4Seed } from "./4-seed.js";
9
+ export { runPhase5Pilot } from "./5-pilot.js";
10
+ export { runPhase6Brand } from "./6-brand.js";
11
+ export { runPhase7TopicIndex } from "./7-topic-index.js";
12
+ export { runPhase8DocsIngest } from "./8-docs-ingest.js";
13
+ export { runPhase9SourceComments } from "./9-source-comments.js";
14
+ export { runPhase10RulesMerge } from "./10-rules-merge.js";
15
+ export { runPhase11Baseline } from "./11-baseline.js";
16
+ export { runPhase12Strip } from "./12-strip.js";
17
+ export { runPhase13Multidev } from "./13-multidev.js";
18
+ export { runPhases8910Parallel } from "./parallel-8910.js";
19
19
  export { SOURCE_COMMENTS_WALK_PATH, sourceCommentsWalkAbsPath, readSourceCommentsWalkFile, writeSourceCommentsWalkFile, to7bResultPersisted, } from "./source-comments-output-io.js";
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC"}
@@ -1,16 +1,15 @@
1
1
  /**
2
- * Phases 6 / 7b / 7c sequential orchestrator.
2
+ * Phases 8 / 9 / 10 sequential orchestrator.
3
3
  *
4
4
  * The three post-pilot ingestion phases (docs-ingest, source-comments,
5
5
  * rules-merge) all read + write the same v0.5.0 ground-state files —
6
6
  * `topic-index.yaml`, `anchor-map.yaml`, `sot-bindings.yaml`,
7
7
  * `sot-cache.yaml`. Concurrent execution races on those writes: each
8
8
  * phase reads at start, mutates in memory, writes at end → last writer
9
- * wipes the others. The v0.4.x parallel orchestrator was safe because
10
- * only DEC/INV files (uniquely named per id) were on the write path.
9
+ * wipes the others.
11
10
  *
12
11
  * v0.5.0 fix: run the phases sequentially in canonical order
13
- * (67b7c). Each phase still uses Haiku internally (with its own
12
+ * (8910). Each phase still uses Haiku internally (with its own
14
13
  * concurrency for batching + per-section workers), so the wall-clock
15
14
  * cost vs. the v0.4.x parallel pipeline is bounded by the longest
16
15
  * phase plus the smaller two — historically <5s combined for the
@@ -18,11 +17,11 @@
18
17
  * motion across all three.
19
18
  *
20
19
  * State machine:
21
- * - The runner enters expecting `currentPhase === "6-docs-ingest"` and
22
- * exits with `currentPhase === "8-baseline"`, jumping past the
23
- * individual 7b / 7c slots in PHASE_IDS. The sequential per-phase
20
+ * - The runner enters expecting `currentPhase === "8-docs-ingest"` and
21
+ * exits with `currentPhase === "11-baseline"`, jumping past the
22
+ * individual 9 / 10 slots in PHASE_IDS. The sequential per-phase
24
23
  * MCP tools remain available; this runner is the optimized path the
25
24
  * adopt skill prefers.
26
25
  */
27
26
  import type { PhaseResult, PhaseState } from "./types.js";
28
- export declare function runPhases678Parallel(state: PhaseState): Promise<PhaseResult>;
27
+ export declare function runPhases8910Parallel(state: PhaseState): Promise<PhaseResult>;
@@ -1,16 +1,15 @@
1
1
  /**
2
- * Phases 6 / 7b / 7c sequential orchestrator.
2
+ * Phases 8 / 9 / 10 sequential orchestrator.
3
3
  *
4
4
  * The three post-pilot ingestion phases (docs-ingest, source-comments,
5
5
  * rules-merge) all read + write the same v0.5.0 ground-state files —
6
6
  * `topic-index.yaml`, `anchor-map.yaml`, `sot-bindings.yaml`,
7
7
  * `sot-cache.yaml`. Concurrent execution races on those writes: each
8
8
  * phase reads at start, mutates in memory, writes at end → last writer
9
- * wipes the others. The v0.4.x parallel orchestrator was safe because
10
- * only DEC/INV files (uniquely named per id) were on the write path.
9
+ * wipes the others.
11
10
  *
12
11
  * v0.5.0 fix: run the phases sequentially in canonical order
13
- * (67b7c). Each phase still uses Haiku internally (with its own
12
+ * (8910). Each phase still uses Haiku internally (with its own
14
13
  * concurrency for batching + per-section workers), so the wall-clock
15
14
  * cost vs. the v0.4.x parallel pipeline is bounded by the longest
16
15
  * phase plus the smaller two — historically <5s combined for the
@@ -18,9 +17,9 @@
18
17
  * motion across all three.
19
18
  *
20
19
  * State machine:
21
- * - The runner enters expecting `currentPhase === "6-docs-ingest"` and
22
- * exits with `currentPhase === "8-baseline"`, jumping past the
23
- * individual 7b / 7c slots in PHASE_IDS. The sequential per-phase
20
+ * - The runner enters expecting `currentPhase === "8-docs-ingest"` and
21
+ * exits with `currentPhase === "11-baseline"`, jumping past the
22
+ * individual 9 / 10 slots in PHASE_IDS. The sequential per-phase
24
23
  * MCP tools remain available; this runner is the optimized path the
25
24
  * adopt skill prefers.
26
25
  */
@@ -32,17 +31,17 @@ import { runRulesMerge } from "../rules-merge/index.js";
32
31
  import { runSourceCommentsIngestion } from "../source-comments/index.js";
33
32
  import { to7bResultPersisted, writeSourceCommentsWalkFile, } from "./source-comments-output-io.js";
34
33
  import { advancePhase } from "./orchestrator.js";
35
- const log = logger("init.phases.parallel-678");
36
- export async function runPhases678Parallel(state) {
37
- // Sanity: this runner only enters at the start of the 6 / 7b / 7c
34
+ const log = logger("init.phases.parallel-8910");
35
+ export async function runPhases8910Parallel(state) {
36
+ // Sanity: this runner only enters at the start of the 8 / 9 / 10
38
37
  // window. If currentPhase is anywhere else, the caller invoked the
39
38
  // wrong tool — surface as error so we don't mid-pipeline jump.
40
- if (state.currentPhase !== "6-docs-ingest") {
39
+ if (state.currentPhase !== "8-docs-ingest") {
41
40
  return {
42
41
  status: "error",
43
42
  error: {
44
43
  code: "wrong-phase",
45
- message: `runPhases678Parallel requires currentPhase=6-docs-ingest, got ${state.currentPhase}`,
44
+ message: `runPhases8910Parallel requires currentPhase=8-docs-ingest, got ${state.currentPhase}`,
46
45
  },
47
46
  state,
48
47
  };
@@ -57,7 +56,7 @@ export async function runPhases678Parallel(state) {
57
56
  off_limits: mapper.output.off_limits_globs,
58
57
  }
59
58
  : {};
60
- const pilotOut = state.outputs["4-pilot"];
59
+ const pilotOut = state.outputs["5-pilot"];
61
60
  const pilotModule = typeof pilotOut?.picked === "string" && pilotOut.picked.length > 0
62
61
  ? pilotOut.picked
63
62
  : undefined;
@@ -66,20 +65,26 @@ export async function runPhases678Parallel(state) {
66
65
  log.info({
67
66
  preScannedDecIds: sharedDecIds.size,
68
67
  preScannedInvIds: sharedInvIds.size,
69
- }, "parallel-678 starting");
68
+ }, "parallel-8910 starting");
70
69
  // Run the three phases sequentially. v0.5.0 ground-state files
71
70
  // (topic-index, anchor-map, sot-bindings, sot-cache) are the shared
72
- // mutable surface; serializing 67b7c removes the last-writer-
71
+ // mutable surface; serializing 8910 removes the last-writer-
73
72
  // wins race that Promise.allSettled had under v0.4.x.
74
73
  const t0 = performance.now();
75
74
  const startedAt = Date.now();
75
+ // Phase 8 now runs the staged ingest pipeline:
76
+ // Stage 3 marker scan (0 Haiku) → Stage 1 file-purpose binary filter
77
+ // (batch=30, concurrency=5) → Stage 2 section-level batch classifier
78
+ // (batch=30, concurrency=5) → Stage 4 emit drafts to `_inbox/`. Each
79
+ // completed batch fires `onChunkProgress` with the active stage label
80
+ // so the statusline can render the right ETA window.
76
81
  const docsRes = await runPhaseSafely("docs-ingest-failed", async () => runDocsIngestion({
77
82
  repoRoot: state.repoRoot,
78
83
  existingDecIds: sharedDecIds,
79
- onEntryProgress: (row) => writeProgress(state.repoRoot, {
80
- phase: "6-docs-ingest",
81
- batch: row.total > 0 ? row.total : 1,
82
- total: row.total,
84
+ onChunkProgress: (row) => writeProgress(state.repoRoot, {
85
+ phase: `8-docs-ingest:${row.stage}`,
86
+ batch: row.entriesDone,
87
+ total: row.totalEntries,
83
88
  startedAt,
84
89
  }),
85
90
  }));
@@ -89,18 +94,8 @@ export async function runPhases678Parallel(state) {
89
94
  }
90
95
  const srcRes = await runPhaseSafely("source-comments-failed", async () => runSourceCommentsIngestion({
91
96
  repoRoot: state.repoRoot,
92
- globs,
93
97
  ...(pilotModule !== undefined ? { pilotModule } : {}),
94
- existingDecIds: sharedDecIds,
95
- existingInvIds: sharedInvIds,
96
- onBatchProgress: (row) => writeProgress(state.repoRoot, {
97
- phase: "7b-source-comments",
98
- batch: row.index + 1,
99
- total: row.total,
100
- classified: row.classified,
101
- failed: row.failed,
102
- startedAt,
103
- }),
98
+ dryRun: false,
104
99
  }));
105
100
  if ("error" in srcRes) {
106
101
  clearProgress(state.repoRoot);
@@ -108,14 +103,7 @@ export async function runPhases678Parallel(state) {
108
103
  }
109
104
  const rulesRes = await runPhaseSafely("rules-merge-failed", async () => runRulesMerge({
110
105
  repoRoot: state.repoRoot,
111
- existingDecIds: sharedDecIds,
112
- existingInvIds: sharedInvIds,
113
- onSectionProgress: (row) => writeProgress(state.repoRoot, {
114
- phase: "7c-rules-merge",
115
- batch: row.index,
116
- total: row.total,
117
- startedAt,
118
- }),
106
+ dryRun: false,
119
107
  }));
120
108
  if ("error" in rulesRes) {
121
109
  clearProgress(state.repoRoot);
@@ -126,12 +114,12 @@ export async function runPhases678Parallel(state) {
126
114
  writeSourceCommentsWalkFile(state.repoRoot, srcRes.value);
127
115
  const persistedSrc = to7bResultPersisted(srcRes.value);
128
116
  const outputs = {
129
- "6-docs-ingest": docsRes.value,
130
- "7b-source-comments": persistedSrc,
131
- "7c-rules-merge": rulesRes.value,
117
+ "8-docs-ingest": docsRes.value,
118
+ "9-source-comments": persistedSrc,
119
+ "10-rules-merge": rulesRes.value,
132
120
  };
133
- // Advance the state machine all the way past 7c so the next phase
134
- // tool the skill calls is 8-baseline.
121
+ // Advance the state machine all the way past 10 so the next phase
122
+ // tool the skill calls is 11-baseline.
135
123
  let next = {
136
124
  ...state,
137
125
  outputs: {
@@ -139,7 +127,7 @@ export async function runPhases678Parallel(state) {
139
127
  ...outputs,
140
128
  },
141
129
  };
142
- const skipTargets = ["6-docs-ingest", "7b-source-comments", "7c-rules-merge"];
130
+ const skipTargets = ["8-docs-ingest", "9-source-comments", "10-rules-merge"];
143
131
  for (const _ of skipTargets) {
144
132
  next = advancePhase(next);
145
133
  }
@@ -160,7 +148,7 @@ export async function runPhases678Parallel(state) {
160
148
  durationMs,
161
149
  decsAfter: sharedDecIds.size,
162
150
  invsAfter: sharedInvIds.size,
163
- }, "parallel-678 complete");
151
+ }, "parallel-8910 complete");
164
152
  return {
165
153
  status: "complete",
166
154
  nextPhase: next.currentPhase,
@@ -181,4 +169,4 @@ async function runPhaseSafely(code, fn) {
181
169
  return { error: { code, message, detail } };
182
170
  }
183
171
  }
184
- //# sourceMappingURL=parallel-678.js.map
172
+ //# sourceMappingURL=parallel-8910.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-8910.js","sourceRoot":"","sources":["../../../src/init/phases/parallel-8910.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Side-file persistence for the heavy Phase 7b output.
2
+ * Side-file persistence for the heavy Phase 9 output.
3
3
  *
4
4
  * `IngestSourceCommentsResult` carries the full walk (every comment block's
5
5
  * raw text + prose) and the matching classifications. On a busy monorepo
@@ -20,12 +20,12 @@ import type { CommentClassKind } from "../source-comments/classify.js";
20
20
  export declare const SOURCE_COMMENTS_WALK_PATH: string;
21
21
  export declare function sourceCommentsWalkAbsPath(repoRoot: string): string;
22
22
  /**
23
- * Atomically write the full Phase 7b result. Creates `.cairn/init/`
23
+ * Atomically write the full Phase 9 result. Creates `.cairn/init/`
24
24
  * if needed.
25
25
  */
26
26
  export declare function writeSourceCommentsWalkFile(repoRoot: string, full: IngestSourceCommentsResult): string;
27
27
  /**
28
- * Read the full Phase 7b result from `.cairn/init/source-comments-walk.json`.
28
+ * Read the full Phase 9 result from `.cairn/init/source-comments-walk.json`.
29
29
  * Returns null if missing or unreadable. Available for debug tooling and
30
30
  * post-hoc inspection — phase consumers prefer the lightweight projection
31
31
  * stored on state.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Side-file persistence for the heavy Phase 7b output.
2
+ * Side-file persistence for the heavy Phase 9 output.
3
3
  *
4
4
  * `IngestSourceCommentsResult` carries the full walk (every comment block's
5
5
  * raw text + prose) and the matching classifications. On a busy monorepo
@@ -22,7 +22,7 @@ export function sourceCommentsWalkAbsPath(repoRoot) {
22
22
  return join(repoRoot, SOURCE_COMMENTS_WALK_PATH);
23
23
  }
24
24
  /**
25
- * Atomically write the full Phase 7b result. Creates `.cairn/init/`
25
+ * Atomically write the full Phase 9 result. Creates `.cairn/init/`
26
26
  * if needed.
27
27
  */
28
28
  export function writeSourceCommentsWalkFile(repoRoot, full) {
@@ -34,7 +34,7 @@ export function writeSourceCommentsWalkFile(repoRoot, full) {
34
34
  return abs;
35
35
  }
36
36
  /**
37
- * Read the full Phase 7b result from `.cairn/init/source-comments-walk.json`.
37
+ * Read the full Phase 9 result from `.cairn/init/source-comments-walk.json`.
38
38
  * Returns null if missing or unreadable. Available for debug tooling and
39
39
  * post-hoc inspection — phase consumers prefer the lightweight projection
40
40
  * stored on state.
@@ -13,7 +13,7 @@
13
13
  * and pick up at the same phase on the next session.
14
14
  */
15
15
  /** Phase ids in execution order. */
16
- export declare const PHASE_IDS: readonly ["1-detect", "2-walker", "3-mapper", "3b-seed", "4-pilot", "5-brand", "5b-topic-index", "6-docs-ingest", "7b-source-comments", "7c-rules-merge", "8-baseline", "10-strip", "12-multidev"];
16
+ export declare const PHASE_IDS: readonly ["1-detect", "2-walker", "3-mapper", "4-seed", "5-pilot", "6-brand", "7-topic-index", "8-docs-ingest", "9-source-comments", "10-rules-merge", "11-baseline", "12-strip", "13-multidev"];
17
17
  export type PhaseId = (typeof PHASE_IDS)[number];
18
18
  /** Inline A/B/C question rendered via AskUserQuestion in the skill. */
19
19
  export interface PhaseQuestion {
@@ -17,15 +17,15 @@ export const PHASE_IDS = [
17
17
  "1-detect",
18
18
  "2-walker",
19
19
  "3-mapper",
20
- "3b-seed",
21
- "4-pilot",
22
- "5-brand",
23
- "5b-topic-index",
24
- "6-docs-ingest",
25
- "7b-source-comments",
26
- "7c-rules-merge",
27
- "8-baseline",
28
- "10-strip",
29
- "12-multidev",
20
+ "4-seed",
21
+ "5-pilot",
22
+ "6-brand",
23
+ "7-topic-index",
24
+ "8-docs-ingest",
25
+ "9-source-comments",
26
+ "10-rules-merge",
27
+ "11-baseline",
28
+ "12-strip",
29
+ "13-multidev",
30
30
  ];
31
31
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/init/phases/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,UAAU;IACV,aAAa;CACL,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/init/phases/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU;IACV,UAAU;IACV,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;IACT,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,aAAa;IACb,UAAU;IACV,aAAa;CACL,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Phase 7c discovery — find existing project-rules sources.
2
+ * Phase 10 discovery — find existing project-rules sources.
3
3
  *
4
4
  * Plan §5.4 ownership set (v0.5.0):
5
5
  * - <repoRoot>/CLAUDE.md
@@ -7,7 +7,7 @@
7
7
  * - <repoRoot>/.claude/rules/**.md
8
8
  *
9
9
  * `.claude/CLAUDE.md` was previously discovered here too (kind
10
- * `claude-md-claude-dir`). The phase 5b walker treats every reachable
10
+ * `claude-md-claude-dir`). The phase 7 walker treats every reachable
11
11
  * `.md` outside the rule-owned set as `kind="doc"` — so phase 6 already
12
12
  * owns `.claude/CLAUDE.md`. Re-discovering it here would race with phase
13
13
  * 6's emit and double-bind the slug.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Phase 7c discovery — find existing project-rules sources.
2
+ * Phase 10 discovery — find existing project-rules sources.
3
3
  *
4
4
  * Plan §5.4 ownership set (v0.5.0):
5
5
  * - <repoRoot>/CLAUDE.md
@@ -7,15 +7,16 @@
7
7
  * - <repoRoot>/.claude/rules/**.md
8
8
  *
9
9
  * `.claude/CLAUDE.md` was previously discovered here too (kind
10
- * `claude-md-claude-dir`). The phase 5b walker treats every reachable
10
+ * `claude-md-claude-dir`). The phase 7 walker treats every reachable
11
11
  * `.md` outside the rule-owned set as `kind="doc"` — so phase 6 already
12
12
  * owns `.claude/CLAUDE.md`. Re-discovering it here would race with phase
13
13
  * 6's emit and double-bind the slug.
14
14
  *
15
15
  * Returns absolute + repo-relative paths that exist. Caller drives the rest.
16
16
  */
17
- import { existsSync, readdirSync, statSync } from "node:fs";
18
- import { join, relative } from "node:path";
17
+ import { existsSync, statSync } from "node:fs";
18
+ import { join } from "node:path";
19
+ import { toPosix, walkFs } from "@isaacriehm/cairn-state";
19
20
  export function discoverRuleSources(repoRoot) {
20
21
  const out = [];
21
22
  const tryFile = (rel, kind) => {
@@ -37,46 +38,30 @@ export function discoverRuleSources(repoRoot) {
37
38
  tryFile("AGENTS.md", "agents-md-root");
38
39
  const rulesDir = join(repoRoot, ".claude", "rules");
39
40
  if (existsSync(rulesDir)) {
40
- walkRules(rulesDir, repoRoot, out);
41
- }
42
- return out;
43
- }
44
- function walkRules(dir, repoRoot, out) {
45
- let entries;
46
- try {
47
- entries = readdirSync(dir, { withFileTypes: true, encoding: "utf8" });
48
- }
49
- catch {
50
- return;
51
- }
52
- for (const e of entries) {
53
- if (e.name.startsWith("."))
54
- continue;
55
- const abs = join(dir, e.name);
56
- if (e.isDirectory()) {
57
- walkRules(abs, repoRoot, out);
58
- continue;
59
- }
60
- if (!e.isFile())
61
- continue;
62
- if (!e.name.toLowerCase().endsWith(".md"))
63
- continue;
64
- let st;
65
- try {
66
- st = statSync(abs);
67
- }
68
- catch {
69
- continue;
70
- }
71
- out.push({
72
- path: toPosix(relative(repoRoot, abs)),
73
- absPath: abs,
74
- kind: "rule",
75
- size: st.size,
41
+ walkFs({
42
+ dir: rulesDir,
43
+ repoRoot,
44
+ onFile: (rel, abs, e) => {
45
+ if (e.name.startsWith("."))
46
+ return;
47
+ if (!e.name.toLowerCase().endsWith(".md"))
48
+ return;
49
+ let st;
50
+ try {
51
+ st = statSync(abs);
52
+ }
53
+ catch {
54
+ return;
55
+ }
56
+ out.push({
57
+ path: rel,
58
+ absPath: abs,
59
+ kind: "rule",
60
+ size: st.size,
61
+ });
62
+ },
76
63
  });
77
64
  }
78
- }
79
- function toPosix(p) {
80
- return p.replace(/\\/g, "/");
65
+ return out;
81
66
  }
82
67
  //# sourceMappingURL=discover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/init/rules-merge/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAY3C,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAA4B,EAAQ,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACvC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,QAAgB,EAAE,GAAqB;IACrE,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YAAE,SAAS;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACpD,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/init/rules-merge/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAY1D,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAA4B,EAAQ,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACvC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC;YACL,GAAG,EAAE,QAAQ;YACb,QAAQ;YACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;gBACtB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACnC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,OAAO;gBAClD,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,GAAG;oBACZ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,EAAE,CAAC,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Phase 7c orchestrator (v0.5.0 SoT model).
2
+ * Phase 10 orchestrator (v0.5.0 SoT model).
3
3
  *
4
4
  * Plan §5.4 algorithm:
5
5
  * 1. Discover sections in `CLAUDE.md`, `AGENTS.md`, `.claude/rules/*.md`.
6
- * 2. Topic-index lookup (built by phase 5b) before classification:
6
+ * 2. Topic-index lookup (built by phase 7) before classification:
7
7
  * - **Match** — slug already owns a docs/CLAUDE.md/AGENTS.md/rule
8
- * SoT and was emitted by an earlier phase. Phase 7c records the
8
+ * SoT and was emitted by an earlier phase. Phase 10 records the
9
9
  * cite (no source rewrite — operator's narrative stays intact)
10
10
  * and skips emit.
11
11
  * - **Net-new** — slug is in topic-index but not yet emitted.
12
- * Phase 7c classifies the section via Haiku (kind only:
12
+ * Phase 10 classifies the section via Haiku (kind only:
13
13
  * decision / domain-rule / constraint / informational), emits
14
14
  * a verbatim DEC/INV via `sot-emit` with `sot_kind: "path"` +
15
15
  * `sot_path: <file>#<anchor>`, auto-promotes (`status: accepted`).
@@ -90,7 +90,7 @@ interface RuleEmittedRecord {
90
90
  status: "accepted";
91
91
  }
92
92
  interface RuleCiteRecord {
93
- /** DEC/INV id the section was bound to (already emitted by phase 6 / 7b). */
93
+ /** DEC/INV id the section was bound to (already emitted by phase 8 / 7b). */
94
94
  id: string;
95
95
  /** Section's source file. */
96
96
  sourceFile: string;
@@ -98,7 +98,7 @@ interface RuleCiteRecord {
98
98
  slug: string;
99
99
  }
100
100
  interface RuleConflictRecord {
101
- /** Newly emitted entity id (DEC or INV from this phase 7c run). */
101
+ /** Newly emitted entity id (DEC or INV from this phase 10 run). */
102
102
  newId: string;
103
103
  /** Pre-existing accepted entity id the new prose contradicts. */
104
104
  otherId: string;