@isaacriehm/cairn-core 0.4.2 → 0.5.0

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 (211) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/align-undo/index.d.ts +6 -0
  3. package/dist/align-undo/index.js +6 -0
  4. package/dist/align-undo/index.js.map +1 -0
  5. package/dist/align-undo/log.d.ts +53 -0
  6. package/dist/align-undo/log.js +99 -0
  7. package/dist/align-undo/log.js.map +1 -0
  8. package/dist/align-undo/undo.d.ts +66 -0
  9. package/dist/align-undo/undo.js +187 -0
  10. package/dist/align-undo/undo.js.map +1 -0
  11. package/dist/attention/bulk-accept.js +1 -1
  12. package/dist/attention/bulk-accept.js.map +1 -1
  13. package/dist/attention/dedup.d.ts +2 -2
  14. package/dist/attention/dedup.js +16 -51
  15. package/dist/attention/dedup.js.map +1 -1
  16. package/dist/attention/index.d.ts +1 -0
  17. package/dist/attention/index.js +1 -0
  18. package/dist/attention/index.js.map +1 -1
  19. package/dist/attention/restore.js +1 -1
  20. package/dist/attention/restore.js.map +1 -1
  21. package/dist/attention/serve/api.d.ts +23 -0
  22. package/dist/attention/serve/api.js +344 -0
  23. package/dist/attention/serve/api.js.map +1 -0
  24. package/dist/attention/serve/index.d.ts +62 -0
  25. package/dist/attention/serve/index.js +205 -0
  26. package/dist/attention/serve/index.js.map +1 -0
  27. package/dist/decision-capture/id.d.ts +62 -25
  28. package/dist/decision-capture/id.js +78 -57
  29. package/dist/decision-capture/id.js.map +1 -1
  30. package/dist/decision-capture/index.d.ts +3 -3
  31. package/dist/decision-capture/index.js +3 -3
  32. package/dist/decision-capture/index.js.map +1 -1
  33. package/dist/drain/drain.d.ts +77 -0
  34. package/dist/drain/drain.js +464 -0
  35. package/dist/drain/drain.js.map +1 -0
  36. package/dist/drain/index.d.ts +5 -0
  37. package/dist/drain/index.js +5 -0
  38. package/dist/drain/index.js.map +1 -0
  39. package/dist/fix-align/index.d.ts +5 -0
  40. package/dist/fix-align/index.js +5 -0
  41. package/dist/fix-align/index.js.map +1 -0
  42. package/dist/fix-align/run.d.ts +99 -0
  43. package/dist/fix-align/run.js +258 -0
  44. package/dist/fix-align/run.js.map +1 -0
  45. package/dist/ground/alignment-pending.d.ts +28 -0
  46. package/dist/ground/alignment-pending.js +83 -0
  47. package/dist/ground/alignment-pending.js.map +1 -0
  48. package/dist/ground/anchor-map.d.ts +14 -0
  49. package/dist/ground/anchor-map.js +57 -0
  50. package/dist/ground/anchor-map.js.map +1 -0
  51. package/dist/ground/index.d.ts +9 -2
  52. package/dist/ground/index.js +8 -2
  53. package/dist/ground/index.js.map +1 -1
  54. package/dist/ground/paths.d.ts +21 -0
  55. package/dist/ground/paths.js +43 -0
  56. package/dist/ground/paths.js.map +1 -1
  57. package/dist/ground/schemas.d.ts +201 -0
  58. package/dist/ground/schemas.js +128 -3
  59. package/dist/ground/schemas.js.map +1 -1
  60. package/dist/ground/scope-index.js +2 -2
  61. package/dist/ground/scope-index.js.map +1 -1
  62. package/dist/ground/slug.d.ts +60 -0
  63. package/dist/ground/slug.js +103 -0
  64. package/dist/ground/slug.js.map +1 -0
  65. package/dist/ground/sot-bindings.d.ts +14 -0
  66. package/dist/ground/sot-bindings.js +80 -0
  67. package/dist/ground/sot-bindings.js.map +1 -0
  68. package/dist/ground/sot-cache.d.ts +18 -0
  69. package/dist/ground/sot-cache.js +63 -0
  70. package/dist/ground/sot-cache.js.map +1 -0
  71. package/dist/ground/topic-index.d.ts +20 -0
  72. package/dist/ground/topic-index.js +60 -0
  73. package/dist/ground/topic-index.js.map +1 -0
  74. package/dist/hooks/post-tool-use/citation-scanner.d.ts +1 -1
  75. package/dist/hooks/post-tool-use/citation-scanner.js +3 -3
  76. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
  77. package/dist/hooks/post-tool-use/copy-scanner.js +1 -1
  78. package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -1
  79. package/dist/hooks/post-tool-use/index.d.ts +2 -0
  80. package/dist/hooks/post-tool-use/index.js +1 -0
  81. package/dist/hooks/post-tool-use/index.js.map +1 -1
  82. package/dist/hooks/post-tool-use/legend-builder.d.ts +1 -1
  83. package/dist/hooks/post-tool-use/legend-builder.js +2 -2
  84. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  85. package/dist/hooks/post-tool-use/sot-align.d.ts +166 -0
  86. package/dist/hooks/post-tool-use/sot-align.js +1311 -0
  87. package/dist/hooks/post-tool-use/sot-align.js.map +1 -0
  88. package/dist/hooks/pre-commit/index.d.ts +8 -0
  89. package/dist/hooks/pre-commit/index.js +8 -0
  90. package/dist/hooks/pre-commit/index.js.map +1 -0
  91. package/dist/hooks/pre-commit/sot-align-precommit.d.ts +60 -0
  92. package/dist/hooks/pre-commit/sot-align-precommit.js +221 -0
  93. package/dist/hooks/pre-commit/sot-align-precommit.js.map +1 -0
  94. package/dist/hooks/runners/session-start.js +41 -0
  95. package/dist/hooks/runners/session-start.js.map +1 -1
  96. package/dist/hooks/sot-align-common.d.ts +39 -0
  97. package/dist/hooks/sot-align-common.js +152 -0
  98. package/dist/hooks/sot-align-common.js.map +1 -0
  99. package/dist/index.d.ts +5 -0
  100. package/dist/index.js +5 -0
  101. package/dist/index.js.map +1 -1
  102. package/dist/init/index.d.ts +4 -2
  103. package/dist/init/index.js +2 -1
  104. package/dist/init/index.js.map +1 -1
  105. package/dist/init/ingest-docs.d.ts +30 -47
  106. package/dist/init/ingest-docs.js +113 -406
  107. package/dist/init/ingest-docs.js.map +1 -1
  108. package/dist/init/init.d.ts +8 -0
  109. package/dist/init/init.js +58 -29
  110. package/dist/init/init.js.map +1 -1
  111. package/dist/init/mapper-parallel.js +1 -1
  112. package/dist/init/mapper-parallel.js.map +1 -1
  113. package/dist/init/phases/5-brand.js +1 -1
  114. package/dist/init/phases/5-brand.js.map +1 -1
  115. package/dist/init/phases/5b-topic-index.d.ts +30 -0
  116. package/dist/init/phases/5b-topic-index.js +62 -0
  117. package/dist/init/phases/5b-topic-index.js.map +1 -0
  118. package/dist/init/phases/6-docs-ingest.d.ts +4 -5
  119. package/dist/init/phases/6-docs-ingest.js +5 -6
  120. package/dist/init/phases/6-docs-ingest.js.map +1 -1
  121. package/dist/init/phases/index.d.ts +2 -0
  122. package/dist/init/phases/index.js +1 -0
  123. package/dist/init/phases/index.js.map +1 -1
  124. package/dist/init/phases/parallel-678.d.ts +14 -17
  125. package/dist/init/phases/parallel-678.js +77 -98
  126. package/dist/init/phases/parallel-678.js.map +1 -1
  127. package/dist/init/phases/source-comments-output-io.d.ts +16 -10
  128. package/dist/init/phases/source-comments-output-io.js +7 -10
  129. package/dist/init/phases/source-comments-output-io.js.map +1 -1
  130. package/dist/init/phases/types.d.ts +1 -1
  131. package/dist/init/phases/types.js +1 -0
  132. package/dist/init/phases/types.js.map +1 -1
  133. package/dist/init/rules-merge/discover.d.ts +8 -3
  134. package/dist/init/rules-merge/discover.js +7 -3
  135. package/dist/init/rules-merge/discover.js.map +1 -1
  136. package/dist/init/rules-merge/ingest.d.ts +81 -28
  137. package/dist/init/rules-merge/ingest.js +456 -155
  138. package/dist/init/rules-merge/ingest.js.map +1 -1
  139. package/dist/init/sot-emit.d.ts +84 -0
  140. package/dist/init/sot-emit.js +218 -0
  141. package/dist/init/sot-emit.js.map +1 -0
  142. package/dist/init/source-comments/classify.d.ts +12 -10
  143. package/dist/init/source-comments/classify.js +13 -25
  144. package/dist/init/source-comments/classify.js.map +1 -1
  145. package/dist/init/source-comments/index.d.ts +1 -1
  146. package/dist/init/source-comments/index.js +1 -1
  147. package/dist/init/source-comments/index.js.map +1 -1
  148. package/dist/init/source-comments/ingest.d.ts +91 -67
  149. package/dist/init/source-comments/ingest.js +392 -349
  150. package/dist/init/source-comments/ingest.js.map +1 -1
  151. package/dist/init/topic-index/index.d.ts +36 -0
  152. package/dist/init/topic-index/index.js +46 -0
  153. package/dist/init/topic-index/index.js.map +1 -0
  154. package/dist/init/topic-index/judge.d.ts +20 -0
  155. package/dist/init/topic-index/judge.js +65 -0
  156. package/dist/init/topic-index/judge.js.map +1 -0
  157. package/dist/init/topic-index/resolve.d.ts +50 -0
  158. package/dist/init/topic-index/resolve.js +196 -0
  159. package/dist/init/topic-index/resolve.js.map +1 -0
  160. package/dist/init/topic-index/walk.d.ts +43 -0
  161. package/dist/init/topic-index/walk.js +293 -0
  162. package/dist/init/topic-index/walk.js.map +1 -0
  163. package/dist/mcp/history/summarizer.js +1 -1
  164. package/dist/mcp/history/summarizer.js.map +1 -1
  165. package/dist/mcp/schemas.d.ts +46 -9
  166. package/dist/mcp/schemas.js +48 -12
  167. package/dist/mcp/schemas.js.map +1 -1
  168. package/dist/mcp/tools/align-drain.d.ts +7 -0
  169. package/dist/mcp/tools/align-drain.js +26 -0
  170. package/dist/mcp/tools/align-drain.js.map +1 -0
  171. package/dist/mcp/tools/archive.js +1 -1
  172. package/dist/mcp/tools/archive.js.map +1 -1
  173. package/dist/mcp/tools/attention-restore.js +1 -1
  174. package/dist/mcp/tools/attention-restore.js.map +1 -1
  175. package/dist/mcp/tools/attention-serve.d.ts +23 -0
  176. package/dist/mcp/tools/attention-serve.js +78 -0
  177. package/dist/mcp/tools/attention-serve.js.map +1 -0
  178. package/dist/mcp/tools/attention-wait.d.ts +18 -0
  179. package/dist/mcp/tools/attention-wait.js +74 -0
  180. package/dist/mcp/tools/attention-wait.js.map +1 -0
  181. package/dist/mcp/tools/index.js +7 -0
  182. package/dist/mcp/tools/index.js.map +1 -1
  183. package/dist/mcp/tools/init-phases.js +4 -1
  184. package/dist/mcp/tools/init-phases.js.map +1 -1
  185. package/dist/mcp/tools/record-decision.js +14 -2
  186. package/dist/mcp/tools/record-decision.js.map +1 -1
  187. package/dist/mcp/tools/resolve-attention.d.ts +2 -2
  188. package/dist/mcp/tools/resolve-attention.js +830 -7
  189. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  190. package/dist/status-line/event-queue.d.ts +40 -0
  191. package/dist/status-line/event-queue.js +195 -0
  192. package/dist/status-line/event-queue.js.map +1 -0
  193. package/dist/status-line/format.d.ts +1 -1
  194. package/dist/status-line/format.js +49 -6
  195. package/dist/status-line/format.js.map +1 -1
  196. package/dist/status-line/index.d.ts +41 -0
  197. package/dist/status-line/index.js +14 -0
  198. package/dist/status-line/index.js.map +1 -1
  199. package/dist/status-line/reader.js +23 -18
  200. package/dist/status-line/reader.js.map +1 -1
  201. package/dist/status-line/writer.d.ts +1 -1
  202. package/dist/status-line/writer.js +5 -0
  203. package/dist/status-line/writer.js.map +1 -1
  204. package/dist/text/jaccard.d.ts +19 -0
  205. package/dist/text/jaccard.js +68 -0
  206. package/dist/text/jaccard.js.map +1 -0
  207. package/package.json +1 -1
  208. package/templates/.cairn/git-hooks/pre-commit +16 -3
  209. package/templates/attention-ui/app.css +406 -0
  210. package/templates/attention-ui/app.js +384 -0
  211. package/templates/attention-ui/index.html +56 -0
@@ -1,49 +1,29 @@
1
1
  /**
2
- * Phase 6 — docs ingestion sweep.
2
+ * Phase 6 — docs ingestion (v0.5.0 SoT model).
3
3
  *
4
- * Scans the adopted repo for existing documentation, classifies each file
5
- * via a Haiku call, and:
6
- * - decision / domain-rule → DEC draft in decisions/_inbox/
7
- * - voice-guidelines → brand/voice.md (only when current is empty placeholder)
8
- * - api-docs / other → canonical-map topics.yaml entry (when topicSlug present)
4
+ * Reads the topic-index built by phase 5b, filters to entries whose SoT
5
+ * source lives under `docs/*`, and emits verbatim DEC files under
6
+ * `.cairn/ground/decisions/`. Auto-promoted to `status: accepted`. No
7
+ * draft inbox, no LLM paraphrase the doc paragraph itself IS the
8
+ * canonical body, recorded with `sot_kind: path` so the lens renders
9
+ * the live source on every read.
9
10
  *
10
- * Cap 20 docs total largest by byte count first. One Haiku call per doc.
11
- * Concurrency cap of 4 in-flight to avoid rate limits.
11
+ * Per-entry Haiku call decides `kind` only (decision / domain-rule /
12
+ * voice-guidelines / api-docs / other). The first two emit a DEC; the
13
+ * rest are skipped at this layer (voice + canonical-topic flows are
14
+ * handled by other tooling now — they were file-level concerns under
15
+ * the v0.4.x model and have no clean paragraph-level analogue).
12
16
  */
13
- import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync, } from "node:fs";
17
+ import { existsSync, readdirSync, statSync, } from "node:fs";
14
18
  import { join, relative } from "node:path";
15
- import { stringify as stringifyYaml } from "yaml";
16
19
  import { runClaude } from "../claude/index.js";
17
- import { allocateDecisionId, scanExistingDecisionIds } from "../decision-capture/id.js";
18
- import { decisionsDir } from "../ground/paths.js";
20
+ import { readAnchorMap, readTopicIndex, writeSotBindings, writeSotCache, writeTopicIndex, } from "../ground/index.js";
19
21
  import { logger } from "../logger.js";
22
+ import { emitFromTopicIndex } from "./sot-emit.js";
20
23
  const log = logger("init.ingest-docs");
21
- const MAX_DOCS = 20;
22
- const CONCURRENCY = 4;
23
24
  const PER_DOC_TIMEOUT_MS = 60_000;
24
25
  const DOC_BODY_CAP = 8_000;
25
- const VOICE_PLACEHOLDER_MARKER = "(operator: replace this paragraph";
26
- /** Where init looks for existing docs. */
27
- const DISCOVER_DIRS = [
28
- "docs",
29
- ".planning",
30
- "planning",
31
- "decisions",
32
- "adr",
33
- "architecture",
34
- ];
35
- /** Top-level files always considered.
36
- *
37
- * AGENTS.md / CLAUDE.md / .claude/CLAUDE.md are intentionally excluded
38
- * here — phase 7c-rules-merge owns rule files and ingests them at H2/H3
39
- * section granularity. If we also processed them here as whole-file
40
- * "decision" drafts, the operator would see two DEC drafts covering the
41
- * same content (one whole-file, one per-section). README.md remains
42
- * because it usually carries narrative + canonical-topic seeding, not
43
- * rules.
44
- */
45
- const DISCOVER_TOP_FILES = ["README.md"];
46
- /** Subdirs we never descend into. */
26
+ /** Subdirs we never descend into when discovering candidate doc files. */
47
27
  const SKIP_DIRS = new Set([
48
28
  ".cairn",
49
29
  "node_modules",
@@ -58,72 +38,17 @@ const SKIP_DIRS = new Set([
58
38
  ".archive",
59
39
  ]);
60
40
  /* -------------------------------------------------------------------------- */
61
- /* Discovery */
41
+ /* Discovery (still useful for sanity checks + external callers) */
62
42
  /* -------------------------------------------------------------------------- */
63
43
  export function discoverDocs(repoRoot) {
44
+ const docsDir = join(repoRoot, "docs");
45
+ if (!existsSync(docsDir))
46
+ return [];
64
47
  const out = [];
65
- for (const f of DISCOVER_TOP_FILES) {
66
- const abs = join(repoRoot, f);
67
- if (!existsSync(abs))
68
- continue;
69
- try {
70
- const st = statSync(abs);
71
- if (!st.isFile())
72
- continue;
73
- out.push({ path: f, size: st.size, group: f });
74
- }
75
- catch {
76
- continue;
77
- }
78
- }
79
- for (const d of DISCOVER_DIRS) {
80
- const abs = join(repoRoot, d);
81
- if (!existsSync(abs))
82
- continue;
83
- let dirStat;
84
- try {
85
- dirStat = statSync(abs);
86
- }
87
- catch {
88
- continue;
89
- }
90
- if (!dirStat.isDirectory())
91
- continue;
92
- walkMarkdown(abs, repoRoot, `${d}/`, out);
93
- }
94
- // Top-level loose .md files that aren't already covered. Skip the
95
- // rule files that phase 7c-rules-merge owns (AGENTS.md, CLAUDE.md)
96
- // so we don't duplicate per-section DECs as whole-file decisions.
97
- const RULE_FILES_OWNED_BY_RULES_MERGE = new Set(["AGENTS.md", "CLAUDE.md"]);
98
- let topEntries = [];
99
- try {
100
- topEntries = readdirSync(repoRoot, { encoding: "utf8" });
101
- }
102
- catch {
103
- topEntries = [];
104
- }
105
- for (const e of topEntries) {
106
- if (!e.endsWith(".md"))
107
- continue;
108
- if (DISCOVER_TOP_FILES.includes(e))
109
- continue;
110
- if (RULE_FILES_OWNED_BY_RULES_MERGE.has(e))
111
- continue;
112
- const abs = join(repoRoot, e);
113
- let st;
114
- try {
115
- st = statSync(abs);
116
- }
117
- catch {
118
- continue;
119
- }
120
- if (!st.isFile())
121
- continue;
122
- out.push({ path: e, size: st.size, group: "(root)" });
123
- }
48
+ walkDocsDir(docsDir, repoRoot, out);
124
49
  return out;
125
50
  }
126
- function walkMarkdown(dir, repoRoot, group, out) {
51
+ function walkDocsDir(dir, repoRoot, out) {
127
52
  let entries;
128
53
  try {
129
54
  entries = readdirSync(dir, { withFileTypes: true, encoding: "utf8" });
@@ -131,17 +56,15 @@ function walkMarkdown(dir, repoRoot, group, out) {
131
56
  catch {
132
57
  return;
133
58
  }
134
- for (const e of entries) {
135
- const abs = join(dir, e.name);
136
- if (e.isDirectory()) {
137
- if (SKIP_DIRS.has(e.name) || e.name.startsWith("."))
138
- continue;
139
- walkMarkdown(abs, repoRoot, group, out);
59
+ for (const ent of entries) {
60
+ if (SKIP_DIRS.has(ent.name))
140
61
  continue;
141
- }
142
- if (!e.isFile())
62
+ const abs = join(dir, ent.name);
63
+ if (ent.isDirectory()) {
64
+ walkDocsDir(abs, repoRoot, out);
143
65
  continue;
144
- if (!e.name.endsWith(".md"))
66
+ }
67
+ if (!ent.isFile() || !ent.name.endsWith(".md"))
145
68
  continue;
146
69
  let st;
147
70
  try {
@@ -150,11 +73,17 @@ function walkMarkdown(dir, repoRoot, group, out) {
150
73
  catch {
151
74
  continue;
152
75
  }
153
- out.push({ path: relative(repoRoot, abs), size: st.size, group });
76
+ out.push({ path: relative(repoRoot, abs), size: st.size, group: dirGroup(relative(repoRoot, abs)) });
154
77
  }
155
78
  }
79
+ function dirGroup(rel) {
80
+ const parts = rel.split("/");
81
+ if (parts.length <= 1)
82
+ return "(root)";
83
+ return `${parts[0]}/`;
84
+ }
156
85
  /* -------------------------------------------------------------------------- */
157
- /* Classification (Haiku) */
86
+ /* Haiku classifier — kind only, no rewriting */
158
87
  /* -------------------------------------------------------------------------- */
159
88
  const CLASSIFY_SCHEMA = {
160
89
  type: "object",
@@ -165,30 +94,27 @@ const CLASSIFY_SCHEMA = {
165
94
  enum: ["decision", "domain-rule", "voice-guidelines", "api-docs", "other"],
166
95
  },
167
96
  proposedTitle: { type: "string" },
168
- proposedRationale: { type: "string" },
169
- topicSlug: { type: "string" },
170
97
  },
171
- required: ["kind", "proposedTitle", "proposedRationale", "topicSlug"],
98
+ required: ["kind", "proposedTitle"],
172
99
  };
173
- const CLASSIFY_SYSTEM = `You classify project documentation files for Cairn adoption.
100
+ const CLASSIFY_SYSTEM = `You classify project documentation paragraphs for Cairn's Single-Source-of-Truth ledger.
174
101
 
175
102
  Return JSON matching the supplied schema.
176
103
 
177
104
  \`kind\` choices:
178
- - "decision" file describes a binding decision or architectural choice
179
- - "domain-rule" file describes a domain rule or constraint
180
- - "voice-guidelines" file is user-facing copy / tone / brand voice guidance
181
- - "api-docs" file documents an API surface or schema
105
+ - "decision" paragraph describes a binding decision or architectural choice
106
+ - "domain-rule" paragraph describes a domain rule or constraint developers must obey
107
+ - "voice-guidelines" paragraph is brand voice / tone guidance
108
+ - "api-docs" paragraph documents an API surface or schema (descriptive, not binding)
182
109
  - "other" nothing actionable for the cairn state layer
183
110
 
184
- \`proposedTitle\` 5-10 words, imperative voice, empty for "other"
185
- \`proposedRationale\` 2-3 sentences summarising the binding content, empty for "other"
186
- \`topicSlug\` kebab-case slug suitable for canonical-map lookup, empty when no clear topic
111
+ \`proposedTitle\` 5-10 words, imperative voice, empty for "other".
187
112
 
188
- Be conservative: prefer "other" over a low-confidence classification.`;
189
- async function classifyDoc(candidate, body) {
113
+ Be conservative false-positive decisions pollute the ground state worse
114
+ than missed capture. Default to "other" when uncertain.`;
115
+ async function classifyEntry(entry, body) {
190
116
  const capped = body.length > DOC_BODY_CAP ? `${body.slice(0, DOC_BODY_CAP)}\n…[truncated]` : body;
191
- const prompt = `Path: ${candidate.path}\nSize: ${candidate.size} bytes\n\n---\n${capped}`;
117
+ const prompt = `Source: ${entry.sot_source}\nSlug: ${entry.slug}\n\n---\n${capped}`;
192
118
  const result = await runClaude({
193
119
  tier: "haiku",
194
120
  system: CLASSIFY_SYSTEM,
@@ -213,303 +139,84 @@ async function classifyDoc(candidate, body) {
213
139
  return {
214
140
  kind,
215
141
  proposedTitle: typeof r["proposedTitle"] === "string" ? r["proposedTitle"] : "",
216
- proposedRationale: typeof r["proposedRationale"] === "string" ? r["proposedRationale"] : "",
217
- topicSlug: typeof r["topicSlug"] === "string" ? r["topicSlug"] : "",
218
142
  };
219
143
  }
220
144
  /* -------------------------------------------------------------------------- */
221
- /* Concurrency-capped fan-out */
145
+ /* Orchestrator */
222
146
  /* -------------------------------------------------------------------------- */
223
- async function classifyAll(candidates, repoRoot, mockClassify) {
224
- const results = new Array(candidates.length);
225
- let cursor = 0;
226
- async function worker() {
227
- while (cursor < candidates.length) {
228
- const idx = cursor++;
229
- const candidate = candidates[idx];
230
- if (candidate === undefined)
231
- continue;
232
- let body = "";
147
+ export async function runDocsIngestion(args) {
148
+ const topicIndex = readTopicIndex(args.repoRoot);
149
+ const anchorMap = readAnchorMap(args.repoRoot);
150
+ const candidateEntries = Object.values(topicIndex.topics).filter((entry) => isDocSoT(entry) && entry.dec_id === undefined);
151
+ if (candidateEntries.length === 0) {
152
+ log.info("phase 6 found no eligible docs entries in topic-index");
153
+ return { decsWritten: [], skipped: [], scannedEntries: 0 };
154
+ }
155
+ let processed = 0;
156
+ const result = await emitFromTopicIndex({
157
+ repoRoot: args.repoRoot,
158
+ topicIndex,
159
+ anchorMap,
160
+ filter: (entry) => isDocSoT(entry) && entry.dec_id === undefined,
161
+ classifier: async ({ body, entry }) => {
162
+ let cls;
233
163
  try {
234
- body = readFileSync(join(repoRoot, candidate.path), "utf8");
164
+ cls = args.mockClassify !== undefined
165
+ ? args.mockClassify(entry, body)
166
+ : await classifyEntry(entry, body);
235
167
  }
236
168
  catch (err) {
237
- results[idx] = {
238
- candidate,
239
- classification: emptyClassification(),
240
- failed: true,
241
- errorMessage: err instanceof Error ? err.message : String(err),
242
- };
243
- continue;
169
+ log.warn({ slug: entry.slug, err: err instanceof Error ? err.message : String(err) }, "classifier failed; skipping");
170
+ return { kind: "skip", title: "" };
244
171
  }
245
- try {
246
- const classification = mockClassify !== undefined
247
- ? mockClassify(candidate, body)
248
- : await classifyDoc(candidate, body);
249
- results[idx] = { candidate, classification, failed: false };
172
+ processed += 1;
173
+ if (args.onEntryProgress !== undefined) {
174
+ args.onEntryProgress({
175
+ slug: entry.slug,
176
+ emitted: cls.kind === "decision" || cls.kind === "domain-rule",
177
+ total: candidateEntries.length,
178
+ });
250
179
  }
251
- catch (err) {
252
- log.warn({ path: candidate.path, err: err instanceof Error ? err.message : String(err) }, "classifyDoc failed");
253
- results[idx] = {
254
- candidate,
255
- classification: emptyClassification(),
256
- failed: true,
257
- errorMessage: err instanceof Error ? err.message : String(err),
258
- };
180
+ if (cls.kind === "decision" || cls.kind === "domain-rule") {
181
+ return { kind: "decision", title: cls.proposedTitle };
259
182
  }
260
- }
261
- }
262
- const workers = Array.from({ length: Math.min(CONCURRENCY, candidates.length) }, () => worker());
263
- await Promise.all(workers);
264
- return results;
265
- }
266
- function emptyClassification() {
267
- return { kind: "other", proposedTitle: "", proposedRationale: "", topicSlug: "" };
268
- }
269
- /* -------------------------------------------------------------------------- */
270
- /* Persisters */
271
- /* -------------------------------------------------------------------------- */
272
- function writeDecDraftFromDoc(args) {
273
- const dir = decisionsDir(args.repoRoot);
274
- const inboxDir = join(dir, "_inbox");
275
- mkdirSync(inboxDir, { recursive: true });
276
- const filename = `${args.id}.draft.md`;
277
- const abs = join(inboxDir, filename);
278
- const rel = `.cairn/ground/decisions/_inbox/${filename}`;
279
- const now = new Date().toISOString();
280
- const fm = {
281
- id: args.id,
282
- title: args.classification.proposedTitle || `(untitled — from ${args.sourceFile})`,
283
- type: "adr",
284
- status: "draft-from-init-docs",
285
- audience: "dual",
286
- generated: now,
287
- "verified-at": now,
288
- decided_at: now,
289
- decided_by: "cairn-init",
290
- capture_source: "init-docs",
291
- capture_confidence: "medium",
292
- sourceFile: args.sourceFile,
293
- proposedTitle: args.classification.proposedTitle,
294
- proposedRationale: args.classification.proposedRationale,
295
- };
296
- const lines = [];
297
- lines.push("---");
298
- lines.push(stringifyYaml(fm).trimEnd());
299
- lines.push("---");
300
- lines.push("");
301
- lines.push(`# ${args.id} — ${fm["title"]}`);
302
- lines.push("");
303
- lines.push("## Source");
304
- lines.push(`Captured from \`${args.sourceFile}\` during \`cairn init\`.`);
305
- lines.push("");
306
- lines.push("## Proposed rationale");
307
- lines.push(args.classification.proposedRationale.trim() || "(none extracted)");
308
- lines.push("");
309
- lines.push("Status: draft. Cairn will surface this for accept / edit / reject during the next attention pass; until accepted it is not binding.");
310
- lines.push("");
311
- writeFileSync(abs, lines.join("\n"), "utf8");
312
- return { absPath: abs, relPath: rel };
313
- }
314
- function appendCanonicalTopics(args) {
315
- if (args.entries.length === 0)
316
- return { added: [] };
317
- const path = join(args.repoRoot, ".cairn", "ground", "canonical-map", "topics.yaml");
318
- if (!existsSync(path)) {
319
- // Seed file missing — bail rather than overwrite an unexpected state.
320
- return { added: [] };
321
- }
322
- const text = readFileSync(path, "utf8");
323
- const existing = parseExistingTopicSlugs(text);
324
- const added = [];
325
- const lines = [];
326
- // Preserve original file by appending; keep operator's hand-curated comments.
327
- lines.push(text.trimEnd());
328
- lines.push("");
329
- lines.push("# ── Added by cairn init Phase 6 — adoption ingestion ──");
330
- for (const entry of args.entries) {
331
- if (existing.has(entry.topic))
332
- continue;
333
- if (entry.topic.length === 0)
334
- continue;
335
- const block = {
336
- topic: entry.topic,
337
- canonical_path: entry.canonicalPath,
338
- audience: "dual",
339
- status: "current",
340
- };
341
- lines.push(formatTopicEntry(block).trimEnd());
342
- existing.add(entry.topic);
343
- added.push(entry);
344
- }
345
- if (added.length === 0)
346
- return { added: [] };
347
- lines.push("");
348
- writeFileSync(path, lines.join("\n"), "utf8");
349
- return { added };
350
- }
351
- function parseExistingTopicSlugs(text) {
352
- const out = new Set();
353
- const re = /^\s*-\s*topic:\s*([\w./:-]+)\s*$/gm;
354
- let m;
355
- while ((m = re.exec(text)) !== null) {
356
- if (m[1] !== undefined)
357
- out.add(m[1]);
358
- }
359
- return out;
360
- }
361
- function formatTopicEntry(entry) {
362
- const lines = [];
363
- lines.push(` - topic: ${entry.topic}`);
364
- lines.push(` canonical_path: ${entry.canonical_path}`);
365
- if (entry.audience !== undefined)
366
- lines.push(` audience: ${entry.audience}`);
367
- if (entry.status !== undefined)
368
- lines.push(` status: ${entry.status}`);
369
- return lines.join("\n");
370
- }
371
- function maybeUpdateVoiceFromDoc(args) {
372
- const path = join(args.repoRoot, ".cairn", "ground", "brand", "voice.md");
373
- if (!existsSync(path))
374
- return false;
375
- let text;
376
- try {
377
- text = readFileSync(path, "utf8");
378
- }
379
- catch {
380
- return false;
381
- }
382
- if (!text.includes(VOICE_PLACEHOLDER_MARKER))
383
- return false;
384
- const sourceBody = readSourceBody(args.repoRoot, args.voiceDoc.candidate.path);
385
- if (sourceBody === null)
386
- return false;
387
- const now = new Date().toISOString();
388
- const fm = {
389
- type: "rule",
390
- status: "current",
391
- audience: "dual",
392
- generated: now,
393
- "verified-at": now,
394
- "source-commits": ["init-ingestion"],
395
- sourceFile: args.voiceDoc.candidate.path,
396
- };
397
- const out = [];
398
- out.push("---");
399
- out.push(stringifyYaml(fm).trimEnd());
400
- out.push("---");
401
- out.push("");
402
- out.push("# Brand voice");
403
- out.push("");
404
- out.push(`<!-- Imported from \`${args.voiceDoc.candidate.path}\` during \`cairn init\`. -->`);
405
- out.push("");
406
- out.push(sourceBody.trim());
407
- out.push("");
408
- writeFileSync(path, out.join("\n"), "utf8");
409
- return true;
410
- }
411
- function readSourceBody(repoRoot, relPath) {
412
- try {
413
- const text = readFileSync(join(repoRoot, relPath), "utf8");
414
- // Strip frontmatter if present so we don't double-stack it.
415
- const m = text.match(/^---\n[\s\S]*?\n---\n?([\s\S]*)$/);
416
- return m?.[1] ?? text;
417
- }
418
- catch {
419
- return null;
420
- }
421
- }
422
- /* -------------------------------------------------------------------------- */
423
- /* Orchestrator */
424
- /* -------------------------------------------------------------------------- */
425
- export async function runDocsIngestion(args) {
426
- const candidates = discoverDocs(args.repoRoot);
427
- candidates.sort((a, b) => b.size - a.size);
428
- const top = candidates.slice(0, MAX_DOCS);
429
- if (top.length === 0) {
430
- return {
431
- classifications: [],
432
- decDraftsWritten: [],
433
- canonicalTopicsAdded: [],
434
- voiceUpdated: false,
435
- groupCounts: [],
436
- };
437
- }
438
- const classifications = await classifyAll(top, args.repoRoot, args.mockClassify);
439
- // Allocate DEC ids serially so we never collide with each other or with
440
- // drafts already in _inbox/ from the mapper's heavyweight-comment extractor.
441
- // When the caller threads a shared Set in (parallel pipeline), reuse it
442
- // so concurrent allocations across phases stay coherent.
443
- const seenIds = args.existingDecIds ?? scanExistingDecisionIds(args.repoRoot);
444
- const decDraftsWritten = [];
445
- const canonicalEntries = [];
446
- let voiceUpdated = false;
447
- for (const c of classifications) {
448
- if (c.failed)
449
- continue;
450
- const k = c.classification.kind;
451
- if (k === "decision" || k === "domain-rule") {
452
- const id = allocateDecisionId(args.repoRoot, seenIds);
453
- seenIds.add(id);
454
- const written = writeDecDraftFromDoc({
455
- repoRoot: args.repoRoot,
456
- id,
457
- classification: c.classification,
458
- sourceFile: c.candidate.path,
459
- });
460
- decDraftsWritten.push({
461
- id,
462
- path: written.relPath,
463
- sourceFile: c.candidate.path,
464
- });
465
- }
466
- if (k === "voice-guidelines" && !voiceUpdated) {
467
- voiceUpdated = maybeUpdateVoiceFromDoc({
468
- repoRoot: args.repoRoot,
469
- voiceDoc: c,
470
- });
471
- }
472
- if (c.classification.topicSlug.length > 0) {
473
- canonicalEntries.push({
474
- topic: c.classification.topicSlug,
475
- canonicalPath: c.candidate.path,
476
- });
477
- }
478
- }
479
- const canonical = appendCanonicalTopics({
480
- repoRoot: args.repoRoot,
481
- entries: canonicalEntries,
183
+ return { kind: "skip", title: cls.proposedTitle };
184
+ },
185
+ sot_kind: "path",
186
+ capture_source: "init-docs-ingest",
482
187
  });
483
- // Group rollup for the progress display.
484
- const groupCounts = rollupGroupCounts(classifications, decDraftsWritten);
485
- if (args.onGroupProgress !== undefined) {
486
- for (const row of groupCounts) {
487
- args.onGroupProgress({ ...row, ok: true });
488
- }
489
- }
188
+ writeSotBindings(args.repoRoot, result.bindings);
189
+ writeSotCache(args.repoRoot, result.cache);
190
+ writeTopicIndex(args.repoRoot, result.topicIndex);
191
+ const decsWritten = result.emitted.map((rec) => ({
192
+ id: rec.id,
193
+ path: relativeDecPath(rec.id),
194
+ sourceFile: rec.source_file,
195
+ slug: rec.slug,
196
+ }));
197
+ log.info({
198
+ scanned: candidateEntries.length,
199
+ emitted: decsWritten.length,
200
+ skipped: result.skipped.length,
201
+ processed,
202
+ }, "phase 6 complete");
490
203
  return {
491
- classifications,
492
- decDraftsWritten,
493
- canonicalTopicsAdded: canonical.added,
494
- voiceUpdated,
495
- groupCounts,
204
+ decsWritten,
205
+ skipped: result.skipped,
206
+ scannedEntries: candidateEntries.length,
496
207
  };
497
208
  }
498
- function rollupGroupCounts(classifications, drafts) {
499
- const draftsByPath = new Set(drafts.map((d) => d.sourceFile));
500
- const totals = new Map();
501
- for (const c of classifications) {
502
- const key = c.candidate.group;
503
- const cur = totals.get(key) ?? { drafts: 0, total: 0 };
504
- cur.total += 1;
505
- if (draftsByPath.has(c.candidate.path))
506
- cur.drafts += 1;
507
- totals.set(key, cur);
508
- }
509
- return Array.from(totals.entries()).map(([group, c]) => ({
510
- group,
511
- drafts: c.drafts,
512
- total: c.total,
513
- }));
209
+ function relativeDecPath(id) {
210
+ return `.cairn/ground/decisions/${id}.md`;
211
+ }
212
+ /**
213
+ * Phase 6 owns every topic-index entry whose SoT candidate was tagged
214
+ * `kind="doc"` by the phase 5b walker. Path-prefix matching would lock
215
+ * us to `docs/` and miss `documentation/`, `official_docs/`, etc.; the
216
+ * walker's per-candidate kind is already the right discriminant.
217
+ */
218
+ function isDocSoT(entry) {
219
+ const sot = entry.candidates.find((c) => c.file === entry.sot_source);
220
+ return sot !== undefined && sot.kind === "doc";
514
221
  }
515
222
  //# sourceMappingURL=ingest-docs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-docs.js","sourceRoot":"","sources":["../../src/init/ingest-docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest-docs.js","sourceRoot":"","sources":["../../src/init/ingest-docs.ts"],"names":[],"mappings":"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"}