@isaacriehm/cairn-core 0.24.0 → 0.26.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.
@@ -145,8 +145,7 @@ export function renderAnnotateHint(asks) {
145
145
  `category:${catHint}, purpose:"<one line>", aliases:["…","…"] })\``);
146
146
  }
147
147
  lines.push("");
148
- lines.push("The pre-commit component check blocks the commit until each is registered. " +
149
- "Surface at a natural stopping point; you supply category/purpose/aliases, the server writes + validates the header.");
148
+ lines.push("Pre-commit check blocks the commit until each is registered — surface at a natural stopping point.");
150
149
  return lines.join("\n");
151
150
  }
152
151
  //# sourceMappingURL=annotate-surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotate-surface.js","sourceRoot":"","sources":["../../../src/hooks/runners/annotate-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"annotate-surface.js","sourceRoot":"","sources":["../../../src/hooks/runners/annotate-surface.ts"],"names":[],"mappings":"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"}
@@ -43,13 +43,26 @@ export interface RunBrandSetupOptions {
43
43
  * Ctrl+C / EOF — the partial answers up to the abort are returned.
44
44
  */
45
45
  export declare function runBrandSetup(opts: RunBrandSetupOptions): Promise<BrandAnswers>;
46
+ export interface ApplyBrandOptions {
47
+ /**
48
+ * Flip each written file's `status` to `current` (operator-confirmed).
49
+ * Default true — the interactive wizard collects the operator's own
50
+ * words. The Phase-6 AUTO-DERIVE path passes false: machine-written
51
+ * brand stays `status: draft`, which SessionStart does NOT inject, so
52
+ * a generic first draft never pollutes context as authoritative voice.
53
+ * The operator confirms a draft by editing the file (or re-running the
54
+ * interactive setup), which flips it to `current`.
55
+ */
56
+ markCurrent?: boolean;
57
+ }
46
58
  /**
47
- * Apply answers to the seeded templates. Empty answers are no-ops; only
48
- * answered files flip from `status: draft` to `status: current`.
59
+ * Apply answers to the seeded templates. Empty answers are no-ops. When
60
+ * `markCurrent` (default) the answered files flip `draft current`;
61
+ * the auto-derive path passes `markCurrent: false` to keep them `draft`.
49
62
  *
50
63
  * Returns the list of files that were actually rewritten.
51
64
  */
52
- export declare function applyBrandAnswers(repoRoot: string, answers: BrandAnswers): {
65
+ export declare function applyBrandAnswers(repoRoot: string, answers: BrandAnswers, opts?: ApplyBrandOptions): {
53
66
  updated: string[];
54
67
  warnings: string[];
55
68
  };
@@ -66,17 +66,19 @@ async function ask(rl, prompt) {
66
66
  return reply.trim();
67
67
  }
68
68
  /**
69
- * Apply answers to the seeded templates. Empty answers are no-ops; only
70
- * answered files flip from `status: draft` to `status: current`.
69
+ * Apply answers to the seeded templates. Empty answers are no-ops. When
70
+ * `markCurrent` (default) the answered files flip `draft current`;
71
+ * the auto-derive path passes `markCurrent: false` to keep them `draft`.
71
72
  *
72
73
  * Returns the list of files that were actually rewritten.
73
74
  */
74
- export function applyBrandAnswers(repoRoot, answers) {
75
+ export function applyBrandAnswers(repoRoot, answers, opts = {}) {
76
+ const markCurrent = opts.markCurrent ?? true;
75
77
  const updated = [];
76
78
  const warnings = [];
77
79
  if (answers.whatItDoes.length > 0) {
78
80
  const rel = ".cairn/ground/product/positioning.md";
79
- const ok = rewriteWithBody(join(repoRoot, rel), answers.whatItDoes, warnings, rel);
81
+ const ok = rewriteWithBody(join(repoRoot, rel), answers.whatItDoes, warnings, rel, markCurrent);
80
82
  if (ok)
81
83
  updated.push(rel);
82
84
  // Also pre-fill brand/overview.md with the same domain summary —
@@ -85,31 +87,31 @@ export function applyBrandAnswers(repoRoot, answers) {
85
87
  // Operator can diverge overview vs. positioning later; until
86
88
  // then they share content.
87
89
  const overviewRel = ".cairn/ground/brand/overview.md";
88
- const overviewOk = rewriteWithBody(join(repoRoot, overviewRel), answers.whatItDoes, warnings, overviewRel);
90
+ const overviewOk = rewriteWithBody(join(repoRoot, overviewRel), answers.whatItDoes, warnings, overviewRel, markCurrent);
89
91
  if (overviewOk)
90
92
  updated.push(overviewRel);
91
93
  }
92
94
  if (answers.personas !== undefined && answers.personas.length > 0) {
93
95
  const rel = ".cairn/ground/product/personas.yaml";
94
- const ok = rewritePersonasStructured(join(repoRoot, rel), answers.personas, warnings, rel);
96
+ const ok = rewritePersonasStructured(join(repoRoot, rel), answers.personas, warnings, rel, markCurrent);
95
97
  if (ok)
96
98
  updated.push(rel);
97
99
  }
98
100
  else if (answers.mainUsers.length > 0) {
99
101
  const rel = ".cairn/ground/product/personas.yaml";
100
- const ok = rewritePersonas(join(repoRoot, rel), answers.mainUsers, warnings, rel);
102
+ const ok = rewritePersonas(join(repoRoot, rel), answers.mainUsers, warnings, rel, markCurrent);
101
103
  if (ok)
102
104
  updated.push(rel);
103
105
  }
104
106
  if (answers.voice.length > 0 || answers.avoid.length > 0) {
105
107
  const rel = ".cairn/ground/brand/voice.md";
106
- const ok = rewriteVoice(join(repoRoot, rel), answers.voice, answers.avoid, warnings, rel);
108
+ const ok = rewriteVoice(join(repoRoot, rel), answers.voice, answers.avoid, warnings, rel, markCurrent);
107
109
  if (ok)
108
110
  updated.push(rel);
109
111
  }
110
112
  return { updated, warnings };
111
113
  }
112
- function rewriteWithBody(abs, body, warnings, rel) {
114
+ function rewriteWithBody(abs, body, warnings, rel, markCurrent) {
113
115
  if (!existsSync(abs)) {
114
116
  warnings.push(`brand-setup: ${rel} missing — skipping`);
115
117
  return false;
@@ -122,7 +124,7 @@ function rewriteWithBody(abs, body, warnings, rel) {
122
124
  warnings.push(`brand-setup: ${rel} unreadable: ${stringifyErr(err)}`);
123
125
  return false;
124
126
  }
125
- const flipped = flipStatus(text);
127
+ const flipped = flipStatus(text, markCurrent);
126
128
  const out = replaceBodyAfterFrontmatter(flipped, body);
127
129
  try {
128
130
  writeFileSync(abs, out, "utf8");
@@ -133,14 +135,14 @@ function rewriteWithBody(abs, body, warnings, rel) {
133
135
  }
134
136
  return true;
135
137
  }
136
- function rewritePersonas(abs, description, warnings, rel) {
138
+ function rewritePersonas(abs, description, warnings, rel, markCurrent) {
137
139
  if (!existsSync(abs)) {
138
140
  warnings.push(`brand-setup: ${rel} missing — skipping`);
139
141
  return false;
140
142
  }
141
143
  const next = `# Product personas — who this is for. Read at every SessionStart.\n` +
142
144
  `# See DOCS_SPEC.md §3.4 for shape.\n` +
143
- `status: current\n` +
145
+ `status: ${markCurrent ? "current" : "draft"}\n` +
144
146
  `personas:\n` +
145
147
  ` - name: primary\n` +
146
148
  ` description: ${yamlSingleLine(description)}\n`;
@@ -159,7 +161,7 @@ function rewritePersonas(abs, description, warnings, rel) {
159
161
  * still uses `rewritePersonas` (single freeform sentence collapses
160
162
  * to one `name: primary`).
161
163
  */
162
- function rewritePersonasStructured(abs, personas, warnings, rel) {
164
+ function rewritePersonasStructured(abs, personas, warnings, rel, markCurrent) {
163
165
  if (!existsSync(abs)) {
164
166
  warnings.push(`brand-setup: ${rel} missing — skipping`);
165
167
  return false;
@@ -167,7 +169,7 @@ function rewritePersonasStructured(abs, personas, warnings, rel) {
167
169
  const lines = [];
168
170
  lines.push(`# Product personas — who this is for. Read at every SessionStart.`);
169
171
  lines.push(`# See DOCS_SPEC.md §3.4 for shape.`);
170
- lines.push(`status: current`);
172
+ lines.push(`status: ${markCurrent ? "current" : "draft"}`);
171
173
  lines.push(`personas:`);
172
174
  for (const p of personas) {
173
175
  lines.push(` - name: ${p.name}`);
@@ -182,7 +184,7 @@ function rewritePersonasStructured(abs, personas, warnings, rel) {
182
184
  }
183
185
  return true;
184
186
  }
185
- function rewriteVoice(abs, body, avoid, warnings, rel) {
187
+ function rewriteVoice(abs, body, avoid, warnings, rel, markCurrent) {
186
188
  if (!existsSync(abs)) {
187
189
  warnings.push(`brand-setup: ${rel} missing — skipping`);
188
190
  return false;
@@ -195,7 +197,7 @@ function rewriteVoice(abs, body, avoid, warnings, rel) {
195
197
  warnings.push(`brand-setup: ${rel} unreadable: ${stringifyErr(err)}`);
196
198
  return false;
197
199
  }
198
- const flipped = flipStatus(text);
200
+ const flipped = flipStatus(text, markCurrent);
199
201
  const main = body.length > 0 ? body : "(operator did not specify a voice — fill in later)";
200
202
  const avoidBlock = avoid.length > 0 ? `\n\n## Avoid\n\n${avoid}\n` : "";
201
203
  const out = replaceBodyAfterFrontmatter(flipped, `${main}${avoidBlock}`);
@@ -209,7 +211,12 @@ function rewriteVoice(abs, body, avoid, warnings, rel) {
209
211
  return true;
210
212
  }
211
213
  const FRONTMATTER_RE = /^---\r?\n([\s\S]*?\r?\n)---\r?\n?/;
212
- function flipStatus(text) {
214
+ function flipStatus(text, markCurrent) {
215
+ // Auto-derive path (markCurrent=false) leaves status untouched — the
216
+ // seeded template is `status: draft`, and a machine-written draft must
217
+ // stay draft so SessionStart doesn't inject it as confirmed brand.
218
+ if (!markCurrent)
219
+ return text;
213
220
  const m = text.match(FRONTMATTER_RE);
214
221
  if (!m)
215
222
  return text;
@@ -1 +1 @@
1
- {"version":3,"file":"brand-setup.js","sourceRoot":"","sources":["../../src/init/brand-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand-setup.js","sourceRoot":"","sources":["../../src/init/brand-setup.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,11 @@ export async function runPhase6Brand(state) {
38
38
  voice: DEFAULT_VOICE,
39
39
  avoid: DEFAULT_AVOID,
40
40
  };
41
- result = applyBrandAnswers(state.repoRoot, answers);
41
+ // Machine-written brand is a DRAFT, never confirmed voice.
42
+ // markCurrent:false keeps status:draft so SessionStart doesn't
43
+ // inject a generic first draft as authoritative every session —
44
+ // the operator confirms it by editing the file.
45
+ result = applyBrandAnswers(state.repoRoot, answers, { markCurrent: false });
42
46
  if (derived === null) {
43
47
  result.warnings.push("brand-derive: Haiku timeout/parse fail → using mechanical defaults. Re-run `cairn fix brand` after init.");
44
48
  }
@@ -60,25 +64,25 @@ export async function runPhase6Brand(state) {
60
64
  }
61
65
  const question = {
62
66
  id: "6-brand",
63
- prompt: "Auto-fill brand text (positioning + voice)?",
67
+ prompt: "Want Cairn to draft your project's voice & positioning? It helps your AI assistant write in a tone that matches your project.",
64
68
  options: [
65
69
  {
66
- id: "auto-fill",
67
- label: "yes, auto-fill",
68
- detail: "Use the mapper's domain summary; mark brand files current",
70
+ id: "skip",
71
+ label: "Skip (recommended)",
72
+ detail: "Leave it blank add it later only if you want it",
69
73
  },
70
74
  {
71
- id: "skip",
72
- label: "skip for now",
73
- detail: "Brand files stay as drafts; populate later when ready",
75
+ id: "auto-fill",
76
+ label: "Draft it for me",
77
+ detail: "Cairn writes a starting draft you review; not used until you confirm it",
74
78
  },
75
79
  {
76
80
  id: "manual",
77
- label: "I'll edit the drafts myself",
78
- detail: "Open .cairn/ground/brand/* after adoption to fill in",
81
+ label: "I'll write it myself",
82
+ detail: "You'll fill it in after setup",
79
83
  },
80
84
  ],
81
- default: "auto-fill",
85
+ default: "skip",
82
86
  };
83
87
  return { status: "needs_input", question, state };
84
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"6-brand.js","sourceRoot":"","sources":["../../../src/init/phases/6-brand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"6-brand.js","sourceRoot":"","sources":["../../../src/init/phases/6-brand.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,16 @@ export declare function loadConfigDoc(repoRoot: string): Document | null;
18
18
  export declare function readConfigPin(repoRoot: string, doc?: Document | null): string | null;
19
19
  /** Set the `cairn_version` pin. No-op (returns false) when already equal. */
20
20
  export declare function writeConfigPin(repoRoot: string, version: string): boolean;
21
+ /**
22
+ * Write a mutated config `Document` back to disk. The migration system was
23
+ * built for top-level key edits (drop a dead key, set the pin); content
24
+ * migrations that need to repair a NESTED structure (e.g. collapse a
25
+ * workspace's `componentDirs`) mutate the `Document` via `loadConfigDoc` +
26
+ * `doc.getIn` / `doc.setIn` and persist with this. Whole-file rewrite under
27
+ * the caller's migrate lock; key order + comments are preserved by the yaml
28
+ * Document API. Returns false when the config is absent.
29
+ */
30
+ export declare function writeConfigDoc(repoRoot: string, doc: Document): boolean;
21
31
  /** Which of `keys` are present as top-level config keys. */
22
32
  export declare function configHasKeys(repoRoot: string, keys: readonly string[], doc?: Document | null): string[];
23
33
  /** Delete top-level `keys`; returns the keys actually removed. */
@@ -46,6 +46,22 @@ export function writeConfigPin(repoRoot, version) {
46
46
  writeFileSync(p, doc.toString(), "utf8");
47
47
  return true;
48
48
  }
49
+ /**
50
+ * Write a mutated config `Document` back to disk. The migration system was
51
+ * built for top-level key edits (drop a dead key, set the pin); content
52
+ * migrations that need to repair a NESTED structure (e.g. collapse a
53
+ * workspace's `componentDirs`) mutate the `Document` via `loadConfigDoc` +
54
+ * `doc.getIn` / `doc.setIn` and persist with this. Whole-file rewrite under
55
+ * the caller's migrate lock; key order + comments are preserved by the yaml
56
+ * Document API. Returns false when the config is absent.
57
+ */
58
+ export function writeConfigDoc(repoRoot, doc) {
59
+ const p = configPath(repoRoot);
60
+ if (!existsSync(p))
61
+ return false;
62
+ writeFileSync(p, doc.toString(), "utf8");
63
+ return true;
64
+ }
49
65
  /** Which of `keys` are present as top-level config keys. */
50
66
  export function configHasKeys(repoRoot, keys, doc) {
51
67
  const d = doc !== undefined ? doc : loadConfigDoc(repoRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/migrate/config-io.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/migrate/config-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 0005 — demote auto-filled brand drafts back to `status: draft`.
3
+ *
4
+ * Before 0.25.0, the adoption brand step DEFAULTED to auto-fill and, on
5
+ * apply, flipped each written file `draft → current`. SessionStart then
6
+ * injected every `current` brand file as authoritative voice — so a
7
+ * generic, machine-written first draft (or the mechanical fallback when
8
+ * the Haiku derive timed out) burned context every session as if the
9
+ * operator had confirmed it.
10
+ *
11
+ * 0.25.0 fixed this going forward (auto-fill writes `draft`; SessionStart
12
+ * injects only confirmed brand). This migration repairs EXISTING repos:
13
+ * it finds brand/product docs that are provably auto-generated yet marked
14
+ * `current`/`accepted`, and demotes them to `draft` so they stop being
15
+ * injected. Operator-written brand is left alone; a demoted file is one
16
+ * frontmatter edit (or a re-run of brand setup) away from `current` again.
17
+ *
18
+ * `review`-class: it rewrites committed ground state, so it surfaces for
19
+ * the operator and applies via `cairn migrate` — never silently.
20
+ *
21
+ * Ships in 0.26.0, so `introducedIn` is 0.26.0 (not 0.25.0): a repo whose
22
+ * pin already advanced to 0.25.0 must still re-evaluate it. `detect()`
23
+ * carries correctness.
24
+ */
25
+ import type { Migration } from "../types.js";
26
+ export declare const demoteAutofilledBrand: Migration;
@@ -0,0 +1,153 @@
1
+ /**
2
+ * 0005 — demote auto-filled brand drafts back to `status: draft`.
3
+ *
4
+ * Before 0.25.0, the adoption brand step DEFAULTED to auto-fill and, on
5
+ * apply, flipped each written file `draft → current`. SessionStart then
6
+ * injected every `current` brand file as authoritative voice — so a
7
+ * generic, machine-written first draft (or the mechanical fallback when
8
+ * the Haiku derive timed out) burned context every session as if the
9
+ * operator had confirmed it.
10
+ *
11
+ * 0.25.0 fixed this going forward (auto-fill writes `draft`; SessionStart
12
+ * injects only confirmed brand). This migration repairs EXISTING repos:
13
+ * it finds brand/product docs that are provably auto-generated yet marked
14
+ * `current`/`accepted`, and demotes them to `draft` so they stop being
15
+ * injected. Operator-written brand is left alone; a demoted file is one
16
+ * frontmatter edit (or a re-run of brand setup) away from `current` again.
17
+ *
18
+ * `review`-class: it rewrites committed ground state, so it surfaces for
19
+ * the operator and applies via `cairn migrate` — never silently.
20
+ *
21
+ * Ships in 0.26.0, so `introducedIn` is 0.26.0 (not 0.25.0): a repo whose
22
+ * pin already advanced to 0.25.0 must still re-evaluate it. `detect()`
23
+ * carries correctness.
24
+ */
25
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
26
+ import { cairnDir, parseFrontmatter } from "@isaacriehm/cairn-state";
27
+ /** Distinctive substrings only the pre-0.25.0 mechanical fallback emits. */
28
+ const VOICE_MARKER = "Match the existing tone in CLAUDE.md / AGENTS.md if those files set a register";
29
+ const AVOID_MARKER = 'Marketing fluff ("world-class", "revolutionary", "game-changing")';
30
+ const PERSONAS_MARKER = "Refine when adding consumer-facing or external personas";
31
+ function brandDocs(repoRoot) {
32
+ return [
33
+ { rel: "brand/overview.md", abs: cairnDir(repoRoot, "ground", "brand", "overview.md") },
34
+ { rel: "brand/voice.md", abs: cairnDir(repoRoot, "ground", "brand", "voice.md") },
35
+ { rel: "product/positioning.md", abs: cairnDir(repoRoot, "ground", "product", "positioning.md") },
36
+ { rel: "product/personas.yaml", abs: cairnDir(repoRoot, "ground", "product", "personas.yaml") },
37
+ ];
38
+ }
39
+ function readDoc(abs) {
40
+ if (!existsSync(abs))
41
+ return null;
42
+ let raw;
43
+ try {
44
+ raw = readFileSync(abs, "utf8");
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ // personas.yaml is pure YAML (status as a top-level key, no `---` fence);
50
+ // the brand .md files use frontmatter. parseFrontmatter handles the .md;
51
+ // for the .yaml fall back to a status-line scan over the whole text.
52
+ const parsed = parseFrontmatter(raw);
53
+ const fm = (parsed.frontmatter ?? {});
54
+ let status = typeof fm["status"] === "string" ? fm["status"] : null;
55
+ if (status === null) {
56
+ const m = raw.match(/^status:\s*(\S+)\s*$/m);
57
+ status = m?.[1] ?? null;
58
+ }
59
+ return { status, body: parsed.body, raw };
60
+ }
61
+ const CONFIRMED = new Set(["current", "accepted"]);
62
+ /** Strip headings + collapse whitespace, matching SessionStart's dedup. */
63
+ function normalize(s) {
64
+ return s
65
+ .replace(/^\s*#{1,6}\s+.*$/gm, "")
66
+ .replace(/\s+/g, " ")
67
+ .trim();
68
+ }
69
+ /**
70
+ * Repo-relative labels of confirmed brand docs that are provably the
71
+ * pre-0.25.0 auto-fill output:
72
+ * - voice.md carrying a mechanical-default marker,
73
+ * - personas.yaml carrying the placeholder marker,
74
+ * - overview.md and positioning.md whose bodies are byte-identical
75
+ * (auto-fill wrote the same domain summary to both; a hand-written
76
+ * pair would diverge).
77
+ */
78
+ function autofilledConfirmed(repoRoot) {
79
+ const docs = brandDocs(repoRoot);
80
+ const byRel = new Map();
81
+ for (const d of docs)
82
+ byRel.set(d.rel, readDoc(d.abs));
83
+ const hits = new Set();
84
+ const confirmed = (rel) => {
85
+ const p = byRel.get(rel) ?? null;
86
+ return p !== null && p.status !== null && CONFIRMED.has(p.status) ? p : null;
87
+ };
88
+ const voice = confirmed("brand/voice.md");
89
+ if (voice && (voice.body.includes(VOICE_MARKER) || voice.body.includes(AVOID_MARKER))) {
90
+ hits.add("brand/voice.md");
91
+ }
92
+ const personas = confirmed("product/personas.yaml");
93
+ if (personas && personas.raw.includes(PERSONAS_MARKER)) {
94
+ hits.add("product/personas.yaml");
95
+ }
96
+ const overview = confirmed("brand/overview.md");
97
+ const positioning = confirmed("product/positioning.md");
98
+ if (overview &&
99
+ positioning &&
100
+ normalize(overview.body).length > 0 &&
101
+ normalize(overview.body) === normalize(positioning.body)) {
102
+ hits.add("brand/overview.md");
103
+ hits.add("product/positioning.md");
104
+ }
105
+ return [...hits];
106
+ }
107
+ /** Rewrite the first `status: current|accepted` line to `status: draft`. */
108
+ function demoteToDraft(abs) {
109
+ let raw;
110
+ try {
111
+ raw = readFileSync(abs, "utf8");
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ const next = raw.replace(/^status:\s*(current|accepted)\s*$/m, "status: draft");
117
+ if (next === raw)
118
+ return false;
119
+ try {
120
+ writeFileSync(abs, next, "utf8");
121
+ }
122
+ catch {
123
+ return false;
124
+ }
125
+ return true;
126
+ }
127
+ export const demoteAutofilledBrand = {
128
+ id: "0005-demote-autofilled-brand",
129
+ introducedIn: "0.26.0",
130
+ describe: "Demote auto-generated brand drafts (marked confirmed before 0.25.0) back to status: draft so generic voice/positioning stops being injected every session",
131
+ class: "review",
132
+ detect(repoRoot) {
133
+ return autofilledConfirmed(repoRoot).length > 0;
134
+ },
135
+ apply(repoRoot) {
136
+ const docs = brandDocs(repoRoot);
137
+ const relToAbs = new Map(docs.map((d) => [d.rel, d.abs]));
138
+ const targets = autofilledConfirmed(repoRoot);
139
+ const demoted = [];
140
+ for (const rel of targets) {
141
+ const abs = relToAbs.get(rel);
142
+ if (abs !== undefined && demoteToDraft(abs))
143
+ demoted.push(rel);
144
+ }
145
+ return {
146
+ changed: demoted.length > 0,
147
+ detail: demoted.length > 0
148
+ ? `demoted ${demoted.length} auto-generated brand doc(s) to draft: ${demoted.join(", ")} — review and set status: current on any you actually wrote`
149
+ : "no auto-generated confirmed brand docs found",
150
+ };
151
+ },
152
+ };
153
+ //# sourceMappingURL=0005-demote-autofilled-brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0005-demote-autofilled-brand.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0005-demote-autofilled-brand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 0006 — prune junk Layer-A (sot-align) invariants from existing repos.
3
+ *
4
+ * Before 0.23.0 the sot-align hook minted an "invariant" from almost any
5
+ * prose block — banners, separators, class/endpoint descriptions, test
6
+ * notes — with no structural pre-filter. On a repo adopted in that era the
7
+ * invariants ledger was ~97% junk, and every junk entry is surfaced + can
8
+ * be cited. 0.23.0 added the creation gate so NEW invariants are real, and
9
+ * shipped `cairn invariants prune` to clean the old ones — but existing
10
+ * adopters had to know to run it by hand. This migration surfaces it.
11
+ *
12
+ * `detect`/`apply` wrap the same `pruneInvariants` surgical core the CLI
13
+ * uses: it touches ONLY `capture_source: layer-a-sot-align` invariants
14
+ * whose statement has no constraint shape — the exact bar the creation
15
+ * gate now applies — and archives them to `.cairn/ground/.archive/`
16
+ * (recoverable), rebuilding the ledger once at the end. Curated DEC/INV
17
+ * are never touched.
18
+ *
19
+ * `review`-class: it archives committed ground state, so it surfaces for
20
+ * the operator and applies via `cairn migrate`. Ships in 0.26.0, so
21
+ * `introducedIn` is 0.26.0 — a repo pinned past 0.23.0 must still
22
+ * re-evaluate it; `detect()` carries correctness.
23
+ */
24
+ import type { Migration } from "../types.js";
25
+ export declare const pruneSotAlignInvariants: Migration;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * 0006 — prune junk Layer-A (sot-align) invariants from existing repos.
3
+ *
4
+ * Before 0.23.0 the sot-align hook minted an "invariant" from almost any
5
+ * prose block — banners, separators, class/endpoint descriptions, test
6
+ * notes — with no structural pre-filter. On a repo adopted in that era the
7
+ * invariants ledger was ~97% junk, and every junk entry is surfaced + can
8
+ * be cited. 0.23.0 added the creation gate so NEW invariants are real, and
9
+ * shipped `cairn invariants prune` to clean the old ones — but existing
10
+ * adopters had to know to run it by hand. This migration surfaces it.
11
+ *
12
+ * `detect`/`apply` wrap the same `pruneInvariants` surgical core the CLI
13
+ * uses: it touches ONLY `capture_source: layer-a-sot-align` invariants
14
+ * whose statement has no constraint shape — the exact bar the creation
15
+ * gate now applies — and archives them to `.cairn/ground/.archive/`
16
+ * (recoverable), rebuilding the ledger once at the end. Curated DEC/INV
17
+ * are never touched.
18
+ *
19
+ * `review`-class: it archives committed ground state, so it surfaces for
20
+ * the operator and applies via `cairn migrate`. Ships in 0.26.0, so
21
+ * `introducedIn` is 0.26.0 — a repo pinned past 0.23.0 must still
22
+ * re-evaluate it; `detect()` carries correctness.
23
+ */
24
+ import { pruneInvariants } from "../../invariants/prune.js";
25
+ export const pruneSotAlignInvariants = {
26
+ id: "0006-prune-sot-align-invariants",
27
+ introducedIn: "0.26.0",
28
+ describe: "Archive junk Layer-A (sot-align) invariants minted before the 0.23.0 creation gate — only shapeless sot-align entries; curated DEC/INV untouched",
29
+ class: "review",
30
+ detect(repoRoot) {
31
+ try {
32
+ return pruneInvariants({ repoRoot, dryRun: true }).pruned.length > 0;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ },
38
+ apply(repoRoot) {
39
+ const result = pruneInvariants({ repoRoot });
40
+ const n = result.pruned.length;
41
+ return {
42
+ changed: n > 0,
43
+ detail: n > 0
44
+ ? `archived ${n} shapeless sot-align invariant(s) of ${result.sotAlignTotal} eligible (${result.kept} kept) → .cairn/ground/.archive/`
45
+ : "no junk sot-align invariants found",
46
+ };
47
+ },
48
+ };
49
+ //# sourceMappingURL=0006-prune-sot-align-invariants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0006-prune-sot-align-invariants.js","sourceRoot":"","sources":["../../../src/migrate/migrations/0006-prune-sot-align-invariants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,MAAM,CAAC,MAAM,uBAAuB,GAAc;IAChD,EAAE,EAAE,iCAAiC;IACrC,YAAY,EAAE,QAAQ;IACtB,QAAQ,EACN,kJAAkJ;IACpJ,KAAK,EAAE,QAAQ;IACf,MAAM,CAAC,QAAgB;QACrB,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,KAAK,CAAC,QAAgB;QACpB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,CAAC,GAAG,CAAC;YACd,MAAM,EACJ,CAAC,GAAG,CAAC;gBACH,CAAC,CAAC,YAAY,CAAC,wCAAwC,MAAM,CAAC,aAAa,cAAc,MAAM,CAAC,IAAI,kCAAkC;gBACtI,CAAC,CAAC,oCAAoC;SAC3C,CAAC;IACJ,CAAC;CACF,CAAC"}