@isaacriehm/cairn-core 0.21.0 → 0.22.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 (252) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/align-undo/log.js +3 -2
  3. package/dist/align-undo/log.js.map +1 -1
  4. package/dist/attention/source-strip.js +2 -1
  5. package/dist/attention/source-strip.js.map +1 -1
  6. package/dist/components/emit.js +33 -6
  7. package/dist/components/emit.js.map +1 -1
  8. package/dist/components/freshness.d.ts +51 -0
  9. package/dist/components/freshness.js +121 -0
  10. package/dist/components/freshness.js.map +1 -0
  11. package/dist/components/index.d.ts +4 -0
  12. package/dist/components/index.js +2 -0
  13. package/dist/components/index.js.map +1 -1
  14. package/dist/components/reconfirm.d.ts +64 -0
  15. package/dist/components/reconfirm.js +204 -0
  16. package/dist/components/reconfirm.js.map +1 -0
  17. package/dist/context/handoff-builder.js +3 -3
  18. package/dist/context/handoff-builder.js.map +1 -1
  19. package/dist/context/task-summary.js +2 -2
  20. package/dist/context/task-summary.js.map +1 -1
  21. package/dist/doctor/index.js +7 -7
  22. package/dist/doctor/index.js.map +1 -1
  23. package/dist/events/paths.js +2 -2
  24. package/dist/events/paths.js.map +1 -1
  25. package/dist/fix-align/sentinel.js +2 -3
  26. package/dist/fix-align/sentinel.js.map +1 -1
  27. package/dist/gc/attested-commits.js +2 -2
  28. package/dist/gc/attested-commits.js.map +1 -1
  29. package/dist/gc/canary.js +2 -3
  30. package/dist/gc/canary.js.map +1 -1
  31. package/dist/gc/citation-integrity.d.ts +2 -3
  32. package/dist/gc/citation-integrity.js +2 -26
  33. package/dist/gc/citation-integrity.js.map +1 -1
  34. package/dist/gc/completion-integrity.js +4 -3
  35. package/dist/gc/completion-integrity.js.map +1 -1
  36. package/dist/gc/entity-orphan.js +60 -8
  37. package/dist/gc/entity-orphan.js.map +1 -1
  38. package/dist/gc/ghost-anchor.d.ts +57 -0
  39. package/dist/gc/ghost-anchor.js +171 -0
  40. package/dist/gc/ghost-anchor.js.map +1 -0
  41. package/dist/gc/index.d.ts +2 -0
  42. package/dist/gc/index.js +1 -0
  43. package/dist/gc/index.js.map +1 -1
  44. package/dist/gc/runtime-prune.d.ts +59 -0
  45. package/dist/gc/runtime-prune.js +232 -0
  46. package/dist/gc/runtime-prune.js.map +1 -0
  47. package/dist/gc/sweep.js +18 -0
  48. package/dist/gc/sweep.js.map +1 -1
  49. package/dist/gc/types.d.ts +1 -1
  50. package/dist/hooks/bypass-detection.js +3 -2
  51. package/dist/hooks/bypass-detection.js.map +1 -1
  52. package/dist/hooks/defer.js +3 -2
  53. package/dist/hooks/defer.js.map +1 -1
  54. package/dist/hooks/ghost-backup.d.ts +37 -0
  55. package/dist/hooks/ghost-backup.js +82 -0
  56. package/dist/hooks/ghost-backup.js.map +1 -0
  57. package/dist/hooks/post-tool-use/allowlist-reader.js +2 -2
  58. package/dist/hooks/post-tool-use/allowlist-reader.js.map +1 -1
  59. package/dist/hooks/post-tool-use/ask-user-blocked.js +2 -2
  60. package/dist/hooks/post-tool-use/ask-user-blocked.js.map +1 -1
  61. package/dist/hooks/post-tool-use/citation-scanner.d.ts +8 -6
  62. package/dist/hooks/post-tool-use/citation-scanner.js +9 -14
  63. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
  64. package/dist/hooks/post-tool-use/legend-builder.d.ts +2 -2
  65. package/dist/hooks/post-tool-use/legend-builder.js +1 -19
  66. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  67. package/dist/hooks/post-tool-use/post-write.js +18 -1
  68. package/dist/hooks/post-tool-use/post-write.js.map +1 -1
  69. package/dist/hooks/post-tool-use/read-enricher.d.ts +2 -2
  70. package/dist/hooks/post-tool-use/read-enricher.js +4 -6
  71. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
  72. package/dist/hooks/post-tool-use/sot-align.js +29 -3
  73. package/dist/hooks/post-tool-use/sot-align.js.map +1 -1
  74. package/dist/hooks/post-tool-use/write-guardian.js +4 -4
  75. package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
  76. package/dist/hooks/runners/context-threshold.js +3 -3
  77. package/dist/hooks/runners/context-threshold.js.map +1 -1
  78. package/dist/hooks/runners/payload.js +2 -1
  79. package/dist/hooks/runners/payload.js.map +1 -1
  80. package/dist/hooks/runners/phase-ready-surface.js +3 -2
  81. package/dist/hooks/runners/phase-ready-surface.js.map +1 -1
  82. package/dist/hooks/runners/session-start.js +124 -5
  83. package/dist/hooks/runners/session-start.js.map +1 -1
  84. package/dist/hooks/runners/stop.js +26 -12
  85. package/dist/hooks/runners/stop.js.map +1 -1
  86. package/dist/hooks/runners/user-prompt-submit.d.ts +2 -2
  87. package/dist/hooks/runners/user-prompt-submit.js +4 -9
  88. package/dist/hooks/runners/user-prompt-submit.js.map +1 -1
  89. package/dist/hooks/seed-attested.js +3 -2
  90. package/dist/hooks/seed-attested.js.map +1 -1
  91. package/dist/index.d.ts +3 -0
  92. package/dist/index.js +2 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/init/baseline-audit.js +3 -3
  95. package/dist/init/baseline-audit.js.map +1 -1
  96. package/dist/init/claude-rule.js +13 -1
  97. package/dist/init/claude-rule.js.map +1 -1
  98. package/dist/init/curator/corpus.d.ts +1 -0
  99. package/dist/init/curator/corpus.js +6 -2
  100. package/dist/init/curator/corpus.js.map +1 -1
  101. package/dist/init/curator/emit.js +2 -3
  102. package/dist/init/curator/emit.js.map +1 -1
  103. package/dist/init/detect-components.js +2 -2
  104. package/dist/init/detect-components.js.map +1 -1
  105. package/dist/init/eta-calibration.js +2 -2
  106. package/dist/init/eta-calibration.js.map +1 -1
  107. package/dist/init/index.d.ts +1 -1
  108. package/dist/init/index.js +1 -1
  109. package/dist/init/index.js.map +1 -1
  110. package/dist/init/init.d.ts +8 -0
  111. package/dist/init/init.js +16 -6
  112. package/dist/init/init.js.map +1 -1
  113. package/dist/init/mapper.js +2 -2
  114. package/dist/init/mapper.js.map +1 -1
  115. package/dist/init/multi-dev/install.js +24 -0
  116. package/dist/init/multi-dev/install.js.map +1 -1
  117. package/dist/init/phases/11-baseline.js +1 -1
  118. package/dist/init/phases/11-baseline.js.map +1 -1
  119. package/dist/init/phases/4-seed.js +7 -5
  120. package/dist/init/phases/4-seed.js.map +1 -1
  121. package/dist/init/phases/9a-walker.js +4 -0
  122. package/dist/init/phases/9a-walker.js.map +1 -1
  123. package/dist/init/phases/9b-curate.d.ts +1 -0
  124. package/dist/init/phases/9b-curate.js +6 -2
  125. package/dist/init/phases/9b-curate.js.map +1 -1
  126. package/dist/init/phases/9d-comp-walk.js +2 -2
  127. package/dist/init/phases/9d-comp-walk.js.map +1 -1
  128. package/dist/init/phases/9e-comp-annotate.js +63 -3
  129. package/dist/init/phases/9e-comp-annotate.js.map +1 -1
  130. package/dist/init/phases/index.d.ts +0 -1
  131. package/dist/init/phases/index.js +0 -1
  132. package/dist/init/phases/index.js.map +1 -1
  133. package/dist/init/phases/mapper-output-io.d.ts +1 -1
  134. package/dist/init/phases/mapper-output-io.js +3 -2
  135. package/dist/init/phases/mapper-output-io.js.map +1 -1
  136. package/dist/init/phases/state-io.d.ts +1 -1
  137. package/dist/init/phases/state-io.js +3 -2
  138. package/dist/init/phases/state-io.js.map +1 -1
  139. package/dist/init/phases/types.d.ts +20 -8
  140. package/dist/init/phases/types.js +0 -1
  141. package/dist/init/phases/types.js.map +1 -1
  142. package/dist/init/progress.d.ts +1 -0
  143. package/dist/init/progress.js +3 -1
  144. package/dist/init/progress.js.map +1 -1
  145. package/dist/init/rules-merge/ingest.js +3 -3
  146. package/dist/init/rules-merge/ingest.js.map +1 -1
  147. package/dist/init/seed.js +54 -5
  148. package/dist/init/seed.js.map +1 -1
  149. package/dist/init/source-comments/strip-replace.d.ts +0 -1
  150. package/dist/init/source-comments/strip-replace.js +17 -1
  151. package/dist/init/source-comments/strip-replace.js.map +1 -1
  152. package/dist/join/index.d.ts +9 -0
  153. package/dist/join/index.js +82 -25
  154. package/dist/join/index.js.map +1 -1
  155. package/dist/lock.js +4 -3
  156. package/dist/lock.js.map +1 -1
  157. package/dist/mcp/bootstrap-guard.js +10 -1
  158. package/dist/mcp/bootstrap-guard.js.map +1 -1
  159. package/dist/mcp/schemas.d.ts +26 -0
  160. package/dist/mcp/schemas.js +26 -0
  161. package/dist/mcp/schemas.js.map +1 -1
  162. package/dist/mcp/server.js +3 -3
  163. package/dist/mcp/server.js.map +1 -1
  164. package/dist/mcp/telemetry.js +4 -3
  165. package/dist/mcp/telemetry.js.map +1 -1
  166. package/dist/mcp/tools/component-reconfirm.d.ts +7 -0
  167. package/dist/mcp/tools/component-reconfirm.js +39 -0
  168. package/dist/mcp/tools/component-reconfirm.js.map +1 -0
  169. package/dist/mcp/tools/component-register.d.ts +15 -0
  170. package/dist/mcp/tools/component-register.js +65 -0
  171. package/dist/mcp/tools/component-register.js.map +1 -0
  172. package/dist/mcp/tools/index.js +8 -0
  173. package/dist/mcp/tools/index.js.map +1 -1
  174. package/dist/mcp/tools/init-phases.d.ts +2 -0
  175. package/dist/mcp/tools/init-phases.js +21 -5
  176. package/dist/mcp/tools/init-phases.js.map +1 -1
  177. package/dist/mcp/tools/migrate.d.ts +21 -0
  178. package/dist/mcp/tools/migrate.js +49 -0
  179. package/dist/mcp/tools/migrate.js.map +1 -0
  180. package/dist/mcp/tools/mission-advance.js +5 -5
  181. package/dist/mcp/tools/mission-advance.js.map +1 -1
  182. package/dist/mcp/tools/mission-resume.js +3 -3
  183. package/dist/mcp/tools/mission-resume.js.map +1 -1
  184. package/dist/mcp/tools/record-decision.js +11 -4
  185. package/dist/mcp/tools/record-decision.js.map +1 -1
  186. package/dist/mcp/tools/resolve-attention.js +20 -4
  187. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  188. package/dist/mcp/tools/resume.js +3 -2
  189. package/dist/mcp/tools/resume.js.map +1 -1
  190. package/dist/mcp/tools/search.js +2 -2
  191. package/dist/mcp/tools/search.js.map +1 -1
  192. package/dist/mcp/tools/task-complete.js +2 -3
  193. package/dist/mcp/tools/task-complete.js.map +1 -1
  194. package/dist/mcp/tools/task-create.js +2 -2
  195. package/dist/mcp/tools/task-create.js.map +1 -1
  196. package/dist/migrate/config-io.d.ts +10 -2
  197. package/dist/migrate/config-io.js +21 -19
  198. package/dist/migrate/config-io.js.map +1 -1
  199. package/dist/migrate/gitignore.d.ts +28 -0
  200. package/dist/migrate/gitignore.js +82 -0
  201. package/dist/migrate/gitignore.js.map +1 -0
  202. package/dist/migrate/index.d.ts +1 -0
  203. package/dist/migrate/index.js +1 -0
  204. package/dist/migrate/index.js.map +1 -1
  205. package/dist/migrate/migrations/0001-drop-dead-config-fields.js +2 -2
  206. package/dist/migrate/migrations/0001-drop-dead-config-fields.js.map +1 -1
  207. package/dist/migrate/migrations/0002-backfill-gitignore.d.ts +14 -0
  208. package/dist/migrate/migrations/0002-backfill-gitignore.js +40 -0
  209. package/dist/migrate/migrations/0002-backfill-gitignore.js.map +1 -0
  210. package/dist/migrate/migrations/0003-prune-scaffolding.d.ts +19 -0
  211. package/dist/migrate/migrations/0003-prune-scaffolding.js +54 -0
  212. package/dist/migrate/migrations/0003-prune-scaffolding.js.map +1 -0
  213. package/dist/migrate/registry.js +7 -1
  214. package/dist/migrate/registry.js.map +1 -1
  215. package/dist/migrate/runner.js +17 -10
  216. package/dist/migrate/runner.js.map +1 -1
  217. package/dist/migrate/types.d.ts +10 -2
  218. package/dist/missions/task-link.js +4 -5
  219. package/dist/missions/task-link.js.map +1 -1
  220. package/dist/paths/index.d.ts +12 -1
  221. package/dist/paths/index.js +17 -3
  222. package/dist/paths/index.js.map +1 -1
  223. package/dist/sensors/catalog.js +3 -3
  224. package/dist/sensors/catalog.js.map +1 -1
  225. package/dist/session-start/build.js +31 -16
  226. package/dist/session-start/build.js.map +1 -1
  227. package/dist/status-line/event-queue.js +2 -1
  228. package/dist/status-line/event-queue.js.map +1 -1
  229. package/dist/status-line/reader.js +5 -5
  230. package/dist/status-line/reader.js.map +1 -1
  231. package/dist/status-line/writer.js +2 -1
  232. package/dist/status-line/writer.js.map +1 -1
  233. package/dist/tasks/lifecycle.js +10 -9
  234. package/dist/tasks/lifecycle.js.map +1 -1
  235. package/dist/trace/index.js +2 -2
  236. package/dist/trace/index.js.map +1 -1
  237. package/dist/update-check.d.ts +28 -0
  238. package/dist/update-check.js +137 -0
  239. package/dist/update-check.js.map +1 -0
  240. package/package.json +2 -2
  241. package/templates/.cairn/git-hooks/commit-msg +33 -5
  242. package/templates/.cairn/git-hooks/post-commit +13 -3
  243. package/templates/.cairn/git-hooks/pre-commit +48 -25
  244. package/dist/hooks/read-enrich.d.ts +0 -6
  245. package/dist/hooks/read-enrich.js +0 -11
  246. package/dist/hooks/read-enrich.js.map +0 -1
  247. package/dist/hooks/write-guard.d.ts +0 -6
  248. package/dist/hooks/write-guard.js +0 -11
  249. package/dist/hooks/write-guard.js.map +0 -1
  250. package/dist/init/phases/12-strip.d.ts +0 -10
  251. package/dist/init/phases/12-strip.js +0 -88
  252. package/dist/init/phases/12-strip.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"task-create.js","sourceRoot":"","sources":["../../../src/mcp/tools/task-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-create.js","sourceRoot":"","sources":["../../../src/mcp/tools/task-create.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,19 @@
6
6
  * rewrites of the single config.yaml — callers serialize via the migrate
7
7
  * lock.
8
8
  */
9
+ import { type Document } from "yaml";
10
+ /**
11
+ * Parse `config.yaml` once. Returns null when absent / unreadable. Pass the
12
+ * result to `readConfigPin` / `configHasKeys` to share a single parse across
13
+ * the runner's read-only selection phase (the apply phase re-reads fresh, since
14
+ * each migration may mutate the file).
15
+ */
16
+ export declare function loadConfigDoc(repoRoot: string): Document | null;
9
17
  /** Read the `cairn_version` pin, or null when absent / unreadable. */
10
- export declare function readConfigPin(repoRoot: string): string | null;
18
+ export declare function readConfigPin(repoRoot: string, doc?: Document | null): string | null;
11
19
  /** Set the `cairn_version` pin. No-op (returns false) when already equal. */
12
20
  export declare function writeConfigPin(repoRoot: string, version: string): boolean;
13
21
  /** Which of `keys` are present as top-level config keys. */
14
- export declare function configHasKeys(repoRoot: string, keys: readonly string[]): string[];
22
+ export declare function configHasKeys(repoRoot: string, keys: readonly string[], doc?: Document | null): string[];
15
23
  /** Delete top-level `keys`; returns the keys actually removed. */
16
24
  export declare function deleteConfigKeys(repoRoot: string, keys: readonly string[]): string[];
@@ -7,25 +7,33 @@
7
7
  * lock.
8
8
  */
9
9
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
10
- import { join } from "node:path";
11
10
  import { parseDocument } from "yaml";
12
- function configPath(repoRoot) {
13
- return join(repoRoot, ".cairn", "config.yaml");
14
- }
15
- /** Read the `cairn_version` pin, or null when absent / unreadable. */
16
- export function readConfigPin(repoRoot) {
11
+ import { configPath } from "@isaacriehm/cairn-state";
12
+ /**
13
+ * Parse `config.yaml` once. Returns null when absent / unreadable. Pass the
14
+ * result to `readConfigPin` / `configHasKeys` to share a single parse across
15
+ * the runner's read-only selection phase (the apply phase re-reads fresh, since
16
+ * each migration may mutate the file).
17
+ */
18
+ export function loadConfigDoc(repoRoot) {
17
19
  const p = configPath(repoRoot);
18
20
  if (!existsSync(p))
19
21
  return null;
20
22
  try {
21
- const doc = parseDocument(readFileSync(p, "utf8"));
22
- const v = doc.get("cairn_version");
23
- return typeof v === "string" && v.length > 0 ? v : null;
23
+ return parseDocument(readFileSync(p, "utf8"));
24
24
  }
25
25
  catch {
26
26
  return null;
27
27
  }
28
28
  }
29
+ /** Read the `cairn_version` pin, or null when absent / unreadable. */
30
+ export function readConfigPin(repoRoot, doc) {
31
+ const d = doc !== undefined ? doc : loadConfigDoc(repoRoot);
32
+ if (d === null)
33
+ return null;
34
+ const v = d.get("cairn_version");
35
+ return typeof v === "string" && v.length > 0 ? v : null;
36
+ }
29
37
  /** Set the `cairn_version` pin. No-op (returns false) when already equal. */
30
38
  export function writeConfigPin(repoRoot, version) {
31
39
  const p = configPath(repoRoot);
@@ -39,17 +47,11 @@ export function writeConfigPin(repoRoot, version) {
39
47
  return true;
40
48
  }
41
49
  /** Which of `keys` are present as top-level config keys. */
42
- export function configHasKeys(repoRoot, keys) {
43
- const p = configPath(repoRoot);
44
- if (!existsSync(p))
50
+ export function configHasKeys(repoRoot, keys, doc) {
51
+ const d = doc !== undefined ? doc : loadConfigDoc(repoRoot);
52
+ if (d === null)
45
53
  return [];
46
- try {
47
- const doc = parseDocument(readFileSync(p, "utf8"));
48
- return keys.filter((k) => doc.has(k));
49
- }
50
- catch {
51
- return [];
52
- }
54
+ return keys.filter((k) => d.has(k));
53
55
  }
54
56
  /** Delete top-level `keys`; returns the keys actually removed. */
55
57
  export function deleteConfigKeys(repoRoot, keys) {
@@ -1 +1 @@
1
- {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/migrate/config-io.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/migrate/config-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared `.cairn/.gitignore` remediation — used by `cairn fix gitignore` AND
3
+ * the `0002-backfill-gitignore` migration.
4
+ *
5
+ * Cairn added gitignored derived/per-clone state across several releases
6
+ * (v0.11.3 tasks/missions, v0.15.0 derived ground indexes, v0.18.0 component
7
+ * index). A repo adopted before an entry landed both (a) lacks the ignore line
8
+ * and (b) may have COMMITTED the derived state, which then churns on every
9
+ * clone. Remediation = bring `.cairn/.gitignore` current (merge — never clobber
10
+ * operator lines) and `git rm --cached` any now-ignored, already-tracked paths.
11
+ * Idempotent: a second run adds nothing and untracks nothing.
12
+ */
13
+ export interface GitignoreRemediation {
14
+ /** True when there is anything to backfill (missing lines or tracked state). */
15
+ changed: boolean;
16
+ /** Template ignore lines absent from the current file. */
17
+ addedEntries: string[];
18
+ /** Repo-relative paths that are (or would be) `git rm --cached`'d. */
19
+ untracked: string[];
20
+ }
21
+ /**
22
+ * Bring `.cairn/.gitignore` current with the bundled template and (apply mode)
23
+ * untrack any now-ignored committed state. `apply: false` is a pure read used
24
+ * by the migration's `detect()`.
25
+ */
26
+ export declare function remediateGitignore(repoRoot: string, opts: {
27
+ apply: boolean;
28
+ }): GitignoreRemediation;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Shared `.cairn/.gitignore` remediation — used by `cairn fix gitignore` AND
3
+ * the `0002-backfill-gitignore` migration.
4
+ *
5
+ * Cairn added gitignored derived/per-clone state across several releases
6
+ * (v0.11.3 tasks/missions, v0.15.0 derived ground indexes, v0.18.0 component
7
+ * index). A repo adopted before an entry landed both (a) lacks the ignore line
8
+ * and (b) may have COMMITTED the derived state, which then churns on every
9
+ * clone. Remediation = bring `.cairn/.gitignore` current (merge — never clobber
10
+ * operator lines) and `git rm --cached` any now-ignored, already-tracked paths.
11
+ * Idempotent: a second run adds nothing and untracks nothing.
12
+ */
13
+ import { execFileSync } from "node:child_process";
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ import { cairnDir, writeFileSafe } from "@isaacriehm/cairn-state";
17
+ import { templatesRoot } from "../init/seed.js";
18
+ /** Non-comment, non-blank trimmed lines. */
19
+ function entryLines(text) {
20
+ return text
21
+ .split("\n")
22
+ .map((l) => l.trim())
23
+ .filter((l) => l.length > 0 && !l.startsWith("#"));
24
+ }
25
+ /** Of the template entries, the tracked-in-git file paths under them. */
26
+ function trackedUnder(repoRoot, entries) {
27
+ if (entries.length === 0)
28
+ return [];
29
+ const targets = entries.map((e) => join(".cairn", e));
30
+ try {
31
+ const out = execFileSync("git", ["ls-files", "-z", "--", ...targets], {
32
+ cwd: repoRoot,
33
+ encoding: "utf8",
34
+ stdio: ["ignore", "pipe", "ignore"],
35
+ });
36
+ return out.split("\0").filter((p) => p.length > 0);
37
+ }
38
+ catch {
39
+ return [];
40
+ }
41
+ }
42
+ /**
43
+ * Bring `.cairn/.gitignore` current with the bundled template and (apply mode)
44
+ * untrack any now-ignored committed state. `apply: false` is a pure read used
45
+ * by the migration's `detect()`.
46
+ */
47
+ export function remediateGitignore(repoRoot, opts) {
48
+ const result = { changed: false, addedEntries: [], untracked: [] };
49
+ const templatePath = join(templatesRoot(), ".cairn", ".gitignore");
50
+ const gitignorePath = cairnDir(repoRoot, ".gitignore");
51
+ if (!existsSync(templatePath) || !existsSync(gitignorePath))
52
+ return result;
53
+ const template = readFileSync(templatePath, "utf8");
54
+ const current = readFileSync(gitignorePath, "utf8");
55
+ const have = new Set(entryLines(current));
56
+ const templateEntries = entryLines(template);
57
+ result.addedEntries = templateEntries.filter((e) => !have.has(e));
58
+ result.untracked = trackedUnder(repoRoot, templateEntries);
59
+ result.changed = result.addedEntries.length > 0 || result.untracked.length > 0;
60
+ if (!opts.apply || !result.changed)
61
+ return result;
62
+ if (result.addedEntries.length > 0) {
63
+ const sep = current.endsWith("\n") ? "" : "\n";
64
+ const block = `${sep}\n# --- backfilled by cairn migrate (0002-backfill-gitignore) ---\n` +
65
+ `${result.addedEntries.join("\n")}\n`;
66
+ writeFileSafe(gitignorePath, current + block);
67
+ }
68
+ if (result.untracked.length > 0) {
69
+ // Untrack so the committed derived state drops out of the index. The
70
+ // working-tree copy stays (rebuildDerived rewrites it); only the tracking
71
+ // is removed. Best-effort — a git failure leaves the file ignored anyway.
72
+ const targets = result.untracked.slice();
73
+ try {
74
+ execFileSync("git", ["rm", "--cached", "-r", "--ignore-unmatch", "--", ...targets], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "ignore", "ignore"] });
75
+ }
76
+ catch {
77
+ /* best-effort */
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/migrate/gitignore.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export type { Migration, MigrationClass, MigrationResult } from "./types.js";
2
2
  export { MIGRATIONS } from "./registry.js";
3
3
  export { runMigrations, type RunMigrationsArgs, type RunMigrationsResult, type MigrationOutcome, type MigrationStatus, } from "./runner.js";
4
4
  export { readConfigPin } from "./config-io.js";
5
+ export { remediateGitignore, type GitignoreRemediation } from "./gitignore.js";
5
6
  export { semverCmp, semverGt, semverLte } from "./semver.js";
@@ -1,5 +1,6 @@
1
1
  export { MIGRATIONS } from "./registry.js";
2
2
  export { runMigrations, } from "./runner.js";
3
3
  export { readConfigPin } from "./config-io.js";
4
+ export { remediateGitignore } from "./gitignore.js";
4
5
  export { semverCmp, semverGt, semverLte } from "./semver.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,aAAa,GAKd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,aAAa,GAKd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAA6B,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -23,8 +23,8 @@ export const dropDeadConfigFields = {
23
23
  introducedIn: "0.21.0",
24
24
  describe: "Remove unconsumed config.yaml keys (detected_sensor_commands, mapper_proposed_sensors, mapper_notes, key_modules, stack_signatures, hook_capability, start_command, origin_url)",
25
25
  class: "safe",
26
- detect(repoRoot) {
27
- return configHasKeys(repoRoot, DEAD_CONFIG_KEYS).length > 0;
26
+ detect(repoRoot, doc) {
27
+ return configHasKeys(repoRoot, DEAD_CONFIG_KEYS, doc).length > 0;
28
28
  },
29
29
  apply(repoRoot) {
30
30
  const removed = deleteConfigKeys(repoRoot, DEAD_CONFIG_KEYS);
@@ -1 +1 @@
1
- {"version":3,"file":"0001-drop-dead-config-fields.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0001-drop-dead-config-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAElE,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,0BAA0B;IAC1B,yBAAyB;IACzB,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,EAAE,EAAE,8BAA8B;IAClC,YAAY,EAAE,QAAQ;IACtB,QAAQ,EAAE,iLAAiL;IAC3L,KAAK,EAAE,MAAM;IACb,MAAM,CAAC,QAAgB;QACrB,OAAO,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,QAAgB;QACpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC3B,MAAM,EACJ,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvE,CAAC,CAAC,6BAA6B;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"0001-drop-dead-config-fields.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0001-drop-dead-config-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAElE,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,0BAA0B;IAC1B,yBAAyB;IACzB,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,EAAE,EAAE,8BAA8B;IAClC,YAAY,EAAE,QAAQ;IACtB,QAAQ,EAAE,iLAAiL;IAC3L,KAAK,EAAE,MAAM;IACb,MAAM,CAAC,QAAgB,EAAE,GAAsB;QAC7C,OAAO,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,CAAC,QAAgB;QACpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC3B,MAAM,EACJ,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvE,CAAC,CAAC,6BAA6B;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 0002 — backfill `.cairn/.gitignore` + untrack committed derived state.
3
+ *
4
+ * Repos adopted before the relevant releases (tasks/missions v0.11.3, derived
5
+ * ground indexes v0.15.0, component index v0.18.0) lack the ignore lines and
6
+ * may have COMMITTED per-clone derived state that then churns across clones.
7
+ *
8
+ * `review` (not `safe`): apply runs `git rm --cached`, mutating the git index —
9
+ * a VCS change the operator confirms via `cairn migrate --all`, never silently
10
+ * at SessionStart. Detect/apply share `remediateGitignore` with the
11
+ * `cairn fix gitignore` CLI, and both are idempotent.
12
+ */
13
+ import type { Migration } from "../types.js";
14
+ export declare const backfillGitignore: Migration;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 0002 — backfill `.cairn/.gitignore` + untrack committed derived state.
3
+ *
4
+ * Repos adopted before the relevant releases (tasks/missions v0.11.3, derived
5
+ * ground indexes v0.15.0, component index v0.18.0) lack the ignore lines and
6
+ * may have COMMITTED per-clone derived state that then churns across clones.
7
+ *
8
+ * `review` (not `safe`): apply runs `git rm --cached`, mutating the git index —
9
+ * a VCS change the operator confirms via `cairn migrate --all`, never silently
10
+ * at SessionStart. Detect/apply share `remediateGitignore` with the
11
+ * `cairn fix gitignore` CLI, and both are idempotent.
12
+ */
13
+ import { remediateGitignore } from "../gitignore.js";
14
+ export const backfillGitignore = {
15
+ id: "0002-backfill-gitignore",
16
+ // Ships in 0.22.0 → runs for every pin < 0.22.0 (catches 0.21 adopters who
17
+ // upgraded from <0.15 and got 0001 but never a gitignore backfill). Bump in
18
+ // lockstep with the release that lands this.
19
+ introducedIn: "0.22.0",
20
+ describe: "Backfill .cairn/.gitignore (derived ground indexes, component index, per-clone state) and untrack derived state committed before it was gitignored — repos adopted before v0.15.0/v0.18.0",
21
+ class: "review",
22
+ detect(repoRoot) {
23
+ return remediateGitignore(repoRoot, { apply: false }).changed;
24
+ },
25
+ apply(repoRoot) {
26
+ const r = remediateGitignore(repoRoot, { apply: true });
27
+ const parts = [];
28
+ if (r.addedEntries.length > 0) {
29
+ parts.push(`added ${r.addedEntries.length} ignore entr${r.addedEntries.length === 1 ? "y" : "ies"}`);
30
+ }
31
+ if (r.untracked.length > 0) {
32
+ parts.push(`untracked ${r.untracked.length} committed derived file(s)`);
33
+ }
34
+ return {
35
+ changed: r.changed,
36
+ detail: r.changed ? parts.join("; ") : "nothing to backfill",
37
+ };
38
+ },
39
+ };
40
+ //# sourceMappingURL=0002-backfill-gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0002-backfill-gitignore.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0002-backfill-gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAc;IAC1C,EAAE,EAAE,yBAAyB;IAC7B,2EAA2E;IAC3E,4EAA4E;IAC5E,6CAA6C;IAC7C,YAAY,EAAE,QAAQ;IACtB,QAAQ,EACN,2LAA2L;IAC7L,KAAK,EAAE,QAAQ;IACf,MAAM,CAAC,QAAgB;QACrB,OAAO,kBAAkB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,QAAgB;QACpB,MAAM,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,CAAC,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,MAAM,4BAA4B,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB;SAC7D,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 0003 — prune one-time init scaffolding.
3
+ *
4
+ * `.cairn/init/` (the mapper output + curator corpus) and `.cairn/backups/`
5
+ * (the pre-strip `.original` copies of every source file the comment-ingest
6
+ * rewrote) are written ONCE during adoption and never again. Nothing in the
7
+ * daily flow reads them — only the `cairn fix` repair escape-hatch
8
+ * (re-derive-from-mapper, restore-stripped-comments) does. On a real repo
9
+ * they are dead weight measured in megabytes (observed: a 255 KB mapper
10
+ * dump + a 127-file / 1.7 MB backup tree).
11
+ *
12
+ * `review` (not `safe`): apply hard-deletes committed/working-tree state and
13
+ * disables those two `cairn fix` repairs, so it is operator-confirmed —
14
+ * surfaced at SessionStart and applied via the `cairn_migrate` tool (or
15
+ * `cairn migrate --all`), never silently. Idempotent: re-running after the
16
+ * dirs are gone is a no-op.
17
+ */
18
+ import type { Migration } from "../types.js";
19
+ export declare const pruneScaffolding: Migration;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 0003 — prune one-time init scaffolding.
3
+ *
4
+ * `.cairn/init/` (the mapper output + curator corpus) and `.cairn/backups/`
5
+ * (the pre-strip `.original` copies of every source file the comment-ingest
6
+ * rewrote) are written ONCE during adoption and never again. Nothing in the
7
+ * daily flow reads them — only the `cairn fix` repair escape-hatch
8
+ * (re-derive-from-mapper, restore-stripped-comments) does. On a real repo
9
+ * they are dead weight measured in megabytes (observed: a 255 KB mapper
10
+ * dump + a 127-file / 1.7 MB backup tree).
11
+ *
12
+ * `review` (not `safe`): apply hard-deletes committed/working-tree state and
13
+ * disables those two `cairn fix` repairs, so it is operator-confirmed —
14
+ * surfaced at SessionStart and applied via the `cairn_migrate` tool (or
15
+ * `cairn migrate --all`), never silently. Idempotent: re-running after the
16
+ * dirs are gone is a no-op.
17
+ */
18
+ import { existsSync, rmSync } from "node:fs";
19
+ import { cairnDir } from "@isaacriehm/cairn-state";
20
+ /** Top-level `.cairn/` subtrees that exist only as init-time scaffolding. */
21
+ const SCAFFOLDING_DIRS = ["init", "backups"];
22
+ function present(repoRoot) {
23
+ return SCAFFOLDING_DIRS.filter((d) => existsSync(cairnDir(repoRoot, d)));
24
+ }
25
+ export const pruneScaffolding = {
26
+ id: "0003-prune-scaffolding",
27
+ // Ships in 0.22.1 → runs for every pin < 0.22.1 (catches every 0.22.0
28
+ // adopter on the patch pull). Bump in lockstep with the release that lands it.
29
+ introducedIn: "0.22.1",
30
+ describe: "Remove one-time init scaffolding (.cairn/init mapper output + curator corpus, .cairn/backups source-strip copies) — dead weight once adoption is past the cairn-fix repair window",
31
+ class: "review",
32
+ detect(repoRoot) {
33
+ return present(repoRoot).length > 0;
34
+ },
35
+ apply(repoRoot) {
36
+ const removed = [];
37
+ for (const dir of present(repoRoot)) {
38
+ try {
39
+ rmSync(cairnDir(repoRoot, dir), { recursive: true, force: true });
40
+ removed.push(`.cairn/${dir}`);
41
+ }
42
+ catch {
43
+ /* best-effort — a locked/permission-denied subtree is left in place */
44
+ }
45
+ }
46
+ return {
47
+ changed: removed.length > 0,
48
+ detail: removed.length > 0
49
+ ? `removed ${removed.length} scaffolding dir(s): ${removed.join(", ")}`
50
+ : "no init scaffolding present",
51
+ };
52
+ },
53
+ };
54
+ //# sourceMappingURL=0003-prune-scaffolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0003-prune-scaffolding.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0003-prune-scaffolding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,6EAA6E;AAC7E,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,SAAS,CAAU,CAAC;AAEtD,SAAS,OAAO,CAAC,QAAgB;IAC/B,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,EAAE,EAAE,wBAAwB;IAC5B,sEAAsE;IACtE,+EAA+E;IAC/E,YAAY,EAAE,QAAQ;IACtB,QAAQ,EACN,mLAAmL;IACrL,KAAK,EAAE,QAAQ;IACf,MAAM,CAAC,QAAgB;QACrB,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,QAAgB;QACpB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;YACzE,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC3B,MAAM,EACJ,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvE,CAAC,CAAC,6BAA6B;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -6,5 +6,11 @@
6
6
  * migration here and link it from CHANGELOG.
7
7
  */
8
8
  import { dropDeadConfigFields } from "./migrations/0001-drop-dead-config-fields.js";
9
- export const MIGRATIONS = [dropDeadConfigFields];
9
+ import { backfillGitignore } from "./migrations/0002-backfill-gitignore.js";
10
+ import { pruneScaffolding } from "./migrations/0003-prune-scaffolding.js";
11
+ export const MIGRATIONS = [
12
+ dropDeadConfigFields,
13
+ backfillGitignore,
14
+ pruneScaffolding,
15
+ ];
10
16
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migrate/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,MAAM,CAAC,MAAM,UAAU,GAAyB,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migrate/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C,oBAAoB;IACpB,iBAAiB;IACjB,gBAAgB;CACjB,CAAC"}
@@ -15,27 +15,30 @@
15
15
  * cleanly (`ran: false`) rather than racing.
16
16
  */
17
17
  import { existsSync } from "node:fs";
18
- import { join } from "node:path";
19
18
  import { VERSION } from "../index.js";
20
19
  import { logger } from "../logger.js";
21
20
  import { acquireOperationLock, OperationLockHeldError } from "../lock.js";
22
- import { readConfigPin, writeConfigPin } from "./config-io.js";
21
+ import { loadConfigDoc, readConfigPin, writeConfigPin } from "./config-io.js";
23
22
  import { MIGRATIONS } from "./registry.js";
24
23
  import { semverCmp, semverGt, semverLte } from "./semver.js";
24
+ import { cairnDir } from "@isaacriehm/cairn-state";
25
25
  const log = logger("migrate.runner");
26
- function needs(m, repoRoot) {
26
+ function needs(m, repoRoot, doc) {
27
27
  try {
28
- return m.detect(repoRoot);
28
+ return m.detect(repoRoot, doc);
29
29
  }
30
30
  catch (err) {
31
31
  log.warn({ migration: m.id, err: err instanceof Error ? err.message : String(err) }, "migration detect() threw — skipping");
32
32
  return false;
33
33
  }
34
34
  }
35
- /** Migrations introduced in `(pin, current]` that still report needed. */
36
- function selectCandidates(repoRoot, pin, current) {
35
+ /**
36
+ * Migrations introduced in `(pin, current]` that still report needed. `doc` is
37
+ * the once-parsed `config.yaml` shared across this read-only selection pass.
38
+ */
39
+ function selectCandidates(repoRoot, pin, current, doc) {
37
40
  return MIGRATIONS.filter((m) => semverGt(m.introducedIn, pin) && semverLte(m.introducedIn, current))
38
- .filter((m) => needs(m, repoRoot))
41
+ .filter((m) => needs(m, repoRoot, doc))
39
42
  .slice()
40
43
  .sort((a, b) => semverCmp(a.introducedIn, b.introducedIn) || a.id.localeCompare(b.id));
41
44
  }
@@ -46,11 +49,15 @@ export async function runMigrations(args) {
46
49
  const includeReview = args.includeReview === true;
47
50
  // Never act on an unadopted repo — guards against any caller (notably the
48
51
  // defensive MCP-boot run) creating `.cairn/` via the lock's mkdir.
49
- if (!existsSync(join(repoRoot, ".cairn", "config.yaml"))) {
52
+ if (!existsSync(cairnDir(repoRoot, "config.yaml"))) {
50
53
  return { ran: true, pin: "0.0.0", current, newPin: null, outcomes: [], pendingReview: [] };
51
54
  }
52
- const pin = readConfigPin(repoRoot) ?? "0.0.0";
53
- const candidates = selectCandidates(repoRoot, pin, current);
55
+ // Parse config.yaml once for the whole read-only selection phase (pin read +
56
+ // each candidate's detect). The apply phase re-reads fresh, since a migration
57
+ // may mutate the file mid-run.
58
+ const doc = loadConfigDoc(repoRoot);
59
+ const pin = readConfigPin(repoRoot, doc) ?? "0.0.0";
60
+ const candidates = selectCandidates(repoRoot, pin, current, doc);
54
61
  // Nothing pending: make the pin live if it's merely stale, else no-op.
55
62
  if (candidates.length === 0) {
56
63
  if (semverCmp(pin, current) >= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/migrate/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/migrate/runner.ts"],"names":[],"mappings":"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"}
@@ -32,8 +32,16 @@ export interface Migration {
32
32
  /** One-line description, surfaced to the operator + linkable from CHANGELOG. */
33
33
  describe: string;
34
34
  class: MigrationClass;
35
- /** Idempotent: true when this repo still needs the migration. */
36
- detect(repoRoot: string): boolean;
35
+ /**
36
+ * Idempotent: true when this repo still needs the migration. The runner may
37
+ * pass `doc` — `config.yaml` parsed once for the whole selection phase — so a
38
+ * config-shape detect can skip re-parsing. Migrations that read other state
39
+ * ignore it. Never passed during the post-apply re-check (the file may have
40
+ * changed), so a detect handed no `doc` must read fresh.
41
+ */
42
+ detect(repoRoot: string, doc?: ConfigDoc | null): boolean;
37
43
  /** Apply. Must be idempotent and atomic per migration. */
38
44
  apply(repoRoot: string): MigrationResult;
39
45
  }
46
+ /** Opaque parsed-`config.yaml` handle threaded through `detect` (yaml Document). */
47
+ export type ConfigDoc = import("yaml").Document;
@@ -13,7 +13,6 @@
13
13
  * - exit_gate=manual → no-op; operator runs `cairn mission advance`.
14
14
  */
15
15
  import { existsSync, readFileSync, statSync } from "node:fs";
16
- import { join } from "node:path";
17
16
  import { parse as parseYaml } from "yaml";
18
17
  /**
19
18
  * `tasks/done/<id>/` exists → the task graduated to a terminal phase
@@ -23,7 +22,7 @@ import { parse as parseYaml } from "yaml";
23
22
  * means a sibling already graduated successfully.
24
23
  */
25
24
  function taskIsCompletedOnDisk(repoRoot, taskId) {
26
- const dir = join(repoRoot, ".cairn", "tasks", "done", taskId);
25
+ const dir = cairnDir(repoRoot, "tasks", "done", taskId);
27
26
  if (!existsSync(dir))
28
27
  return false;
29
28
  try {
@@ -77,14 +76,14 @@ function graduatedIdsCoverPrSlug(taskIds, prSlug) {
77
76
  }
78
77
  return false;
79
78
  }
80
- import { appendMissionJournal, effectivePhaseExitGate, readMissionState, readRoadmap, writeMissionState, } from "@isaacriehm/cairn-state";
79
+ import { cairnDir, appendMissionJournal, effectivePhaseExitGate, readMissionState, readRoadmap, writeMissionState, } from "@isaacriehm/cairn-state";
81
80
  import { writeInvalidationEvent } from "../events/index.js";
82
81
  import { advancePhase, allPhaseTasksDone } from "./cursor.js";
83
82
  /** Read the mission anchor stamped on a task's status.yaml. */
84
83
  export function readTaskMissionAnchor(repoRoot, taskId) {
85
84
  const candidates = [
86
- join(repoRoot, ".cairn", "tasks", "active", taskId, "status.yaml"),
87
- join(repoRoot, ".cairn", "tasks", "done", taskId, "status.yaml"),
85
+ cairnDir(repoRoot, "tasks", "active", taskId, "status.yaml"),
86
+ cairnDir(repoRoot, "tasks", "done", taskId, "status.yaml"),
88
87
  ];
89
88
  for (const path of candidates) {
90
89
  if (!existsSync(path))