@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
@@ -20,14 +20,15 @@ import { join } from "node:path";
20
20
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
21
21
  import { writeInvalidationEvent } from "../events/index.js";
22
22
  import { onTaskCompleted } from "../missions/task-link.js";
23
+ import { cairnDir } from "@isaacriehm/cairn-state";
23
24
  /**
24
25
  * Write the terminal phase + move the active dir → done. Returns an
25
26
  * error envelope on failure rather than throwing — callers (MCP tool,
26
27
  * Stop hook) decide how to surface.
27
28
  */
28
29
  export function completeTask(args) {
29
- const activeDir = join(args.repoRoot, ".cairn", "tasks", "active", args.taskId);
30
- const doneRoot = join(args.repoRoot, ".cairn", "tasks", "done");
30
+ const activeDir = cairnDir(args.repoRoot, "tasks", "active", args.taskId);
31
+ const doneRoot = cairnDir(args.repoRoot, "tasks", "done");
31
32
  const doneDir = join(doneRoot, args.taskId);
32
33
  if (!existsSync(activeDir)) {
33
34
  if (existsSync(doneDir)) {
@@ -119,8 +120,8 @@ export function completeTask(args) {
119
120
  * stays on disk for audit; the live state is clean.
120
121
  */
121
122
  export function reopenTask(args) {
122
- const activeDir = join(args.repoRoot, ".cairn", "tasks", "active", args.taskId);
123
- const doneDir = join(args.repoRoot, ".cairn", "tasks", "done", args.taskId);
123
+ const activeDir = cairnDir(args.repoRoot, "tasks", "active", args.taskId);
124
+ const doneDir = cairnDir(args.repoRoot, "tasks", "done", args.taskId);
124
125
  if (!existsSync(doneDir)) {
125
126
  if (existsSync(activeDir)) {
126
127
  return {
@@ -201,7 +202,7 @@ export function reopenTask(args) {
201
202
  * but the surrounding session ended before the close call).
202
203
  */
203
204
  export function readTaskAttestationState(repoRoot, taskId) {
204
- const taskDir = join(repoRoot, ".cairn", "tasks", "active", taskId);
205
+ const taskDir = cairnDir(repoRoot, "tasks", "active", taskId);
205
206
  if (!existsSync(taskDir))
206
207
  return null;
207
208
  const rootAttestation = existsSync(join(taskDir, "attestation.yaml"));
@@ -242,7 +243,7 @@ export function readTaskAttestationState(repoRoot, taskId) {
242
243
  * inside the Stop hook).
243
244
  */
244
245
  export function appendTaskJournal(args) {
245
- const taskDir = join(args.repoRoot, ".cairn", "tasks", "active", args.taskId);
246
+ const taskDir = cairnDir(args.repoRoot, "tasks", "active", args.taskId);
246
247
  if (!existsSync(taskDir))
247
248
  return false;
248
249
  const entry = {
@@ -304,7 +305,7 @@ export function appendTaskJournal(args) {
304
305
  * surface a 30m-idle task to the current session.
305
306
  */
306
307
  export function readTaskSessionAffinity(repoRoot, taskId) {
307
- const statusPath = join(repoRoot, ".cairn", "tasks", "active", taskId, "status.yaml");
308
+ const statusPath = cairnDir(repoRoot, "tasks", "active", taskId, "status.yaml");
308
309
  if (!existsSync(statusPath)) {
309
310
  return { createdBySession: null, lastJournalSession: null };
310
311
  }
@@ -324,7 +325,7 @@ export function readTaskSessionAffinity(repoRoot, taskId) {
324
325
  }
325
326
  }
326
327
  export function readTaskJournal(repoRoot, taskId, scope = "active") {
327
- const taskDir = join(repoRoot, ".cairn", "tasks", scope, taskId);
328
+ const taskDir = cairnDir(repoRoot, "tasks", scope, taskId);
328
329
  const path = join(taskDir, "journal.jsonl");
329
330
  if (!existsSync(path))
330
331
  return [];
@@ -361,7 +362,7 @@ export function readTaskJournal(repoRoot, taskId, scope = "active") {
361
362
  * active set. Returns null when no active task exists.
362
363
  */
363
364
  export function findCurrentActiveTask(repoRoot) {
364
- const activeDir = join(repoRoot, ".cairn", "tasks", "active");
365
+ const activeDir = cairnDir(repoRoot, "tasks", "active");
365
366
  if (!existsSync(activeDir))
366
367
  return null;
367
368
  let entries = [];
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/tasks/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/tasks/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@
12
12
  * the surface it's monitoring is worse than no logging.
13
13
  */
14
14
  import { appendFileSync, existsSync, mkdirSync } from "node:fs";
15
- import { homedir } from "node:os";
16
15
  import { join } from "node:path";
16
+ import { userCairnRoot } from "../paths/index.js";
17
17
  export function traceDir() {
18
- return join(homedir(), ".cairn", "trace");
18
+ return join(userCairnRoot(), "trace");
19
19
  }
20
20
  function todayFilename(now) {
21
21
  const y = now.getUTCFullYear();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAuBjC,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,GAAS;IAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAY,IAAI,IAAI,EAAE;IAClD,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAA4B;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAuBlD,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,GAAS;IAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAY,IAAI,IAAI,EAAE;IAClD,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAA4B;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SessionStart "newer Cairn available" notice.
3
+ *
4
+ * Cairn ships as a Claude Code plugin distributed through a THIRD-PARTY
5
+ * marketplace, where auto-update is OFF by default — so a user can sit on an
6
+ * old plugin (and its bundled `cli.mjs`) indefinitely with no signal. This is
7
+ * the plugin-side analog of `cairn-lens/src/update-check.ts`: one throttled,
8
+ * best-effort check against the npm registry (the published `@isaacriehm/cairn`
9
+ * version is the synced workspace version), surfaced as a one-line SessionStart
10
+ * banner.
11
+ *
12
+ * Contract: NEVER throws into the caller, NEVER blocks the session for more
13
+ * than `FETCH_TIMEOUT_MS`, and hits the network at most once per day per
14
+ * machine (cached in `~/.cairn/update-check.json`). On a cache hit it is pure
15
+ * filesystem — no network. The hot SessionStart path stays fast.
16
+ */
17
+ /**
18
+ * Resolve a "newer Cairn available" banner line, or null when up to date /
19
+ * unknown. Hits the network at most once per `CHECK_INTERVAL_MS`; otherwise
20
+ * reads the cached last-known-latest. `now` is injected for testability.
21
+ */
22
+ export declare function runUpdateCheck(currentVersion: string, now: number): Promise<string | null>;
23
+ /**
24
+ * True when `a` is a strictly newer release than `b` on `major.minor.patch`.
25
+ * Pre-release suffixes are ignored. Unparseable input → false (fail closed:
26
+ * never nag on a version we can't read).
27
+ */
28
+ export declare function isNewer(a: string, b: string): boolean;
@@ -0,0 +1,137 @@
1
+ /**
2
+ * SessionStart "newer Cairn available" notice.
3
+ *
4
+ * Cairn ships as a Claude Code plugin distributed through a THIRD-PARTY
5
+ * marketplace, where auto-update is OFF by default — so a user can sit on an
6
+ * old plugin (and its bundled `cli.mjs`) indefinitely with no signal. This is
7
+ * the plugin-side analog of `cairn-lens/src/update-check.ts`: one throttled,
8
+ * best-effort check against the npm registry (the published `@isaacriehm/cairn`
9
+ * version is the synced workspace version), surfaced as a one-line SessionStart
10
+ * banner.
11
+ *
12
+ * Contract: NEVER throws into the caller, NEVER blocks the session for more
13
+ * than `FETCH_TIMEOUT_MS`, and hits the network at most once per day per
14
+ * machine (cached in `~/.cairn/update-check.json`). On a cache hit it is pure
15
+ * filesystem — no network. The hot SessionStart path stays fast.
16
+ */
17
+ import { get } from "node:https";
18
+ import { existsSync, readFileSync } from "node:fs";
19
+ import { writeFileSafe } from "@isaacriehm/cairn-state";
20
+ import { updateCheckCachePath } from "./paths/index.js";
21
+ const NPM_LATEST_URL = "https://registry.npmjs.org/@isaacriehm/cairn/latest";
22
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // once per day
23
+ const FETCH_TIMEOUT_MS = 1500; // tight — this is the SessionStart hot path
24
+ const MAX_BODY_BYTES = 200_000;
25
+ function readCache() {
26
+ const p = updateCheckCachePath();
27
+ if (!existsSync(p))
28
+ return { checkedMs: 0, latest: null };
29
+ try {
30
+ const parsed = JSON.parse(readFileSync(p, "utf8"));
31
+ return {
32
+ checkedMs: typeof parsed.checkedMs === "number" ? parsed.checkedMs : 0,
33
+ latest: typeof parsed.latest === "string" ? parsed.latest : null,
34
+ };
35
+ }
36
+ catch {
37
+ return { checkedMs: 0, latest: null };
38
+ }
39
+ }
40
+ function writeCache(cache) {
41
+ try {
42
+ writeFileSafe(updateCheckCachePath(), JSON.stringify(cache));
43
+ }
44
+ catch {
45
+ // best-effort — a failed cache write just means we re-check next session
46
+ }
47
+ }
48
+ /**
49
+ * Resolve a "newer Cairn available" banner line, or null when up to date /
50
+ * unknown. Hits the network at most once per `CHECK_INTERVAL_MS`; otherwise
51
+ * reads the cached last-known-latest. `now` is injected for testability.
52
+ */
53
+ export async function runUpdateCheck(currentVersion, now) {
54
+ const cache = readCache();
55
+ let latest = cache.latest;
56
+ if (now - cache.checkedMs >= CHECK_INTERVAL_MS) {
57
+ const fetched = await fetchLatestVersion();
58
+ // Stamp the attempt regardless of outcome so an offline machine doesn't
59
+ // re-hit the network every session; keep the prior last-known on failure.
60
+ latest = fetched ?? cache.latest;
61
+ writeCache({ checkedMs: now, latest });
62
+ }
63
+ if (latest === null || !isNewer(latest, currentVersion))
64
+ return null;
65
+ return (`⬡ A newer Cairn is available — v${latest} (you have v${currentVersion}). ` +
66
+ `Update the plugin via \`/plugin\` (third-party plugins don't auto-update by ` +
67
+ `default); the next session migrates \`.cairn/\` forward automatically.`);
68
+ }
69
+ /**
70
+ * GET the npm `latest` dist-tag document and pull `.version`. Resolves to the
71
+ * version string, or null on any failure (timeout, non-200, unparseable,
72
+ * oversized). Never rejects.
73
+ */
74
+ function fetchLatestVersion() {
75
+ return new Promise((resolve) => {
76
+ let settled = false;
77
+ const done = (v) => {
78
+ if (settled)
79
+ return;
80
+ settled = true;
81
+ resolve(v);
82
+ };
83
+ const req = get(NPM_LATEST_URL, { headers: { accept: "application/json" }, timeout: FETCH_TIMEOUT_MS }, (res) => {
84
+ if (res.statusCode !== 200) {
85
+ res.resume();
86
+ done(null);
87
+ return;
88
+ }
89
+ let data = "";
90
+ res.setEncoding("utf8");
91
+ res.on("data", (chunk) => {
92
+ data += chunk;
93
+ if (data.length > MAX_BODY_BYTES) {
94
+ req.destroy();
95
+ done(null);
96
+ }
97
+ });
98
+ res.on("end", () => {
99
+ try {
100
+ const body = JSON.parse(data);
101
+ done(typeof body.version === "string" ? body.version : null);
102
+ }
103
+ catch {
104
+ done(null);
105
+ }
106
+ });
107
+ });
108
+ req.on("timeout", () => {
109
+ req.destroy();
110
+ done(null);
111
+ });
112
+ req.on("error", () => done(null));
113
+ });
114
+ }
115
+ /**
116
+ * True when `a` is a strictly newer release than `b` on `major.minor.patch`.
117
+ * Pre-release suffixes are ignored. Unparseable input → false (fail closed:
118
+ * never nag on a version we can't read).
119
+ */
120
+ export function isNewer(a, b) {
121
+ const pa = parseSemver(a);
122
+ const pb = parseSemver(b);
123
+ if (pa === null || pb === null)
124
+ return false;
125
+ for (let i = 0; i < 3; i++) {
126
+ if (pa[i] !== pb[i])
127
+ return pa[i] > pb[i];
128
+ }
129
+ return false;
130
+ }
131
+ function parseSemver(v) {
132
+ const m = v.trim().replace(/^v/, "").match(/^(\d+)\.(\d+)\.(\d+)/);
133
+ if (m === null)
134
+ return null;
135
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
136
+ }
137
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isaacriehm/cairn-core",
3
- "version": "0.21.0",
3
+ "version": "0.22.1",
4
4
  "description": "Cairn core — state + context layer. Curated `.cairn/ground/` (decisions, §INV invariants, canonical-map, brand, quality-grades), MCP server, init wizard, hook runners, sensors, GC drift sweep.",
5
5
  "author": "Isaac Riehm",
6
6
  "license": "MIT",
@@ -39,7 +39,7 @@
39
39
  "simple-git": "^3.36.0",
40
40
  "yaml": "^2.9.0",
41
41
  "zod": "^4.4.3",
42
- "@isaacriehm/cairn-state": "0.21.0"
42
+ "@isaacriehm/cairn-state": "0.22.1"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/cli-progress": "^3.11.6",
@@ -5,18 +5,41 @@
5
5
  #
6
6
  # Validates DEC/TSK/§INV citations in the commit message body when the
7
7
  # project's commit policy requires them. The Cairn CLI owns the policy
8
- # (sensors.yaml `commit_msg_policy`) so the hook stays a thin shim.
8
+ # (sensors.yaml `commit_msg_policy`) so the hook stays a thin shim. Advisory
9
+ # (never blocks) in ghost mode.
10
+ #
11
+ # State home is derived from THIS hook's own location (committed in-repo /
12
+ # ghost out-of-repo) — see pre-commit for the rationale.
9
13
 
10
14
  set -e
11
15
 
12
16
  REPO_ROOT="$(git rev-parse --show-toplevel 2> /dev/null || true)"
13
- if [ -z "$REPO_ROOT" ] || [ ! -d "$REPO_ROOT/.cairn" ]; then
17
+ if [ -z "$REPO_ROOT" ]; then
18
+ exit 0
19
+ fi
20
+
21
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
22
+ CAIRN_HOME="$(dirname "$HOOK_DIR")"
23
+ if [ ! -d "$CAIRN_HOME" ]; then
14
24
  exit 0
15
25
  fi
16
26
 
27
+ # Ghost = state home is OUTSIDE the repo tree → advisory.
28
+ GHOST=1
29
+ case "$CAIRN_HOME/" in
30
+ "$REPO_ROOT"/*) GHOST=0 ;;
31
+ esac
32
+
17
33
  CAIRN_CMD=""
18
- if [ -f "$REPO_ROOT/.cairn/.cli-path" ]; then
19
- CAIRN_CMD="$(head -n1 "$REPO_ROOT/.cairn/.cli-path")"
34
+ if [ -f "$CAIRN_HOME/.cli-path" ]; then
35
+ CAIRN_CMD="$(head -n1 "$CAIRN_HOME/.cli-path")"
36
+ # Self-heal a stale path (plugin upgrade rotates the cache dir).
37
+ CAIRN_BIN="${CAIRN_CMD#node }"
38
+ CAIRN_BIN="${CAIRN_BIN#\"}"
39
+ CAIRN_BIN="${CAIRN_BIN%\"}"
40
+ if [ -n "$CAIRN_BIN" ] && [ ! -f "$CAIRN_BIN" ]; then
41
+ CAIRN_CMD=""
42
+ fi
20
43
  fi
21
44
  if [ -z "$CAIRN_CMD" ] && command -v cairn > /dev/null 2>&1; then
22
45
  CAIRN_CMD="cairn"
@@ -25,4 +48,9 @@ if [ -z "$CAIRN_CMD" ]; then
25
48
  exit 0
26
49
  fi
27
50
 
28
- eval "$CAIRN_CMD sensor-run --commit-msg \"$1\""
51
+ if [ "$GHOST" = "1" ]; then
52
+ eval "$CAIRN_CMD sensor-run --commit-msg \"$1\"" \
53
+ || echo "cairn (ghost): commit-msg findings above are advisory — commit not blocked" >&2
54
+ else
55
+ eval "$CAIRN_CMD sensor-run --commit-msg \"$1\""
56
+ fi
@@ -4,8 +4,13 @@
4
4
  # Spec: PLUGIN_ARCHITECTURE §17 Layer 1 (bypass tracking).
5
5
  #
6
6
  # Records the SHA of the commit that just succeeded into
7
- # `.cairn/.attested-commits`. The Stop hook uses this list to detect
7
+ # `<cairnHome>/.attested-commits`. The Stop hook uses this list to detect
8
8
  # `--no-verify` bypasses and surface them inline.
9
+ #
10
+ # State home is derived from THIS hook's own location: core.hooksPath points at
11
+ # <cairnHome>/git-hooks in both modes — in-repo `.cairn/` for committed,
12
+ # out-of-repo `~/.cairn/state/<id>/` for ghost. So the attested log lands beside
13
+ # the rest of the state in either mode, never as a stray file in a ghost repo.
9
14
 
10
15
  set -e
11
16
 
@@ -18,11 +23,16 @@ if [ -z "$REPO_ROOT" ]; then
18
23
  exit 0
19
24
  fi
20
25
 
26
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
27
+ CAIRN_HOME="$(dirname "$HOOK_DIR")"
28
+ if [ ! -d "$CAIRN_HOME" ]; then
29
+ exit 0
30
+ fi
31
+
21
32
  SHA="$(git rev-parse --verify HEAD 2> /dev/null || true)"
22
33
  if [ -z "$SHA" ]; then
23
34
  exit 0
24
35
  fi
25
36
 
26
- mkdir -p "$REPO_ROOT/.cairn"
27
- echo "$SHA" >> "$REPO_ROOT/.cairn/.attested-commits"
37
+ echo "$SHA" >> "$CAIRN_HOME/.attested-commits"
28
38
  exit 0
@@ -1,39 +1,56 @@
1
1
  #!/usr/bin/env bash
2
2
  # Cairn pre-commit hook (versioned, per-clone activation via core.hooksPath).
3
3
  #
4
- # Runs two passes against the staged tree:
4
+ # Two passes over the staged tree:
5
+ # 1. `cairn sensor-run --staged` — sensor sweep. Blocks the commit on a
6
+ # hard finding in committed mode; ADVISORY
7
+ # (warns, never blocks) in ghost mode.
8
+ # 2. `cairn hook pre-commit-align` — Layer B detection-only SoT drift log.
9
+ # Never blocks. Always exits 0.
5
10
  #
6
- # 1. `cairn sensor-run --staged` — component-registry check + the
7
- # sensor sweep (Layer A stub
8
- # catalog, Layer C structural,
9
- # decision-assertions) over the
10
- # staged tree. Exits non-zero,
11
- # blocking the commit, on any hard
12
- # finding.
11
+ # State home is derived from THIS hook's own location: core.hooksPath points at
12
+ # <cairnHome>/git-hooks in BOTH modes — in-repo `.cairn/` for committed,
13
+ # out-of-repo `~/.cairn/state/<id>/` for ghost — so the hook resolves its
14
+ # state, `.cli-path`, and mode without a registry lookup. Ghost = the home
15
+ # lives OUTSIDE the repo tree.
13
16
  #
14
- # 2. `cairn hook pre-commit-align` — Layer B (plan §4.2)
15
- # detection-only SoT drift log.
16
- # NEVER blocks the commit.
17
- # Always exits 0; failures
18
- # degrade silently.
19
- #
20
- # Resolution order for the cairn binary:
21
- # 1. .cairn/.cli-path (written by `cairn join`; points at the bundled
22
- # cli.mjs for plugin users, the global cairn shim for CLI users).
23
- # 2. global `cairn` binary on PATH.
24
- # 3. exit 0 — no enforcement available; SessionStart bootstrap banner
25
- # will surface on next Claude Code session and re-run join.
17
+ # cairn binary resolution: <cairnHome>/.cli-path, then a global `cairn`, else
18
+ # exit 0 (SessionStart re-runs join next session).
26
19
 
27
20
  set -e
28
21
 
29
22
  REPO_ROOT="$(git rev-parse --show-toplevel 2> /dev/null || true)"
30
- if [ -z "$REPO_ROOT" ] || [ ! -d "$REPO_ROOT/.cairn" ]; then
23
+ if [ -z "$REPO_ROOT" ]; then
24
+ exit 0
25
+ fi
26
+
27
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
28
+ CAIRN_HOME="$(dirname "$HOOK_DIR")"
29
+ if [ ! -d "$CAIRN_HOME" ]; then
31
30
  exit 0
32
31
  fi
33
32
 
33
+ # Ghost = state home is OUTSIDE the repo tree → advisory. Committed = the home
34
+ # is <repo>/.cairn → enforcing.
35
+ GHOST=1
36
+ case "$CAIRN_HOME/" in
37
+ "$REPO_ROOT"/*) GHOST=0 ;;
38
+ esac
39
+
34
40
  CAIRN_CMD=""
35
- if [ -f "$REPO_ROOT/.cairn/.cli-path" ]; then
36
- CAIRN_CMD="$(head -n1 "$REPO_ROOT/.cairn/.cli-path")"
41
+ if [ -f "$CAIRN_HOME/.cli-path" ]; then
42
+ CAIRN_CMD="$(head -n1 "$CAIRN_HOME/.cli-path")"
43
+ # Self-heal a stale path. A plugin upgrade rotates the marketplace cache
44
+ # dir, so a .cli-path written by an older version points at a now-deleted
45
+ # cli.mjs. Verify the target exists; if not, blank CAIRN_CMD so resolution
46
+ # falls through to a global `cairn` rather than eval-ing a dead path (which,
47
+ # under `set -e`, hard-fails the commit instead of degrading silently).
48
+ CAIRN_BIN="${CAIRN_CMD#node }"
49
+ CAIRN_BIN="${CAIRN_BIN#\"}"
50
+ CAIRN_BIN="${CAIRN_BIN%\"}"
51
+ if [ -n "$CAIRN_BIN" ] && [ ! -f "$CAIRN_BIN" ]; then
52
+ CAIRN_CMD=""
53
+ fi
37
54
  fi
38
55
  if [ -z "$CAIRN_CMD" ] && command -v cairn > /dev/null 2>&1; then
39
56
  CAIRN_CMD="cairn"
@@ -42,8 +59,14 @@ if [ -z "$CAIRN_CMD" ]; then
42
59
  exit 0
43
60
  fi
44
61
 
45
- # Pass 1 — sensor-run (may block).
46
- eval "$CAIRN_CMD sensor-run --staged"
62
+ # Pass 1 — sensor-run. Blocks on hard findings in committed mode; advisory in
63
+ # ghost (Cairn is private memory, never a delivery gate).
64
+ if [ "$GHOST" = "1" ]; then
65
+ eval "$CAIRN_CMD sensor-run --staged" \
66
+ || echo "cairn (ghost): sensor findings above are advisory — commit not blocked" >&2
67
+ else
68
+ eval "$CAIRN_CMD sensor-run --staged"
69
+ fi
47
70
 
48
71
  # Pass 2 — Layer B alignment log (never blocks).
49
72
  eval "$CAIRN_CMD hook pre-commit-align" || true
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Bin entrypoint — `node cairn-core/dist/hooks/read-enrich.js`.
4
- * PostToolUse on Read; injects citation legend.
5
- */
6
- export {};
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Bin entrypoint — `node cairn-core/dist/hooks/read-enrich.js`.
4
- * PostToolUse on Read; injects citation legend.
5
- */
6
- import { runReadEnricher } from "./post-tool-use/index.js";
7
- runReadEnricher().catch((err) => {
8
- process.stderr.write(`[cairn read-enrich] ${err instanceof Error ? err.message : String(err)}\n`);
9
- process.exit(1);
10
- });
11
- //# sourceMappingURL=read-enrich.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-enrich.js","sourceRoot":"","sources":["../../src/hooks/read-enrich.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC5E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Bin entrypoint — `node cairn-core/dist/hooks/write-guard.js`.
4
- * PostToolUse on Write/Edit; copy-safety + scope reminder.
5
- */
6
- export {};
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Bin entrypoint — `node cairn-core/dist/hooks/write-guard.js`.
4
- * PostToolUse on Write/Edit; copy-safety + scope reminder.
5
- */
6
- import { runWriteGuardian } from "./post-tool-use/index.js";
7
- runWriteGuardian().catch((err) => {
8
- process.stderr.write(`[cairn write-guard] ${err instanceof Error ? err.message : String(err)}\n`);
9
- process.exit(1);
10
- });
11
- //# sourceMappingURL=write-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-guard.js","sourceRoot":"","sources":["../../src/hooks/write-guard.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC5E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Phase 12-strip — per-module strip-replace consent.
3
- *
4
- * Surfaces each ingestion-flagged module as an A/B/C choice (strip /
5
- * keep / skip). Tracks remaining modules in
6
- * `outputs["12-strip"].pending` and emits one question at a time
7
- * until the queue is empty.
8
- */
9
- import type { PhaseResult, PhaseState } from "./types.js";
10
- export declare function runPhase12Strip(state: PhaseState): Promise<PhaseResult>;