@isaacriehm/cairn-core 0.4.3 → 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 (162) 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/dedup.js +1 -47
  12. package/dist/attention/dedup.js.map +1 -1
  13. package/dist/drain/drain.d.ts +77 -0
  14. package/dist/drain/drain.js +464 -0
  15. package/dist/drain/drain.js.map +1 -0
  16. package/dist/drain/index.d.ts +5 -0
  17. package/dist/drain/index.js +5 -0
  18. package/dist/drain/index.js.map +1 -0
  19. package/dist/fix-align/index.d.ts +5 -0
  20. package/dist/fix-align/index.js +5 -0
  21. package/dist/fix-align/index.js.map +1 -0
  22. package/dist/fix-align/run.d.ts +99 -0
  23. package/dist/fix-align/run.js +258 -0
  24. package/dist/fix-align/run.js.map +1 -0
  25. package/dist/ground/alignment-pending.d.ts +28 -0
  26. package/dist/ground/alignment-pending.js +83 -0
  27. package/dist/ground/alignment-pending.js.map +1 -0
  28. package/dist/ground/anchor-map.d.ts +14 -0
  29. package/dist/ground/anchor-map.js +57 -0
  30. package/dist/ground/anchor-map.js.map +1 -0
  31. package/dist/ground/index.d.ts +9 -2
  32. package/dist/ground/index.js +8 -2
  33. package/dist/ground/index.js.map +1 -1
  34. package/dist/ground/paths.d.ts +21 -0
  35. package/dist/ground/paths.js +43 -0
  36. package/dist/ground/paths.js.map +1 -1
  37. package/dist/ground/schemas.d.ts +201 -0
  38. package/dist/ground/schemas.js +126 -1
  39. package/dist/ground/schemas.js.map +1 -1
  40. package/dist/ground/slug.d.ts +60 -0
  41. package/dist/ground/slug.js +103 -0
  42. package/dist/ground/slug.js.map +1 -0
  43. package/dist/ground/sot-bindings.d.ts +14 -0
  44. package/dist/ground/sot-bindings.js +80 -0
  45. package/dist/ground/sot-bindings.js.map +1 -0
  46. package/dist/ground/sot-cache.d.ts +18 -0
  47. package/dist/ground/sot-cache.js +63 -0
  48. package/dist/ground/sot-cache.js.map +1 -0
  49. package/dist/ground/topic-index.d.ts +20 -0
  50. package/dist/ground/topic-index.js +60 -0
  51. package/dist/ground/topic-index.js.map +1 -0
  52. package/dist/hooks/post-tool-use/index.d.ts +2 -0
  53. package/dist/hooks/post-tool-use/index.js +1 -0
  54. package/dist/hooks/post-tool-use/index.js.map +1 -1
  55. package/dist/hooks/post-tool-use/sot-align.d.ts +166 -0
  56. package/dist/hooks/post-tool-use/sot-align.js +1311 -0
  57. package/dist/hooks/post-tool-use/sot-align.js.map +1 -0
  58. package/dist/hooks/pre-commit/index.d.ts +8 -0
  59. package/dist/hooks/pre-commit/index.js +8 -0
  60. package/dist/hooks/pre-commit/index.js.map +1 -0
  61. package/dist/hooks/pre-commit/sot-align-precommit.d.ts +60 -0
  62. package/dist/hooks/pre-commit/sot-align-precommit.js +221 -0
  63. package/dist/hooks/pre-commit/sot-align-precommit.js.map +1 -0
  64. package/dist/hooks/runners/session-start.js +41 -0
  65. package/dist/hooks/runners/session-start.js.map +1 -1
  66. package/dist/hooks/sot-align-common.d.ts +39 -0
  67. package/dist/hooks/sot-align-common.js +152 -0
  68. package/dist/hooks/sot-align-common.js.map +1 -0
  69. package/dist/index.d.ts +5 -0
  70. package/dist/index.js +5 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/init/index.d.ts +4 -2
  73. package/dist/init/index.js +2 -1
  74. package/dist/init/index.js.map +1 -1
  75. package/dist/init/ingest-docs.d.ts +30 -47
  76. package/dist/init/ingest-docs.js +113 -410
  77. package/dist/init/ingest-docs.js.map +1 -1
  78. package/dist/init/init.d.ts +8 -0
  79. package/dist/init/init.js +58 -29
  80. package/dist/init/init.js.map +1 -1
  81. package/dist/init/phases/5-brand.js +1 -1
  82. package/dist/init/phases/5-brand.js.map +1 -1
  83. package/dist/init/phases/5b-topic-index.d.ts +30 -0
  84. package/dist/init/phases/5b-topic-index.js +62 -0
  85. package/dist/init/phases/5b-topic-index.js.map +1 -0
  86. package/dist/init/phases/6-docs-ingest.d.ts +4 -5
  87. package/dist/init/phases/6-docs-ingest.js +5 -6
  88. package/dist/init/phases/6-docs-ingest.js.map +1 -1
  89. package/dist/init/phases/index.d.ts +2 -0
  90. package/dist/init/phases/index.js +1 -0
  91. package/dist/init/phases/index.js.map +1 -1
  92. package/dist/init/phases/parallel-678.d.ts +14 -17
  93. package/dist/init/phases/parallel-678.js +77 -98
  94. package/dist/init/phases/parallel-678.js.map +1 -1
  95. package/dist/init/phases/source-comments-output-io.d.ts +16 -10
  96. package/dist/init/phases/source-comments-output-io.js +7 -10
  97. package/dist/init/phases/source-comments-output-io.js.map +1 -1
  98. package/dist/init/phases/types.d.ts +1 -1
  99. package/dist/init/phases/types.js +1 -0
  100. package/dist/init/phases/types.js.map +1 -1
  101. package/dist/init/rules-merge/discover.d.ts +8 -3
  102. package/dist/init/rules-merge/discover.js +7 -3
  103. package/dist/init/rules-merge/discover.js.map +1 -1
  104. package/dist/init/rules-merge/ingest.d.ts +81 -28
  105. package/dist/init/rules-merge/ingest.js +456 -162
  106. package/dist/init/rules-merge/ingest.js.map +1 -1
  107. package/dist/init/sot-emit.d.ts +84 -0
  108. package/dist/init/sot-emit.js +218 -0
  109. package/dist/init/sot-emit.js.map +1 -0
  110. package/dist/init/source-comments/classify.d.ts +12 -10
  111. package/dist/init/source-comments/classify.js +13 -25
  112. package/dist/init/source-comments/classify.js.map +1 -1
  113. package/dist/init/source-comments/index.d.ts +1 -1
  114. package/dist/init/source-comments/index.js +1 -1
  115. package/dist/init/source-comments/index.js.map +1 -1
  116. package/dist/init/source-comments/ingest.d.ts +91 -67
  117. package/dist/init/source-comments/ingest.js +392 -361
  118. package/dist/init/source-comments/ingest.js.map +1 -1
  119. package/dist/init/topic-index/index.d.ts +36 -0
  120. package/dist/init/topic-index/index.js +46 -0
  121. package/dist/init/topic-index/index.js.map +1 -0
  122. package/dist/init/topic-index/judge.d.ts +20 -0
  123. package/dist/init/topic-index/judge.js +65 -0
  124. package/dist/init/topic-index/judge.js.map +1 -0
  125. package/dist/init/topic-index/resolve.d.ts +50 -0
  126. package/dist/init/topic-index/resolve.js +196 -0
  127. package/dist/init/topic-index/resolve.js.map +1 -0
  128. package/dist/init/topic-index/walk.d.ts +43 -0
  129. package/dist/init/topic-index/walk.js +293 -0
  130. package/dist/init/topic-index/walk.js.map +1 -0
  131. package/dist/mcp/schemas.d.ts +45 -8
  132. package/dist/mcp/schemas.js +43 -7
  133. package/dist/mcp/schemas.js.map +1 -1
  134. package/dist/mcp/tools/align-drain.d.ts +7 -0
  135. package/dist/mcp/tools/align-drain.js +26 -0
  136. package/dist/mcp/tools/align-drain.js.map +1 -0
  137. package/dist/mcp/tools/index.js +3 -0
  138. package/dist/mcp/tools/index.js.map +1 -1
  139. package/dist/mcp/tools/init-phases.js +4 -1
  140. package/dist/mcp/tools/init-phases.js.map +1 -1
  141. package/dist/mcp/tools/resolve-attention.d.ts +2 -2
  142. package/dist/mcp/tools/resolve-attention.js +828 -5
  143. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  144. package/dist/status-line/event-queue.d.ts +40 -0
  145. package/dist/status-line/event-queue.js +195 -0
  146. package/dist/status-line/event-queue.js.map +1 -0
  147. package/dist/status-line/format.d.ts +1 -1
  148. package/dist/status-line/format.js +49 -6
  149. package/dist/status-line/format.js.map +1 -1
  150. package/dist/status-line/index.d.ts +41 -0
  151. package/dist/status-line/index.js +14 -0
  152. package/dist/status-line/index.js.map +1 -1
  153. package/dist/status-line/reader.js +23 -18
  154. package/dist/status-line/reader.js.map +1 -1
  155. package/dist/status-line/writer.d.ts +1 -1
  156. package/dist/status-line/writer.js +5 -0
  157. package/dist/status-line/writer.js.map +1 -1
  158. package/dist/text/jaccard.d.ts +19 -0
  159. package/dist/text/jaccard.js +68 -0
  160. package/dist/text/jaccard.js.map +1 -0
  161. package/package.json +1 -1
  162. package/templates/.cairn/git-hooks/pre-commit +16 -3
@@ -1 +1 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/status-line/reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/status-line/reader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { StatusJson } from "./index.js";
1
+ import { type StatusJson } from "./index.js";
2
2
  /**
3
3
  * Resolve the absolute path to `status.json` for a session inside the
4
4
  * adopted repo at `repoRoot`. Per PLUGIN_ARCHITECTURE §7, status lives
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { sessionStateDir } from "../paths/index.js";
4
+ import { emptyEventCounters } from "./index.js";
4
5
  /**
5
6
  * Resolve the absolute path to `status.json` for a session inside the
6
7
  * adopted repo at `repoRoot`. Per PLUGIN_ARCHITECTURE §7, status lives
@@ -65,6 +66,10 @@ export function defaultStatusJson() {
65
66
  bypass_count: 0,
66
67
  last_run_result: null,
67
68
  last_run_at: null,
69
+ current_event: null,
70
+ event_counters: emptyEventCounters(),
71
+ haiku_unavailable: false,
72
+ recent_events: [],
68
73
  };
69
74
  }
70
75
  //# sourceMappingURL=writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/status-line/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAiB;IAChE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,SAAiB,EACjB,KAA0B;IAE1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO;IAElD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAI,QAAQ,GAAwB,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YAC1C,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,QAAQ,GAAG,MAA6B,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;IAE9D,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,kBAAkB,EAAE,CAAC;QACrB,mBAAmB,EAAE,CAAC;QACtB,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/status-line/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,YAAY,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAiB;IAChE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,SAAiB,EACjB,KAA0B;IAE1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO;IAElD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAI,QAAQ,GAAwB,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YAC1C,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,QAAQ,GAAG,MAA6B,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;IAE9D,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,kBAAkB,EAAE,CAAC;QACrB,mBAAmB,EAAE,CAAC;QACtB,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,kBAAkB,EAAE;QACpC,iBAAiB,EAAE,KAAK;QACxB,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tokenize + Jaccard similarity, shared between dedup (DEC draft
3
+ * clustering) and the SoT alignment / topic-index resolver.
4
+ *
5
+ * The tokenizer lowercases, strips non-alphanumerics, splits on
6
+ * whitespace, applies a tiny stem (drop trailing s / ed / ing for
7
+ * words longer than 4 chars), and filters stopwords. A second
8
+ * stopword set tuned for source-comment / code-shaped prose can be
9
+ * mixed in for the SoT layer (function, method, class, etc.).
10
+ */
11
+ interface TokenizeOptions {
12
+ /** Mix in source-shape stopwords (function / method / class / …). */
13
+ codeAware?: boolean;
14
+ /** Add caller-supplied stopwords on top of the defaults. */
15
+ extraStopwords?: Iterable<string>;
16
+ }
17
+ export declare function tokenize(text: string, opts?: TokenizeOptions): Set<string>;
18
+ export declare function jaccard(a: Set<string>, b: Set<string>): number;
19
+ export {};
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Tokenize + Jaccard similarity, shared between dedup (DEC draft
3
+ * clustering) and the SoT alignment / topic-index resolver.
4
+ *
5
+ * The tokenizer lowercases, strips non-alphanumerics, splits on
6
+ * whitespace, applies a tiny stem (drop trailing s / ed / ing for
7
+ * words longer than 4 chars), and filters stopwords. A second
8
+ * stopword set tuned for source-comment / code-shaped prose can be
9
+ * mixed in for the SoT layer (function, method, class, etc.).
10
+ */
11
+ const ENGLISH_STOPWORDS = new Set([
12
+ "the", "a", "an", "and", "or", "of", "in", "on", "to", "for", "with",
13
+ "by", "from", "is", "are", "was", "were", "be", "been", "being", "has",
14
+ "have", "had", "do", "does", "did", "this", "that", "these", "those",
15
+ "it", "its", "as", "at", "but", "if", "than", "so", "use", "used",
16
+ "using", "via", "out", "off", "up", "our", "their", "one", "two",
17
+ "when", "where", "what", "how", "why", "who", "which", "can", "should",
18
+ "must", "will", "shall", "may", "not", "no", "any", "all", "some",
19
+ "few", "more", "most", "only", "also",
20
+ ]);
21
+ const CAIRN_DOMAIN_STOPWORDS = new Set(["rationale", "decision"]);
22
+ const CODE_STOPWORDS = new Set([
23
+ "function", "method", "class", "module", "request", "response",
24
+ "endpoint", "param", "user", "data", "value", "result", "input",
25
+ "output", "type", "interface", "object", "array", "string", "number",
26
+ "boolean", "null", "undefined",
27
+ ]);
28
+ function stem(w) {
29
+ if (w.length <= 4)
30
+ return w;
31
+ if (w.endsWith("ing"))
32
+ return w.slice(0, -3);
33
+ if (w.endsWith("ed"))
34
+ return w.slice(0, -2);
35
+ if (w.endsWith("s") && !w.endsWith("ss"))
36
+ return w.slice(0, -1);
37
+ return w;
38
+ }
39
+ export function tokenize(text, opts = {}) {
40
+ const stop = new Set(ENGLISH_STOPWORDS);
41
+ for (const w of CAIRN_DOMAIN_STOPWORDS)
42
+ stop.add(w);
43
+ if (opts.codeAware) {
44
+ for (const w of CODE_STOPWORDS)
45
+ stop.add(w);
46
+ }
47
+ if (opts.extraStopwords) {
48
+ for (const w of opts.extraStopwords)
49
+ stop.add(w);
50
+ }
51
+ return new Set(text
52
+ .toLowerCase()
53
+ .replace(/[^a-z0-9\s]/g, " ")
54
+ .split(/\s+/)
55
+ .map(stem)
56
+ .filter((w) => w.length >= 3 && !stop.has(w)));
57
+ }
58
+ export function jaccard(a, b) {
59
+ if (a.size === 0 && b.size === 0)
60
+ return 0;
61
+ let inter = 0;
62
+ for (const x of a)
63
+ if (b.has(x))
64
+ inter += 1;
65
+ const union = a.size + b.size - inter;
66
+ return union === 0 ? 0 : inter / union;
67
+ }
68
+ //# sourceMappingURL=jaccard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jaccard.js","sourceRoot":"","sources":["../../src/text/jaccard.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.4.3",
3
+ "version": "0.5.0",
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",
@@ -1,11 +1,20 @@
1
1
  #!/usr/bin/env bash
2
2
  # Cairn pre-commit hook (versioned, per-clone activation via core.hooksPath).
3
3
  #
4
- # Spec: PLUGIN_ARCHITECTURE §17 Layer 1.
4
+ # Runs two passes against the staged tree:
5
5
  #
6
- # Fails the commit when sensor-run --staged returns non-zero.
6
+ # 1. `cairn sensor-run --staged` — sensor-driven enforcement
7
+ # (may exit non-zero, blocking
8
+ # the commit when a configured
9
+ # sensor's trigger fires).
7
10
  #
8
- # Resolution order:
11
+ # 2. `cairn hook pre-commit-align` — Layer B (plan §4.2)
12
+ # detection-only SoT drift log.
13
+ # NEVER blocks the commit.
14
+ # Always exits 0; failures
15
+ # degrade silently.
16
+ #
17
+ # Resolution order for the cairn binary:
9
18
  # 1. .cairn/.cli-path (written by `cairn join`; points at the bundled
10
19
  # cli.mjs for plugin users, the global cairn shim for CLI users).
11
20
  # 2. global `cairn` binary on PATH.
@@ -30,4 +39,8 @@ if [ -z "$CAIRN_CMD" ]; then
30
39
  exit 0
31
40
  fi
32
41
 
42
+ # Pass 1 — sensor-run (may block).
33
43
  eval "$CAIRN_CMD sensor-run --staged"
44
+
45
+ # Pass 2 — Layer B alignment log (never blocks).
46
+ eval "$CAIRN_CMD hook pre-commit-align" || true