@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/hooks/runners/annotate-surface.js +1 -2
- package/dist/hooks/runners/annotate-surface.js.map +1 -1
- package/dist/init/brand-setup.d.ts +16 -3
- package/dist/init/brand-setup.js +24 -17
- package/dist/init/brand-setup.js.map +1 -1
- package/dist/init/phases/6-brand.js +15 -11
- package/dist/init/phases/6-brand.js.map +1 -1
- package/dist/migrate/config-io.d.ts +10 -0
- package/dist/migrate/config-io.js +16 -0
- package/dist/migrate/config-io.js.map +1 -1
- package/dist/migrate/migrations/0005-demote-autofilled-brand.d.ts +26 -0
- package/dist/migrate/migrations/0005-demote-autofilled-brand.js +153 -0
- package/dist/migrate/migrations/0005-demote-autofilled-brand.js.map +1 -0
- package/dist/migrate/migrations/0006-prune-sot-align-invariants.d.ts +25 -0
- package/dist/migrate/migrations/0006-prune-sot-align-invariants.js +49 -0
- package/dist/migrate/migrations/0006-prune-sot-align-invariants.js.map +1 -0
- package/dist/migrate/migrations/0007-collapse-component-dirs.d.ts +24 -0
- package/dist/migrate/migrations/0007-collapse-component-dirs.js +131 -0
- package/dist/migrate/migrations/0007-collapse-component-dirs.js.map +1 -0
- package/dist/migrate/registry.js +6 -0
- package/dist/migrate/registry.js.map +1 -1
- package/dist/session-start/build.js +19 -7
- package/dist/session-start/build.js.map +1 -1
- package/dist/status-line/format.js +17 -2
- package/dist/status-line/format.js.map +1 -1
- package/package.json +2 -2
|
@@ -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("
|
|
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
|
|
48
|
-
* answered files flip
|
|
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
|
};
|
package/dist/init/brand-setup.js
CHANGED
|
@@ -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
|
|
70
|
-
* answered files flip
|
|
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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAyB7C,MAAM,KAAK,GAAiB;IAC1B,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACV,CAAC;AAUF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAA0B;IAE1B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAEzF,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI;KAC/B,CAAC,CAAC;IAEH,0EAA0E;IAC1E,uEAAuE;IACvE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAiB,EAAE,GAAG,KAAK,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,CAC5B,EAAE,EACF,eAAe,IAAI,CAAC,WAAW,2BAA2B,CAC3D,CAAC;QACF,OAAO,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,mCAAmC,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,CACvB,EAAE,EACF,wEAAwE,CACzE,CAAC;QACF,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,iDAAiD,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,EAAa,EAAE,MAAc;IAC9C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
67
|
-
label: "
|
|
68
|
-
detail: "
|
|
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: "
|
|
72
|
-
label: "
|
|
73
|
-
detail: "
|
|
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
|
|
78
|
-
detail: "
|
|
81
|
+
label: "I'll write it myself",
|
|
82
|
+
detail: "You'll fill it in after setup",
|
|
79
83
|
},
|
|
80
84
|
],
|
|
81
|
-
default: "
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOjD,MAAM,aAAa,GACjB,8LAA8L,CAAC;AAEjM,MAAM,aAAa,GACjB,4LAA4L,CAAC;AAE/L,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,cAAc,CAAC;IACvE,OAAO,uCAAuC,IAAI,4DAA4D,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,GAAqD,IAAI,CAAC;QACpE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,cAAc,CAAC;gBAC9E,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;oBAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,WAAW;oBACX,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;iBAC5C,CAAC,CAAC;gBACH,MAAM,OAAO,GAAiB,OAAO,KAAK,IAAI;oBAC5C,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBAChC,CAAC,CAAC;wBACE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;wBACxC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;wBACpC,KAAK,EAAE,aAAa;wBACpB,KAAK,EAAE,aAAa;qBACrB,CAAC;gBACN,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"6-brand.js","sourceRoot":"","sources":["../../../src/init/phases/6-brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOjD,MAAM,aAAa,GACjB,8LAA8L,CAAC;AAEjM,MAAM,aAAa,GACjB,4LAA4L,CAAC;AAE/L,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,cAAc,CAAC;IACvE,OAAO,uCAAuC,IAAI,4DAA4D,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,GAAqD,IAAI,CAAC;QACpE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,cAAc,CAAC;gBAC9E,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;oBAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,WAAW;oBACX,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;iBAC5C,CAAC,CAAC;gBACH,MAAM,OAAO,GAAiB,OAAO,KAAK,IAAI;oBAC5C,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBAChC,CAAC,CAAC;wBACE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;wBACxC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;wBACpC,KAAK,EAAE,aAAa;wBACpB,KAAK,EAAE,aAAa;qBACrB,CAAC;gBACN,2DAA2D;gBAC3D,+DAA+D;gBAC/D,gEAAgE;gBAChE,gDAAgD;gBAChD,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,0GAA0G,CAC3G,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,OAAO;gBAChB,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aACvC;YACD,MAAM,EAAE,SAAS;SAClB,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAkB;QAC9B,EAAE,EAAE,SAAS;QACb,MAAM,EACJ,+HAA+H;QACjI,OAAO,EAAE;YACP;gBACE,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,mDAAmD;aAC5D;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,yEAAyE;aAClF;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,+BAA+B;aACxC;SACF;QACD,OAAO,EAAE,MAAM;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -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"}
|