@isaacriehm/cairn-core 0.5.0 → 0.7.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 (128) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/align-undo/log.d.ts +2 -2
  3. package/dist/align-undo/log.js +80 -17
  4. package/dist/align-undo/log.js.map +1 -1
  5. package/dist/align-undo/undo.d.ts +10 -11
  6. package/dist/align-undo/undo.js +233 -23
  7. package/dist/align-undo/undo.js.map +1 -1
  8. package/dist/attention/bulk-accept.js +65 -37
  9. package/dist/attention/bulk-accept.js.map +1 -1
  10. package/dist/attention/serve/api.js +10 -18
  11. package/dist/attention/serve/api.js.map +1 -1
  12. package/dist/attention/serve/index.js +3 -3
  13. package/dist/attention/serve/index.js.map +1 -1
  14. package/dist/drain/drain.js +4 -4
  15. package/dist/drain/drain.js.map +1 -1
  16. package/dist/fix-align/index.d.ts +2 -0
  17. package/dist/fix-align/index.js +1 -0
  18. package/dist/fix-align/index.js.map +1 -1
  19. package/dist/fix-align/sentinel.d.ts +59 -0
  20. package/dist/fix-align/sentinel.js +149 -0
  21. package/dist/fix-align/sentinel.js.map +1 -0
  22. package/dist/fs.d.ts +5 -0
  23. package/dist/fs.js +11 -0
  24. package/dist/fs.js.map +1 -0
  25. package/dist/gc/apply.js +4 -4
  26. package/dist/gc/apply.js.map +1 -1
  27. package/dist/ground/anchor-map.js +3 -4
  28. package/dist/ground/anchor-map.js.map +1 -1
  29. package/dist/ground/file-candidates-map.d.ts +23 -0
  30. package/dist/ground/file-candidates-map.js +76 -0
  31. package/dist/ground/file-candidates-map.js.map +1 -0
  32. package/dist/ground/frontmatter.d.ts +12 -0
  33. package/dist/ground/frontmatter.js +28 -0
  34. package/dist/ground/frontmatter.js.map +1 -1
  35. package/dist/ground/index.d.ts +6 -4
  36. package/dist/ground/index.js +6 -4
  37. package/dist/ground/index.js.map +1 -1
  38. package/dist/ground/paths.d.ts +2 -0
  39. package/dist/ground/paths.js +6 -0
  40. package/dist/ground/paths.js.map +1 -1
  41. package/dist/ground/rejected.d.ts +42 -0
  42. package/dist/ground/rejected.js +100 -0
  43. package/dist/ground/rejected.js.map +1 -0
  44. package/dist/ground/schemas.d.ts +88 -8
  45. package/dist/ground/schemas.js +73 -19
  46. package/dist/ground/schemas.js.map +1 -1
  47. package/dist/ground/scope-index.js +4 -4
  48. package/dist/ground/scope-index.js.map +1 -1
  49. package/dist/ground/sot-bindings.js +3 -4
  50. package/dist/ground/sot-bindings.js.map +1 -1
  51. package/dist/ground/sot-cache.js +3 -4
  52. package/dist/ground/sot-cache.js.map +1 -1
  53. package/dist/ground/topic-index.d.ts +7 -0
  54. package/dist/ground/topic-index.js +26 -4
  55. package/dist/ground/topic-index.js.map +1 -1
  56. package/dist/hooks/post-tool-use/index.d.ts +1 -1
  57. package/dist/hooks/post-tool-use/index.js +1 -1
  58. package/dist/hooks/post-tool-use/index.js.map +1 -1
  59. package/dist/hooks/post-tool-use/ledger-cache.d.ts +13 -0
  60. package/dist/hooks/post-tool-use/ledger-cache.js +48 -0
  61. package/dist/hooks/post-tool-use/ledger-cache.js.map +1 -1
  62. package/dist/hooks/post-tool-use/legend-builder.d.ts +10 -1
  63. package/dist/hooks/post-tool-use/legend-builder.js +27 -2
  64. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  65. package/dist/hooks/post-tool-use/read-enricher.js +8 -2
  66. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
  67. package/dist/hooks/post-tool-use/sot-align.js +11 -16
  68. package/dist/hooks/post-tool-use/sot-align.js.map +1 -1
  69. package/dist/hooks/pre-commit/sot-align-precommit.js +3 -3
  70. package/dist/hooks/pre-commit/sot-align-precommit.js.map +1 -1
  71. package/dist/init/index.d.ts +2 -2
  72. package/dist/init/index.js +1 -1
  73. package/dist/init/index.js.map +1 -1
  74. package/dist/init/ingest-docs.d.ts +82 -22
  75. package/dist/init/ingest-docs.js +632 -108
  76. package/dist/init/ingest-docs.js.map +1 -1
  77. package/dist/init/init.d.ts +10 -1
  78. package/dist/init/init.js +113 -251
  79. package/dist/init/init.js.map +1 -1
  80. package/dist/init/mapper-parallel.js +8 -0
  81. package/dist/init/mapper-parallel.js.map +1 -1
  82. package/dist/init/mapper.js +6 -6
  83. package/dist/init/mapper.js.map +1 -1
  84. package/dist/init/phases/6-docs-ingest.d.ts +9 -4
  85. package/dist/init/phases/6-docs-ingest.js +13 -10
  86. package/dist/init/phases/6-docs-ingest.js.map +1 -1
  87. package/dist/init/phases/parallel-678.js +10 -4
  88. package/dist/init/phases/parallel-678.js.map +1 -1
  89. package/dist/init/sot-emit.d.ts +22 -0
  90. package/dist/init/sot-emit.js +51 -9
  91. package/dist/init/sot-emit.js.map +1 -1
  92. package/dist/init/source-comments/ingest.js +107 -7
  93. package/dist/init/source-comments/ingest.js.map +1 -1
  94. package/dist/init/topic-index/index.d.ts +14 -0
  95. package/dist/init/topic-index/index.js +83 -4
  96. package/dist/init/topic-index/index.js.map +1 -1
  97. package/dist/init/topic-index/judge.js +14 -1
  98. package/dist/init/topic-index/judge.js.map +1 -1
  99. package/dist/init/topic-index/resolve.d.ts +19 -0
  100. package/dist/init/topic-index/resolve.js +100 -14
  101. package/dist/init/topic-index/resolve.js.map +1 -1
  102. package/dist/init/topic-index/walk.d.ts +32 -0
  103. package/dist/init/topic-index/walk.js +70 -4
  104. package/dist/init/topic-index/walk.js.map +1 -1
  105. package/dist/mcp/history/summarizer.js +5 -0
  106. package/dist/mcp/history/summarizer.js.map +1 -1
  107. package/dist/mcp/schemas.d.ts +48 -0
  108. package/dist/mcp/schemas.js +43 -0
  109. package/dist/mcp/schemas.js.map +1 -1
  110. package/dist/mcp/tools/index.d.ts +1 -1
  111. package/dist/mcp/tools/index.js +8 -0
  112. package/dist/mcp/tools/index.js.map +1 -1
  113. package/dist/mcp/tools/init-phases.js.map +1 -1
  114. package/dist/mcp/tools/propose-decision.d.ts +34 -0
  115. package/dist/mcp/tools/propose-decision.js +200 -0
  116. package/dist/mcp/tools/propose-decision.js.map +1 -0
  117. package/dist/mcp/tools/record-decision.js +5 -2
  118. package/dist/mcp/tools/record-decision.js.map +1 -1
  119. package/dist/mcp/tools/reject-candidate.d.ts +24 -0
  120. package/dist/mcp/tools/reject-candidate.js +71 -0
  121. package/dist/mcp/tools/reject-candidate.js.map +1 -0
  122. package/dist/mcp/tools/resolve-attention.js +7 -54
  123. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  124. package/dist/mcp/tools/search-candidates.d.ts +20 -0
  125. package/dist/mcp/tools/search-candidates.js +93 -0
  126. package/dist/mcp/tools/search-candidates.js.map +1 -0
  127. package/package.json +1 -1
  128. package/templates/attention-ui/app.js +40 -3
@@ -42,7 +42,7 @@ export declare const AlignUndoEntry: z.ZodObject<{
42
42
  }, z.core.$strip>;
43
43
  export type AlignUndoEntry = z.infer<typeof AlignUndoEntry>;
44
44
  export declare function alignUndoLogPath(repoRoot: string): string;
45
- export declare function appendAlignUndoEntry(repoRoot: string, entry: AlignUndoEntry): void;
45
+ export declare function appendAlignUndoEntry(repoRoot: string, entry: AlignUndoEntry): Promise<void>;
46
46
  export declare function readAlignUndoLog(repoRoot: string): AlignUndoEntry[];
47
47
  /**
48
48
  * Rewrite the undo log keeping only the entries NOT in `undone`.
@@ -50,4 +50,4 @@ export declare function readAlignUndoLog(repoRoot: string): AlignUndoEntry[];
50
50
  * on the same window does nothing the second time because the entries
51
51
  * inside the window have already been removed.
52
52
  */
53
- export declare function pruneAlignUndoLog(repoRoot: string, remaining: AlignUndoEntry[]): void;
53
+ export declare function pruneAlignUndoLog(repoRoot: string, remaining: AlignUndoEntry[]): Promise<void>;
@@ -21,11 +21,23 @@
21
21
  import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
22
22
  import { dirname, join } from "node:path";
23
23
  import { z } from "zod";
24
+ import { withWriteLock } from "../lock.js";
24
25
  import { logger } from "../logger.js";
25
26
  const log = logger("align-undo.log");
27
+ /**
28
+ * Drop entries older than this on the next append + GC sweep. Operators
29
+ * who never run `cairn attention undo` would otherwise accumulate one
30
+ * line per Layer A auto-resolution forever.
31
+ */
32
+ const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
33
+ /**
34
+ * Skip the read-rewrite GC pass when the log is below this line count
35
+ * — steady-state operators don't pay for the read on every append.
36
+ */
37
+ const GC_THRESHOLD_LINES = 256;
26
38
  export const AlignUndoEntry = z.object({
27
39
  ts: z.string(),
28
- session_id: z.string().nullable().optional(),
40
+ session_id: z.string().nullish(),
29
41
  kind: z.enum(["tier1-cite", "tier2-cite", "tier3-creation", "augments"]),
30
42
  file: z.string(),
31
43
  start_offset: z.number(),
@@ -44,16 +56,63 @@ export const AlignUndoEntry = z.object({
44
56
  export function alignUndoLogPath(repoRoot) {
45
57
  return join(repoRoot, ".cairn", "state", "align-undo-log.jsonl");
46
58
  }
47
- export function appendAlignUndoEntry(repoRoot, entry) {
59
+ export async function appendAlignUndoEntry(repoRoot, entry) {
48
60
  const validated = AlignUndoEntry.parse(entry);
49
61
  const path = alignUndoLogPath(repoRoot);
62
+ // Wrap the read-trim-append cycle in the project write lock so two
63
+ // concurrent Layer A invocations (or a session running `cairn
64
+ // attention undo` in another shell) can't interleave a partial
65
+ // append against a rewrite.
66
+ await withWriteLock(repoRoot, () => {
67
+ try {
68
+ mkdirSync(dirname(path), { recursive: true });
69
+ const remaining = sweepStale(path);
70
+ if (remaining === null) {
71
+ appendFileSync(path, `${JSON.stringify(validated)}\n`, "utf8");
72
+ return;
73
+ }
74
+ remaining.push(validated);
75
+ writeFileSync(path, `${remaining.map((e) => JSON.stringify(e)).join("\n")}\n`, "utf8");
76
+ }
77
+ catch (err) {
78
+ log.warn({ err: err instanceof Error ? err.message : String(err) }, "align-undo log append failed");
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Read the current log and drop entries older than `MAX_AGE_MS`.
84
+ * Returns the surviving entries when a GC pass actually ran, or `null`
85
+ * when the log is small enough to skip the rewrite (cheap append path).
86
+ */
87
+ function sweepStale(path) {
88
+ if (!existsSync(path))
89
+ return null;
90
+ let text;
50
91
  try {
51
- mkdirSync(dirname(path), { recursive: true });
52
- appendFileSync(path, `${JSON.stringify(validated)}\n`, "utf8");
92
+ text = readFileSync(path, "utf8");
53
93
  }
54
- catch (err) {
55
- log.warn({ err: err instanceof Error ? err.message : String(err) }, "align-undo log append failed");
94
+ catch {
95
+ return null;
56
96
  }
97
+ if (text.trim().length === 0)
98
+ return null;
99
+ const lines = text.split("\n").filter((line) => line.trim().length > 0);
100
+ if (lines.length < GC_THRESHOLD_LINES)
101
+ return null;
102
+ const cutoff = Date.now() - MAX_AGE_MS;
103
+ const surviving = [];
104
+ for (const line of lines) {
105
+ try {
106
+ const parsed = AlignUndoEntry.parse(JSON.parse(line));
107
+ const ts = Date.parse(parsed.ts);
108
+ if (Number.isFinite(ts) && ts >= cutoff)
109
+ surviving.push(parsed);
110
+ }
111
+ catch {
112
+ // Drop malformed entries on this GC pass.
113
+ }
114
+ }
115
+ return surviving;
57
116
  }
58
117
  export function readAlignUndoLog(repoRoot) {
59
118
  const path = alignUndoLogPath(repoRoot);
@@ -82,18 +141,22 @@ export function readAlignUndoLog(repoRoot) {
82
141
  * on the same window does nothing the second time because the entries
83
142
  * inside the window have already been removed.
84
143
  */
85
- export function pruneAlignUndoLog(repoRoot, remaining) {
144
+ export async function pruneAlignUndoLog(repoRoot, remaining) {
86
145
  const path = alignUndoLogPath(repoRoot);
87
- try {
88
- mkdirSync(dirname(path), { recursive: true });
89
- if (remaining.length === 0) {
90
- writeFileSync(path, "", "utf8");
91
- return;
146
+ // Lock so a concurrent `appendAlignUndoEntry` from a parallel Layer A
147
+ // hook can't slip a write between our read and rewrite.
148
+ await withWriteLock(repoRoot, () => {
149
+ try {
150
+ mkdirSync(dirname(path), { recursive: true });
151
+ if (remaining.length === 0) {
152
+ writeFileSync(path, "", "utf8");
153
+ return;
154
+ }
155
+ writeFileSync(path, `${remaining.map((e) => JSON.stringify(e)).join("\n")}\n`, "utf8");
92
156
  }
93
- writeFileSync(path, `${remaining.map((e) => JSON.stringify(e)).join("\n")}\n`, "utf8");
94
- }
95
- catch (err) {
96
- log.warn({ err: err instanceof Error ? err.message : String(err) }, "align-undo log prune failed");
97
- }
157
+ catch (err) {
158
+ log.warn({ err: err instanceof Error ? err.message : String(err) }, "align-undo log prune failed");
159
+ }
160
+ });
98
161
  }
99
162
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/align-undo/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/align-undo/log.ts"],"names":[],"mappings":"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"}
@@ -6,23 +6,22 @@
6
6
  * <duration>` (default 1h); only entries within the window are
7
7
  * undone, the rest stay in the log.
8
8
  *
9
- * Currently reverses:
9
+ * Reverses:
10
10
  *
11
11
  * - `tier1-cite` / `tier2-cite` — find the cite line in the current
12
12
  * source, swap it back for the original prose block. Idempotent
13
13
  * when the source has been hand-edited away from the cite already.
14
14
  *
15
- * Out of scope for v0.5.0 (deferred to v0.6 — these need targeted
16
- * ledger surgery + sotBindings/sotCache rollback):
15
+ * - `tier3-creation` delete the freshly-emitted DEC/INV file, drop
16
+ * its sot-bindings / sot-cache entries, clear the topic-index
17
+ * reference, refresh the affected ledger, and restore the source
18
+ * prose at the recorded offsets. All mutations run under
19
+ * `withWriteLock` so a parallel Layer A hook can't slip in
20
+ * mid-rollback.
17
21
  *
18
- * - `tier3-creation` — would need to delete the DEC/INV file, drop
19
- * its sotBindings / sotCache / topic-index entries, refresh the
20
- * ledger, and restore the source. Reported in the undo summary
21
- * so the operator can hand-resolve.
22
- *
23
- * - `augments` — would need to delete the sibling DEC/INV and
24
- * remove its cite from the double-cite while keeping the
25
- * existing-id cite in place.
22
+ * - `augments` — delete the sibling DEC/INV (steps mirror
23
+ * tier3-creation), then trim the double-cite line in source down to
24
+ * the existing-id cite (the augmented entity stays referenced).
26
25
  *
27
26
  * Idempotent: the runner truncates undone entries from the log so a
28
27
  * second invocation against the same window is a no-op.
@@ -6,29 +6,31 @@
6
6
  * <duration>` (default 1h); only entries within the window are
7
7
  * undone, the rest stay in the log.
8
8
  *
9
- * Currently reverses:
9
+ * Reverses:
10
10
  *
11
11
  * - `tier1-cite` / `tier2-cite` — find the cite line in the current
12
12
  * source, swap it back for the original prose block. Idempotent
13
13
  * when the source has been hand-edited away from the cite already.
14
14
  *
15
- * Out of scope for v0.5.0 (deferred to v0.6 — these need targeted
16
- * ledger surgery + sotBindings/sotCache rollback):
15
+ * - `tier3-creation` delete the freshly-emitted DEC/INV file, drop
16
+ * its sot-bindings / sot-cache entries, clear the topic-index
17
+ * reference, refresh the affected ledger, and restore the source
18
+ * prose at the recorded offsets. All mutations run under
19
+ * `withWriteLock` so a parallel Layer A hook can't slip in
20
+ * mid-rollback.
17
21
  *
18
- * - `tier3-creation` — would need to delete the DEC/INV file, drop
19
- * its sotBindings / sotCache / topic-index entries, refresh the
20
- * ledger, and restore the source. Reported in the undo summary
21
- * so the operator can hand-resolve.
22
- *
23
- * - `augments` — would need to delete the sibling DEC/INV and
24
- * remove its cite from the double-cite while keeping the
25
- * existing-id cite in place.
22
+ * - `augments` — delete the sibling DEC/INV (steps mirror
23
+ * tier3-creation), then trim the double-cite line in source down to
24
+ * the existing-id cite (the augmented entity stays referenced).
26
25
  *
27
26
  * Idempotent: the runner truncates undone entries from the log so a
28
27
  * second invocation against the same window is a no-op.
29
28
  */
30
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
29
+ import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
31
30
  import { join } from "node:path";
31
+ import { clearDecFromTopicIndex, decisionsDir, deleteSotCacheEntry, invariantsDir, readSotBindings, readSotCache, readTopicIndex, unbindDec, writeSotBindings, writeSotCache, writeTopicIndex, } from "../ground/index.js";
32
+ import { writeDecisionsLedger, writeInvariantsLedger } from "../ground/ledgers.js";
33
+ import { withWriteLock } from "../lock.js";
32
34
  import { logger } from "../logger.js";
33
35
  import { pruneAlignUndoLog, readAlignUndoLog, } from "./log.js";
34
36
  const log = logger("align-undo.runner");
@@ -58,7 +60,7 @@ export async function runAttentionUndo(args) {
58
60
  // operator intent ("undo my last 5 minutes of cites").
59
61
  inside.sort((a, b) => Date.parse(b.ts) - Date.parse(a.ts));
60
62
  for (const entry of inside) {
61
- outcomes.push(reverseEntry(repoRoot, entry, dryRun));
63
+ outcomes.push(await reverseEntry(repoRoot, entry, dryRun));
62
64
  }
63
65
  const result = {
64
66
  windowEntries: inside.length,
@@ -80,23 +82,23 @@ export async function runAttentionUndo(args) {
80
82
  .filter((o) => o.status === "not-supported" || o.status === "error")
81
83
  .map((o) => o.entry),
82
84
  ];
83
- pruneAlignUndoLog(repoRoot, keep);
85
+ await pruneAlignUndoLog(repoRoot, keep);
84
86
  }
85
87
  return result;
86
88
  }
87
89
  /* -------------------------------------------------------------------------- */
88
90
  /* Per-entry reversal */
89
91
  /* -------------------------------------------------------------------------- */
90
- function reverseEntry(repoRoot, entry, dryRun) {
91
- if (entry.kind === "tier3-creation" || entry.kind === "augments") {
92
- return {
93
- entry,
94
- status: "not-supported",
95
- detail: entry.kind === "tier3-creation"
96
- ? "fresh DEC/INV creation undo deferred to v0.6 — manually delete the entity file and restore the source block"
97
- : "augments-sibling undo deferred to v0.6 — manually delete the sibling and trim the double-cite",
98
- };
92
+ async function reverseEntry(repoRoot, entry, dryRun) {
93
+ if (entry.kind === "tier3-creation") {
94
+ return reverseTier3Creation(repoRoot, entry, dryRun);
95
+ }
96
+ if (entry.kind === "augments") {
97
+ return reverseAugments(repoRoot, entry, dryRun);
99
98
  }
99
+ return reverseCite(repoRoot, entry, dryRun);
100
+ }
101
+ function reverseCite(repoRoot, entry, dryRun) {
100
102
  const abs = join(repoRoot, entry.file);
101
103
  if (!existsSync(abs)) {
102
104
  return { entry, status: "source-missing", detail: `${entry.file} no longer exists` };
@@ -153,6 +155,214 @@ function reverseEntry(repoRoot, entry, dryRun) {
153
155
  }
154
156
  return { entry, status: "reverted", detail: `${entry.file}` };
155
157
  }
158
+ /**
159
+ * Reverse a tier3-creation undo entry — Layer A spawned a fresh
160
+ * DEC/INV from this prose block, strip-replaced the source with a
161
+ * cite. Rolling back deletes the entity file, drops every sot-state
162
+ * surface that referenced it, and restores the source block.
163
+ */
164
+ async function reverseTier3Creation(repoRoot, entry, dryRun) {
165
+ const kind = derivePrimaryKind(entry);
166
+ const entityDir = kind === "INV" ? invariantsDir(repoRoot) : decisionsDir(repoRoot);
167
+ const entityPath = join(entityDir, `${entry.primary_id}.md`);
168
+ const sourceCheck = checkSourceForReversal(repoRoot, entry);
169
+ if (sourceCheck.status !== "ready") {
170
+ const { status, detail } = sourceCheck;
171
+ return { entry, status, detail };
172
+ }
173
+ if (dryRun) {
174
+ return {
175
+ entry,
176
+ status: "reverted",
177
+ detail: `[dry-run] would delete ${kind === "INV" ? "INV" : "DEC"} ${entry.primary_id} + restore ${entry.file}`,
178
+ };
179
+ }
180
+ try {
181
+ await withWriteLock(repoRoot, () => {
182
+ // Source restore first so a partial failure doesn't leave the
183
+ // operator with an orphaned cite pointing at a deleted entity.
184
+ writeFileSync(sourceCheck.absSource, sourceCheck.next, "utf8");
185
+ // Entity removal — `force: true` so an already-deleted file is a no-op.
186
+ rmSync(entityPath, { force: true });
187
+ let bindings = readSotBindings(repoRoot);
188
+ const nextBindings = unbindDec(bindings, entry.primary_id);
189
+ if (nextBindings !== bindings) {
190
+ bindings = nextBindings;
191
+ writeSotBindings(repoRoot, bindings);
192
+ }
193
+ let cache = readSotCache(repoRoot);
194
+ const nextCache = deleteSotCacheEntry(cache, entry.primary_id);
195
+ if (nextCache !== cache) {
196
+ cache = nextCache;
197
+ writeSotCache(repoRoot, cache);
198
+ }
199
+ let topics = readTopicIndex(repoRoot);
200
+ const nextTopics = clearDecFromTopicIndex(topics, entry.primary_id);
201
+ if (nextTopics !== topics) {
202
+ topics = nextTopics;
203
+ writeTopicIndex(repoRoot, topics);
204
+ }
205
+ if (kind === "INV") {
206
+ writeInvariantsLedger({ repoRoot });
207
+ }
208
+ else {
209
+ writeDecisionsLedger({ repoRoot });
210
+ }
211
+ });
212
+ }
213
+ catch (err) {
214
+ log.warn({ file: entry.file, primary_id: entry.primary_id, err: err instanceof Error ? err.message : String(err) }, "tier3-creation undo failed");
215
+ return {
216
+ entry,
217
+ status: "error",
218
+ detail: `tier3-creation undo failed: ${err instanceof Error ? err.message : String(err)}`,
219
+ };
220
+ }
221
+ return {
222
+ entry,
223
+ status: "reverted",
224
+ detail: `deleted ${kind} ${entry.primary_id} + restored ${entry.file}`,
225
+ };
226
+ }
227
+ /**
228
+ * Reverse an augments undo entry — Layer A emitted a sibling DEC/INV
229
+ * alongside an existing one and stamped the source with a double-cite
230
+ * (`// §existing\n// §new`). Rolling back deletes the sibling and
231
+ * trims the source line down to the existing cite.
232
+ */
233
+ async function reverseAugments(repoRoot, entry, dryRun) {
234
+ const kind = derivePrimaryKind(entry);
235
+ const entityDir = kind === "INV" ? invariantsDir(repoRoot) : decisionsDir(repoRoot);
236
+ const entityPath = join(entityDir, `${entry.primary_id}.md`);
237
+ // The replacement is `<existingCite>\n<newCite>` — first line is the
238
+ // cite we want to keep, second line is the sibling cite to drop.
239
+ const replacement = entry.replacement.trimEnd();
240
+ const newlineIdx = replacement.indexOf("\n");
241
+ if (newlineIdx === -1) {
242
+ return {
243
+ entry,
244
+ status: "error",
245
+ detail: `augments replacement missing newline boundary: ${replacement}`,
246
+ };
247
+ }
248
+ const keepCite = replacement.slice(0, newlineIdx);
249
+ const sourceAbs = join(repoRoot, entry.file);
250
+ if (!existsSync(sourceAbs)) {
251
+ return { entry, status: "source-missing", detail: `${entry.file} no longer exists` };
252
+ }
253
+ let source;
254
+ try {
255
+ source = readFileSync(sourceAbs, "utf8");
256
+ }
257
+ catch (err) {
258
+ return {
259
+ entry,
260
+ status: "error",
261
+ detail: `cannot read ${entry.file}: ${err instanceof Error ? err.message : String(err)}`,
262
+ };
263
+ }
264
+ const idx = source.indexOf(replacement);
265
+ if (idx === -1) {
266
+ return {
267
+ entry,
268
+ status: "already-reverted",
269
+ detail: `double-cite "${replacement.trim()}" not found in ${entry.file}`,
270
+ };
271
+ }
272
+ const next = `${source.slice(0, idx)}${keepCite}${source.slice(idx + replacement.length)}`;
273
+ if (dryRun) {
274
+ return {
275
+ entry,
276
+ status: "reverted",
277
+ detail: `[dry-run] would delete sibling ${kind} ${entry.primary_id} + trim double-cite in ${entry.file}`,
278
+ };
279
+ }
280
+ try {
281
+ await withWriteLock(repoRoot, () => {
282
+ writeFileSync(sourceAbs, next, "utf8");
283
+ rmSync(entityPath, { force: true });
284
+ let bindings = readSotBindings(repoRoot);
285
+ const nextBindings = unbindDec(bindings, entry.primary_id);
286
+ if (nextBindings !== bindings) {
287
+ bindings = nextBindings;
288
+ writeSotBindings(repoRoot, bindings);
289
+ }
290
+ let cache = readSotCache(repoRoot);
291
+ const nextCache = deleteSotCacheEntry(cache, entry.primary_id);
292
+ if (nextCache !== cache) {
293
+ cache = nextCache;
294
+ writeSotCache(repoRoot, cache);
295
+ }
296
+ let topics = readTopicIndex(repoRoot);
297
+ const nextTopics = clearDecFromTopicIndex(topics, entry.primary_id);
298
+ if (nextTopics !== topics) {
299
+ topics = nextTopics;
300
+ writeTopicIndex(repoRoot, topics);
301
+ }
302
+ if (kind === "INV") {
303
+ writeInvariantsLedger({ repoRoot });
304
+ }
305
+ else {
306
+ writeDecisionsLedger({ repoRoot });
307
+ }
308
+ });
309
+ }
310
+ catch (err) {
311
+ log.warn({ file: entry.file, primary_id: entry.primary_id, err: err instanceof Error ? err.message : String(err) }, "augments undo failed");
312
+ return {
313
+ entry,
314
+ status: "error",
315
+ detail: `augments undo failed: ${err instanceof Error ? err.message : String(err)}`,
316
+ };
317
+ }
318
+ return {
319
+ entry,
320
+ status: "reverted",
321
+ detail: `deleted sibling ${kind} ${entry.primary_id} + trimmed double-cite in ${entry.file}`,
322
+ };
323
+ }
324
+ /**
325
+ * Helper for tier3-creation: precompute the source-restore content so
326
+ * a missing source surfaces before we touch the entity files. Returns
327
+ * the restored source text + abs path on success, or a non-`reverted`
328
+ * outcome status.
329
+ */
330
+ function checkSourceForReversal(repoRoot, entry) {
331
+ const abs = join(repoRoot, entry.file);
332
+ if (!existsSync(abs)) {
333
+ return { status: "source-missing", detail: `${entry.file} no longer exists` };
334
+ }
335
+ let source;
336
+ try {
337
+ source = readFileSync(abs, "utf8");
338
+ }
339
+ catch (err) {
340
+ return {
341
+ status: "error",
342
+ detail: `cannot read ${entry.file}: ${err instanceof Error ? err.message : String(err)}`,
343
+ };
344
+ }
345
+ const replacement = entry.replacement.trimEnd();
346
+ const idx = source.indexOf(replacement);
347
+ if (idx === -1) {
348
+ return {
349
+ status: "already-reverted",
350
+ detail: `cite "${replacement.trim()}" not found in ${entry.file}`,
351
+ };
352
+ }
353
+ const lineStart = source.lastIndexOf("\n", idx) + 1;
354
+ const lineEnd = source.indexOf("\n", idx + replacement.length);
355
+ const cutEnd = lineEnd === -1 ? source.length : lineEnd;
356
+ const indent = source.slice(lineStart, idx);
357
+ const reflowedOriginal = reapplyIndent(entry.original_raw, indent);
358
+ const next = `${source.slice(0, lineStart)}${reflowedOriginal}${source.slice(cutEnd)}`;
359
+ return { status: "ready", absSource: abs, next };
360
+ }
361
+ function derivePrimaryKind(entry) {
362
+ if (entry.primary_kind !== undefined)
363
+ return entry.primary_kind;
364
+ return entry.primary_id.startsWith("INV-") ? "INV" : "DEC";
365
+ }
156
366
  /**
157
367
  * Re-apply the leading indent that the cite line carried so the
158
368
  * restored original block lines up at the right column. Most blocks'
@@ -1 +1 @@
1
- {"version":3,"file":"undo.js","sourceRoot":"","sources":["../../src/align-undo/undo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"undo.js","sourceRoot":"","sources":["../../src/align-undo/undo.ts"],"names":[],"mappings":"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"}