@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
@@ -122,6 +122,18 @@ export declare const DecisionAssertion: z.ZodDiscriminatedUnion<[z.ZodObject<{
122
122
  description: z.ZodString;
123
123
  }, z.core.$strip>], "kind">;
124
124
  export type DecisionAssertion = z.infer<typeof DecisionAssertion>;
125
+ /**
126
+ * sot_kind = where the canonical prose lives for this DEC.
127
+ * "ledger" — body in this DEC file is canonical (source-comment essay,
128
+ * operator-recorded). Lens renders body verbatim.
129
+ * "path" — sot_path points at the canonical location (doc paragraph,
130
+ * CLAUDE.md section). Lens renders live content from there.
131
+ */
132
+ export declare const SotKind: z.ZodEnum<{
133
+ path: "path";
134
+ ledger: "ledger";
135
+ }>;
136
+ export type SotKind = z.infer<typeof SotKind>;
125
137
  export declare const DecisionFrontmatter: z.ZodObject<{
126
138
  id: z.ZodString;
127
139
  title: z.ZodString;
@@ -217,6 +229,14 @@ export declare const DecisionFrontmatter: z.ZodObject<{
217
229
  }, z.core.$strip>], "kind">>>;
218
230
  human_review_hint: z.ZodOptional<z.ZodString>;
219
231
  related_invariants: z.ZodOptional<z.ZodArray<z.ZodString>>;
232
+ sot_kind: z.ZodOptional<z.ZodEnum<{
233
+ path: "path";
234
+ ledger: "ledger";
235
+ }>>;
236
+ sot_path: z.ZodOptional<z.ZodString>;
237
+ sot_content_hash: z.ZodOptional<z.ZodString>;
238
+ related: z.ZodOptional<z.ZodNullable<z.ZodString>>;
239
+ derived_from: z.ZodOptional<z.ZodNullable<z.ZodString>>;
220
240
  }, z.core.$loose>;
221
241
  export type DecisionFrontmatter = z.infer<typeof DecisionFrontmatter>;
222
242
  export declare const InvariantFrontmatter: z.ZodObject<{
@@ -225,6 +245,7 @@ export declare const InvariantFrontmatter: z.ZodObject<{
225
245
  type: z.ZodOptional<z.ZodLiteral<"invariant">>;
226
246
  status: z.ZodOptional<z.ZodEnum<{
227
247
  superseded: "superseded";
248
+ archived: "archived";
228
249
  active: "active";
229
250
  }>>;
230
251
  audience: z.ZodOptional<z.ZodEnum<{
@@ -241,6 +262,14 @@ export declare const InvariantFrontmatter: z.ZodObject<{
241
262
  e2e: z.ZodOptional<z.ZodString>;
242
263
  naming_convention: z.ZodOptional<z.ZodString>;
243
264
  superseded_by: z.ZodOptional<z.ZodNullable<z.ZodString>>;
265
+ sot_kind: z.ZodOptional<z.ZodEnum<{
266
+ path: "path";
267
+ ledger: "ledger";
268
+ }>>;
269
+ sot_path: z.ZodOptional<z.ZodString>;
270
+ sot_content_hash: z.ZodOptional<z.ZodString>;
271
+ related: z.ZodOptional<z.ZodNullable<z.ZodString>>;
272
+ derived_from: z.ZodOptional<z.ZodNullable<z.ZodString>>;
244
273
  }, z.core.$loose>;
245
274
  export type InvariantFrontmatter = z.infer<typeof InvariantFrontmatter>;
246
275
  export declare const DecisionLedgerEntry: z.ZodObject<{
@@ -282,6 +311,132 @@ export declare const QualityGrades: z.ZodObject<{
282
311
  }, z.core.$strip>>;
283
312
  }, z.core.$strip>;
284
313
  export type QualityGrades = z.infer<typeof QualityGrades>;
314
+ /**
315
+ * Topic-index entry — one row per content-fingerprint slug across all
316
+ * scanned sources. `sot_source` is the canonical source path picked by
317
+ * priority order (docs/* > CLAUDE.md > AGENTS.md > source comments).
318
+ * `candidates` lists every place the same prose appears (one becomes the
319
+ * SoT, the rest become §DEC-<id> cites).
320
+ */
321
+ export declare const TopicIndexEntry: z.ZodObject<{
322
+ slug: z.ZodString;
323
+ dec_id: z.ZodOptional<z.ZodString>;
324
+ sot_source: z.ZodString;
325
+ candidates: z.ZodArray<z.ZodObject<{
326
+ file: z.ZodString;
327
+ kind: z.ZodEnum<{
328
+ doc: "doc";
329
+ claudemd: "claudemd";
330
+ agentsmd: "agentsmd";
331
+ rule: "rule";
332
+ "source-comment": "source-comment";
333
+ }>;
334
+ anchor: z.ZodOptional<z.ZodString>;
335
+ line_range: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
336
+ }, z.core.$strip>>;
337
+ created_at: z.ZodString;
338
+ }, z.core.$strip>;
339
+ export type TopicIndexEntry = z.infer<typeof TopicIndexEntry>;
340
+ export declare const TopicIndex: z.ZodObject<{
341
+ version: z.ZodLiteral<1>;
342
+ generated: z.ZodString;
343
+ topics: z.ZodRecord<z.ZodString, z.ZodObject<{
344
+ slug: z.ZodString;
345
+ dec_id: z.ZodOptional<z.ZodString>;
346
+ sot_source: z.ZodString;
347
+ candidates: z.ZodArray<z.ZodObject<{
348
+ file: z.ZodString;
349
+ kind: z.ZodEnum<{
350
+ doc: "doc";
351
+ claudemd: "claudemd";
352
+ agentsmd: "agentsmd";
353
+ rule: "rule";
354
+ "source-comment": "source-comment";
355
+ }>;
356
+ anchor: z.ZodOptional<z.ZodString>;
357
+ line_range: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
358
+ }, z.core.$strip>>;
359
+ created_at: z.ZodString;
360
+ }, z.core.$strip>>;
361
+ }, z.core.$strip>;
362
+ export type TopicIndex = z.infer<typeof TopicIndex>;
363
+ /**
364
+ * SoT bindings — bidirectional map between DEC ids and their canonical
365
+ * source paths. Forward index is one-to-one. Reverse index is one-to-many
366
+ * because supersedes chains keep the same sot_path across multiple DEC
367
+ * ids.
368
+ */
369
+ export declare const SotBindings: z.ZodObject<{
370
+ version: z.ZodLiteral<1>;
371
+ generated: z.ZodString;
372
+ forward: z.ZodRecord<z.ZodString, z.ZodString>;
373
+ reverse: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
374
+ }, z.core.$strip>;
375
+ export type SotBindings = z.infer<typeof SotBindings>;
376
+ /**
377
+ * Sot-cache — tokenized DEC body shingles for Jaccard pre-filter in the
378
+ * Layer A alignment hook. Mtime-keyed so the cache rebuilds incrementally
379
+ * on PostToolUse Write events.
380
+ */
381
+ export declare const SotCacheEntry: z.ZodObject<{
382
+ dec_id: z.ZodString;
383
+ sot_path: z.ZodString;
384
+ body_hash: z.ZodString;
385
+ tokens: z.ZodArray<z.ZodString>;
386
+ shingles: z.ZodArray<z.ZodString>;
387
+ mtime_ms: z.ZodNumber;
388
+ }, z.core.$strip>;
389
+ export type SotCacheEntry = z.infer<typeof SotCacheEntry>;
390
+ export declare const SotCache: z.ZodObject<{
391
+ version: z.ZodLiteral<1>;
392
+ generated: z.ZodString;
393
+ entries: z.ZodRecord<z.ZodString, z.ZodObject<{
394
+ dec_id: z.ZodString;
395
+ sot_path: z.ZodString;
396
+ body_hash: z.ZodString;
397
+ tokens: z.ZodArray<z.ZodString>;
398
+ shingles: z.ZodArray<z.ZodString>;
399
+ mtime_ms: z.ZodNumber;
400
+ }, z.core.$strip>>;
401
+ }, z.core.$strip>;
402
+ export type SotCache = z.infer<typeof SotCache>;
403
+ /**
404
+ * Anchor-map — external map from topic slug to its current location in
405
+ * source. Allows operator's docs to stay pristine (no `<!-- cairn-anchor -->`
406
+ * injected) while drift detection reconciles via content_hash.
407
+ */
408
+ export declare const AnchorMapEntry: z.ZodObject<{
409
+ file: z.ZodString;
410
+ current_anchor: z.ZodOptional<z.ZodString>;
411
+ content_hash: z.ZodString;
412
+ line_range: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
413
+ kind: z.ZodEnum<{
414
+ doc: "doc";
415
+ claudemd: "claudemd";
416
+ agentsmd: "agentsmd";
417
+ rule: "rule";
418
+ "source-comment": "source-comment";
419
+ }>;
420
+ }, z.core.$strip>;
421
+ export type AnchorMapEntry = z.infer<typeof AnchorMapEntry>;
422
+ export declare const AnchorMap: z.ZodObject<{
423
+ version: z.ZodLiteral<1>;
424
+ generated: z.ZodString;
425
+ anchors: z.ZodRecord<z.ZodString, z.ZodObject<{
426
+ file: z.ZodString;
427
+ current_anchor: z.ZodOptional<z.ZodString>;
428
+ content_hash: z.ZodString;
429
+ line_range: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
430
+ kind: z.ZodEnum<{
431
+ doc: "doc";
432
+ claudemd: "claudemd";
433
+ agentsmd: "agentsmd";
434
+ rule: "rule";
435
+ "source-comment": "source-comment";
436
+ }>;
437
+ }, z.core.$strip>>;
438
+ }, z.core.$strip>;
439
+ export type AnchorMap = z.infer<typeof AnchorMap>;
285
440
  export declare const DriftEvent: z.ZodObject<{
286
441
  ts: z.ZodString;
287
442
  kind: z.ZodEnum<{
@@ -290,6 +445,9 @@ export declare const DriftEvent: z.ZodObject<{
290
445
  broken_link: "broken_link";
291
446
  orphan_path: "orphan_path";
292
447
  manifest_hash_changed: "manifest_hash_changed";
448
+ "doc-drift": "doc-drift";
449
+ "paragraph-deleted": "paragraph-deleted";
450
+ "pre-commit-drift": "pre-commit-drift";
293
451
  }>;
294
452
  path: z.ZodString;
295
453
  detail: z.ZodOptional<z.ZodString>;
@@ -297,5 +455,48 @@ export declare const DriftEvent: z.ZodObject<{
297
455
  soft: "soft";
298
456
  hard: "hard";
299
457
  }>>;
458
+ dec_id: z.ZodOptional<z.ZodString>;
300
459
  }, z.core.$strip>;
301
460
  export type DriftEvent = z.infer<typeof DriftEvent>;
461
+ /**
462
+ * Layer B pre-commit-drift log entry written by the git pre-commit
463
+ * hook (`cairn hook pre-commit-align`). Layer C SessionStart drain
464
+ * consumes this file, re-checks each entry against the (possibly
465
+ * changed) source location, and runs the Haiku judge for ambiguous
466
+ * candidates.
467
+ *
468
+ * Path: `.cairn/staleness/pre-commit-deferred.jsonl`.
469
+ *
470
+ * `tier: tier1` — deterministic match passed (Jaccard ≥ 0.85, shingle
471
+ * ≥ 0.6, length ratio 0.5–2.0). Layer C can auto-cite without Haiku
472
+ * if the block survives.
473
+ *
474
+ * `tier: tier2-3` — Jaccard pre-filter survivors only; Tier 1 didn't
475
+ * fire. Layer C invokes Haiku dedup judge.
476
+ */
477
+ export declare const PreCommitDriftCandidate: z.ZodObject<{
478
+ id: z.ZodString;
479
+ similarity: z.ZodNumber;
480
+ body_hash: z.ZodString;
481
+ sot_path: z.ZodString;
482
+ }, z.core.$strip>;
483
+ export type PreCommitDriftCandidate = z.infer<typeof PreCommitDriftCandidate>;
484
+ export declare const PreCommitDriftLogEntry: z.ZodObject<{
485
+ ts: z.ZodString;
486
+ file: z.ZodString;
487
+ block_start_line: z.ZodNumber;
488
+ block_end_line: z.ZodNumber;
489
+ block_content_hash: z.ZodString;
490
+ block_prose: z.ZodString;
491
+ tier: z.ZodEnum<{
492
+ tier1: "tier1";
493
+ "tier2-3": "tier2-3";
494
+ }>;
495
+ candidates: z.ZodArray<z.ZodObject<{
496
+ id: z.ZodString;
497
+ similarity: z.ZodNumber;
498
+ body_hash: z.ZodString;
499
+ sot_path: z.ZodString;
500
+ }, z.core.$strip>>;
501
+ }, z.core.$strip>;
502
+ export type PreCommitDriftLogEntry = z.infer<typeof PreCommitDriftLogEntry>;
@@ -106,6 +106,14 @@ export const DecisionAssertion = z.discriminatedUnion("kind", [
106
106
  description: z.string(),
107
107
  }),
108
108
  ]);
109
+ /**
110
+ * sot_kind = where the canonical prose lives for this DEC.
111
+ * "ledger" — body in this DEC file is canonical (source-comment essay,
112
+ * operator-recorded). Lens renders body verbatim.
113
+ * "path" — sot_path points at the canonical location (doc paragraph,
114
+ * CLAUDE.md section). Lens renders live content from there.
115
+ */
116
+ export const SotKind = z.enum(["ledger", "path"]);
109
117
  export const DecisionFrontmatter = z
110
118
  .object({
111
119
  id: z.string().regex(/^DEC-[0-9a-f]{7,}$/, "decision id must match DEC-<hash7>"),
@@ -129,6 +137,11 @@ export const DecisionFrontmatter = z
129
137
  assertions: z.array(DecisionAssertion).optional(),
130
138
  human_review_hint: z.string().optional(),
131
139
  related_invariants: z.array(z.string()).optional(),
140
+ sot_kind: SotKind.optional(),
141
+ sot_path: z.string().min(1).optional(),
142
+ sot_content_hash: z.string().length(64).optional(),
143
+ related: z.string().nullable().optional(),
144
+ derived_from: z.string().nullable().optional(),
132
145
  })
133
146
  .passthrough();
134
147
  export const InvariantFrontmatter = z
@@ -136,7 +149,7 @@ export const InvariantFrontmatter = z
136
149
  id: z.string().regex(/^INV-[0-9a-f]{7,}$/, "invariant id must match INV-<hash7>"),
137
150
  title: z.string(),
138
151
  type: z.literal("invariant").optional(),
139
- status: z.enum(["active", "superseded"]).optional(),
152
+ status: z.enum(["active", "superseded", "archived"]).optional(),
140
153
  audience: Audience.optional(),
141
154
  generated: z.string().optional(),
142
155
  "verified-at": z.string().optional(),
@@ -147,6 +160,11 @@ export const InvariantFrontmatter = z
147
160
  e2e: z.string().optional(),
148
161
  naming_convention: z.string().optional(),
149
162
  superseded_by: z.string().nullable().optional(),
163
+ sot_kind: SotKind.optional(),
164
+ sot_path: z.string().min(1).optional(),
165
+ sot_content_hash: z.string().length(64).optional(),
166
+ related: z.string().nullable().optional(),
167
+ derived_from: z.string().nullable().optional(),
150
168
  })
151
169
  .passthrough();
152
170
  export const DecisionLedgerEntry = z.object({
@@ -177,6 +195,77 @@ export const QualityGrades = z.object({
177
195
  generated: z.string(),
178
196
  modules: z.array(QualityGrade),
179
197
  });
198
+ /**
199
+ * Topic-index entry — one row per content-fingerprint slug across all
200
+ * scanned sources. `sot_source` is the canonical source path picked by
201
+ * priority order (docs/* > CLAUDE.md > AGENTS.md > source comments).
202
+ * `candidates` lists every place the same prose appears (one becomes the
203
+ * SoT, the rest become §DEC-<id> cites).
204
+ */
205
+ export const TopicIndexEntry = z.object({
206
+ slug: z.string(),
207
+ dec_id: z.string().optional(),
208
+ sot_source: z.string(),
209
+ candidates: z.array(z.object({
210
+ file: z.string(),
211
+ kind: z.enum(["doc", "claudemd", "agentsmd", "rule", "source-comment"]),
212
+ anchor: z.string().optional(),
213
+ line_range: z.tuple([z.number().int(), z.number().int()]).optional(),
214
+ })),
215
+ created_at: z.string(),
216
+ });
217
+ export const TopicIndex = z.object({
218
+ version: z.literal(1),
219
+ generated: z.string(),
220
+ topics: z.record(z.string(), TopicIndexEntry),
221
+ });
222
+ /**
223
+ * SoT bindings — bidirectional map between DEC ids and their canonical
224
+ * source paths. Forward index is one-to-one. Reverse index is one-to-many
225
+ * because supersedes chains keep the same sot_path across multiple DEC
226
+ * ids.
227
+ */
228
+ export const SotBindings = z.object({
229
+ version: z.literal(1),
230
+ generated: z.string(),
231
+ forward: z.record(z.string(), z.string()),
232
+ reverse: z.record(z.string(), z.array(z.string())),
233
+ });
234
+ /**
235
+ * Sot-cache — tokenized DEC body shingles for Jaccard pre-filter in the
236
+ * Layer A alignment hook. Mtime-keyed so the cache rebuilds incrementally
237
+ * on PostToolUse Write events.
238
+ */
239
+ export const SotCacheEntry = z.object({
240
+ dec_id: z.string(),
241
+ sot_path: z.string(),
242
+ body_hash: z.string().length(64),
243
+ tokens: z.array(z.string()),
244
+ shingles: z.array(z.string()),
245
+ mtime_ms: z.number(),
246
+ });
247
+ export const SotCache = z.object({
248
+ version: z.literal(1),
249
+ generated: z.string(),
250
+ entries: z.record(z.string(), SotCacheEntry),
251
+ });
252
+ /**
253
+ * Anchor-map — external map from topic slug to its current location in
254
+ * source. Allows operator's docs to stay pristine (no `<!-- cairn-anchor -->`
255
+ * injected) while drift detection reconciles via content_hash.
256
+ */
257
+ export const AnchorMapEntry = z.object({
258
+ file: z.string(),
259
+ current_anchor: z.string().optional(),
260
+ content_hash: z.string().length(64),
261
+ line_range: z.tuple([z.number().int(), z.number().int()]).optional(),
262
+ kind: z.enum(["doc", "claudemd", "agentsmd", "rule", "source-comment"]),
263
+ });
264
+ export const AnchorMap = z.object({
265
+ version: z.literal(1),
266
+ generated: z.string(),
267
+ anchors: z.record(z.string(), AnchorMapEntry),
268
+ });
180
269
  export const DriftEvent = z.object({
181
270
  ts: z.string(),
182
271
  kind: z.enum([
@@ -185,9 +274,45 @@ export const DriftEvent = z.object({
185
274
  "broken_link",
186
275
  "orphan_path",
187
276
  "manifest_hash_changed",
277
+ "doc-drift",
278
+ "paragraph-deleted",
279
+ "pre-commit-drift",
188
280
  ]),
189
281
  path: z.string(),
190
282
  detail: z.string().optional(),
191
283
  severity: z.enum(["soft", "hard"]).default("soft"),
284
+ dec_id: z.string().optional(),
285
+ });
286
+ /**
287
+ * Layer B pre-commit-drift log entry written by the git pre-commit
288
+ * hook (`cairn hook pre-commit-align`). Layer C SessionStart drain
289
+ * consumes this file, re-checks each entry against the (possibly
290
+ * changed) source location, and runs the Haiku judge for ambiguous
291
+ * candidates.
292
+ *
293
+ * Path: `.cairn/staleness/pre-commit-deferred.jsonl`.
294
+ *
295
+ * `tier: tier1` — deterministic match passed (Jaccard ≥ 0.85, shingle
296
+ * ≥ 0.6, length ratio 0.5–2.0). Layer C can auto-cite without Haiku
297
+ * if the block survives.
298
+ *
299
+ * `tier: tier2-3` — Jaccard pre-filter survivors only; Tier 1 didn't
300
+ * fire. Layer C invokes Haiku dedup judge.
301
+ */
302
+ export const PreCommitDriftCandidate = z.object({
303
+ id: z.string(),
304
+ similarity: z.number(),
305
+ body_hash: z.string(),
306
+ sot_path: z.string(),
307
+ });
308
+ export const PreCommitDriftLogEntry = z.object({
309
+ ts: z.string(),
310
+ file: z.string(),
311
+ block_start_line: z.number(),
312
+ block_end_line: z.number(),
313
+ block_content_hash: z.string(),
314
+ block_prose: z.string(),
315
+ tier: z.enum(["tier1", "tier2-3"]),
316
+ candidates: z.array(PreCommitDriftCandidate),
192
317
  });
193
318
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/ground/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/ground/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Normalize a prose block: strip markdown ornaments + collapse whitespace.
3
+ * Output is the canonical form fed into both content-fingerprint slug
4
+ * generation and content-hash calculation. Identical normalized output
5
+ * → identical slug, even if the source markdown formatting differs.
6
+ */
7
+ export declare function normalizeBlock(input: string): string;
8
+ /**
9
+ * Compute the 12-char content-fingerprint slug for a prose block. Uses
10
+ * sha256 over the normalized body, hex-encoded, sliced to 12 chars.
11
+ *
12
+ * 12 chars → 48 bits, ~280 trillion buckets. Birthday collision becomes
13
+ * meaningful around 16 million distinct topics; real repos are nowhere
14
+ * close to that.
15
+ */
16
+ export declare function topicSlug(input: string): string;
17
+ /**
18
+ * Compute the full sha256 hex of a prose body (no normalization). Used
19
+ * for sot_content_hash drift detection — the hash must change when the
20
+ * operator edits the source paragraph by even one character so the
21
+ * doc-drift sensor can fire.
22
+ */
23
+ export declare function bodyContentHash(body: string): string;
24
+ /**
25
+ * Derive a stable DEC id from canonical inputs. Plan §3.2.1: id =
26
+ * "DEC-" + sha256(JSON.stringify({sot_path, title, capture_source})).slice(0, 7).
27
+ *
28
+ * Body is intentionally NOT in the hash input — doc-drift refresh
29
+ * updates body but keeps the id stable so every §DEC-<hash> token in
30
+ * source files survives the refresh.
31
+ */
32
+ export declare function deriveDecId(input: {
33
+ sot_path: string;
34
+ title: string;
35
+ capture_source: string;
36
+ }): string;
37
+ export declare function deriveInvId(input: {
38
+ sot_path: string;
39
+ title: string;
40
+ capture_source: string;
41
+ }): string;
42
+ /**
43
+ * Ledger-DEC id derivation for source-comment captures (plan §5.3). The
44
+ * generic `deriveDecId` keys on `(sot_path, title, capture_source)`, which
45
+ * collapses for ledger entries because every source-comment DEC shares the
46
+ * literal `sot_path: "ledger"`. Title alone is not unique — two essay
47
+ * comments starting with the same line would collide. Source location is
48
+ * stable post-strip-replace, so `(source_file, source_offset, capture_source)`
49
+ * is the per-fact unique input.
50
+ */
51
+ export declare function deriveLedgerDecId(input: {
52
+ source_file: string;
53
+ source_offset: number;
54
+ capture_source: string;
55
+ }): string;
56
+ export declare function deriveLedgerInvId(input: {
57
+ source_file: string;
58
+ source_offset: number;
59
+ capture_source: string;
60
+ }): string;
@@ -0,0 +1,103 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * Content-fingerprint helpers shared by topic-index, anchor-map, sot-cache,
4
+ * and the Layer A alignment hook.
5
+ *
6
+ * The content slug is sha256-derived from the normalized prose body so two
7
+ * identical blocks (in any source) produce the same slug. Different content
8
+ * → different slug, regardless of leading words. This avoids the "we use
9
+ * postgres for X" vs "we use postgres for Y" collision that a leading-word
10
+ * slugger would suffer.
11
+ */
12
+ const NORMALIZE_PATTERNS = [
13
+ { pattern: /```[\s\S]*?```/g, replacement: " " },
14
+ { pattern: /`[^`]+`/g, replacement: " " },
15
+ { pattern: /\[([^\]]+)\]\([^)]*\)/g, replacement: "$1" },
16
+ { pattern: /^#{1,6}\s+/gm, replacement: "" },
17
+ { pattern: /^[\s>*\-+]+/gm, replacement: "" },
18
+ { pattern: /\s+/g, replacement: " " },
19
+ ];
20
+ /**
21
+ * Normalize a prose block: strip markdown ornaments + collapse whitespace.
22
+ * Output is the canonical form fed into both content-fingerprint slug
23
+ * generation and content-hash calculation. Identical normalized output
24
+ * → identical slug, even if the source markdown formatting differs.
25
+ */
26
+ export function normalizeBlock(input) {
27
+ let s = input;
28
+ for (const { pattern, replacement } of NORMALIZE_PATTERNS) {
29
+ s = s.replace(pattern, replacement);
30
+ }
31
+ return s.trim().toLowerCase();
32
+ }
33
+ /**
34
+ * Compute the 12-char content-fingerprint slug for a prose block. Uses
35
+ * sha256 over the normalized body, hex-encoded, sliced to 12 chars.
36
+ *
37
+ * 12 chars → 48 bits, ~280 trillion buckets. Birthday collision becomes
38
+ * meaningful around 16 million distinct topics; real repos are nowhere
39
+ * close to that.
40
+ */
41
+ export function topicSlug(input) {
42
+ const normalized = normalizeBlock(input);
43
+ return createHash("sha256").update(normalized, "utf8").digest("hex").slice(0, 12);
44
+ }
45
+ /**
46
+ * Compute the full sha256 hex of a prose body (no normalization). Used
47
+ * for sot_content_hash drift detection — the hash must change when the
48
+ * operator edits the source paragraph by even one character so the
49
+ * doc-drift sensor can fire.
50
+ */
51
+ export function bodyContentHash(body) {
52
+ return createHash("sha256").update(body, "utf8").digest("hex");
53
+ }
54
+ /**
55
+ * Derive a stable DEC id from canonical inputs. Plan §3.2.1: id =
56
+ * "DEC-" + sha256(JSON.stringify({sot_path, title, capture_source})).slice(0, 7).
57
+ *
58
+ * Body is intentionally NOT in the hash input — doc-drift refresh
59
+ * updates body but keeps the id stable so every §DEC-<hash> token in
60
+ * source files survives the refresh.
61
+ */
62
+ export function deriveDecId(input) {
63
+ const json = JSON.stringify({
64
+ sot_path: input.sot_path,
65
+ title: input.title,
66
+ capture_source: input.capture_source,
67
+ });
68
+ return `DEC-${createHash("sha256").update(json, "utf8").digest("hex").slice(0, 7)}`;
69
+ }
70
+ export function deriveInvId(input) {
71
+ const json = JSON.stringify({
72
+ sot_path: input.sot_path,
73
+ title: input.title,
74
+ capture_source: input.capture_source,
75
+ });
76
+ return `INV-${createHash("sha256").update(json, "utf8").digest("hex").slice(0, 7)}`;
77
+ }
78
+ /**
79
+ * Ledger-DEC id derivation for source-comment captures (plan §5.3). The
80
+ * generic `deriveDecId` keys on `(sot_path, title, capture_source)`, which
81
+ * collapses for ledger entries because every source-comment DEC shares the
82
+ * literal `sot_path: "ledger"`. Title alone is not unique — two essay
83
+ * comments starting with the same line would collide. Source location is
84
+ * stable post-strip-replace, so `(source_file, source_offset, capture_source)`
85
+ * is the per-fact unique input.
86
+ */
87
+ export function deriveLedgerDecId(input) {
88
+ const json = JSON.stringify({
89
+ source_file: input.source_file,
90
+ source_offset: input.source_offset,
91
+ capture_source: input.capture_source,
92
+ });
93
+ return `DEC-${createHash("sha256").update(json, "utf8").digest("hex").slice(0, 7)}`;
94
+ }
95
+ export function deriveLedgerInvId(input) {
96
+ const json = JSON.stringify({
97
+ source_file: input.source_file,
98
+ source_offset: input.source_offset,
99
+ capture_source: input.capture_source,
100
+ });
101
+ return `INV-${createHash("sha256").update(json, "utf8").digest("hex").slice(0, 7)}`;
102
+ }
103
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/ground/slug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { SotBindings } from "./schemas.js";
2
+ /**
3
+ * Sot-bindings is the lookup table that lens + sensors + the alignment
4
+ * hook all consult to resolve a §DEC-<hash> token to its canonical
5
+ * source. The forward index is one DEC → one path. The reverse index is
6
+ * one path → many DECs (supersedes chains share their sot_path).
7
+ */
8
+ export declare function emptySotBindings(): SotBindings;
9
+ export declare function readSotBindings(repoRoot: string): SotBindings;
10
+ export declare function writeSotBindings(repoRoot: string, bindings: SotBindings): string;
11
+ export declare function bindDec(bindings: SotBindings, decId: string, sotPath: string): SotBindings;
12
+ export declare function unbindDec(bindings: SotBindings, decId: string): SotBindings;
13
+ export declare function decsForPath(bindings: SotBindings, sotPath: string): string[];
14
+ export declare function pathForDec(bindings: SotBindings, decId: string): string | null;