@decantr/core 1.0.3 → 1.0.5
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/index.d.ts +28 -8
- package/dist/index.js +135 -55
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/schema/execution-pack.common.v1.json +3 -0
- package/schema/scaffold-pack.v1.json +14 -0
package/dist/index.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ interface IRRoute {
|
|
|
90
90
|
path: string;
|
|
91
91
|
pageId: string;
|
|
92
92
|
shell: string;
|
|
93
|
+
sectionId?: string;
|
|
93
94
|
}
|
|
94
95
|
/** Which v3 essence layer sourced this node */
|
|
95
96
|
type IRLayer = 'dna' | 'blueprint' | 'meta';
|
|
@@ -118,6 +119,7 @@ interface IRShellNode extends IRNode {
|
|
|
118
119
|
interface IRPageNode extends IRNode {
|
|
119
120
|
type: 'page';
|
|
120
121
|
pageId: string;
|
|
122
|
+
sectionId?: string;
|
|
121
123
|
surface: string;
|
|
122
124
|
wiring: IRWiring | null;
|
|
123
125
|
}
|
|
@@ -153,7 +155,9 @@ interface ResolvedPatternEntry {
|
|
|
153
155
|
preset: ResolvedPreset;
|
|
154
156
|
}
|
|
155
157
|
/** Build IR tree for a single page from its resolved structure + patterns */
|
|
156
|
-
declare function buildPageIR(page: StructurePage
|
|
158
|
+
declare function buildPageIR(page: StructurePage & {
|
|
159
|
+
sectionId?: string;
|
|
160
|
+
}, resolvedPatterns: Map<string, ResolvedPatternEntry>, wiring: IRWiring | null, theme: Theme | null, density: {
|
|
157
161
|
gap: string;
|
|
158
162
|
}, layer?: IRLayer): IRPageNode;
|
|
159
163
|
|
|
@@ -253,6 +257,7 @@ interface ExecutionPackManifest {
|
|
|
253
257
|
}
|
|
254
258
|
interface ScaffoldPackRoute {
|
|
255
259
|
pageId: string;
|
|
260
|
+
sectionId?: string;
|
|
256
261
|
path: string;
|
|
257
262
|
patternIds: string[];
|
|
258
263
|
shell?: string;
|
|
@@ -283,6 +288,16 @@ interface ScaffoldPackData {
|
|
|
283
288
|
hotkeySemantics?: HotkeySemantics;
|
|
284
289
|
};
|
|
285
290
|
routes: ScaffoldPackRoute[];
|
|
291
|
+
/**
|
|
292
|
+
* Required theme decorator contract — surfaced ONCE at the project level
|
|
293
|
+
* here, then referenced (not duplicated) in each section pack. Cold-LLM
|
|
294
|
+
* runs reported the table was duplicated 7-10× across context files
|
|
295
|
+
* (~270-540 redundant lines per scaffold) when each section pack carried
|
|
296
|
+
* its own copy. Centralizing in scaffold-pack — which the cold prompt
|
|
297
|
+
* tells AI to read first — keeps the contract authoritative without the
|
|
298
|
+
* per-section repetition.
|
|
299
|
+
*/
|
|
300
|
+
themeDecorators?: ThemeDecoratorEntry[];
|
|
286
301
|
}
|
|
287
302
|
interface CommandPaletteContract {
|
|
288
303
|
trigger?: string;
|
|
@@ -329,6 +344,7 @@ interface SectionNavigationItemPack {
|
|
|
329
344
|
}
|
|
330
345
|
interface SectionPackRoute {
|
|
331
346
|
pageId: string;
|
|
347
|
+
sectionId?: string;
|
|
332
348
|
path: string;
|
|
333
349
|
patternIds: string[];
|
|
334
350
|
shell?: string;
|
|
@@ -500,16 +516,16 @@ interface ScaffoldPackBuilderOptions {
|
|
|
500
516
|
}>;
|
|
501
517
|
hotkeySemantics?: HotkeySemantics;
|
|
502
518
|
};
|
|
503
|
-
}
|
|
504
|
-
interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {
|
|
505
519
|
/**
|
|
506
|
-
* Required theme decorator contract
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
*
|
|
520
|
+
* Required theme decorator contract surfaced into the scaffold pack.
|
|
521
|
+
* The scaffold pack is read first per cold-prompt rules, so the canonical
|
|
522
|
+
* decorator contract belongs here. Section packs reference this without
|
|
523
|
+
* duplicating to avoid the 7-10× repetition cold-LLM runs reported.
|
|
510
524
|
*/
|
|
511
525
|
themeDecorators?: ThemeDecoratorEntry[];
|
|
512
526
|
}
|
|
527
|
+
interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {
|
|
528
|
+
}
|
|
513
529
|
interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {
|
|
514
530
|
}
|
|
515
531
|
interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {
|
|
@@ -570,13 +586,17 @@ interface PipelineResult {
|
|
|
570
586
|
declare function runPipeline(essence: EssenceFile, options: PipelineOptions): Promise<PipelineResult>;
|
|
571
587
|
|
|
572
588
|
interface ResolvedPage {
|
|
573
|
-
page:
|
|
589
|
+
page: ResolvedStructurePage;
|
|
574
590
|
patterns: Map<string, {
|
|
575
591
|
pattern: Pattern;
|
|
576
592
|
preset: ResolvedPreset;
|
|
577
593
|
}>;
|
|
578
594
|
wiring: IRWiring | null;
|
|
579
595
|
}
|
|
596
|
+
type ResolvedStructurePage = StructurePage & {
|
|
597
|
+
sectionId?: string;
|
|
598
|
+
route?: string;
|
|
599
|
+
};
|
|
580
600
|
interface ResolvedEssence {
|
|
581
601
|
essence: EssenceFile;
|
|
582
602
|
pages: ResolvedPage[];
|
package/dist/index.js
CHANGED
|
@@ -91,10 +91,10 @@ function capitalize(str) {
|
|
|
91
91
|
}
|
|
92
92
|
function buildNavItems(pages, routes) {
|
|
93
93
|
const routeLookup = new Map(
|
|
94
|
-
(routes ?? []).map((route) => [route.pageId, route.path])
|
|
94
|
+
(routes ?? []).map((route) => [routeIdentity(route.pageId, route.sectionId), route.path])
|
|
95
95
|
);
|
|
96
96
|
return pages.map((page, i) => ({
|
|
97
|
-
href: routeLookup.get(page.id) ?? routePath(page.id, i),
|
|
97
|
+
href: routeLookup.get(routeIdentity(page.id, page.sectionId)) ?? routePath(page.id, i),
|
|
98
98
|
icon: NAV_ICONS[page.id] || "circle",
|
|
99
99
|
label: capitalize(page.id.replace(/-/g, " "))
|
|
100
100
|
}));
|
|
@@ -132,36 +132,52 @@ function buildThemeFromV3(essence, isAddon) {
|
|
|
132
132
|
isAddon
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
-
function blueprintPageToStructurePage(page, defaultShell) {
|
|
135
|
+
function blueprintPageToStructurePage(page, defaultShell, sectionId) {
|
|
136
136
|
return {
|
|
137
137
|
id: page.id,
|
|
138
138
|
shell: page.shell_override ?? defaultShell,
|
|
139
139
|
layout: page.layout,
|
|
140
|
+
...sectionId ? { sectionId } : {},
|
|
141
|
+
...page.route ? { route: page.route } : {},
|
|
140
142
|
...page.surface ? { surface: page.surface } : {}
|
|
141
143
|
};
|
|
142
144
|
}
|
|
143
|
-
function
|
|
145
|
+
function routeIdentity(pageId, sectionId) {
|
|
146
|
+
return sectionId ? `${sectionId}:${pageId}` : pageId;
|
|
147
|
+
}
|
|
148
|
+
function buildV3Routes(essence, structurePages) {
|
|
144
149
|
const explicitRoutes = /* @__PURE__ */ new Map();
|
|
145
150
|
for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {
|
|
146
|
-
if (entry?.page
|
|
147
|
-
|
|
151
|
+
if (!entry?.page) continue;
|
|
152
|
+
const key = routeIdentity(entry.page, entry.section);
|
|
153
|
+
if (!explicitRoutes.has(key)) {
|
|
154
|
+
explicitRoutes.set(key, path);
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
|
-
for (const page of
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
for (const page of structurePages) {
|
|
158
|
+
const key = routeIdentity(page.id, page.sectionId);
|
|
159
|
+
if (page.route && !explicitRoutes.has(key)) {
|
|
160
|
+
explicitRoutes.set(key, page.route);
|
|
153
161
|
}
|
|
154
162
|
}
|
|
155
163
|
if (explicitRoutes.size > 0) {
|
|
156
164
|
return structurePages.flatMap((page) => {
|
|
157
|
-
const path = explicitRoutes.get(page.id);
|
|
158
|
-
return path ? [
|
|
165
|
+
const path = explicitRoutes.get(routeIdentity(page.id, page.sectionId));
|
|
166
|
+
return path ? [
|
|
167
|
+
{
|
|
168
|
+
path,
|
|
169
|
+
pageId: page.id,
|
|
170
|
+
shell: page.shell,
|
|
171
|
+
...page.sectionId ? { sectionId: page.sectionId } : {}
|
|
172
|
+
}
|
|
173
|
+
] : [];
|
|
159
174
|
});
|
|
160
175
|
}
|
|
161
176
|
return structurePages.map((page, i) => ({
|
|
162
177
|
path: routePath(page.id, i),
|
|
163
178
|
pageId: page.id,
|
|
164
|
-
shell: page.shell
|
|
179
|
+
shell: page.shell,
|
|
180
|
+
...page.sectionId ? { sectionId: page.sectionId } : {}
|
|
165
181
|
}));
|
|
166
182
|
}
|
|
167
183
|
function convertWiring(wiringResults) {
|
|
@@ -310,11 +326,10 @@ async function resolveV3Essence(essence, resolver) {
|
|
|
310
326
|
const themeId = dna.theme.id;
|
|
311
327
|
const isAddon = themeId.startsWith("custom:") || !CORE_STYLES.has(themeId);
|
|
312
328
|
const theme = buildThemeFromV3(essence, isAddon);
|
|
313
|
-
const blueprintPages = blueprint.pages ?? (blueprint.sections ? blueprint.sections.flatMap((s) => s.pages) : [{ id: "home", layout: ["hero"] }]);
|
|
314
329
|
const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? "sidebar-main";
|
|
315
330
|
const structurePages = blueprint.pages ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell)) : blueprint.sections ? blueprint.sections.flatMap(
|
|
316
331
|
(section) => section.pages.map(
|
|
317
|
-
(page) => blueprintPageToStructurePage(page, section.shell ?? defaultShell)
|
|
332
|
+
(page) => blueprintPageToStructurePage(page, section.shell ?? defaultShell, section.id)
|
|
318
333
|
)
|
|
319
334
|
) : [
|
|
320
335
|
blueprintPageToStructurePage(
|
|
@@ -325,7 +340,7 @@ async function resolveV3Essence(essence, resolver) {
|
|
|
325
340
|
const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);
|
|
326
341
|
const shellType = defaultShell;
|
|
327
342
|
const brand = pascalCase(meta.archetype);
|
|
328
|
-
const routes = buildV3Routes(essence,
|
|
343
|
+
const routes = buildV3Routes(essence, structurePages);
|
|
329
344
|
const nav = buildNavItems(structurePages, routes);
|
|
330
345
|
const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;
|
|
331
346
|
const shell = {
|
|
@@ -486,9 +501,10 @@ function buildPageIR(page, resolvedPatterns, wiring, theme, density, layer) {
|
|
|
486
501
|
const surface = page.surface || `_flex _col ${gapAtom}`;
|
|
487
502
|
return {
|
|
488
503
|
type: "page",
|
|
489
|
-
id: page.id,
|
|
504
|
+
id: page.sectionId ? `${page.sectionId}:${page.id}` : page.id,
|
|
490
505
|
children,
|
|
491
506
|
pageId: page.id,
|
|
507
|
+
...page.sectionId ? { sectionId: page.sectionId } : {},
|
|
492
508
|
surface,
|
|
493
509
|
wiring,
|
|
494
510
|
...layer ? { layer } : {}
|
|
@@ -771,13 +787,23 @@ function collectPatternIds(page) {
|
|
|
771
787
|
});
|
|
772
788
|
return [...new Set(patternIds)];
|
|
773
789
|
}
|
|
790
|
+
function pageIdentity(pageId, sectionId) {
|
|
791
|
+
return sectionId ? `${sectionId}/${pageId}` : pageId;
|
|
792
|
+
}
|
|
793
|
+
function pageFileId(pageId, sectionId) {
|
|
794
|
+
return pageIdentity(pageId, sectionId).replace(/[^a-zA-Z0-9._-]+/g, "-");
|
|
795
|
+
}
|
|
796
|
+
function routePageLabel(route) {
|
|
797
|
+
return route.sectionId ? `${route.sectionId}/${route.pageId}` : route.pageId;
|
|
798
|
+
}
|
|
774
799
|
function summarizeRoutes(appNode) {
|
|
775
800
|
return appNode.routes.flatMap((route) => {
|
|
776
|
-
const pageNode = findPageNode(appNode, route.pageId);
|
|
801
|
+
const pageNode = findPageNode(appNode, route.pageId, route.sectionId);
|
|
777
802
|
if (!pageNode) return [];
|
|
778
803
|
return [
|
|
779
804
|
{
|
|
780
805
|
pageId: pageNode.pageId,
|
|
806
|
+
...route.sectionId ? { sectionId: route.sectionId } : {},
|
|
781
807
|
path: route.path,
|
|
782
808
|
patternIds: collectPatternIds(pageNode),
|
|
783
809
|
shell: route.shell
|
|
@@ -786,13 +812,20 @@ function summarizeRoutes(appNode) {
|
|
|
786
812
|
});
|
|
787
813
|
}
|
|
788
814
|
function summarizeSectionRoutes(appNode, input) {
|
|
789
|
-
return summarizeRoutes(appNode).filter(
|
|
815
|
+
return summarizeRoutes(appNode).filter(
|
|
816
|
+
(route) => input.pageIds.includes(route.pageId) && (!route.sectionId || route.sectionId === input.id)
|
|
817
|
+
);
|
|
790
818
|
}
|
|
791
|
-
function summarizePageRoute(appNode, pageId) {
|
|
792
|
-
return summarizeRoutes(appNode).find(
|
|
819
|
+
function summarizePageRoute(appNode, pageId, sectionId) {
|
|
820
|
+
return summarizeRoutes(appNode).find(
|
|
821
|
+
(route) => route.pageId === pageId && (!sectionId || !route.sectionId || route.sectionId === sectionId)
|
|
822
|
+
) ?? null;
|
|
793
823
|
}
|
|
794
|
-
function findPageNode(appNode, pageId) {
|
|
795
|
-
const page = appNode.children.find((node) =>
|
|
824
|
+
function findPageNode(appNode, pageId, sectionId) {
|
|
825
|
+
const page = appNode.children.find((node) => {
|
|
826
|
+
const pageNode = node;
|
|
827
|
+
return pageNode.pageId === pageId && (!sectionId || !pageNode.sectionId || pageNode.sectionId === sectionId);
|
|
828
|
+
});
|
|
796
829
|
return page ? page : null;
|
|
797
830
|
}
|
|
798
831
|
function collectPagePatterns(page) {
|
|
@@ -922,10 +955,27 @@ function renderExecutionPackMarkdown(pack) {
|
|
|
922
955
|
for (const route of scaffoldPack.data.routes) {
|
|
923
956
|
const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
|
|
924
957
|
lines.push(
|
|
925
|
-
`- ${route.path} -> ${route
|
|
958
|
+
`- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
|
|
926
959
|
);
|
|
927
960
|
}
|
|
928
961
|
lines.push("");
|
|
962
|
+
if (scaffoldPack.data.themeDecorators && scaffoldPack.data.themeDecorators.length > 0) {
|
|
963
|
+
const escScaffoldCell = (s) => s.replace(/\|/g, "\\|");
|
|
964
|
+
lines.push(`## Required Theme Decorators (${scaffoldPack.data.theme.id})`);
|
|
965
|
+
lines.push("");
|
|
966
|
+
lines.push(
|
|
967
|
+
`These classes carry the active theme's visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these across all sections \u2014 without them, every page reads as "themed colors only" with no theme character. Section packs reference this table; the contract is project-wide.`
|
|
968
|
+
);
|
|
969
|
+
lines.push("");
|
|
970
|
+
lines.push("| Class | Intent | Apply to |");
|
|
971
|
+
lines.push("|-------|--------|----------|");
|
|
972
|
+
for (const entry of scaffoldPack.data.themeDecorators) {
|
|
973
|
+
lines.push(
|
|
974
|
+
`| \`.${entry.class}\` | ${escScaffoldCell(entry.intent)} | ${escScaffoldCell(entry.applyTo)} |`
|
|
975
|
+
);
|
|
976
|
+
}
|
|
977
|
+
lines.push("");
|
|
978
|
+
}
|
|
929
979
|
}
|
|
930
980
|
if (pack.packType === "section") {
|
|
931
981
|
const sectionPack = pack;
|
|
@@ -945,7 +995,7 @@ function renderExecutionPackMarkdown(pack) {
|
|
|
945
995
|
for (const route of sectionPack.data.routes) {
|
|
946
996
|
const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
|
|
947
997
|
lines.push(
|
|
948
|
-
`- ${route.path} -> ${route
|
|
998
|
+
`- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
|
|
949
999
|
);
|
|
950
1000
|
}
|
|
951
1001
|
lines.push("");
|
|
@@ -994,6 +1044,13 @@ function renderExecutionPackMarkdown(pack) {
|
|
|
994
1044
|
);
|
|
995
1045
|
}
|
|
996
1046
|
lines.push("");
|
|
1047
|
+
} else {
|
|
1048
|
+
lines.push("## Theme Decorators");
|
|
1049
|
+
lines.push("");
|
|
1050
|
+
lines.push(
|
|
1051
|
+
`Theme \`${sectionPack.data.theme.id}\` decorators are documented ONCE in \`scaffold-pack.md\` under "Required Theme Decorators". Apply them across this section's pages \u2014 the contract is the same project-wide. See also DECANTR.md "Decorator Quick Reference" for the same table.`
|
|
1052
|
+
);
|
|
1053
|
+
lines.push("");
|
|
997
1054
|
}
|
|
998
1055
|
}
|
|
999
1056
|
if (pack.packType === "page") {
|
|
@@ -1065,7 +1122,7 @@ function renderExecutionPackMarkdown(pack) {
|
|
|
1065
1122
|
for (const route of mutationPack.data.routes) {
|
|
1066
1123
|
const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
|
|
1067
1124
|
lines.push(
|
|
1068
|
-
`- ${route.path} -> ${route
|
|
1125
|
+
`- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
|
|
1069
1126
|
);
|
|
1070
1127
|
}
|
|
1071
1128
|
lines.push("");
|
|
@@ -1092,7 +1149,7 @@ function renderExecutionPackMarkdown(pack) {
|
|
|
1092
1149
|
for (const route of reviewPack.data.routes) {
|
|
1093
1150
|
const patterns = route.patternIds.length > 0 ? route.patternIds.join(", ") : "none";
|
|
1094
1151
|
lines.push(
|
|
1095
|
-
`- ${route.path} -> ${route
|
|
1152
|
+
`- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ""} [${patterns}]`
|
|
1096
1153
|
);
|
|
1097
1154
|
}
|
|
1098
1155
|
lines.push("");
|
|
@@ -1233,6 +1290,24 @@ function listPackPages(essence) {
|
|
|
1233
1290
|
features: essence.blueprint.features || []
|
|
1234
1291
|
}));
|
|
1235
1292
|
}
|
|
1293
|
+
function buildPageManifestEntries(pages) {
|
|
1294
|
+
const counts = /* @__PURE__ */ new Map();
|
|
1295
|
+
for (const page of pages) {
|
|
1296
|
+
counts.set(page.pageId, (counts.get(page.pageId) ?? 0) + 1);
|
|
1297
|
+
}
|
|
1298
|
+
return pages.map((page) => {
|
|
1299
|
+
const hasDuplicatePageId = (counts.get(page.pageId) ?? 0) > 1;
|
|
1300
|
+
const id = hasDuplicatePageId ? pageIdentity(page.pageId, page.sectionId) : page.pageId;
|
|
1301
|
+
const fileId = hasDuplicatePageId ? pageFileId(page.pageId, page.sectionId) : page.pageId;
|
|
1302
|
+
return {
|
|
1303
|
+
id,
|
|
1304
|
+
markdown: `page-${fileId}-pack.md`,
|
|
1305
|
+
json: `page-${fileId}-pack.json`,
|
|
1306
|
+
sectionId: page.sectionId,
|
|
1307
|
+
sectionRole: page.sectionRole
|
|
1308
|
+
};
|
|
1309
|
+
});
|
|
1310
|
+
}
|
|
1236
1311
|
function buildScaffoldPack(appNode, options = {}) {
|
|
1237
1312
|
const routes = summarizeRoutes(appNode);
|
|
1238
1313
|
const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];
|
|
@@ -1278,7 +1353,8 @@ function buildScaffoldPack(appNode, options = {}) {
|
|
|
1278
1353
|
routing: appNode.routing,
|
|
1279
1354
|
features: appNode.features,
|
|
1280
1355
|
navigation: options.navigation,
|
|
1281
|
-
routes
|
|
1356
|
+
routes,
|
|
1357
|
+
...options.themeDecorators && options.themeDecorators.length > 0 ? { themeDecorators: options.themeDecorators } : {}
|
|
1282
1358
|
},
|
|
1283
1359
|
renderedMarkdown: ""
|
|
1284
1360
|
};
|
|
@@ -1344,8 +1420,8 @@ function buildSectionPack(appNode, input, options = {}) {
|
|
|
1344
1420
|
return pack;
|
|
1345
1421
|
}
|
|
1346
1422
|
function buildPagePack(appNode, input, options = {}) {
|
|
1347
|
-
const pageNode = findPageNode(appNode, input.pageId);
|
|
1348
|
-
const route = summarizePageRoute(appNode, input.pageId);
|
|
1423
|
+
const pageNode = findPageNode(appNode, input.pageId, input.sectionId);
|
|
1424
|
+
const route = summarizePageRoute(appNode, input.pageId, input.sectionId);
|
|
1349
1425
|
if (!pageNode || !route) {
|
|
1350
1426
|
throw new Error(`Unknown page for page pack: ${input.pageId}`);
|
|
1351
1427
|
}
|
|
@@ -1556,6 +1632,18 @@ async function compileExecutionPackBundle(essence, options = {}) {
|
|
|
1556
1632
|
});
|
|
1557
1633
|
const navMeta = effectiveEssence.meta.navigation;
|
|
1558
1634
|
const commandPaletteValue = typeof navMeta?.command_palette === "object" && navMeta.command_palette !== null ? navMeta.command_palette : Boolean(navMeta?.command_palette);
|
|
1635
|
+
const themeDecorators = (() => {
|
|
1636
|
+
const defs = pipeline.registryTheme?.decorator_definitions;
|
|
1637
|
+
if (!defs) return void 0;
|
|
1638
|
+
const entries = [];
|
|
1639
|
+
for (const [name, def] of Object.entries(defs)) {
|
|
1640
|
+
const intent = def.intent || def.description || "";
|
|
1641
|
+
const applyTo = (def.usage || []).join(", ");
|
|
1642
|
+
if (!intent && !applyTo) continue;
|
|
1643
|
+
entries.push({ class: name, intent, applyTo });
|
|
1644
|
+
}
|
|
1645
|
+
return entries.length > 0 ? entries : void 0;
|
|
1646
|
+
})();
|
|
1559
1647
|
const scaffold = buildScaffoldPack(pipeline.ir, {
|
|
1560
1648
|
target: sharedTarget,
|
|
1561
1649
|
navigation: {
|
|
@@ -1571,30 +1659,26 @@ async function compileExecutionPackBundle(essence, options = {}) {
|
|
|
1571
1659
|
...hotkey.semantics ? { semantics: hotkey.semantics } : {}
|
|
1572
1660
|
})) : [],
|
|
1573
1661
|
...navMeta?.hotkey_semantics ? { hotkeySemantics: navMeta.hotkey_semantics } : {}
|
|
1574
|
-
}
|
|
1662
|
+
},
|
|
1663
|
+
...themeDecorators ? { themeDecorators } : {}
|
|
1575
1664
|
});
|
|
1576
1665
|
const review = buildReviewPack(pipeline.ir, {
|
|
1577
1666
|
target: sharedTarget
|
|
1578
1667
|
});
|
|
1579
|
-
const
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
const entries = [];
|
|
1583
|
-
for (const [name, def] of Object.entries(defs)) {
|
|
1584
|
-
const intent = def.intent || def.description || "";
|
|
1585
|
-
const applyTo = (def.usage || []).join(", ");
|
|
1586
|
-
if (!intent && !applyTo) continue;
|
|
1587
|
-
entries.push({ class: name, intent, applyTo });
|
|
1588
|
-
}
|
|
1589
|
-
return entries.length > 0 ? entries : void 0;
|
|
1590
|
-
})();
|
|
1591
|
-
const sections = listPackSections(effectiveEssence).map(
|
|
1668
|
+
const sectionInputs = listPackSections(effectiveEssence);
|
|
1669
|
+
const pageInputs = listPackPages(effectiveEssence);
|
|
1670
|
+
const sections = sectionInputs.map(
|
|
1592
1671
|
(section) => buildSectionPack(pipeline.ir, section, {
|
|
1593
|
-
target: sharedTarget
|
|
1594
|
-
|
|
1672
|
+
target: sharedTarget
|
|
1673
|
+
// themeDecorators intentionally NOT passed to section packs as of 1.7.22.
|
|
1674
|
+
// Section packs render a one-line pointer to scaffold-pack instead of
|
|
1675
|
+
// duplicating the full decorator table — F2 Phase 1 reports flagged
|
|
1676
|
+
// 7-10× duplication across context files. The decorators are still
|
|
1677
|
+
// available on each section pack as section-pack.theme.id allows the
|
|
1678
|
+
// renderer to compose the pointer with the correct theme name.
|
|
1595
1679
|
})
|
|
1596
1680
|
);
|
|
1597
|
-
const pages =
|
|
1681
|
+
const pages = pageInputs.map(
|
|
1598
1682
|
(page) => buildPagePack(pipeline.ir, page, {
|
|
1599
1683
|
target: sharedTarget
|
|
1600
1684
|
})
|
|
@@ -1619,19 +1703,13 @@ async function compileExecutionPackBundle(essence, options = {}) {
|
|
|
1619
1703
|
markdown: "review-pack.md",
|
|
1620
1704
|
json: "review-pack.json"
|
|
1621
1705
|
},
|
|
1622
|
-
sections:
|
|
1706
|
+
sections: sectionInputs.map((section) => ({
|
|
1623
1707
|
id: section.id,
|
|
1624
1708
|
markdown: `section-${section.id}-pack.md`,
|
|
1625
1709
|
json: `section-${section.id}-pack.json`,
|
|
1626
1710
|
pageIds: section.pageIds
|
|
1627
1711
|
})),
|
|
1628
|
-
pages:
|
|
1629
|
-
id: page.pageId,
|
|
1630
|
-
markdown: `page-${page.pageId}-pack.md`,
|
|
1631
|
-
json: `page-${page.pageId}-pack.json`,
|
|
1632
|
-
sectionId: page.sectionId,
|
|
1633
|
-
sectionRole: page.sectionRole
|
|
1634
|
-
})),
|
|
1712
|
+
pages: buildPageManifestEntries(pageInputs),
|
|
1635
1713
|
mutations: ["add-page", "modify"].map((mutationType) => ({
|
|
1636
1714
|
id: mutationType,
|
|
1637
1715
|
markdown: `mutation-${mutationType}-pack.md`,
|
|
@@ -1665,7 +1743,9 @@ function selectExecutionPackFromBundle(bundle, selector) {
|
|
|
1665
1743
|
pack = id ? bundle.sections.find((entry) => entry.data.sectionId === id) ?? null : null;
|
|
1666
1744
|
break;
|
|
1667
1745
|
case "page":
|
|
1668
|
-
pack = id ? bundle.pages.find(
|
|
1746
|
+
pack = id ? bundle.pages.find(
|
|
1747
|
+
(entry) => entry.data.pageId === id || pageIdentity(entry.data.pageId, entry.data.sectionId) === id || pageFileId(entry.data.pageId, entry.data.sectionId) === id
|
|
1748
|
+
) ?? null : null;
|
|
1669
1749
|
break;
|
|
1670
1750
|
case "mutation":
|
|
1671
1751
|
pack = id ? bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null : null;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolve.ts","../src/utils.ts","../src/ir.ts","../src/ir-helpers.ts","../src/packs.ts","../src/pipeline.ts"],"sourcesContent":["import type {\n BlueprintPage,\n ColumnLayout,\n Essence,\n EssenceFile,\n EssenceV3,\n LayoutItem,\n PatternRef,\n SectionedEssence,\n StructurePage,\n} from '@decantr/essence-spec';\nimport { computeDensity, isSectioned, isSimple, isV3 } from '@decantr/essence-spec';\nimport type {\n ContentResolver,\n Pattern,\n Theme as RegistryTheme,\n ResolvedPreset,\n} from '@decantr/registry';\nimport { detectWirings, resolvePatternPreset } from '@decantr/registry';\nimport type {\n IRNavItem,\n IRRoute,\n IRShellConfig,\n IRTheme,\n IRThemeDecoration,\n IRVisualEffect,\n IRWiring,\n IRWiringSignal,\n} from './types.js';\nimport { pascalCase } from './utils.js';\n\nexport interface ResolvedPage {\n page: StructurePage;\n patterns: Map<string, { pattern: Pattern; preset: ResolvedPreset }>;\n wiring: IRWiring | null;\n}\n\nexport interface ResolvedEssence {\n essence: EssenceFile;\n pages: ResolvedPage[];\n registryTheme: RegistryTheme | null;\n density: { gap: string; level: string };\n theme: IRTheme;\n shell: IRShellConfig;\n routes: IRRoute[];\n features: string[];\n /** True when the source essence was v3 (DNA/Blueprint/Meta) */\n isV3Source: boolean;\n}\n\n// ─── Icon Mapping ─────────────────────────────────────────────\n\nconst NAV_ICONS: Record<string, string> = {\n overview: 'layout-dashboard',\n dashboard: 'layout-dashboard',\n home: 'home',\n analytics: 'bar-chart-3',\n settings: 'settings',\n users: 'users',\n billing: 'credit-card',\n reports: 'file-text',\n catalog: 'grid',\n products: 'package',\n orders: 'shopping-cart',\n messages: 'message-square',\n notifications: 'bell',\n activity: 'activity',\n search: 'search',\n profile: 'user',\n team: 'users',\n integrations: 'puzzle',\n api: 'code',\n docs: 'book-open',\n help: 'help-circle',\n projects: 'folder',\n workflows: 'git-branch',\n monitoring: 'monitor',\n security: 'shield',\n storage: 'database',\n deployments: 'rocket',\n logs: 'scroll-text',\n};\n\n// ─── Core styles that don't need explicit addon registration ──\n\nconst CORE_STYLES = new Set(['auradecantism']);\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction extractLayoutRefs(\n layout: LayoutItem[],\n): { id: string; explicitPreset?: string; alias?: string }[] {\n const refs: { id: string; explicitPreset?: string; alias?: string }[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n refs.push({ id: item });\n } else if (isPatternRef(item)) {\n refs.push({ id: item.pattern, explicitPreset: item.preset, alias: item.as });\n } else if (isColumnLayout(item)) {\n // cols can mix string ids and PatternRef objects per the schema.\n // Normalize each entry so downstream resolvers always see a string id.\n for (const col of item.cols) {\n if (typeof col === 'string') {\n refs.push({ id: col });\n } else {\n refs.push({ id: col.pattern, explicitPreset: col.preset, alias: col.as });\n }\n }\n }\n }\n return refs;\n}\n\n/** Flatten a layout array so column children are promoted to top-level for wiring detection */\nfunction flattenLayoutForWiring(layout: LayoutItem[]): LayoutItem[] {\n const flat: LayoutItem[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n flat.push(item);\n } else if (isPatternRef(item)) {\n flat.push(item);\n } else if (isColumnLayout(item)) {\n // Promote column children as string refs\n for (const col of item.cols) {\n flat.push(col);\n }\n }\n }\n return flat;\n}\n\nfunction routePath(pageId: string, index: number): string {\n if (index === 0) return '/';\n // AUTO: Pages ending in \"-detail\" get a dynamic :id route parameter\n if (pageId.endsWith('-detail')) {\n return `/${pageId}/:id`;\n }\n return `/${pageId}`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction buildNavItems(pages: StructurePage[], routes?: IRRoute[]): IRNavItem[] {\n const routeLookup = new Map<string, string>(\n (routes ?? []).map((route) => [route.pageId, route.path]),\n );\n return pages.map((page, i) => ({\n href: routeLookup.get(page.id) ?? routePath(page.id, i),\n icon: NAV_ICONS[page.id] || 'circle',\n label: capitalize(page.id.replace(/-/g, ' ')),\n }));\n}\n\nfunction buildThemeDecoration(theme: RegistryTheme): IRThemeDecoration | null {\n const shell = theme.shell;\n if (!shell) return null;\n // The JSON may have additional fields not in the strict type\n const shellAny = shell as unknown as Record<string, unknown>;\n return {\n root: shell.root || '',\n nav: shell.nav || '',\n header: shell.header || '',\n brand: (shellAny['brand'] as string) || '',\n navLabel: (shellAny['navLabel'] as string) || '',\n // AUTO: default nav style is 'pill' when the theme does not declare one\n navStyle: shell.nav_style || 'pill',\n defaultNavState: (shellAny['default_nav_state'] as string) || 'expanded',\n dimensions: shell.dimensions || null,\n };\n}\n\nfunction buildTheme(essence: Essence, isAddon: boolean): IRTheme {\n return {\n id: essence.theme.id,\n mode: essence.theme.mode,\n shape: essence.theme.shape || null,\n isAddon,\n };\n}\n\nfunction buildThemeFromV3(essence: EssenceV3, isAddon: boolean): IRTheme {\n const dna = essence.dna;\n return {\n id: dna.theme.id,\n mode: dna.theme.mode,\n shape: dna.radius.philosophy || dna.theme.shape || null,\n isAddon,\n };\n}\n\n/** Convert v3 BlueprintPage to the StructurePage shape used by the resolver pipeline */\nfunction blueprintPageToStructurePage(page: BlueprintPage, defaultShell: string): StructurePage {\n return {\n id: page.id,\n shell: page.shell_override ?? defaultShell,\n layout: page.layout,\n ...(page.surface ? { surface: page.surface } : {}),\n };\n}\n\nfunction buildV3Routes(\n essence: EssenceV3,\n blueprintPages: BlueprintPage[],\n structurePages: StructurePage[],\n): IRRoute[] {\n const explicitRoutes = new Map<string, string>();\n\n for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {\n if (entry?.page && !explicitRoutes.has(entry.page)) {\n explicitRoutes.set(entry.page, path);\n }\n }\n\n for (const page of blueprintPages) {\n if (page.route && !explicitRoutes.has(page.id)) {\n explicitRoutes.set(page.id, page.route);\n }\n }\n\n if (explicitRoutes.size > 0) {\n return structurePages.flatMap((page) => {\n const path = explicitRoutes.get(page.id);\n return path ? [{ path, pageId: page.id, shell: page.shell }] : [];\n });\n }\n\n return structurePages.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n}\n\nfunction convertWiring(wiringResults: ReturnType<typeof detectWirings>): IRWiring | null {\n if (wiringResults.length === 0) return null;\n\n const signals: IRWiringSignal[] = [];\n const props: Record<string, Record<string, string>> = {};\n const hookProps: Record<string, Record<string, string>> = {};\n const hookSet = new Set<IRWiringSignal['hookType']>();\n\n for (const result of wiringResults) {\n for (const signal of result.signals) {\n // Avoid duplicate signals\n if (!signals.some((s) => s.name === signal.name)) {\n const setter = 'set' + signal.name.charAt(0).toUpperCase() + signal.name.slice(1);\n signals.push({\n name: signal.name,\n setter,\n init: signal.init,\n hookType: signal.hookType,\n });\n hookSet.add(signal.hookType);\n }\n }\n for (const [alias, aliasProps] of Object.entries(result.props)) {\n props[alias] = { ...props[alias], ...aliasProps };\n }\n // AUTO: Merge hook-based prop mappings\n for (const [alias, aliasHookProps] of Object.entries(result.hookProps)) {\n hookProps[alias] = { ...hookProps[alias], ...aliasHookProps };\n }\n }\n\n return { signals, props, hooks: [...hookSet], hookProps };\n}\n\n// ─── Visual Effects Resolution ────────────────────────────────\n\nexport function resolveVisualEffects(\n theme: RegistryTheme,\n pattern: Pattern,\n _slot?: string,\n): IRVisualEffect | null {\n const effects = theme.effects;\n if (!effects?.enabled) return null;\n\n const typeMapping = effects.type_mapping || {};\n const componentFallback = effects.component_fallback || {};\n const intensity = effects.intensity || 'medium';\n const intensityValues = effects.intensity_values || {};\n\n // Check pattern tags / components against type_mapping\n let decorators: string[] = [];\n\n // Check if any pattern components match the component_fallback\n for (const comp of pattern.components || []) {\n const effectType = componentFallback[comp];\n if (effectType && typeMapping[effectType]) {\n decorators = [...decorators, ...typeMapping[effectType]];\n }\n }\n\n if (decorators.length === 0) return null;\n\n // Deduplicate\n decorators = [...new Set(decorators)];\n\n return {\n decorators,\n intensity: intensityValues[intensity] || {},\n };\n}\n\n// ─── Main Resolution ─────────────────────────────────────────\n\n/** Resolve all external references in an Essence file */\nexport async function resolveEssence(\n essence: EssenceFile,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n // ─── V3 path: read from dna + blueprint layers ───────────\n if (isV3(essence)) {\n return resolveV3Essence(essence, resolver);\n }\n\n // ─── V2 path: simple or sectioned ────────────────────────\n let simpleEssence: Essence;\n if (isSimple(essence)) {\n simpleEssence = essence;\n } else if (isSectioned(essence)) {\n const sectioned = essence as SectionedEssence;\n if (sectioned.sections.length > 1) {\n throw new Error(\n `Sectioned essences with ${sectioned.sections.length} sections are not yet supported. ` +\n `Only single-section sectioned essences can be processed. ` +\n `Consider migrating to v3 format using migrateV2ToV3().`,\n );\n }\n const firstSection = sectioned.sections[0];\n simpleEssence = {\n version: sectioned.version,\n archetype: firstSection.archetype,\n theme: firstSection.theme,\n personality: sectioned.personality,\n platform: sectioned.platform,\n structure: firstSection.structure,\n features: firstSection.features || [],\n density: sectioned.density,\n guard: sectioned.guard,\n target: sectioned.target,\n };\n } else {\n throw new Error('Invalid essence format');\n }\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', simpleEssence.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density computation\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n simpleEssence.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n\n // 3. Theme\n const themeId = simpleEssence.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildTheme(simpleEssence, isAddon);\n\n // 4. Resolve each page\n const resolvedPages = await resolvePages(simpleEssence.structure, resolver, registryTheme);\n\n // 5. Shell config\n const shellType = simpleEssence.structure[0]?.shell || 'sidebar-main';\n const brand = pascalCase(simpleEssence.archetype);\n const nav = buildNavItems(simpleEssence.structure);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n // 6. Routes\n const routes: IRRoute[] = simpleEssence.structure.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: { gap: density.content_gap, level: density.level },\n theme,\n shell,\n routes,\n features: simpleEssence.features ?? [],\n isV3Source: false,\n };\n}\n\n// ─── V3 Resolution ──────────────────────────────────────────\n\nasync function resolveV3Essence(\n essence: EssenceV3,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n const { dna, blueprint, meta } = essence;\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', dna.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density — v3 carries density directly in dna.spacing\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n dna.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n // V3 dna.spacing is authoritative; override computed density with DNA values\n const densityResult = {\n gap: dna.spacing.content_gap || density.content_gap,\n level: dna.spacing.density || density.level,\n };\n\n // 3. Theme from DNA layer\n const themeId = dna.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildThemeFromV3(essence, isAddon);\n\n // 4. Convert blueprint pages to StructurePage and resolve\n // V3.1 essences may use sections instead of pages; flatten sections into pages\n const blueprintPages =\n blueprint.pages ??\n (blueprint.sections\n ? blueprint.sections.flatMap((s) => s.pages)\n : [{ id: 'home', layout: ['hero'] as LayoutItem[] }]);\n const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? 'sidebar-main';\n const structurePages: StructurePage[] = blueprint.pages\n ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell))\n : blueprint.sections\n ? blueprint.sections.flatMap((section) =>\n section.pages.map((page) =>\n blueprintPageToStructurePage(page, section.shell ?? defaultShell),\n ),\n )\n : [\n blueprintPageToStructurePage(\n { id: 'home', layout: ['hero'] as LayoutItem[] },\n defaultShell,\n ),\n ];\n const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);\n\n // 5. Shell config from blueprint\n const shellType = defaultShell;\n const brand = pascalCase(meta.archetype);\n const routes = buildV3Routes(essence, blueprintPages, structurePages);\n const nav = buildNavItems(structurePages, routes);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: densityResult,\n theme,\n shell,\n routes,\n features: blueprint.features ?? [],\n isV3Source: true,\n };\n}\n\n// ─── Shared page resolution ────────────────────────────────\n\nasync function resolvePages(\n pages: StructurePage[],\n resolver: ContentResolver,\n registryTheme: RegistryTheme | null,\n): Promise<ResolvedPage[]> {\n const resolvedPages: ResolvedPage[] = [];\n for (const page of pages) {\n const refs = extractLayoutRefs(page.layout);\n const patterns = new Map<string, { pattern: Pattern; preset: ResolvedPreset }>();\n\n for (const ref of refs) {\n const patternResult = await resolver.resolve('pattern', ref.id);\n if (patternResult) {\n const preset = resolvePatternPreset(\n patternResult.item,\n ref.explicitPreset,\n registryTheme?.pattern_preferences?.default_presets,\n );\n const key = ref.alias || ref.id;\n patterns.set(key, { pattern: patternResult.item, preset });\n }\n }\n\n // Detect wiring (flatten cols so column children are visible)\n const wiringResults = detectWirings(flattenLayoutForWiring(page.layout));\n const wiring = convertWiring(wiringResults);\n\n resolvedPages.push({ page, patterns, wiring });\n }\n return resolvedPages;\n}\n","/** Convert a kebab-case or snake_case string to PascalCase */\nexport function pascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n","import type { ColumnLayout, LayoutItem, PatternRef, StructurePage } from '@decantr/essence-spec';\nimport type { Pattern, Theme as RegistryTheme, ResolvedPreset } from '@decantr/registry';\nimport { resolveVisualEffects } from './resolve.js';\nimport type {\n IRCardWrapping,\n IRGridNode,\n IRLayer,\n IRNode,\n IRPageNode,\n IRPatternMeta,\n IRPatternNode,\n IRVisualEffect,\n IRWiring,\n} from './types.js';\n\nexport interface ResolvedPatternEntry {\n pattern: Pattern;\n preset: ResolvedPreset;\n}\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction getPatternAlias(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.as || item.pattern;\n return '';\n}\n\nfunction getPatternId(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.pattern;\n return '';\n}\n\nfunction shouldWrapInCard(\n pattern: Pattern,\n preset: ResolvedPreset,\n theme: RegistryTheme | null,\n): boolean {\n // Hero/row/stack layouts are standalone\n const layout = preset.layout.layout;\n if (layout === 'hero' || layout === 'row') return false;\n\n // Pattern explicitly opts out\n if (pattern.contained === false) return false;\n\n // Theme spatial says no cards\n const cardWrapping = theme?.spatial?.card_wrapping;\n if (cardWrapping === 'none') return false;\n\n // Minimal: only wrap if pattern has presets (complex pattern)\n if (cardWrapping === 'minimal') {\n return Object.keys(pattern.presets).length > 0;\n }\n\n // Default: wrap\n return true;\n}\n\nfunction buildCardWrapping(pattern: Pattern, theme: RegistryTheme | null): IRCardWrapping {\n const mode = theme?.spatial?.card_wrapping || 'always';\n return {\n mode: mode as IRCardWrapping['mode'],\n headerLabel: pattern.name,\n };\n}\n\nfunction buildPatternNode(\n patternId: string,\n alias: string,\n resolved: ResolvedPatternEntry | undefined,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPatternNode {\n const pattern = resolved?.pattern;\n const preset = resolved?.preset;\n\n const layout = preset?.layout.layout || 'column';\n const isStandalone = layout === 'hero' || layout === 'row';\n const contained = pattern && preset ? shouldWrapInCard(pattern, preset, theme) : false;\n const components = pattern?.components || [];\n\n const presetName = preset?.preset || 'default';\n const presetDescription = pattern?.presets?.[presetName]?.description;\n // v2.1 C1: thread interactions[] from the pattern through to PagePackPattern\n // so the page-pack renderer can surface them as a checkbox checklist.\n const interactions = Array.isArray((pattern as { interactions?: unknown })?.interactions)\n ? ((pattern as { interactions?: unknown }).interactions as string[])\n : undefined;\n\n const patternMeta: IRPatternMeta = {\n patternId,\n preset: presetName,\n alias,\n layout,\n contained,\n standalone: isStandalone,\n code: preset?.code ? { imports: preset.code.imports, example: preset.code.example } : null,\n components,\n ...(presetDescription ? { presetDescription } : {}),\n ...(interactions && interactions.length > 0 ? { interactions } : {}),\n };\n\n const card = contained && !isStandalone && pattern ? buildCardWrapping(pattern, theme) : null;\n\n const wireProps = wiring?.props[alias] || wiring?.props[patternId] || null;\n\n // Resolve visual effects from theme + pattern when available\n const visualEffects = theme && pattern ? resolveVisualEffects(theme, pattern) : null;\n\n return {\n type: 'pattern',\n id: alias,\n children: [],\n pattern: patternMeta,\n card,\n visualEffects,\n wireProps,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n}\n\n/** Build IR tree for a single page from its resolved structure + patterns */\nexport function buildPageIR(\n page: StructurePage,\n resolvedPatterns: Map<string, ResolvedPatternEntry>,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPageNode {\n const children: IRNode[] = [];\n\n for (const item of page.layout) {\n if (typeof item === 'string') {\n // Simple string → full-width pattern\n const resolved = resolvedPatterns.get(item);\n children.push(buildPatternNode(item, item, resolved, wiring, theme, density, layer));\n } else if (isPatternRef(item)) {\n // PatternRef → pattern with optional preset/alias\n const alias = item.as || item.pattern;\n const resolved = resolvedPatterns.get(alias) || resolvedPatterns.get(item.pattern);\n children.push(buildPatternNode(item.pattern, alias, resolved, wiring, theme, density, layer));\n } else if (isColumnLayout(item)) {\n // ColumnLayout → grid with pattern children\n // cols can mix `string` ids and `PatternRef` objects per the schema.\n // Normalize FIRST so all downstream operations (Map keys, Record\n // keys, joined ids) see strings — otherwise PatternRef objects\n // serialize as `[object Object]` (cold-LLM harness flagged this\n // exact bug in cloud-platform's scaffold-pack).\n const colEntries = item.cols.map((col) => ({\n id: typeof col === 'string' ? col : col.pattern,\n alias:\n typeof col === 'string'\n ? col\n : (col.as ?? col.pattern),\n }));\n const breakpoint = item.at || null;\n const spans = item.span || null;\n\n // Normalize spans: fill in missing columns with weight 1.\n // Span keys reference column ids (the schema's span object uses\n // the column's effective id as the key).\n let normalizedSpans: Record<string, number> | null = null;\n if (spans) {\n normalizedSpans = {};\n for (const entry of colEntries) {\n normalizedSpans[entry.id] = spans[entry.id] || spans[entry.alias] || 1;\n }\n }\n\n const gridChildren: IRNode[] = [];\n for (const entry of colEntries) {\n const resolved =\n resolvedPatterns.get(entry.alias) || resolvedPatterns.get(entry.id);\n gridChildren.push(\n buildPatternNode(entry.id, entry.alias, resolved, wiring, theme, density, layer),\n );\n }\n\n const totalCols = normalizedSpans\n ? Object.values(normalizedSpans).reduce((a, b) => a + b, 0)\n : colEntries.length;\n\n // AUTO: Pass through multi-breakpoint and container query config from ColumnLayout\n const breakpoints = item.breakpoints?.map((bp) => ({ at: bp.at, cols: bp.cols })) || null;\n const responsive = item.responsive || null;\n\n const gridNode: IRGridNode = {\n type: 'grid',\n id: `grid-${colEntries.map((e) => e.id).join('-')}`,\n children: gridChildren,\n cols: totalCols,\n spans: normalizedSpans,\n breakpoint,\n breakpoints,\n responsive,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n children.push(gridNode);\n }\n }\n\n const gapAtom = density.gap.startsWith('_')\n ? density.gap\n : density.gap.startsWith('gap')\n ? `_${density.gap}`\n : `_gap${density.gap}`;\n // Page surface declares layout direction + content gap ONLY. Padding, scroll\n // containment, and flex-grow belong to the shell per the \"Layout Rules\"\n // directive in DECANTR.md (\"One scroll container per region\", \"Let shells\n // own spacing, centering, and scroll containers\", \"Pages should not\n // duplicate shell responsibilities\"). Previous default (`_p4 _overauto\n // _flex1`) contradicted that directive and the v3 harness flagged it as\n // the single most expensive contract-ambiguity friction point. Pages that\n // genuinely need to claim scroll/padding can still declare it explicitly\n // via `page.surface` — the fallback just stops prescribing it.\n const surface = page.surface || `_flex _col ${gapAtom}`;\n\n return {\n type: 'page',\n id: page.id,\n children,\n pageId: page.id,\n surface,\n wiring,\n ...(layer ? { layer } : {}),\n };\n}\n","import type { IRGridNode, IRNode, IRPatternNode } from './types.js';\n\n/** Depth-first walk of IR tree, calling visitor on each node */\nexport function walkIR(\n node: IRNode,\n visitor: (node: IRNode, parent: IRNode | null) => void,\n parent: IRNode | null = null,\n): void {\n visitor(node, parent);\n for (const child of node.children) {\n walkIR(child, visitor, node);\n }\n}\n\n/** Find all nodes of a specific type */\nexport function findNodes<T extends IRNode>(root: IRNode, type: string): T[] {\n const results: T[] = [];\n walkIR(root, (node) => {\n if (node.type === type) {\n results.push(node as T);\n }\n });\n return results;\n}\n\n/** Count total patterns in an IR tree */\nexport function countPatterns(root: IRNode): number {\n return findNodes(root, 'pattern').length;\n}\n\n/** Validate IR tree structure (no orphaned grids, patterns have meta, etc.) */\nexport function validateIR(root: IRNode): string[] {\n const errors: string[] = [];\n\n walkIR(root, (node, parent) => {\n if (node.type === 'grid') {\n const grid = node as IRGridNode;\n if (grid.children.length === 0) {\n errors.push(`Grid node \"${grid.id}\" has no children`);\n }\n }\n\n if (node.type === 'pattern') {\n const pattern = node as IRPatternNode;\n if (!pattern.pattern) {\n errors.push(`Pattern node \"${pattern.id}\" is missing pattern meta`);\n }\n if (!pattern.pattern.patternId) {\n errors.push(`Pattern node \"${pattern.id}\" has no patternId`);\n }\n }\n\n if (node.type === 'page') {\n if (!node.id) {\n errors.push('Page node is missing id');\n }\n }\n });\n\n return errors;\n}\n","import type { EssenceFile, EssenceV3 } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3 } from '@decantr/essence-spec';\nimport type { ContentResolver } from '@decantr/registry';\nimport { walkIR } from './ir-helpers.js';\nimport { runPipeline } from './pipeline.js';\nimport type { IRAppNode, IRNode, IRPageNode, IRPatternNode } from './types.js';\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport const EXECUTION_PACK_SCHEMA_URLS = {\n scaffold: 'https://decantr.ai/schemas/scaffold-pack.v1.json',\n section: 'https://decantr.ai/schemas/section-pack.v1.json',\n page: 'https://decantr.ai/schemas/page-pack.v1.json',\n mutation: 'https://decantr.ai/schemas/mutation-pack.v1.json',\n review: 'https://decantr.ai/schemas/review-pack.v1.json',\n} as const;\n\nexport const PACK_MANIFEST_SCHEMA_URL = 'https://decantr.ai/schemas/pack-manifest.v1.json';\nexport const EXECUTION_PACK_BUNDLE_SCHEMA_URL =\n 'https://decantr.ai/schemas/execution-pack-bundle.v1.json';\nexport const SELECTED_EXECUTION_PACK_SCHEMA_URL =\n 'https://decantr.ai/schemas/selected-execution-pack.v1.json';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: MutationPackKind;\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldPackRoute {\n pageId: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface ScaffoldPackData {\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n navigation?: {\n /**\n * true = palette enabled with implicit defaults.\n * false = not enabled.\n * object = explicit structured contract (see CommandPaletteContract).\n */\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n /** Default hotkey semantics applied unless per-hotkey semantics override. */\n hotkeySemantics?: HotkeySemantics;\n };\n routes: ScaffoldPackRoute[];\n}\n\nexport interface CommandPaletteContract {\n trigger?: string;\n placeholder?: string;\n width?: string;\n styling?: 'modal' | 'sheet' | 'inline' | 'fullscreen';\n commands?: Array<{\n id: string;\n label: string;\n section?: string;\n hotkey?: string;\n action?: string;\n route?: string;\n }>;\n}\n\nexport interface HotkeySemantics {\n chord_window_ms?: number;\n input_guard?: boolean;\n modifier_suppression?: boolean;\n match_case?: boolean;\n}\n\nexport interface ScaffoldExecutionPack extends ExecutionPackBase<ScaffoldPackData> {\n packType: 'scaffold';\n}\n\nexport interface SectionPackInput {\n id: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n pageIds: string[];\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives — short imperative rules for this section. */\n directives?: string[];\n}\n\n/** Navigation item contract for a section's primary navigation. */\nexport interface SectionNavigationItemPack {\n label: string;\n route: string;\n icon?: string;\n hotkey?: string;\n active_match?: string;\n badge?: string;\n}\n\nexport interface SectionPackRoute {\n pageId: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface SectionPackData {\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: SectionPackRoute[];\n /** Contract for items rendered in this section's primary navigation. */\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives emitted into the section-pack rendering. */\n directives?: string[];\n /**\n * Required theme decorator contract surfaced into the compact pack.\n * Mirrors the long-form section-context \"Required Theme Decorators\" table.\n * Cold prompts instruct AI assistants to read packs first, so the strong\n * decorator contract has to live HERE, not just in the long-form file.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\n/** Compact, render-ready decorator entry for pack contracts. */\nexport interface ThemeDecoratorEntry {\n /** Decorator class name without leading dot, e.g. \"lum-glass\". */\n class: string;\n /** Authored intent describing what the decorator does. */\n intent: string;\n /** Authored slot hints listing where to apply it (joined from usage[]). */\n applyTo: string;\n}\n\nexport interface SectionExecutionPack extends ExecutionPackBase<SectionPackData> {\n packType: 'section';\n}\n\nexport interface PagePackInput {\n pageId: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n /** Execution-level directives — short imperative rules for this page. */\n directives?: string[];\n}\n\nexport interface PagePackPattern {\n id: string;\n alias: string;\n preset: string;\n layout: string;\n /**\n * Per-preset prose from the pattern's preset.description. When present,\n * the page-pack renderer emits it as a short description line so cold\n * LLMs read preset-specific guidance instead of having to look up the\n * pattern's root description.\n */\n presetDescription?: string;\n /**\n * v2.1 Tier C1. Declared interactions from the pattern JSON. Rendered\n * as a checkbox checklist so cold LLMs in generation mode see a\n * hard-edged list they can't categorize as \"philosophy\". Enforced by\n * decantr check --strict (C5 guard rule).\n */\n interactions?: string[];\n}\n\nexport interface PagePackData {\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: PagePackPattern[];\n /** Execution-level directives emitted into the page-pack rendering. */\n directives?: string[];\n}\n\nexport interface PageExecutionPack extends ExecutionPackBase<PagePackData> {\n packType: 'page';\n}\n\nexport type MutationPackKind = 'add-page' | 'modify';\n\nexport interface MutationPackData {\n mutationType: MutationPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n workflow: string[];\n}\n\nexport interface MutationExecutionPack extends ExecutionPackBase<MutationPackData> {\n packType: 'mutation';\n}\n\nexport type ReviewPackKind = 'app';\n\nexport interface ReviewPackData {\n reviewType: ReviewPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n focusAreas: string[];\n workflow: string[];\n}\n\nexport interface ReviewExecutionPack extends ExecutionPackBase<ReviewPackData> {\n packType: 'review';\n}\n\nexport interface ExecutionPackBundle {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport type SelectedExecutionPack =\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n\nexport interface ExecutionPackSelector {\n packType: ExecutionPackType;\n id?: string | null;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack: SelectedExecutionPack;\n}\n\nexport interface ScaffoldPackBuilderOptions {\n objective?: string;\n target?: Partial<ExecutionPackTarget>;\n preset?: string | null;\n requiredSetup?: string[];\n examples?: ExecutionPackExample[];\n antiPatterns?: ExecutionPackAntiPattern[];\n successChecks?: ExecutionPackSuccessCheck[];\n tokenBudget?: Partial<ExecutionPackTokenBudget>;\n navigation?: {\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n hotkeySemantics?: HotkeySemantics;\n };\n}\n\nexport interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {\n /**\n * Required theme decorator contract for the section pack contract.\n * When present, the renderer emits a \"Required Theme Decorators\" table\n * with class + intent + apply-to slots — same shape as the long-form\n * section-context renderer in CLI scaffold.ts.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\nexport interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {}\nexport interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {\n mutationType: MutationPackKind;\n workflow?: string[];\n}\nexport interface ReviewPackBuilderOptions extends ScaffoldPackBuilderOptions {\n reviewType?: ReviewPackKind;\n focusAreas?: string[];\n workflow?: string[];\n}\n\nexport interface CompileExecutionPackBundleOptions {\n contentRoot?: string;\n overridePaths?: string[];\n resolver?: ContentResolver;\n}\n\nconst DEFAULT_TARGET: ExecutionPackTarget = {\n platform: 'web',\n framework: null,\n runtime: null,\n adapter: 'generic-web',\n};\n\nconst DEFAULT_TOKEN_BUDGET: ExecutionPackTokenBudget = {\n target: 1400,\n max: 2200,\n strategy: [\n 'Prefer route summaries over repeated prose.',\n 'Use compact vocabulary lists instead of large reference tables.',\n 'Include only task-relevant examples and checks.',\n ],\n};\n\nconst DEFAULT_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'route-topology',\n label: 'Routes and page IDs match the compiled topology.',\n severity: 'error',\n },\n {\n id: 'shell-consistency',\n label: 'The declared shell contract is preserved unless the task explicitly mutates it.',\n severity: 'error',\n },\n {\n id: 'theme-consistency',\n label: 'Theme identity and mode remain consistent across scaffolded routes.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_SECTION_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'section-route-coherence',\n label: 'Section pages and routes remain coherent with the compiled topology.',\n severity: 'error',\n },\n {\n id: 'section-shell-consistency',\n label: 'The section shell contract stays consistent across its routes.',\n severity: 'error',\n },\n {\n id: 'section-pattern-coverage',\n label: 'Primary section patterns are represented without adding off-contract filler sections.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_PAGE_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'page-route-contract',\n label: 'The page keeps the compiled route, shell, and section contract intact.',\n severity: 'error',\n },\n {\n id: 'page-pattern-contract',\n label:\n 'The page preserves its primary compiled patterns instead of drifting into unrelated layouts.',\n severity: 'error',\n },\n {\n id: 'page-state-contract',\n label: 'Any declared wiring signals remain coherent with the rendered page structure.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_MUTATION_SUCCESS_CHECKS: Record<MutationPackKind, ExecutionPackSuccessCheck[]> = {\n 'add-page': [\n {\n id: 'mutation-essence-first',\n label: 'New pages are declared in the essence before any code generation begins.',\n severity: 'error',\n },\n {\n id: 'mutation-shell-contract',\n label:\n 'New routes inherit an existing shell and section contract unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-refresh',\n label: 'Refresh compiled packs after the mutation so downstream tasks read current topology.',\n severity: 'warn',\n },\n ],\n modify: [\n {\n id: 'mutation-existing-topology',\n label:\n 'Modified routes remain coherent with the compiled topology unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-theme-contract',\n label: 'Theme, shell, and page identity stay aligned with the current contract during edits.',\n severity: 'error',\n },\n {\n id: 'mutation-page-pack-first',\n label:\n 'Route-local edits should start from the compiled page pack rather than improvised structure.',\n severity: 'warn',\n },\n ],\n};\n\nconst DEFAULT_REVIEW_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'review-contract-baseline',\n label:\n 'Review findings should use the compiled route, shell, and theme contract as the baseline.',\n severity: 'error',\n },\n {\n id: 'review-evidence',\n label: 'Each critique finding should cite concrete evidence from the generated workspace.',\n severity: 'error',\n },\n {\n id: 'review-remediation',\n label:\n 'Suggested fixes should point back to code changes or essence updates when contract drift exists.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_REVIEW_ANTI_PATTERNS: ExecutionPackAntiPattern[] = [\n {\n id: 'inline-styles',\n summary: 'Avoid inline style literals as the primary styling path.',\n guidance:\n 'Move visual styling into tokens.css and treatments.css instead of component-local style objects.',\n },\n {\n id: 'hardcoded-colors',\n summary: 'Avoid hardcoded color literals.',\n guidance: 'Use CSS variables and theme decorators instead of hex, rgb, or hsl values.',\n },\n {\n id: 'utility-framework-leakage',\n summary: 'Avoid utility-framework leakage as the primary design language.',\n guidance:\n 'Prefer compiled Decantr treatments and contract vocabulary over ad hoc utility class stacks.',\n },\n];\n\nfunction collectPatternIds(page: IRPageNode): string[] {\n const patternIds: string[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patternIds.push(patternNode.pattern.patternId);\n });\n return [...new Set(patternIds)];\n}\n\nfunction summarizeRoutes(appNode: IRAppNode): ScaffoldPackRoute[] {\n return appNode.routes.flatMap((route) => {\n const pageNode = findPageNode(appNode, route.pageId);\n if (!pageNode) return [];\n return [\n {\n pageId: pageNode.pageId,\n path: route.path,\n patternIds: collectPatternIds(pageNode),\n shell: route.shell,\n },\n ];\n });\n}\n\nfunction summarizeSectionRoutes(appNode: IRAppNode, input: SectionPackInput): SectionPackRoute[] {\n return summarizeRoutes(appNode).filter((route) => input.pageIds.includes(route.pageId));\n}\n\nfunction summarizePageRoute(appNode: IRAppNode, pageId: string): ScaffoldPackRoute | null {\n return summarizeRoutes(appNode).find((route) => route.pageId === pageId) ?? null;\n}\n\nfunction findPageNode(appNode: IRAppNode, pageId: string): IRPageNode | null {\n const page = appNode.children.find((node) => (node as IRPageNode).pageId === pageId);\n return page ? (page as IRPageNode) : null;\n}\n\nfunction collectPagePatterns(page: IRPageNode): PagePackPattern[] {\n const patterns: PagePackPattern[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patterns.push({\n id: patternNode.pattern.patternId,\n alias: patternNode.pattern.alias,\n preset: patternNode.pattern.preset,\n layout: patternNode.pattern.layout,\n ...(patternNode.pattern.presetDescription\n ? { presetDescription: patternNode.pattern.presetDescription }\n : {}),\n ...(patternNode.pattern.interactions && patternNode.pattern.interactions.length > 0\n ? { interactions: patternNode.pattern.interactions }\n : {}),\n });\n });\n return patterns;\n}\n\nfunction mergeTokenBudget(overrides?: Partial<ExecutionPackTokenBudget>): ExecutionPackTokenBudget {\n return {\n target: overrides?.target ?? DEFAULT_TOKEN_BUDGET.target,\n max: overrides?.max ?? DEFAULT_TOKEN_BUDGET.max,\n strategy: overrides?.strategy ?? DEFAULT_TOKEN_BUDGET.strategy,\n };\n}\n\nfunction renderList(title: string, entries: string[]): string[] {\n if (entries.length === 0) return [];\n return [title, ...entries.map((entry) => `- ${entry}`), ''];\n}\n\n// Compact description of hotkey semantics for pack markdown. Returns empty\n// string when no semantics are declared so the line can be omitted entirely.\nfunction formatHotkeySemantics(semantics: HotkeySemantics | undefined): string {\n if (!semantics) return '';\n const parts: string[] = [];\n if (typeof semantics.chord_window_ms === 'number') {\n parts.push(`chord window ${semantics.chord_window_ms}ms`);\n }\n if (semantics.input_guard === true) parts.push('suppress during text-input focus');\n if (semantics.input_guard === false) parts.push('fire even while typing (explicit)');\n if (semantics.modifier_suppression === true) parts.push('ignore when modifier held');\n if (semantics.modifier_suppression === false) parts.push('allow modifier passthrough (explicit)');\n if (semantics.match_case === true) parts.push('case-sensitive');\n return parts.join('; ');\n}\n\n// Short, mechanical router-implementation hint so the LLM picks the right\n// imports without having to consult a separate narrative file. Keyed off the\n// same string enum as the schema.\nfunction routingImplementationHint(routing: 'hash' | 'history' | 'pathname'): string {\n switch (routing) {\n case 'hash':\n return 'HashRouter from react-router-dom; URLs prefixed with /# (e.g. /#/login). Only for static-only hosts without SPA fallback.';\n case 'history':\n return 'BrowserRouter from react-router-dom; regular URLs (e.g. /login). Works on Vite dev, Vercel, Netlify, Cloudflare Pages.';\n case 'pathname':\n return 'pathname-based routing (Next.js App Router file conventions).';\n default:\n return String(routing);\n }\n}\n\nexport function renderExecutionPackMarkdown(pack: ExecutionPackBase<unknown>): string {\n const lines: string[] = [];\n\n lines.push(`# ${pack.packType.charAt(0).toUpperCase()}${pack.packType.slice(1)} Pack`);\n lines.push('');\n lines.push(`**Objective:** ${pack.objective}`);\n lines.push(\n `**Target:** ${pack.target.adapter}${pack.target.framework ? ` (${pack.target.framework})` : ''}`,\n );\n lines.push(\n `**Scope:** pages=${pack.scope.pageIds.join(', ') || 'none'} | patterns=${pack.scope.patternIds.join(', ') || 'none'}`,\n );\n lines.push('');\n\n if (pack.packType === 'scaffold') {\n const scaffoldPack = pack as ScaffoldExecutionPack;\n const scaffoldShells = [\n ...new Set(scaffoldPack.data.routes.map((route) => route.shell).filter(Boolean)),\n ];\n lines.push('## Scaffold Contract');\n lines.push(`- Shell: ${scaffoldPack.data.shell}`);\n if (scaffoldShells.length > 1) {\n const secondaryShells = scaffoldShells.filter((shell) => shell !== scaffoldPack.data.shell);\n lines.push(\n `- Shells: ${[`${scaffoldPack.data.shell} (primary)`, ...secondaryShells].join(', ')}`,\n );\n }\n lines.push(`- Theme: ${scaffoldPack.data.theme.id} (${scaffoldPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${scaffoldPack.data.routing} → ${routingImplementationHint(scaffoldPack.data.routing)}`,\n );\n if (scaffoldPack.data.features.length > 0) {\n lines.push(`- Features: ${scaffoldPack.data.features.join(', ')}`);\n }\n if (\n scaffoldPack.data.navigation?.commandPalette ||\n scaffoldPack.data.navigation?.hotkeys.length\n ) {\n lines.push('- Navigation:');\n const cp = scaffoldPack.data.navigation.commandPalette;\n if (cp) {\n if (typeof cp === 'object') {\n lines.push(' - Command palette:');\n if (cp.trigger) lines.push(` - Trigger: ${cp.trigger}`);\n if (cp.styling)\n lines.push(` - Styling: ${cp.styling}${cp.width ? ` (width ${cp.width})` : ''}`);\n else if (cp.width) lines.push(` - Width: ${cp.width}`);\n if (cp.placeholder) lines.push(` - Placeholder: \"${cp.placeholder}\"`);\n if (cp.commands && cp.commands.length > 0) {\n lines.push(` - Commands (${cp.commands.length}):`);\n for (const command of cp.commands) {\n const parts: string[] = [];\n if (command.section) parts.push(command.section);\n parts.push(command.label);\n if (command.hotkey) parts.push(`[${command.hotkey}]`);\n if (command.route) parts.push(`→ ${command.route}`);\n lines.push(` - ${command.id}: ${parts.join(' · ')}`);\n }\n }\n } else {\n lines.push(' - command palette required');\n }\n }\n const globalSemantics = scaffoldPack.data.navigation.hotkeySemantics;\n if (scaffoldPack.data.navigation.hotkeys.length > 0) {\n const semanticsSummary = formatHotkeySemantics(globalSemantics);\n lines.push(` - Hotkeys${semanticsSummary ? ` (${semanticsSummary})` : ''}:`);\n for (const hotkey of scaffoldPack.data.navigation.hotkeys) {\n const target = [hotkey.label, hotkey.route].filter(Boolean).join(' — ');\n const perKeySemantics = formatHotkeySemantics(hotkey.semantics);\n const suffix = perKeySemantics ? ` _(${perKeySemantics})_` : '';\n lines.push(` - ${hotkey.key}${target ? `: ${target}` : ''}${suffix}`);\n }\n }\n }\n lines.push('');\n\n lines.push('## Route Plan');\n for (const route of scaffoldPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n }\n\n if (pack.packType === 'section') {\n const sectionPack = pack as SectionExecutionPack;\n lines.push('## Section Contract');\n lines.push(`- Section: ${sectionPack.data.sectionId}`);\n lines.push(`- Role: ${sectionPack.data.role}`);\n lines.push(`- Shell: ${sectionPack.data.shell}`);\n lines.push(`- Theme: ${sectionPack.data.theme.id} (${sectionPack.data.theme.mode})`);\n if (sectionPack.data.features.length > 0) {\n lines.push(`- Features: ${sectionPack.data.features.join(', ')}`);\n }\n if (sectionPack.data.description) {\n lines.push(`- Description: ${sectionPack.data.description}`);\n }\n lines.push('');\n\n lines.push('## Section Routes');\n for (const route of sectionPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (sectionPack.data.navigationItems && sectionPack.data.navigationItems.length > 0) {\n lines.push('## Section Navigation');\n lines.push('');\n lines.push(\n \"Render these items in the shell's primary navigation. Exact match on label, route, and icon.\",\n );\n lines.push('');\n for (const item of sectionPack.data.navigationItems) {\n const parts: string[] = [`${item.label} → ${item.route}`];\n if (item.icon) parts.push(`icon: ${item.icon}`);\n if (item.hotkey) parts.push(`hotkey: ${item.hotkey}`);\n if (item.badge) parts.push(`badge: ${item.badge}`);\n if (item.active_match) parts.push(`active match: \\`${item.active_match}\\``);\n lines.push(`- ${parts.join(' · ')}`);\n }\n lines.push('');\n }\n\n if (sectionPack.data.directives && sectionPack.data.directives.length > 0) {\n lines.push('## Section Directives');\n lines.push('');\n lines.push(\n 'Execution-level rules every page in this section must obey. Follow exactly — these live in the pack contract, not narrative prose.',\n );\n lines.push('');\n for (const directive of sectionPack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n\n // Required Theme Decorators — strong contract surfaced in the compact pack.\n // Cold prompts instruct AI to read packs first, so the decorator contract\n // has to be present here, not just in the long-form section-{id}.md file.\n // Mirrors the renderer in CLI scaffold.ts:generateSectionContext.\n if (sectionPack.data.themeDecorators && sectionPack.data.themeDecorators.length > 0) {\n const escCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${sectionPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these — without them, the page reads as \"themed colors only\" with no theme character.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of sectionPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escCell(entry.intent)} | ${escCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'page') {\n const pagePack = pack as PageExecutionPack;\n lines.push('## Page Contract');\n lines.push(`- Page: ${pagePack.data.pageId}`);\n lines.push(`- Path: ${pagePack.data.path}`);\n lines.push(`- Shell: ${pagePack.data.shell}`);\n if (pagePack.data.sectionId) {\n const role = pagePack.data.sectionRole ? ` (${pagePack.data.sectionRole})` : '';\n lines.push(`- Section: ${pagePack.data.sectionId}${role}`);\n }\n lines.push(`- Theme: ${pagePack.data.theme.id} (${pagePack.data.theme.mode})`);\n if (pagePack.data.features.length > 0) {\n lines.push(`- Features: ${pagePack.data.features.join(', ')}`);\n }\n if (pagePack.data.surface) {\n lines.push(`- Surface: ${pagePack.data.surface}`);\n }\n lines.push('');\n\n lines.push('## Page Patterns');\n for (const pattern of pagePack.data.patterns) {\n lines.push(\n `- ${pattern.alias} -> ${pattern.id} [${pattern.layout}${pattern.preset ? ` | ${pattern.preset}` : ''}]`,\n );\n // Emit preset-specific description on the next line (indented) when\n // the pattern's preset carries its own prose. This stops cold LLMs\n // from falling back to the blueprint-generic root description.\n if (pattern.presetDescription) {\n lines.push(` > ${pattern.presetDescription}`);\n }\n // v2.1 C1: surface declared interactions[] as a checkbox checklist.\n // Hard-edged format — LLMs in generation mode cannot categorize a\n // checkbox as philosophy. Enforced by decantr check --strict (C5).\n if (pattern.interactions && pattern.interactions.length > 0) {\n lines.push(` **Interactions (MUST implement each — see DECANTR.md \"Interaction Requirements\"):**`);\n for (const interaction of pattern.interactions) {\n lines.push(` - [ ] ${interaction}`);\n }\n }\n }\n lines.push('');\n\n if (pagePack.data.wiringSignals.length > 0) {\n lines.push('## Wiring Signals');\n for (const signal of pagePack.data.wiringSignals) {\n lines.push(`- ${signal}`);\n }\n lines.push('');\n }\n\n if (pagePack.data.directives && pagePack.data.directives.length > 0) {\n lines.push('## Page Directives');\n lines.push('');\n lines.push('Execution-level rules for this route. Follow exactly.');\n lines.push('');\n for (const directive of pagePack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'mutation') {\n const mutationPack = pack as MutationExecutionPack;\n lines.push('## Mutation Contract');\n lines.push(`- Operation: ${mutationPack.data.mutationType}`);\n lines.push(`- Shell: ${mutationPack.data.shell}`);\n lines.push(`- Theme: ${mutationPack.data.theme.id} (${mutationPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${mutationPack.data.routing} → ${routingImplementationHint(mutationPack.data.routing)}`,\n );\n if (mutationPack.data.features.length > 0) {\n lines.push(`- Features: ${mutationPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Route Topology');\n for (const route of mutationPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (mutationPack.data.workflow.length > 0) {\n lines.push('## Workflow');\n for (const step of mutationPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'review') {\n const reviewPack = pack as ReviewExecutionPack;\n lines.push('## Review Contract');\n lines.push(`- Review Type: ${reviewPack.data.reviewType}`);\n lines.push(`- Shell: ${reviewPack.data.shell}`);\n lines.push(`- Theme: ${reviewPack.data.theme.id} (${reviewPack.data.theme.mode})`);\n lines.push(`- Routing: ${reviewPack.data.routing}`);\n if (reviewPack.data.features.length > 0) {\n lines.push(`- Features: ${reviewPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Review Topology');\n for (const route of reviewPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${route.pageId}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (reviewPack.data.focusAreas.length > 0) {\n lines.push('## Focus Areas');\n for (const focusArea of reviewPack.data.focusAreas) {\n lines.push(`- ${focusArea}`);\n }\n lines.push('');\n }\n\n if (reviewPack.data.workflow.length > 0) {\n lines.push('## Review Workflow');\n for (const step of reviewPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n // P1-1 — Page packs skip the universal footer (required setup, allowed\n // vocabulary, success checks, anti-patterns, examples, token budget).\n // These blocks are identical across every page in a 16-page scaffold\n // (~35 lines × N pages of pure boilerplate) and their JSON still carries\n // all fields for any consumer that needs the raw data. Non-page packs\n // keep the full footer — each one (scaffold, section, mutation, review)\n // is a singleton per scaffold so there's no duplication problem.\n if (pack.packType === 'page') {\n lines.push('## Shared Contract');\n lines.push(\n 'Required setup, allowed vocabulary, success checks, anti-patterns, and token budget are shared across every page pack. The full list lives in the pack JSON sidecar (`page-<id>-pack.json`) and in the pack-manifest. Refer there instead of re-reading the same boilerplate 16 times.',\n );\n lines.push('');\n return lines.join('\\n').trimEnd() + '\\n';\n }\n\n lines.push('## Required Setup');\n if (pack.requiredSetup.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.requiredSetup.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push('## Allowed Vocabulary');\n if (pack.allowedVocabulary.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.allowedVocabulary.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push(\n ...renderList(\n '## Success Checks',\n pack.successChecks.map((entry) => `${entry.label} [${entry.severity}]`),\n ),\n );\n lines.push(\n ...renderList(\n '## Anti-Patterns',\n pack.antiPatterns.map((entry) => `${entry.summary}: ${entry.guidance}`),\n ),\n );\n lines.push(\n ...renderList(\n '## Examples',\n pack.examples.map((entry) => `${entry.label} (${entry.language})`),\n ),\n );\n\n lines.push('## Token Budget');\n lines.push(`- Target: ${pack.tokenBudget.target}`);\n lines.push(`- Max: ${pack.tokenBudget.max}`);\n lines.push(...pack.tokenBudget.strategy.map((entry) => `- ${entry}`));\n lines.push('');\n\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function resolvePackAdapter(\n target: string | undefined,\n platformType: string | undefined,\n): string {\n if (target === 'react' && platformType === 'spa') return 'react-vite';\n if (target === 'react') return 'react-web';\n if (target === 'vue' && platformType === 'spa') return 'vue-vite';\n if (target === 'svelte' && platformType === 'spa') return 'sveltekit';\n if (target) return target;\n return 'generic-web';\n}\n\nexport function listPackSections(essence: EssenceV3): SectionPackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections\n .map((section) => {\n const pageIds = section.pages\n .filter(\n (page) =>\n routedSectionPages.size === 0 || routedSectionPages.has(`${section.id}:${page.id}`),\n )\n .map((page) => page.id);\n\n return {\n id: section.id,\n role: section.role,\n shell: section.shell as string,\n description: section.description,\n features: section.features,\n pageIds,\n ...(Array.isArray(section.navigation_items) && section.navigation_items.length > 0\n ? { navigationItems: section.navigation_items as SectionNavigationItemPack[] }\n : {}),\n ...(Array.isArray(section.directives) && section.directives.length > 0\n ? { directives: section.directives }\n : {}),\n };\n })\n .filter((section) => section.pageIds.length > 0);\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n return [\n {\n id: essence.meta.archetype || 'default',\n role: 'primary',\n shell: (essence.blueprint.shell ?? 'sidebar-main') as string,\n description: `${essence.meta.archetype || 'Application'} section`,\n features: essence.blueprint.features || [],\n pageIds: pages.map((page) => page.id),\n },\n ];\n}\n\nexport function listPackPages(essence: EssenceV3): PagePackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections.flatMap((section) =>\n section.pages\n .map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? section.shell) as string,\n sectionId: section.id,\n sectionRole: section.role,\n features: section.features,\n ...(Array.isArray(page.directives) && page.directives.length > 0\n ? { directives: page.directives }\n : {}),\n }))\n .filter(\n (page) =>\n routedSectionPages.size === 0 ||\n routedSectionPages.has(`${page.sectionId}:${page.pageId}`),\n ),\n );\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n const defaultShell = (essence.blueprint.shell ?? 'sidebar-main') as string;\n return pages.map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? defaultShell) as string,\n sectionId: essence.meta.archetype || 'default',\n sectionRole: 'primary',\n features: essence.blueprint.features || [],\n }));\n}\n\nexport function buildScaffoldPack(\n appNode: IRAppNode,\n options: ScaffoldPackBuilderOptions = {},\n): ScaffoldExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: ScaffoldExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.scaffold,\n packVersion: '1.0.0',\n packType: 'scaffold',\n objective:\n options.objective ?? `Scaffold the ${appNode.theme.id} app shell and declared routes.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the declared routes as the topology source of truth.',\n 'Preserve the resolved theme and shell contract unless the task explicitly mutates them.',\n ],\n allowedVocabulary: [\n ...new Set([\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n navigation: options.navigation,\n routes,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildSectionPack(\n appNode: IRAppNode,\n input: SectionPackInput,\n options: SectionPackBuilderOptions = {},\n): SectionExecutionPack {\n const routes = summarizeSectionRoutes(appNode, input);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: SectionExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.section,\n packVersion: '1.0.0',\n packType: 'section',\n objective:\n options.objective ??\n `Implement the ${input.id} section using the compiled ${input.shell} shell contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Use the declared section routes as the source of truth for this slice of the app.',\n 'Keep the section shell consistent unless the task explicitly changes the shell contract.',\n ],\n allowedVocabulary: [\n ...new Set([\n input.id,\n input.role,\n input.shell,\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SECTION_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n sectionId: input.id,\n role: input.role,\n shell: input.shell,\n description: input.description,\n features: input.features,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routes,\n ...(input.navigationItems && input.navigationItems.length > 0\n ? { navigationItems: input.navigationItems }\n : {}),\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildPagePack(\n appNode: IRAppNode,\n input: PagePackInput,\n options: PagePackBuilderOptions = {},\n): PageExecutionPack {\n const pageNode = findPageNode(appNode, input.pageId);\n const route = summarizePageRoute(appNode, input.pageId);\n\n if (!pageNode || !route) {\n throw new Error(`Unknown page for page pack: ${input.pageId}`);\n }\n\n const patterns = collectPagePatterns(pageNode);\n\n const pack: PageExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.page,\n packVersion: '1.0.0',\n packType: 'page',\n objective:\n options.objective ?? `Implement the ${input.pageId} route using the compiled page contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: [route.pageId],\n patternIds: [...new Set(patterns.map((pattern) => pattern.id))],\n },\n requiredSetup: options.requiredSetup ?? [\n 'Keep the compiled route and shell contract stable for this page.',\n 'Treat the listed page patterns as the primary structure for this route.',\n ],\n allowedVocabulary: [\n ...new Set(\n [\n input.pageId,\n input.shell,\n input.sectionId ?? '',\n input.sectionRole ?? '',\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...patterns.flatMap((pattern) => [pattern.id, pattern.alias, pattern.layout]),\n ].filter(Boolean),\n ),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_PAGE_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n pageId: route.pageId,\n path: route.path,\n shell: input.shell,\n sectionId: input.sectionId,\n sectionRole: input.sectionRole,\n features: input.features,\n surface: pageNode.surface,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n wiringSignals: pageNode.wiring?.signals.map((signal) => signal.name) ?? [],\n patterns,\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildMutationPack(\n appNode: IRAppNode,\n options: MutationPackBuilderOptions,\n): MutationExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const defaultWorkflow =\n options.mutationType === 'add-page'\n ? [\n 'Declare the new page in the essence before generating code.',\n 'Refresh Decantr context so section and page packs include the new route.',\n 'Read the relevant section pack and new page pack before implementation.',\n ]\n : [\n 'Read the page pack for the route you are modifying first.',\n 'Stop and update the essence before changing route, shell, or pattern contracts.',\n 'Validate and check drift after code changes complete.',\n ];\n\n const pack: MutationExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.mutation,\n packVersion: '1.0.0',\n packType: 'mutation',\n objective:\n options.objective ??\n `Execute the ${options.mutationType} workflow against the compiled app contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the compiled topology as the source of truth until the essence changes.',\n 'Refresh Decantr context after structural mutations so downstream tasks read current packs.',\n ],\n allowedVocabulary: [\n ...new Set([\n options.mutationType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_MUTATION_SUCCESS_CHECKS[options.mutationType],\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n mutationType: options.mutationType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n workflow: options.workflow ?? defaultWorkflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildReviewPack(\n appNode: IRAppNode,\n options: ReviewPackBuilderOptions = {},\n): ReviewExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const reviewType = options.reviewType ?? 'app';\n const focusAreas = options.focusAreas ?? [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n ];\n const workflow = options.workflow ?? [\n 'Read the scaffold pack and page packs before evaluating generated code.',\n 'Compare findings against the compiled route, shell, and theme contract first.',\n 'Escalate contract drift into essence updates when the requested output intentionally changes topology or theme identity.',\n ];\n\n const pack: ReviewExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.review,\n packVersion: '1.0.0',\n packType: 'review',\n objective:\n options.objective ?? 'Review generated output against the compiled Decantr contract.',\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Read the compiled scaffold and route packs before reviewing code.',\n 'Use concrete evidence from the workspace instead of purely stylistic intuition.',\n ],\n allowedVocabulary: [\n ...new Set([\n reviewType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ...focusAreas,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? DEFAULT_REVIEW_ANTI_PATTERNS,\n successChecks: options.successChecks ?? DEFAULT_REVIEW_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n reviewType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n focusAreas,\n workflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport async function compileExecutionPackBundle(\n essence: EssenceFile,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<ExecutionPackBundle> {\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n const generatedAt = new Date().toISOString();\n const sharedTarget = {\n framework: effectiveEssence.meta.target || null,\n runtime: effectiveEssence.meta.platform.type || null,\n adapter: resolvePackAdapter(effectiveEssence.meta.target, effectiveEssence.meta.platform.type),\n };\n\n const pipeline = await runPipeline(essence, {\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n resolver: options.resolver,\n });\n\n const navMeta = effectiveEssence.meta.navigation;\n // Preserve the full command_palette value when it's a structured contract;\n // coerce to boolean only when it's the legacy flag form.\n const commandPaletteValue: boolean | CommandPaletteContract =\n typeof navMeta?.command_palette === 'object' && navMeta.command_palette !== null\n ? (navMeta.command_palette as CommandPaletteContract)\n : Boolean(navMeta?.command_palette);\n\n const scaffold = buildScaffoldPack(pipeline.ir, {\n target: sharedTarget,\n navigation: {\n commandPalette: commandPaletteValue,\n hotkeys: Array.isArray(navMeta?.hotkeys)\n ? navMeta.hotkeys\n .filter(\n (\n hotkey,\n ): hotkey is {\n key: string;\n route?: string;\n action?: string;\n label: string;\n semantics?: HotkeySemantics;\n } =>\n Boolean(\n hotkey && typeof hotkey.key === 'string' && typeof hotkey.label === 'string',\n ),\n )\n .map((hotkey) => ({\n key: hotkey.key,\n route: hotkey.route,\n label: hotkey.label,\n ...(hotkey.semantics ? { semantics: hotkey.semantics as HotkeySemantics } : {}),\n }))\n : [],\n ...(navMeta?.hotkey_semantics\n ? { hotkeySemantics: navMeta.hotkey_semantics as HotkeySemantics }\n : {}),\n },\n });\n const review = buildReviewPack(pipeline.ir, {\n target: sharedTarget,\n });\n // Compose theme decorator contract from registry data once and reuse for\n // every section pack. Filter to entries that have the minimum data needed\n // to render a useful row (intent OR description, plus at least one usage\n // hint). Themes without decorator_definitions resolve to undefined here\n // and the renderer skips the table entirely.\n const themeDecorators: ThemeDecoratorEntry[] | undefined = (() => {\n const defs = pipeline.registryTheme?.decorator_definitions;\n if (!defs) return undefined;\n const entries: ThemeDecoratorEntry[] = [];\n for (const [name, def] of Object.entries(defs)) {\n const intent = def.intent || def.description || '';\n const applyTo = (def.usage || []).join(', ');\n if (!intent && !applyTo) continue;\n entries.push({ class: name, intent, applyTo });\n }\n return entries.length > 0 ? entries : undefined;\n })();\n\n const sections = listPackSections(effectiveEssence).map((section) =>\n buildSectionPack(pipeline.ir, section, {\n target: sharedTarget,\n ...(themeDecorators ? { themeDecorators } : {}),\n }),\n );\n const pages = listPackPages(effectiveEssence).map((page) =>\n buildPagePack(pipeline.ir, page, {\n target: sharedTarget,\n }),\n );\n const mutations = (['add-page', 'modify'] as const).map((mutationType) =>\n buildMutationPack(pipeline.ir, {\n mutationType,\n target: sharedTarget,\n }),\n );\n\n const manifest: ExecutionPackManifest = {\n $schema: PACK_MANIFEST_SCHEMA_URL,\n version: '1.0.0',\n generatedAt,\n scaffold: {\n id: 'scaffold',\n markdown: 'scaffold-pack.md',\n json: 'scaffold-pack.json',\n },\n review: {\n id: 'review',\n markdown: 'review-pack.md',\n json: 'review-pack.json',\n },\n sections: listPackSections(effectiveEssence).map((section) => ({\n id: section.id,\n markdown: `section-${section.id}-pack.md`,\n json: `section-${section.id}-pack.json`,\n pageIds: section.pageIds,\n })),\n pages: listPackPages(effectiveEssence).map((page) => ({\n id: page.pageId,\n markdown: `page-${page.pageId}-pack.md`,\n json: `page-${page.pageId}-pack.json`,\n sectionId: page.sectionId,\n sectionRole: page.sectionRole,\n })),\n mutations: (['add-page', 'modify'] as const).map((mutationType) => ({\n id: mutationType,\n markdown: `mutation-${mutationType}-pack.md`,\n json: `mutation-${mutationType}-pack.json`,\n mutationType,\n })),\n };\n\n return {\n $schema: EXECUTION_PACK_BUNDLE_SCHEMA_URL,\n generatedAt,\n sourceEssenceVersion: essence.version,\n manifest,\n scaffold,\n review,\n sections,\n pages,\n mutations,\n };\n}\n\nexport function selectExecutionPackFromBundle(\n bundle: ExecutionPackBundle,\n selector: ExecutionPackSelector,\n): SelectedExecutionPackResponse | null {\n const id = selector.id ?? null;\n let pack: SelectedExecutionPack | null = null;\n\n switch (selector.packType) {\n case 'scaffold':\n pack = bundle.scaffold;\n break;\n case 'review':\n pack = bundle.review;\n break;\n case 'section':\n pack = id ? (bundle.sections.find((entry) => entry.data.sectionId === id) ?? null) : null;\n break;\n case 'page':\n pack = id ? (bundle.pages.find((entry) => entry.data.pageId === id) ?? null) : null;\n break;\n case 'mutation':\n pack = id ? (bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null) : null;\n break;\n default:\n pack = null;\n break;\n }\n\n if (!pack) {\n return null;\n }\n\n return {\n $schema: SELECTED_EXECUTION_PACK_SCHEMA_URL,\n generatedAt: bundle.generatedAt,\n sourceEssenceVersion: bundle.sourceEssenceVersion,\n manifest: bundle.manifest,\n selector: {\n packType: selector.packType,\n id,\n },\n pack,\n };\n}\n\nexport async function compileSelectedExecutionPack(\n essence: EssenceFile,\n selector: ExecutionPackSelector,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<SelectedExecutionPackResponse | null> {\n const bundle = await compileExecutionPackBundle(essence, options);\n return selectExecutionPackFromBundle(bundle, selector);\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3, validateEssence } from '@decantr/essence-spec';\nimport type { ContentResolver, Theme as RegistryTheme } from '@decantr/registry';\nimport { createResolver } from '@decantr/registry';\nimport { buildPageIR } from './ir.js';\nimport { resolveEssence } from './resolve.js';\nimport type { IRAppNode, IRLayer, IRPageNode, IRShellNode, IRStoreNode } from './types.js';\nimport { pascalCase } from './utils.js';\n\nfunction extractRouting(essence: EssenceFile): 'hash' | 'history' | 'pathname' {\n // Modern-SPA default. See packages/cli/src/scaffold.ts getPlatformMeta for rationale.\n if (isV3(essence)) {\n return essence.meta.platform.routing || 'history';\n }\n return (\n ((essence as { platform?: { routing?: string } }).platform?.routing as\n | 'hash'\n | 'history'\n | 'pathname') || 'history'\n );\n}\n\nexport interface PipelineOptions {\n /** Path to content directory (patterns, archetypes, themes) */\n contentRoot?: string;\n\n /** Override paths for local content resolution */\n overridePaths?: string[];\n\n /** Only resolve specific page(s) */\n pageFilter?: string;\n\n /** Optional custom resolver for hosted or in-memory execution */\n resolver?: ContentResolver;\n}\n\nexport interface PipelineResult {\n /** The framework-agnostic intermediate representation */\n ir: IRAppNode;\n /**\n * The fully-resolved registry theme record, including `decorator_definitions`\n * and other rich theme data not carried in the lite IR `theme` node.\n * Consumers (e.g. pack builders) need this to render decorator contracts\n * into compiled artifacts.\n */\n registryTheme: RegistryTheme | null;\n}\n\n/**\n * Run the Design Pipeline:\n * 1. Validate Essence against schema + guard rules\n * 2. Resolve all references (patterns, theme, wiring) from registry\n * 3. Build framework-agnostic IR tree\n * 4. Return IR (no code generation — that's the consumer's job)\n */\nexport async function runPipeline(\n essence: EssenceFile,\n options: PipelineOptions,\n): Promise<PipelineResult> {\n // 1. Validate\n const validation = validateEssence(essence);\n if (!validation.valid) {\n throw new Error(`Invalid essence: ${validation.errors.join(', ')}`);\n }\n\n // 2. Auto-migrate v2 → v3 before processing\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n\n // 3. Create resolver and resolve\n const resolver =\n options.resolver ??\n (() => {\n if (!options.contentRoot) {\n throw new Error('Pipeline options must include either a contentRoot or a resolver.');\n }\n\n return createResolver({\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n });\n })();\n\n const resolved = await resolveEssence(effectiveEssence, resolver);\n\n // 4. Build IR pages (v3 sources get layer metadata)\n const layer: IRLayer | undefined = resolved.isV3Source ? 'blueprint' : undefined;\n const pageNodes: IRPageNode[] = [];\n for (const rp of resolved.pages) {\n const pageIR = buildPageIR(\n rp.page,\n rp.patterns,\n rp.wiring,\n resolved.registryTheme,\n { gap: resolved.density.gap },\n layer,\n );\n pageNodes.push(pageIR);\n }\n\n // Apply page filter\n let filteredPages = pageNodes;\n if (options.pageFilter) {\n filteredPages = pageNodes.filter((p) => p.pageId === options.pageFilter);\n }\n\n // 4. Build shell node\n const shellNode: IRShellNode = {\n type: 'shell',\n id: 'shell',\n children: [],\n config: resolved.shell,\n };\n\n // 5. Build store node\n const storeNode: IRStoreNode = {\n type: 'store',\n id: 'store',\n children: [],\n pageSignals: pageNodes.map((p) => ({\n name: p.pageId,\n pascalName: pascalCase(p.pageId),\n })),\n };\n\n // 6. Assemble app node\n const appNode: IRAppNode = {\n type: 'app',\n id: 'app',\n children: filteredPages,\n theme: resolved.theme,\n routes: resolved.routes,\n routing: extractRouting(resolved.essence),\n shell: shellNode,\n store: storeNode,\n features: resolved.features,\n };\n\n return { ir: appNode, registryTheme: resolved.registryTheme };\n}\n"],"mappings":"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","names":["isPatternRef","isColumnLayout","isPatternRef","isColumnLayout","isV3","migrateV2ToV3","isV3","isV3","isV3","migrateV2ToV3"]}
|
|
1
|
+
{"version":3,"sources":["../src/resolve.ts","../src/utils.ts","../src/ir.ts","../src/ir-helpers.ts","../src/packs.ts","../src/pipeline.ts"],"sourcesContent":["import type {\n BlueprintPage,\n ColumnLayout,\n Essence,\n EssenceFile,\n EssenceV3,\n LayoutItem,\n PatternRef,\n SectionedEssence,\n StructurePage,\n} from '@decantr/essence-spec';\nimport { computeDensity, isSectioned, isSimple, isV3 } from '@decantr/essence-spec';\nimport type {\n ContentResolver,\n Pattern,\n Theme as RegistryTheme,\n ResolvedPreset,\n} from '@decantr/registry';\nimport { detectWirings, resolvePatternPreset } from '@decantr/registry';\nimport type {\n IRNavItem,\n IRRoute,\n IRShellConfig,\n IRTheme,\n IRThemeDecoration,\n IRVisualEffect,\n IRWiring,\n IRWiringSignal,\n} from './types.js';\nimport { pascalCase } from './utils.js';\n\nexport interface ResolvedPage {\n page: ResolvedStructurePage;\n patterns: Map<string, { pattern: Pattern; preset: ResolvedPreset }>;\n wiring: IRWiring | null;\n}\n\ntype ResolvedStructurePage = StructurePage & {\n sectionId?: string;\n route?: string;\n};\n\nexport interface ResolvedEssence {\n essence: EssenceFile;\n pages: ResolvedPage[];\n registryTheme: RegistryTheme | null;\n density: { gap: string; level: string };\n theme: IRTheme;\n shell: IRShellConfig;\n routes: IRRoute[];\n features: string[];\n /** True when the source essence was v3 (DNA/Blueprint/Meta) */\n isV3Source: boolean;\n}\n\n// ─── Icon Mapping ─────────────────────────────────────────────\n\nconst NAV_ICONS: Record<string, string> = {\n overview: 'layout-dashboard',\n dashboard: 'layout-dashboard',\n home: 'home',\n analytics: 'bar-chart-3',\n settings: 'settings',\n users: 'users',\n billing: 'credit-card',\n reports: 'file-text',\n catalog: 'grid',\n products: 'package',\n orders: 'shopping-cart',\n messages: 'message-square',\n notifications: 'bell',\n activity: 'activity',\n search: 'search',\n profile: 'user',\n team: 'users',\n integrations: 'puzzle',\n api: 'code',\n docs: 'book-open',\n help: 'help-circle',\n projects: 'folder',\n workflows: 'git-branch',\n monitoring: 'monitor',\n security: 'shield',\n storage: 'database',\n deployments: 'rocket',\n logs: 'scroll-text',\n};\n\n// ─── Core styles that don't need explicit addon registration ──\n\nconst CORE_STYLES = new Set(['auradecantism']);\n\n// ─── Helpers ──────────────────────────────────────────────────\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction extractLayoutRefs(\n layout: LayoutItem[],\n): { id: string; explicitPreset?: string; alias?: string }[] {\n const refs: { id: string; explicitPreset?: string; alias?: string }[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n refs.push({ id: item });\n } else if (isPatternRef(item)) {\n refs.push({ id: item.pattern, explicitPreset: item.preset, alias: item.as });\n } else if (isColumnLayout(item)) {\n // cols can mix string ids and PatternRef objects per the schema.\n // Normalize each entry so downstream resolvers always see a string id.\n for (const col of item.cols) {\n if (typeof col === 'string') {\n refs.push({ id: col });\n } else {\n refs.push({ id: col.pattern, explicitPreset: col.preset, alias: col.as });\n }\n }\n }\n }\n return refs;\n}\n\n/** Flatten a layout array so column children are promoted to top-level for wiring detection */\nfunction flattenLayoutForWiring(layout: LayoutItem[]): LayoutItem[] {\n const flat: LayoutItem[] = [];\n for (const item of layout) {\n if (typeof item === 'string') {\n flat.push(item);\n } else if (isPatternRef(item)) {\n flat.push(item);\n } else if (isColumnLayout(item)) {\n // Promote column children as string refs\n for (const col of item.cols) {\n flat.push(col);\n }\n }\n }\n return flat;\n}\n\nfunction routePath(pageId: string, index: number): string {\n if (index === 0) return '/';\n // AUTO: Pages ending in \"-detail\" get a dynamic :id route parameter\n if (pageId.endsWith('-detail')) {\n return `/${pageId}/:id`;\n }\n return `/${pageId}`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction buildNavItems(pages: ResolvedStructurePage[], routes?: IRRoute[]): IRNavItem[] {\n const routeLookup = new Map<string, string>(\n (routes ?? []).map((route) => [routeIdentity(route.pageId, route.sectionId), route.path]),\n );\n return pages.map((page, i) => ({\n href: routeLookup.get(routeIdentity(page.id, page.sectionId)) ?? routePath(page.id, i),\n icon: NAV_ICONS[page.id] || 'circle',\n label: capitalize(page.id.replace(/-/g, ' ')),\n }));\n}\n\nfunction buildThemeDecoration(theme: RegistryTheme): IRThemeDecoration | null {\n const shell = theme.shell;\n if (!shell) return null;\n // The JSON may have additional fields not in the strict type\n const shellAny = shell as unknown as Record<string, unknown>;\n return {\n root: shell.root || '',\n nav: shell.nav || '',\n header: shell.header || '',\n brand: (shellAny['brand'] as string) || '',\n navLabel: (shellAny['navLabel'] as string) || '',\n // AUTO: default nav style is 'pill' when the theme does not declare one\n navStyle: shell.nav_style || 'pill',\n defaultNavState: (shellAny['default_nav_state'] as string) || 'expanded',\n dimensions: shell.dimensions || null,\n };\n}\n\nfunction buildTheme(essence: Essence, isAddon: boolean): IRTheme {\n return {\n id: essence.theme.id,\n mode: essence.theme.mode,\n shape: essence.theme.shape || null,\n isAddon,\n };\n}\n\nfunction buildThemeFromV3(essence: EssenceV3, isAddon: boolean): IRTheme {\n const dna = essence.dna;\n return {\n id: dna.theme.id,\n mode: dna.theme.mode,\n shape: dna.radius.philosophy || dna.theme.shape || null,\n isAddon,\n };\n}\n\n/** Convert v3 BlueprintPage to the StructurePage shape used by the resolver pipeline */\nfunction blueprintPageToStructurePage(\n page: BlueprintPage,\n defaultShell: string,\n sectionId?: string,\n): ResolvedStructurePage {\n return {\n id: page.id,\n shell: page.shell_override ?? defaultShell,\n layout: page.layout,\n ...(sectionId ? { sectionId } : {}),\n ...(page.route ? { route: page.route } : {}),\n ...(page.surface ? { surface: page.surface } : {}),\n };\n}\n\nfunction routeIdentity(pageId: string, sectionId?: string): string {\n return sectionId ? `${sectionId}:${pageId}` : pageId;\n}\n\nfunction buildV3Routes(essence: EssenceV3, structurePages: ResolvedStructurePage[]): IRRoute[] {\n const explicitRoutes = new Map<string, string>();\n\n for (const [path, entry] of Object.entries(essence.blueprint.routes ?? {})) {\n if (!entry?.page) continue;\n const key = routeIdentity(entry.page, entry.section);\n if (!explicitRoutes.has(key)) {\n explicitRoutes.set(key, path);\n }\n }\n\n for (const page of structurePages) {\n const key = routeIdentity(page.id, page.sectionId);\n if (page.route && !explicitRoutes.has(key)) {\n explicitRoutes.set(key, page.route);\n }\n }\n\n if (explicitRoutes.size > 0) {\n return structurePages.flatMap((page) => {\n const path = explicitRoutes.get(routeIdentity(page.id, page.sectionId));\n return path\n ? [\n {\n path,\n pageId: page.id,\n shell: page.shell,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n },\n ]\n : [];\n });\n }\n\n return structurePages.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n }));\n}\n\nfunction convertWiring(wiringResults: ReturnType<typeof detectWirings>): IRWiring | null {\n if (wiringResults.length === 0) return null;\n\n const signals: IRWiringSignal[] = [];\n const props: Record<string, Record<string, string>> = {};\n const hookProps: Record<string, Record<string, string>> = {};\n const hookSet = new Set<IRWiringSignal['hookType']>();\n\n for (const result of wiringResults) {\n for (const signal of result.signals) {\n // Avoid duplicate signals\n if (!signals.some((s) => s.name === signal.name)) {\n const setter = 'set' + signal.name.charAt(0).toUpperCase() + signal.name.slice(1);\n signals.push({\n name: signal.name,\n setter,\n init: signal.init,\n hookType: signal.hookType,\n });\n hookSet.add(signal.hookType);\n }\n }\n for (const [alias, aliasProps] of Object.entries(result.props)) {\n props[alias] = { ...props[alias], ...aliasProps };\n }\n // AUTO: Merge hook-based prop mappings\n for (const [alias, aliasHookProps] of Object.entries(result.hookProps)) {\n hookProps[alias] = { ...hookProps[alias], ...aliasHookProps };\n }\n }\n\n return { signals, props, hooks: [...hookSet], hookProps };\n}\n\n// ─── Visual Effects Resolution ────────────────────────────────\n\nexport function resolveVisualEffects(\n theme: RegistryTheme,\n pattern: Pattern,\n _slot?: string,\n): IRVisualEffect | null {\n const effects = theme.effects;\n if (!effects?.enabled) return null;\n\n const typeMapping = effects.type_mapping || {};\n const componentFallback = effects.component_fallback || {};\n const intensity = effects.intensity || 'medium';\n const intensityValues = effects.intensity_values || {};\n\n // Check pattern tags / components against type_mapping\n let decorators: string[] = [];\n\n // Check if any pattern components match the component_fallback\n for (const comp of pattern.components || []) {\n const effectType = componentFallback[comp];\n if (effectType && typeMapping[effectType]) {\n decorators = [...decorators, ...typeMapping[effectType]];\n }\n }\n\n if (decorators.length === 0) return null;\n\n // Deduplicate\n decorators = [...new Set(decorators)];\n\n return {\n decorators,\n intensity: intensityValues[intensity] || {},\n };\n}\n\n// ─── Main Resolution ─────────────────────────────────────────\n\n/** Resolve all external references in an Essence file */\nexport async function resolveEssence(\n essence: EssenceFile,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n // ─── V3 path: read from dna + blueprint layers ───────────\n if (isV3(essence)) {\n return resolveV3Essence(essence, resolver);\n }\n\n // ─── V2 path: simple or sectioned ────────────────────────\n let simpleEssence: Essence;\n if (isSimple(essence)) {\n simpleEssence = essence;\n } else if (isSectioned(essence)) {\n const sectioned = essence as SectionedEssence;\n if (sectioned.sections.length > 1) {\n throw new Error(\n `Sectioned essences with ${sectioned.sections.length} sections are not yet supported. ` +\n `Only single-section sectioned essences can be processed. ` +\n `Consider migrating to v3 format using migrateV2ToV3().`,\n );\n }\n const firstSection = sectioned.sections[0];\n simpleEssence = {\n version: sectioned.version,\n archetype: firstSection.archetype,\n theme: firstSection.theme,\n personality: sectioned.personality,\n platform: sectioned.platform,\n structure: firstSection.structure,\n features: firstSection.features || [],\n density: sectioned.density,\n guard: sectioned.guard,\n target: sectioned.target,\n };\n } else {\n throw new Error('Invalid essence format');\n }\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', simpleEssence.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density computation\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n simpleEssence.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n\n // 3. Theme\n const themeId = simpleEssence.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildTheme(simpleEssence, isAddon);\n\n // 4. Resolve each page\n const resolvedPages = await resolvePages(simpleEssence.structure, resolver, registryTheme);\n\n // 5. Shell config\n const shellType = simpleEssence.structure[0]?.shell || 'sidebar-main';\n const brand = pascalCase(simpleEssence.archetype);\n const nav = buildNavItems(simpleEssence.structure);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n // 6. Routes\n const routes: IRRoute[] = simpleEssence.structure.map((page, i) => ({\n path: routePath(page.id, i),\n pageId: page.id,\n shell: page.shell,\n }));\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: { gap: density.content_gap, level: density.level },\n theme,\n shell,\n routes,\n features: simpleEssence.features ?? [],\n isV3Source: false,\n };\n}\n\n// ─── V3 Resolution ──────────────────────────────────────────\n\nasync function resolveV3Essence(\n essence: EssenceV3,\n resolver: ContentResolver,\n): Promise<ResolvedEssence> {\n const { dna, blueprint, meta } = essence;\n\n // 1. Theme resolution (replaces former recipe resolution)\n let registryTheme: RegistryTheme | null = null;\n const themeResult = await resolver.resolve('theme', dna.theme.id);\n if (themeResult) {\n registryTheme = themeResult.item;\n }\n\n // 2. Density — v3 carries density directly in dna.spacing\n const themeSpatial = registryTheme?.spatial;\n const density = computeDensity(\n dna.personality,\n themeSpatial\n ? {\n density_bias: themeSpatial.density_bias,\n content_gap_shift: themeSpatial.content_gap_shift,\n }\n : undefined,\n );\n // V3 dna.spacing is authoritative; override computed density with DNA values\n const densityResult = {\n gap: dna.spacing.content_gap || density.content_gap,\n level: dna.spacing.density || density.level,\n };\n\n // 3. Theme from DNA layer\n const themeId = dna.theme.id;\n const isAddon = themeId.startsWith('custom:') || !CORE_STYLES.has(themeId);\n const theme = buildThemeFromV3(essence, isAddon);\n\n // 4. Convert blueprint pages to StructurePage and resolve\n // V3.1 essences may use sections instead of pages; flatten sections into pages\n const defaultShell = blueprint.shell ?? blueprint.sections?.[0]?.shell ?? 'sidebar-main';\n const structurePages: ResolvedStructurePage[] = blueprint.pages\n ? blueprint.pages.map((page) => blueprintPageToStructurePage(page, defaultShell))\n : blueprint.sections\n ? blueprint.sections.flatMap((section) =>\n section.pages.map((page) =>\n blueprintPageToStructurePage(page, section.shell ?? defaultShell, section.id),\n ),\n )\n : [\n blueprintPageToStructurePage(\n { id: 'home', layout: ['hero'] as LayoutItem[] },\n defaultShell,\n ),\n ];\n const resolvedPages = await resolvePages(structurePages, resolver, registryTheme);\n\n // 5. Shell config from blueprint\n const shellType = defaultShell;\n const brand = pascalCase(meta.archetype);\n const routes = buildV3Routes(essence, structurePages);\n const nav = buildNavItems(structurePages, routes);\n const decoration = registryTheme ? buildThemeDecoration(registryTheme) : null;\n\n const shell: IRShellConfig = {\n type: shellType,\n brand,\n nav,\n inset: false,\n decoration,\n };\n\n return {\n essence,\n pages: resolvedPages,\n registryTheme,\n density: densityResult,\n theme,\n shell,\n routes,\n features: blueprint.features ?? [],\n isV3Source: true,\n };\n}\n\n// ─── Shared page resolution ────────────────────────────────\n\nasync function resolvePages(\n pages: ResolvedStructurePage[],\n resolver: ContentResolver,\n registryTheme: RegistryTheme | null,\n): Promise<ResolvedPage[]> {\n const resolvedPages: ResolvedPage[] = [];\n for (const page of pages) {\n const refs = extractLayoutRefs(page.layout);\n const patterns = new Map<string, { pattern: Pattern; preset: ResolvedPreset }>();\n\n for (const ref of refs) {\n const patternResult = await resolver.resolve('pattern', ref.id);\n if (patternResult) {\n const preset = resolvePatternPreset(\n patternResult.item,\n ref.explicitPreset,\n registryTheme?.pattern_preferences?.default_presets,\n );\n const key = ref.alias || ref.id;\n patterns.set(key, { pattern: patternResult.item, preset });\n }\n }\n\n // Detect wiring (flatten cols so column children are visible)\n const wiringResults = detectWirings(flattenLayoutForWiring(page.layout));\n const wiring = convertWiring(wiringResults);\n\n resolvedPages.push({ page, patterns, wiring });\n }\n return resolvedPages;\n}\n","/** Convert a kebab-case or snake_case string to PascalCase */\nexport function pascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n","import type { ColumnLayout, LayoutItem, PatternRef, StructurePage } from '@decantr/essence-spec';\nimport type { Pattern, Theme as RegistryTheme, ResolvedPreset } from '@decantr/registry';\nimport { resolveVisualEffects } from './resolve.js';\nimport type {\n IRCardWrapping,\n IRGridNode,\n IRLayer,\n IRNode,\n IRPageNode,\n IRPatternMeta,\n IRPatternNode,\n IRVisualEffect,\n IRWiring,\n} from './types.js';\n\nexport interface ResolvedPatternEntry {\n pattern: Pattern;\n preset: ResolvedPreset;\n}\n\nfunction isPatternRef(item: LayoutItem): item is PatternRef {\n return typeof item === 'object' && 'pattern' in item;\n}\n\nfunction isColumnLayout(item: LayoutItem): item is ColumnLayout {\n return typeof item === 'object' && 'cols' in item;\n}\n\nfunction getPatternAlias(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.as || item.pattern;\n return '';\n}\n\nfunction getPatternId(item: LayoutItem): string {\n if (typeof item === 'string') return item;\n if (isPatternRef(item)) return item.pattern;\n return '';\n}\n\nfunction shouldWrapInCard(\n pattern: Pattern,\n preset: ResolvedPreset,\n theme: RegistryTheme | null,\n): boolean {\n // Hero/row/stack layouts are standalone\n const layout = preset.layout.layout;\n if (layout === 'hero' || layout === 'row') return false;\n\n // Pattern explicitly opts out\n if (pattern.contained === false) return false;\n\n // Theme spatial says no cards\n const cardWrapping = theme?.spatial?.card_wrapping;\n if (cardWrapping === 'none') return false;\n\n // Minimal: only wrap if pattern has presets (complex pattern)\n if (cardWrapping === 'minimal') {\n return Object.keys(pattern.presets).length > 0;\n }\n\n // Default: wrap\n return true;\n}\n\nfunction buildCardWrapping(pattern: Pattern, theme: RegistryTheme | null): IRCardWrapping {\n const mode = theme?.spatial?.card_wrapping || 'always';\n return {\n mode: mode as IRCardWrapping['mode'],\n headerLabel: pattern.name,\n };\n}\n\nfunction buildPatternNode(\n patternId: string,\n alias: string,\n resolved: ResolvedPatternEntry | undefined,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPatternNode {\n const pattern = resolved?.pattern;\n const preset = resolved?.preset;\n\n const layout = preset?.layout.layout || 'column';\n const isStandalone = layout === 'hero' || layout === 'row';\n const contained = pattern && preset ? shouldWrapInCard(pattern, preset, theme) : false;\n const components = pattern?.components || [];\n\n const presetName = preset?.preset || 'default';\n const presetDescription = pattern?.presets?.[presetName]?.description;\n // v2.1 C1: thread interactions[] from the pattern through to PagePackPattern\n // so the page-pack renderer can surface them as a checkbox checklist.\n const interactions = Array.isArray((pattern as { interactions?: unknown })?.interactions)\n ? ((pattern as { interactions?: unknown }).interactions as string[])\n : undefined;\n\n const patternMeta: IRPatternMeta = {\n patternId,\n preset: presetName,\n alias,\n layout,\n contained,\n standalone: isStandalone,\n code: preset?.code ? { imports: preset.code.imports, example: preset.code.example } : null,\n components,\n ...(presetDescription ? { presetDescription } : {}),\n ...(interactions && interactions.length > 0 ? { interactions } : {}),\n };\n\n const card = contained && !isStandalone && pattern ? buildCardWrapping(pattern, theme) : null;\n\n const wireProps = wiring?.props[alias] || wiring?.props[patternId] || null;\n\n // Resolve visual effects from theme + pattern when available\n const visualEffects = theme && pattern ? resolveVisualEffects(theme, pattern) : null;\n\n return {\n type: 'pattern',\n id: alias,\n children: [],\n pattern: patternMeta,\n card,\n visualEffects,\n wireProps,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n}\n\n/** Build IR tree for a single page from its resolved structure + patterns */\nexport function buildPageIR(\n page: StructurePage & { sectionId?: string },\n resolvedPatterns: Map<string, ResolvedPatternEntry>,\n wiring: IRWiring | null,\n theme: RegistryTheme | null,\n density: { gap: string },\n layer?: IRLayer,\n): IRPageNode {\n const children: IRNode[] = [];\n\n for (const item of page.layout) {\n if (typeof item === 'string') {\n // Simple string → full-width pattern\n const resolved = resolvedPatterns.get(item);\n children.push(buildPatternNode(item, item, resolved, wiring, theme, density, layer));\n } else if (isPatternRef(item)) {\n // PatternRef → pattern with optional preset/alias\n const alias = item.as || item.pattern;\n const resolved = resolvedPatterns.get(alias) || resolvedPatterns.get(item.pattern);\n children.push(buildPatternNode(item.pattern, alias, resolved, wiring, theme, density, layer));\n } else if (isColumnLayout(item)) {\n // ColumnLayout → grid with pattern children\n // cols can mix `string` ids and `PatternRef` objects per the schema.\n // Normalize FIRST so all downstream operations (Map keys, Record\n // keys, joined ids) see strings — otherwise PatternRef objects\n // serialize as `[object Object]` (cold-LLM harness flagged this\n // exact bug in cloud-platform's scaffold-pack).\n const colEntries = item.cols.map((col) => ({\n id: typeof col === 'string' ? col : col.pattern,\n alias:\n typeof col === 'string'\n ? col\n : (col.as ?? col.pattern),\n }));\n const breakpoint = item.at || null;\n const spans = item.span || null;\n\n // Normalize spans: fill in missing columns with weight 1.\n // Span keys reference column ids (the schema's span object uses\n // the column's effective id as the key).\n let normalizedSpans: Record<string, number> | null = null;\n if (spans) {\n normalizedSpans = {};\n for (const entry of colEntries) {\n normalizedSpans[entry.id] = spans[entry.id] || spans[entry.alias] || 1;\n }\n }\n\n const gridChildren: IRNode[] = [];\n for (const entry of colEntries) {\n const resolved =\n resolvedPatterns.get(entry.alias) || resolvedPatterns.get(entry.id);\n gridChildren.push(\n buildPatternNode(entry.id, entry.alias, resolved, wiring, theme, density, layer),\n );\n }\n\n const totalCols = normalizedSpans\n ? Object.values(normalizedSpans).reduce((a, b) => a + b, 0)\n : colEntries.length;\n\n // AUTO: Pass through multi-breakpoint and container query config from ColumnLayout\n const breakpoints = item.breakpoints?.map((bp) => ({ at: bp.at, cols: bp.cols })) || null;\n const responsive = item.responsive || null;\n\n const gridNode: IRGridNode = {\n type: 'grid',\n id: `grid-${colEntries.map((e) => e.id).join('-')}`,\n children: gridChildren,\n cols: totalCols,\n spans: normalizedSpans,\n breakpoint,\n breakpoints,\n responsive,\n spatial: { gap: density.gap },\n ...(layer ? { layer } : {}),\n };\n children.push(gridNode);\n }\n }\n\n const gapAtom = density.gap.startsWith('_')\n ? density.gap\n : density.gap.startsWith('gap')\n ? `_${density.gap}`\n : `_gap${density.gap}`;\n // Page surface declares layout direction + content gap ONLY. Padding, scroll\n // containment, and flex-grow belong to the shell per the \"Layout Rules\"\n // directive in DECANTR.md (\"One scroll container per region\", \"Let shells\n // own spacing, centering, and scroll containers\", \"Pages should not\n // duplicate shell responsibilities\"). Previous default (`_p4 _overauto\n // _flex1`) contradicted that directive and the v3 harness flagged it as\n // the single most expensive contract-ambiguity friction point. Pages that\n // genuinely need to claim scroll/padding can still declare it explicitly\n // via `page.surface` — the fallback just stops prescribing it.\n const surface = page.surface || `_flex _col ${gapAtom}`;\n\n return {\n type: 'page',\n id: page.sectionId ? `${page.sectionId}:${page.id}` : page.id,\n children,\n pageId: page.id,\n ...(page.sectionId ? { sectionId: page.sectionId } : {}),\n surface,\n wiring,\n ...(layer ? { layer } : {}),\n };\n}\n","import type { IRGridNode, IRNode, IRPatternNode } from './types.js';\n\n/** Depth-first walk of IR tree, calling visitor on each node */\nexport function walkIR(\n node: IRNode,\n visitor: (node: IRNode, parent: IRNode | null) => void,\n parent: IRNode | null = null,\n): void {\n visitor(node, parent);\n for (const child of node.children) {\n walkIR(child, visitor, node);\n }\n}\n\n/** Find all nodes of a specific type */\nexport function findNodes<T extends IRNode>(root: IRNode, type: string): T[] {\n const results: T[] = [];\n walkIR(root, (node) => {\n if (node.type === type) {\n results.push(node as T);\n }\n });\n return results;\n}\n\n/** Count total patterns in an IR tree */\nexport function countPatterns(root: IRNode): number {\n return findNodes(root, 'pattern').length;\n}\n\n/** Validate IR tree structure (no orphaned grids, patterns have meta, etc.) */\nexport function validateIR(root: IRNode): string[] {\n const errors: string[] = [];\n\n walkIR(root, (node, parent) => {\n if (node.type === 'grid') {\n const grid = node as IRGridNode;\n if (grid.children.length === 0) {\n errors.push(`Grid node \"${grid.id}\" has no children`);\n }\n }\n\n if (node.type === 'pattern') {\n const pattern = node as IRPatternNode;\n if (!pattern.pattern) {\n errors.push(`Pattern node \"${pattern.id}\" is missing pattern meta`);\n }\n if (!pattern.pattern.patternId) {\n errors.push(`Pattern node \"${pattern.id}\" has no patternId`);\n }\n }\n\n if (node.type === 'page') {\n if (!node.id) {\n errors.push('Page node is missing id');\n }\n }\n });\n\n return errors;\n}\n","import type { EssenceFile, EssenceV3 } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3 } from '@decantr/essence-spec';\nimport type { ContentResolver } from '@decantr/registry';\nimport { walkIR } from './ir-helpers.js';\nimport { runPipeline } from './pipeline.js';\nimport type { IRAppNode, IRNode, IRPageNode, IRPatternNode } from './types.js';\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport const EXECUTION_PACK_SCHEMA_URLS = {\n scaffold: 'https://decantr.ai/schemas/scaffold-pack.v1.json',\n section: 'https://decantr.ai/schemas/section-pack.v1.json',\n page: 'https://decantr.ai/schemas/page-pack.v1.json',\n mutation: 'https://decantr.ai/schemas/mutation-pack.v1.json',\n review: 'https://decantr.ai/schemas/review-pack.v1.json',\n} as const;\n\nexport const PACK_MANIFEST_SCHEMA_URL = 'https://decantr.ai/schemas/pack-manifest.v1.json';\nexport const EXECUTION_PACK_BUNDLE_SCHEMA_URL =\n 'https://decantr.ai/schemas/execution-pack-bundle.v1.json';\nexport const SELECTED_EXECUTION_PACK_SCHEMA_URL =\n 'https://decantr.ai/schemas/selected-execution-pack.v1.json';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: MutationPackKind;\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldPackRoute {\n pageId: string;\n sectionId?: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface ScaffoldPackData {\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n navigation?: {\n /**\n * true = palette enabled with implicit defaults.\n * false = not enabled.\n * object = explicit structured contract (see CommandPaletteContract).\n */\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n /** Default hotkey semantics applied unless per-hotkey semantics override. */\n hotkeySemantics?: HotkeySemantics;\n };\n routes: ScaffoldPackRoute[];\n /**\n * Required theme decorator contract — surfaced ONCE at the project level\n * here, then referenced (not duplicated) in each section pack. Cold-LLM\n * runs reported the table was duplicated 7-10× across context files\n * (~270-540 redundant lines per scaffold) when each section pack carried\n * its own copy. Centralizing in scaffold-pack — which the cold prompt\n * tells AI to read first — keeps the contract authoritative without the\n * per-section repetition.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\nexport interface CommandPaletteContract {\n trigger?: string;\n placeholder?: string;\n width?: string;\n styling?: 'modal' | 'sheet' | 'inline' | 'fullscreen';\n commands?: Array<{\n id: string;\n label: string;\n section?: string;\n hotkey?: string;\n action?: string;\n route?: string;\n }>;\n}\n\nexport interface HotkeySemantics {\n chord_window_ms?: number;\n input_guard?: boolean;\n modifier_suppression?: boolean;\n match_case?: boolean;\n}\n\nexport interface ScaffoldExecutionPack extends ExecutionPackBase<ScaffoldPackData> {\n packType: 'scaffold';\n}\n\nexport interface SectionPackInput {\n id: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n pageIds: string[];\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives — short imperative rules for this section. */\n directives?: string[];\n}\n\n/** Navigation item contract for a section's primary navigation. */\nexport interface SectionNavigationItemPack {\n label: string;\n route: string;\n icon?: string;\n hotkey?: string;\n active_match?: string;\n badge?: string;\n}\n\nexport interface SectionPackRoute {\n pageId: string;\n sectionId?: string;\n path: string;\n patternIds: string[];\n shell?: string;\n}\n\nexport interface SectionPackData {\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: SectionPackRoute[];\n /** Contract for items rendered in this section's primary navigation. */\n navigationItems?: SectionNavigationItemPack[];\n /** Execution-level directives emitted into the section-pack rendering. */\n directives?: string[];\n /**\n * Required theme decorator contract surfaced into the compact pack.\n * Mirrors the long-form section-context \"Required Theme Decorators\" table.\n * Cold prompts instruct AI assistants to read packs first, so the strong\n * decorator contract has to live HERE, not just in the long-form file.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\n/** Compact, render-ready decorator entry for pack contracts. */\nexport interface ThemeDecoratorEntry {\n /** Decorator class name without leading dot, e.g. \"lum-glass\". */\n class: string;\n /** Authored intent describing what the decorator does. */\n intent: string;\n /** Authored slot hints listing where to apply it (joined from usage[]). */\n applyTo: string;\n}\n\nexport interface SectionExecutionPack extends ExecutionPackBase<SectionPackData> {\n packType: 'section';\n}\n\nexport interface PagePackInput {\n pageId: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n /** Execution-level directives — short imperative rules for this page. */\n directives?: string[];\n}\n\nexport interface PagePackPattern {\n id: string;\n alias: string;\n preset: string;\n layout: string;\n /**\n * Per-preset prose from the pattern's preset.description. When present,\n * the page-pack renderer emits it as a short description line so cold\n * LLMs read preset-specific guidance instead of having to look up the\n * pattern's root description.\n */\n presetDescription?: string;\n /**\n * v2.1 Tier C1. Declared interactions from the pattern JSON. Rendered\n * as a checkbox checklist so cold LLMs in generation mode see a\n * hard-edged list they can't categorize as \"philosophy\". Enforced by\n * decantr check --strict (C5 guard rule).\n */\n interactions?: string[];\n}\n\nexport interface PagePackData {\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: PagePackPattern[];\n /** Execution-level directives emitted into the page-pack rendering. */\n directives?: string[];\n}\n\nexport interface PageExecutionPack extends ExecutionPackBase<PagePackData> {\n packType: 'page';\n}\n\nexport type MutationPackKind = 'add-page' | 'modify';\n\nexport interface MutationPackData {\n mutationType: MutationPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n workflow: string[];\n}\n\nexport interface MutationExecutionPack extends ExecutionPackBase<MutationPackData> {\n packType: 'mutation';\n}\n\nexport type ReviewPackKind = 'app';\n\nexport interface ReviewPackData {\n reviewType: ReviewPackKind;\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: ScaffoldPackRoute[];\n focusAreas: string[];\n workflow: string[];\n}\n\nexport interface ReviewExecutionPack extends ExecutionPackBase<ReviewPackData> {\n packType: 'review';\n}\n\nexport interface ExecutionPackBundle {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport type SelectedExecutionPack =\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n\nexport interface ExecutionPackSelector {\n packType: ExecutionPackType;\n id?: string | null;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack: SelectedExecutionPack;\n}\n\nexport interface ScaffoldPackBuilderOptions {\n objective?: string;\n target?: Partial<ExecutionPackTarget>;\n preset?: string | null;\n requiredSetup?: string[];\n examples?: ExecutionPackExample[];\n antiPatterns?: ExecutionPackAntiPattern[];\n successChecks?: ExecutionPackSuccessCheck[];\n tokenBudget?: Partial<ExecutionPackTokenBudget>;\n navigation?: {\n commandPalette: boolean | CommandPaletteContract;\n hotkeys: Array<{\n key: string;\n route?: string;\n label?: string;\n semantics?: HotkeySemantics;\n }>;\n hotkeySemantics?: HotkeySemantics;\n };\n /**\n * Required theme decorator contract surfaced into the scaffold pack.\n * The scaffold pack is read first per cold-prompt rules, so the canonical\n * decorator contract belongs here. Section packs reference this without\n * duplicating to avoid the 7-10× repetition cold-LLM runs reported.\n */\n themeDecorators?: ThemeDecoratorEntry[];\n}\n\nexport interface SectionPackBuilderOptions extends ScaffoldPackBuilderOptions {\n // themeDecorators inherited from base — section packs render a pointer\n // to scaffold-pack rather than re-emitting the full table (1.7.22 dedup).\n}\nexport interface PagePackBuilderOptions extends ScaffoldPackBuilderOptions {}\nexport interface MutationPackBuilderOptions extends ScaffoldPackBuilderOptions {\n mutationType: MutationPackKind;\n workflow?: string[];\n}\nexport interface ReviewPackBuilderOptions extends ScaffoldPackBuilderOptions {\n reviewType?: ReviewPackKind;\n focusAreas?: string[];\n workflow?: string[];\n}\n\nexport interface CompileExecutionPackBundleOptions {\n contentRoot?: string;\n overridePaths?: string[];\n resolver?: ContentResolver;\n}\n\nconst DEFAULT_TARGET: ExecutionPackTarget = {\n platform: 'web',\n framework: null,\n runtime: null,\n adapter: 'generic-web',\n};\n\nconst DEFAULT_TOKEN_BUDGET: ExecutionPackTokenBudget = {\n target: 1400,\n max: 2200,\n strategy: [\n 'Prefer route summaries over repeated prose.',\n 'Use compact vocabulary lists instead of large reference tables.',\n 'Include only task-relevant examples and checks.',\n ],\n};\n\nconst DEFAULT_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'route-topology',\n label: 'Routes and page IDs match the compiled topology.',\n severity: 'error',\n },\n {\n id: 'shell-consistency',\n label: 'The declared shell contract is preserved unless the task explicitly mutates it.',\n severity: 'error',\n },\n {\n id: 'theme-consistency',\n label: 'Theme identity and mode remain consistent across scaffolded routes.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_SECTION_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'section-route-coherence',\n label: 'Section pages and routes remain coherent with the compiled topology.',\n severity: 'error',\n },\n {\n id: 'section-shell-consistency',\n label: 'The section shell contract stays consistent across its routes.',\n severity: 'error',\n },\n {\n id: 'section-pattern-coverage',\n label: 'Primary section patterns are represented without adding off-contract filler sections.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_PAGE_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'page-route-contract',\n label: 'The page keeps the compiled route, shell, and section contract intact.',\n severity: 'error',\n },\n {\n id: 'page-pattern-contract',\n label:\n 'The page preserves its primary compiled patterns instead of drifting into unrelated layouts.',\n severity: 'error',\n },\n {\n id: 'page-state-contract',\n label: 'Any declared wiring signals remain coherent with the rendered page structure.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_MUTATION_SUCCESS_CHECKS: Record<MutationPackKind, ExecutionPackSuccessCheck[]> = {\n 'add-page': [\n {\n id: 'mutation-essence-first',\n label: 'New pages are declared in the essence before any code generation begins.',\n severity: 'error',\n },\n {\n id: 'mutation-shell-contract',\n label:\n 'New routes inherit an existing shell and section contract unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-refresh',\n label: 'Refresh compiled packs after the mutation so downstream tasks read current topology.',\n severity: 'warn',\n },\n ],\n modify: [\n {\n id: 'mutation-existing-topology',\n label:\n 'Modified routes remain coherent with the compiled topology unless the essence changes first.',\n severity: 'error',\n },\n {\n id: 'mutation-theme-contract',\n label: 'Theme, shell, and page identity stay aligned with the current contract during edits.',\n severity: 'error',\n },\n {\n id: 'mutation-page-pack-first',\n label:\n 'Route-local edits should start from the compiled page pack rather than improvised structure.',\n severity: 'warn',\n },\n ],\n};\n\nconst DEFAULT_REVIEW_SUCCESS_CHECKS: ExecutionPackSuccessCheck[] = [\n {\n id: 'review-contract-baseline',\n label:\n 'Review findings should use the compiled route, shell, and theme contract as the baseline.',\n severity: 'error',\n },\n {\n id: 'review-evidence',\n label: 'Each critique finding should cite concrete evidence from the generated workspace.',\n severity: 'error',\n },\n {\n id: 'review-remediation',\n label:\n 'Suggested fixes should point back to code changes or essence updates when contract drift exists.',\n severity: 'warn',\n },\n];\n\nconst DEFAULT_REVIEW_ANTI_PATTERNS: ExecutionPackAntiPattern[] = [\n {\n id: 'inline-styles',\n summary: 'Avoid inline style literals as the primary styling path.',\n guidance:\n 'Move visual styling into tokens.css and treatments.css instead of component-local style objects.',\n },\n {\n id: 'hardcoded-colors',\n summary: 'Avoid hardcoded color literals.',\n guidance: 'Use CSS variables and theme decorators instead of hex, rgb, or hsl values.',\n },\n {\n id: 'utility-framework-leakage',\n summary: 'Avoid utility-framework leakage as the primary design language.',\n guidance:\n 'Prefer compiled Decantr treatments and contract vocabulary over ad hoc utility class stacks.',\n },\n];\n\nfunction collectPatternIds(page: IRPageNode): string[] {\n const patternIds: string[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patternIds.push(patternNode.pattern.patternId);\n });\n return [...new Set(patternIds)];\n}\n\nfunction pageIdentity(pageId: string, sectionId?: string | null): string {\n return sectionId ? `${sectionId}/${pageId}` : pageId;\n}\n\nfunction pageFileId(pageId: string, sectionId?: string | null): string {\n return pageIdentity(pageId, sectionId).replace(/[^a-zA-Z0-9._-]+/g, '-');\n}\n\nfunction routePageLabel(route: Pick<ScaffoldPackRoute, 'pageId' | 'sectionId'>): string {\n return route.sectionId ? `${route.sectionId}/${route.pageId}` : route.pageId;\n}\n\nfunction summarizeRoutes(appNode: IRAppNode): ScaffoldPackRoute[] {\n return appNode.routes.flatMap((route) => {\n const pageNode = findPageNode(appNode, route.pageId, route.sectionId);\n if (!pageNode) return [];\n return [\n {\n pageId: pageNode.pageId,\n ...(route.sectionId ? { sectionId: route.sectionId } : {}),\n path: route.path,\n patternIds: collectPatternIds(pageNode),\n shell: route.shell,\n },\n ];\n });\n}\n\nfunction summarizeSectionRoutes(appNode: IRAppNode, input: SectionPackInput): SectionPackRoute[] {\n return summarizeRoutes(appNode).filter(\n (route) =>\n input.pageIds.includes(route.pageId) && (!route.sectionId || route.sectionId === input.id),\n );\n}\n\nfunction summarizePageRoute(\n appNode: IRAppNode,\n pageId: string,\n sectionId?: string | null,\n): ScaffoldPackRoute | null {\n return (\n summarizeRoutes(appNode).find(\n (route) =>\n route.pageId === pageId && (!sectionId || !route.sectionId || route.sectionId === sectionId),\n ) ?? null\n );\n}\n\nfunction findPageNode(\n appNode: IRAppNode,\n pageId: string,\n sectionId?: string | null,\n): IRPageNode | null {\n const page = appNode.children.find((node) => {\n const pageNode = node as IRPageNode;\n return (\n pageNode.pageId === pageId && (!sectionId || !pageNode.sectionId || pageNode.sectionId === sectionId)\n );\n });\n return page ? (page as IRPageNode) : null;\n}\n\nfunction collectPagePatterns(page: IRPageNode): PagePackPattern[] {\n const patterns: PagePackPattern[] = [];\n walkIR(page, (node: IRNode) => {\n if (node.type !== 'pattern') return;\n const patternNode = node as IRPatternNode;\n patterns.push({\n id: patternNode.pattern.patternId,\n alias: patternNode.pattern.alias,\n preset: patternNode.pattern.preset,\n layout: patternNode.pattern.layout,\n ...(patternNode.pattern.presetDescription\n ? { presetDescription: patternNode.pattern.presetDescription }\n : {}),\n ...(patternNode.pattern.interactions && patternNode.pattern.interactions.length > 0\n ? { interactions: patternNode.pattern.interactions }\n : {}),\n });\n });\n return patterns;\n}\n\nfunction mergeTokenBudget(overrides?: Partial<ExecutionPackTokenBudget>): ExecutionPackTokenBudget {\n return {\n target: overrides?.target ?? DEFAULT_TOKEN_BUDGET.target,\n max: overrides?.max ?? DEFAULT_TOKEN_BUDGET.max,\n strategy: overrides?.strategy ?? DEFAULT_TOKEN_BUDGET.strategy,\n };\n}\n\nfunction renderList(title: string, entries: string[]): string[] {\n if (entries.length === 0) return [];\n return [title, ...entries.map((entry) => `- ${entry}`), ''];\n}\n\n// Compact description of hotkey semantics for pack markdown. Returns empty\n// string when no semantics are declared so the line can be omitted entirely.\nfunction formatHotkeySemantics(semantics: HotkeySemantics | undefined): string {\n if (!semantics) return '';\n const parts: string[] = [];\n if (typeof semantics.chord_window_ms === 'number') {\n parts.push(`chord window ${semantics.chord_window_ms}ms`);\n }\n if (semantics.input_guard === true) parts.push('suppress during text-input focus');\n if (semantics.input_guard === false) parts.push('fire even while typing (explicit)');\n if (semantics.modifier_suppression === true) parts.push('ignore when modifier held');\n if (semantics.modifier_suppression === false) parts.push('allow modifier passthrough (explicit)');\n if (semantics.match_case === true) parts.push('case-sensitive');\n return parts.join('; ');\n}\n\n// Short, mechanical router-implementation hint so the LLM picks the right\n// imports without having to consult a separate narrative file. Keyed off the\n// same string enum as the schema.\nfunction routingImplementationHint(routing: 'hash' | 'history' | 'pathname'): string {\n switch (routing) {\n case 'hash':\n return 'HashRouter from react-router-dom; URLs prefixed with /# (e.g. /#/login). Only for static-only hosts without SPA fallback.';\n case 'history':\n return 'BrowserRouter from react-router-dom; regular URLs (e.g. /login). Works on Vite dev, Vercel, Netlify, Cloudflare Pages.';\n case 'pathname':\n return 'pathname-based routing (Next.js App Router file conventions).';\n default:\n return String(routing);\n }\n}\n\nexport function renderExecutionPackMarkdown(pack: ExecutionPackBase<unknown>): string {\n const lines: string[] = [];\n\n lines.push(`# ${pack.packType.charAt(0).toUpperCase()}${pack.packType.slice(1)} Pack`);\n lines.push('');\n lines.push(`**Objective:** ${pack.objective}`);\n lines.push(\n `**Target:** ${pack.target.adapter}${pack.target.framework ? ` (${pack.target.framework})` : ''}`,\n );\n lines.push(\n `**Scope:** pages=${pack.scope.pageIds.join(', ') || 'none'} | patterns=${pack.scope.patternIds.join(', ') || 'none'}`,\n );\n lines.push('');\n\n if (pack.packType === 'scaffold') {\n const scaffoldPack = pack as ScaffoldExecutionPack;\n const scaffoldShells = [\n ...new Set(scaffoldPack.data.routes.map((route) => route.shell).filter(Boolean)),\n ];\n lines.push('## Scaffold Contract');\n lines.push(`- Shell: ${scaffoldPack.data.shell}`);\n if (scaffoldShells.length > 1) {\n const secondaryShells = scaffoldShells.filter((shell) => shell !== scaffoldPack.data.shell);\n lines.push(\n `- Shells: ${[`${scaffoldPack.data.shell} (primary)`, ...secondaryShells].join(', ')}`,\n );\n }\n lines.push(`- Theme: ${scaffoldPack.data.theme.id} (${scaffoldPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${scaffoldPack.data.routing} → ${routingImplementationHint(scaffoldPack.data.routing)}`,\n );\n if (scaffoldPack.data.features.length > 0) {\n lines.push(`- Features: ${scaffoldPack.data.features.join(', ')}`);\n }\n if (\n scaffoldPack.data.navigation?.commandPalette ||\n scaffoldPack.data.navigation?.hotkeys.length\n ) {\n lines.push('- Navigation:');\n const cp = scaffoldPack.data.navigation.commandPalette;\n if (cp) {\n if (typeof cp === 'object') {\n lines.push(' - Command palette:');\n if (cp.trigger) lines.push(` - Trigger: ${cp.trigger}`);\n if (cp.styling)\n lines.push(` - Styling: ${cp.styling}${cp.width ? ` (width ${cp.width})` : ''}`);\n else if (cp.width) lines.push(` - Width: ${cp.width}`);\n if (cp.placeholder) lines.push(` - Placeholder: \"${cp.placeholder}\"`);\n if (cp.commands && cp.commands.length > 0) {\n lines.push(` - Commands (${cp.commands.length}):`);\n for (const command of cp.commands) {\n const parts: string[] = [];\n if (command.section) parts.push(command.section);\n parts.push(command.label);\n if (command.hotkey) parts.push(`[${command.hotkey}]`);\n if (command.route) parts.push(`→ ${command.route}`);\n lines.push(` - ${command.id}: ${parts.join(' · ')}`);\n }\n }\n } else {\n lines.push(' - command palette required');\n }\n }\n const globalSemantics = scaffoldPack.data.navigation.hotkeySemantics;\n if (scaffoldPack.data.navigation.hotkeys.length > 0) {\n const semanticsSummary = formatHotkeySemantics(globalSemantics);\n lines.push(` - Hotkeys${semanticsSummary ? ` (${semanticsSummary})` : ''}:`);\n for (const hotkey of scaffoldPack.data.navigation.hotkeys) {\n const target = [hotkey.label, hotkey.route].filter(Boolean).join(' — ');\n const perKeySemantics = formatHotkeySemantics(hotkey.semantics);\n const suffix = perKeySemantics ? ` _(${perKeySemantics})_` : '';\n lines.push(` - ${hotkey.key}${target ? `: ${target}` : ''}${suffix}`);\n }\n }\n }\n lines.push('');\n\n lines.push('## Route Plan');\n for (const route of scaffoldPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n // Required Theme Decorators — canonical project-level decorator contract\n // (1.7.22). Lives ONCE here in scaffold-pack rather than duplicated across\n // section packs. Cold prompts read scaffold-pack first, so this is the\n // earliest authoritative read of the theme's visual identity contract.\n if (scaffoldPack.data.themeDecorators && scaffoldPack.data.themeDecorators.length > 0) {\n const escScaffoldCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${scaffoldPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these across all sections — without them, every page reads as \"themed colors only\" with no theme character. Section packs reference this table; the contract is project-wide.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of scaffoldPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escScaffoldCell(entry.intent)} | ${escScaffoldCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'section') {\n const sectionPack = pack as SectionExecutionPack;\n lines.push('## Section Contract');\n lines.push(`- Section: ${sectionPack.data.sectionId}`);\n lines.push(`- Role: ${sectionPack.data.role}`);\n lines.push(`- Shell: ${sectionPack.data.shell}`);\n lines.push(`- Theme: ${sectionPack.data.theme.id} (${sectionPack.data.theme.mode})`);\n if (sectionPack.data.features.length > 0) {\n lines.push(`- Features: ${sectionPack.data.features.join(', ')}`);\n }\n if (sectionPack.data.description) {\n lines.push(`- Description: ${sectionPack.data.description}`);\n }\n lines.push('');\n\n lines.push('## Section Routes');\n for (const route of sectionPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (sectionPack.data.navigationItems && sectionPack.data.navigationItems.length > 0) {\n lines.push('## Section Navigation');\n lines.push('');\n lines.push(\n \"Render these items in the shell's primary navigation. Exact match on label, route, and icon.\",\n );\n lines.push('');\n for (const item of sectionPack.data.navigationItems) {\n const parts: string[] = [`${item.label} → ${item.route}`];\n if (item.icon) parts.push(`icon: ${item.icon}`);\n if (item.hotkey) parts.push(`hotkey: ${item.hotkey}`);\n if (item.badge) parts.push(`badge: ${item.badge}`);\n if (item.active_match) parts.push(`active match: \\`${item.active_match}\\``);\n lines.push(`- ${parts.join(' · ')}`);\n }\n lines.push('');\n }\n\n if (sectionPack.data.directives && sectionPack.data.directives.length > 0) {\n lines.push('## Section Directives');\n lines.push('');\n lines.push(\n 'Execution-level rules every page in this section must obey. Follow exactly — these live in the pack contract, not narrative prose.',\n );\n lines.push('');\n for (const directive of sectionPack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n\n // Theme decorators pointer — full table lives in scaffold-pack.md (1.7.22\n // dedup). F2 Phase 1 cold-LLM runs flagged 7-10× duplication of the same\n // table across section packs (~270-540 redundant lines per scaffold). The\n // canonical contract now lives ONCE in scaffold-pack; section packs cite\n // the theme id and point readers there. Section-pack data still carries\n // themeDecorators if explicitly set (legacy support), but the renderer\n // prefers the pointer form unless a section-specific override is needed.\n if (sectionPack.data.themeDecorators && sectionPack.data.themeDecorators.length > 0) {\n // Legacy/override path — render the full table. Kept for back-compat\n // with consumers that still pass themeDecorators directly.\n const escCell = (s: string): string => s.replace(/\\|/g, '\\\\|');\n lines.push(`## Required Theme Decorators (${sectionPack.data.theme.id})`);\n lines.push('');\n lines.push(\n 'These classes carry the active theme\\'s visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these — without them, the page reads as \"themed colors only\" with no theme character.',\n );\n lines.push('');\n lines.push('| Class | Intent | Apply to |');\n lines.push('|-------|--------|----------|');\n for (const entry of sectionPack.data.themeDecorators) {\n lines.push(\n `| \\`.${entry.class}\\` | ${escCell(entry.intent)} | ${escCell(entry.applyTo)} |`,\n );\n }\n lines.push('');\n } else {\n // Default path (1.7.22+) — pointer to scaffold-pack's canonical table.\n lines.push('## Theme Decorators');\n lines.push('');\n lines.push(\n `Theme \\`${sectionPack.data.theme.id}\\` decorators are documented ONCE in \\`scaffold-pack.md\\` under \"Required Theme Decorators\". Apply them across this section's pages — the contract is the same project-wide. See also DECANTR.md \"Decorator Quick Reference\" for the same table.`,\n );\n lines.push('');\n }\n }\n\n if (pack.packType === 'page') {\n const pagePack = pack as PageExecutionPack;\n lines.push('## Page Contract');\n lines.push(`- Page: ${pagePack.data.pageId}`);\n lines.push(`- Path: ${pagePack.data.path}`);\n lines.push(`- Shell: ${pagePack.data.shell}`);\n if (pagePack.data.sectionId) {\n const role = pagePack.data.sectionRole ? ` (${pagePack.data.sectionRole})` : '';\n lines.push(`- Section: ${pagePack.data.sectionId}${role}`);\n }\n lines.push(`- Theme: ${pagePack.data.theme.id} (${pagePack.data.theme.mode})`);\n if (pagePack.data.features.length > 0) {\n lines.push(`- Features: ${pagePack.data.features.join(', ')}`);\n }\n if (pagePack.data.surface) {\n lines.push(`- Surface: ${pagePack.data.surface}`);\n }\n lines.push('');\n\n lines.push('## Page Patterns');\n for (const pattern of pagePack.data.patterns) {\n lines.push(\n `- ${pattern.alias} -> ${pattern.id} [${pattern.layout}${pattern.preset ? ` | ${pattern.preset}` : ''}]`,\n );\n // Emit preset-specific description on the next line (indented) when\n // the pattern's preset carries its own prose. This stops cold LLMs\n // from falling back to the blueprint-generic root description.\n if (pattern.presetDescription) {\n lines.push(` > ${pattern.presetDescription}`);\n }\n // v2.1 C1: surface declared interactions[] as a checkbox checklist.\n // Hard-edged format — LLMs in generation mode cannot categorize a\n // checkbox as philosophy. Enforced by decantr check --strict (C5).\n if (pattern.interactions && pattern.interactions.length > 0) {\n lines.push(` **Interactions (MUST implement each — see DECANTR.md \"Interaction Requirements\"):**`);\n for (const interaction of pattern.interactions) {\n lines.push(` - [ ] ${interaction}`);\n }\n }\n }\n lines.push('');\n\n if (pagePack.data.wiringSignals.length > 0) {\n lines.push('## Wiring Signals');\n for (const signal of pagePack.data.wiringSignals) {\n lines.push(`- ${signal}`);\n }\n lines.push('');\n }\n\n if (pagePack.data.directives && pagePack.data.directives.length > 0) {\n lines.push('## Page Directives');\n lines.push('');\n lines.push('Execution-level rules for this route. Follow exactly.');\n lines.push('');\n for (const directive of pagePack.data.directives) {\n lines.push(`- ${directive}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'mutation') {\n const mutationPack = pack as MutationExecutionPack;\n lines.push('## Mutation Contract');\n lines.push(`- Operation: ${mutationPack.data.mutationType}`);\n lines.push(`- Shell: ${mutationPack.data.shell}`);\n lines.push(`- Theme: ${mutationPack.data.theme.id} (${mutationPack.data.theme.mode})`);\n lines.push(\n `- Routing: ${mutationPack.data.routing} → ${routingImplementationHint(mutationPack.data.routing)}`,\n );\n if (mutationPack.data.features.length > 0) {\n lines.push(`- Features: ${mutationPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Route Topology');\n for (const route of mutationPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (mutationPack.data.workflow.length > 0) {\n lines.push('## Workflow');\n for (const step of mutationPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n if (pack.packType === 'review') {\n const reviewPack = pack as ReviewExecutionPack;\n lines.push('## Review Contract');\n lines.push(`- Review Type: ${reviewPack.data.reviewType}`);\n lines.push(`- Shell: ${reviewPack.data.shell}`);\n lines.push(`- Theme: ${reviewPack.data.theme.id} (${reviewPack.data.theme.mode})`);\n lines.push(`- Routing: ${reviewPack.data.routing}`);\n if (reviewPack.data.features.length > 0) {\n lines.push(`- Features: ${reviewPack.data.features.join(', ')}`);\n }\n lines.push('');\n\n lines.push('## Review Topology');\n for (const route of reviewPack.data.routes) {\n const patterns = route.patternIds.length > 0 ? route.patternIds.join(', ') : 'none';\n lines.push(\n `- ${route.path} -> ${routePageLabel(route)}${route.shell ? ` @ ${route.shell}` : ''} [${patterns}]`,\n );\n }\n lines.push('');\n\n if (reviewPack.data.focusAreas.length > 0) {\n lines.push('## Focus Areas');\n for (const focusArea of reviewPack.data.focusAreas) {\n lines.push(`- ${focusArea}`);\n }\n lines.push('');\n }\n\n if (reviewPack.data.workflow.length > 0) {\n lines.push('## Review Workflow');\n for (const step of reviewPack.data.workflow) {\n lines.push(`- ${step}`);\n }\n lines.push('');\n }\n }\n\n // P1-1 — Page packs skip the universal footer (required setup, allowed\n // vocabulary, success checks, anti-patterns, examples, token budget).\n // These blocks are identical across every page in a 16-page scaffold\n // (~35 lines × N pages of pure boilerplate) and their JSON still carries\n // all fields for any consumer that needs the raw data. Non-page packs\n // keep the full footer — each one (scaffold, section, mutation, review)\n // is a singleton per scaffold so there's no duplication problem.\n if (pack.packType === 'page') {\n lines.push('## Shared Contract');\n lines.push(\n 'Required setup, allowed vocabulary, success checks, anti-patterns, and token budget are shared across every page pack. The full list lives in the pack JSON sidecar (`page-<id>-pack.json`) and in the pack-manifest. Refer there instead of re-reading the same boilerplate 16 times.',\n );\n lines.push('');\n return lines.join('\\n').trimEnd() + '\\n';\n }\n\n lines.push('## Required Setup');\n if (pack.requiredSetup.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.requiredSetup.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push('## Allowed Vocabulary');\n if (pack.allowedVocabulary.length === 0) {\n lines.push('- None declared.');\n } else {\n lines.push(...pack.allowedVocabulary.map((entry) => `- ${entry}`));\n }\n lines.push('');\n\n lines.push(\n ...renderList(\n '## Success Checks',\n pack.successChecks.map((entry) => `${entry.label} [${entry.severity}]`),\n ),\n );\n lines.push(\n ...renderList(\n '## Anti-Patterns',\n pack.antiPatterns.map((entry) => `${entry.summary}: ${entry.guidance}`),\n ),\n );\n lines.push(\n ...renderList(\n '## Examples',\n pack.examples.map((entry) => `${entry.label} (${entry.language})`),\n ),\n );\n\n lines.push('## Token Budget');\n lines.push(`- Target: ${pack.tokenBudget.target}`);\n lines.push(`- Max: ${pack.tokenBudget.max}`);\n lines.push(...pack.tokenBudget.strategy.map((entry) => `- ${entry}`));\n lines.push('');\n\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\nexport function resolvePackAdapter(\n target: string | undefined,\n platformType: string | undefined,\n): string {\n if (target === 'react' && platformType === 'spa') return 'react-vite';\n if (target === 'react') return 'react-web';\n if (target === 'vue' && platformType === 'spa') return 'vue-vite';\n if (target === 'svelte' && platformType === 'spa') return 'sveltekit';\n if (target) return target;\n return 'generic-web';\n}\n\nexport function listPackSections(essence: EssenceV3): SectionPackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections\n .map((section) => {\n const pageIds = section.pages\n .filter(\n (page) =>\n routedSectionPages.size === 0 || routedSectionPages.has(`${section.id}:${page.id}`),\n )\n .map((page) => page.id);\n\n return {\n id: section.id,\n role: section.role,\n shell: section.shell as string,\n description: section.description,\n features: section.features,\n pageIds,\n ...(Array.isArray(section.navigation_items) && section.navigation_items.length > 0\n ? { navigationItems: section.navigation_items as SectionNavigationItemPack[] }\n : {}),\n ...(Array.isArray(section.directives) && section.directives.length > 0\n ? { directives: section.directives }\n : {}),\n };\n })\n .filter((section) => section.pageIds.length > 0);\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n return [\n {\n id: essence.meta.archetype || 'default',\n role: 'primary',\n shell: (essence.blueprint.shell ?? 'sidebar-main') as string,\n description: `${essence.meta.archetype || 'Application'} section`,\n features: essence.blueprint.features || [],\n pageIds: pages.map((page) => page.id),\n },\n ];\n}\n\nexport function listPackPages(essence: EssenceV3): PagePackInput[] {\n const declaredSections = essence.blueprint.sections;\n if (declaredSections && declaredSections.length > 0) {\n const routedSectionPages = new Set(\n Object.values(essence.blueprint.routes ?? {}).map(\n (entry) => `${entry.section}:${entry.page}`,\n ),\n );\n return declaredSections.flatMap((section) =>\n section.pages\n .map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? section.shell) as string,\n sectionId: section.id,\n sectionRole: section.role,\n features: section.features,\n ...(Array.isArray(page.directives) && page.directives.length > 0\n ? { directives: page.directives }\n : {}),\n }))\n .filter(\n (page) =>\n routedSectionPages.size === 0 ||\n routedSectionPages.has(`${page.sectionId}:${page.pageId}`),\n ),\n );\n }\n\n const pages = essence.blueprint.pages ?? [{ id: 'home', layout: ['hero'] }];\n const defaultShell = (essence.blueprint.shell ?? 'sidebar-main') as string;\n return pages.map((page) => ({\n pageId: page.id,\n shell: (page.shell_override ?? defaultShell) as string,\n sectionId: essence.meta.archetype || 'default',\n sectionRole: 'primary',\n features: essence.blueprint.features || [],\n }));\n}\n\nfunction buildPageManifestEntries(pages: PagePackInput[]): PackManifestPageEntry[] {\n const counts = new Map<string, number>();\n for (const page of pages) {\n counts.set(page.pageId, (counts.get(page.pageId) ?? 0) + 1);\n }\n\n return pages.map((page) => {\n const hasDuplicatePageId = (counts.get(page.pageId) ?? 0) > 1;\n const id = hasDuplicatePageId ? pageIdentity(page.pageId, page.sectionId) : page.pageId;\n const fileId = hasDuplicatePageId ? pageFileId(page.pageId, page.sectionId) : page.pageId;\n return {\n id,\n markdown: `page-${fileId}-pack.md`,\n json: `page-${fileId}-pack.json`,\n sectionId: page.sectionId,\n sectionRole: page.sectionRole,\n };\n });\n}\n\nexport function buildScaffoldPack(\n appNode: IRAppNode,\n options: ScaffoldPackBuilderOptions = {},\n): ScaffoldExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: ScaffoldExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.scaffold,\n packVersion: '1.0.0',\n packType: 'scaffold',\n objective:\n options.objective ?? `Scaffold the ${appNode.theme.id} app shell and declared routes.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the declared routes as the topology source of truth.',\n 'Preserve the resolved theme and shell contract unless the task explicitly mutates them.',\n ],\n allowedVocabulary: [\n ...new Set([\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n navigation: options.navigation,\n routes,\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildSectionPack(\n appNode: IRAppNode,\n input: SectionPackInput,\n options: SectionPackBuilderOptions = {},\n): SectionExecutionPack {\n const routes = summarizeSectionRoutes(appNode, input);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n\n const pack: SectionExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.section,\n packVersion: '1.0.0',\n packType: 'section',\n objective:\n options.objective ??\n `Implement the ${input.id} section using the compiled ${input.shell} shell contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Use the declared section routes as the source of truth for this slice of the app.',\n 'Keep the section shell consistent unless the task explicitly changes the shell contract.',\n ],\n allowedVocabulary: [\n ...new Set([\n input.id,\n input.role,\n input.shell,\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_SECTION_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n sectionId: input.id,\n role: input.role,\n shell: input.shell,\n description: input.description,\n features: input.features,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routes,\n ...(input.navigationItems && input.navigationItems.length > 0\n ? { navigationItems: input.navigationItems }\n : {}),\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n ...(options.themeDecorators && options.themeDecorators.length > 0\n ? { themeDecorators: options.themeDecorators }\n : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildPagePack(\n appNode: IRAppNode,\n input: PagePackInput,\n options: PagePackBuilderOptions = {},\n): PageExecutionPack {\n const pageNode = findPageNode(appNode, input.pageId, input.sectionId);\n const route = summarizePageRoute(appNode, input.pageId, input.sectionId);\n\n if (!pageNode || !route) {\n throw new Error(`Unknown page for page pack: ${input.pageId}`);\n }\n\n const patterns = collectPagePatterns(pageNode);\n\n const pack: PageExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.page,\n packVersion: '1.0.0',\n packType: 'page',\n objective:\n options.objective ?? `Implement the ${input.pageId} route using the compiled page contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: [route.pageId],\n patternIds: [...new Set(patterns.map((pattern) => pattern.id))],\n },\n requiredSetup: options.requiredSetup ?? [\n 'Keep the compiled route and shell contract stable for this page.',\n 'Treat the listed page patterns as the primary structure for this route.',\n ],\n allowedVocabulary: [\n ...new Set(\n [\n input.pageId,\n input.shell,\n input.sectionId ?? '',\n input.sectionRole ?? '',\n appNode.theme.id,\n appNode.theme.mode,\n ...input.features,\n ...patterns.flatMap((pattern) => [pattern.id, pattern.alias, pattern.layout]),\n ].filter(Boolean),\n ),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_PAGE_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n pageId: route.pageId,\n path: route.path,\n shell: input.shell,\n sectionId: input.sectionId,\n sectionRole: input.sectionRole,\n features: input.features,\n surface: pageNode.surface,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n wiringSignals: pageNode.wiring?.signals.map((signal) => signal.name) ?? [],\n patterns,\n ...(input.directives && input.directives.length > 0 ? { directives: input.directives } : {}),\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildMutationPack(\n appNode: IRAppNode,\n options: MutationPackBuilderOptions,\n): MutationExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const defaultWorkflow =\n options.mutationType === 'add-page'\n ? [\n 'Declare the new page in the essence before generating code.',\n 'Refresh Decantr context so section and page packs include the new route.',\n 'Read the relevant section pack and new page pack before implementation.',\n ]\n : [\n 'Read the page pack for the route you are modifying first.',\n 'Stop and update the essence before changing route, shell, or pattern contracts.',\n 'Validate and check drift after code changes complete.',\n ];\n\n const pack: MutationExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.mutation,\n packVersion: '1.0.0',\n packType: 'mutation',\n objective:\n options.objective ??\n `Execute the ${options.mutationType} workflow against the compiled app contract.`,\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Treat the compiled topology as the source of truth until the essence changes.',\n 'Refresh Decantr context after structural mutations so downstream tasks read current packs.',\n ],\n allowedVocabulary: [\n ...new Set([\n options.mutationType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? [],\n successChecks: options.successChecks ?? DEFAULT_MUTATION_SUCCESS_CHECKS[options.mutationType],\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n mutationType: options.mutationType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n workflow: options.workflow ?? defaultWorkflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport function buildReviewPack(\n appNode: IRAppNode,\n options: ReviewPackBuilderOptions = {},\n): ReviewExecutionPack {\n const routes = summarizeRoutes(appNode);\n const scopePatternIds = [...new Set(routes.flatMap((route) => route.patternIds))];\n const reviewType = options.reviewType ?? 'app';\n const focusAreas = options.focusAreas ?? [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n ];\n const workflow = options.workflow ?? [\n 'Read the scaffold pack and page packs before evaluating generated code.',\n 'Compare findings against the compiled route, shell, and theme contract first.',\n 'Escalate contract drift into essence updates when the requested output intentionally changes topology or theme identity.',\n ];\n\n const pack: ReviewExecutionPack = {\n $schema: EXECUTION_PACK_SCHEMA_URLS.review,\n packVersion: '1.0.0',\n packType: 'review',\n objective:\n options.objective ?? 'Review generated output against the compiled Decantr contract.',\n target: {\n ...DEFAULT_TARGET,\n ...options.target,\n },\n preset: options.preset ?? null,\n scope: {\n appId: appNode.id,\n pageIds: routes.map((route) => route.pageId),\n patternIds: scopePatternIds,\n },\n requiredSetup: options.requiredSetup ?? [\n 'Read the compiled scaffold and route packs before reviewing code.',\n 'Use concrete evidence from the workspace instead of purely stylistic intuition.',\n ],\n allowedVocabulary: [\n ...new Set([\n reviewType,\n appNode.shell.config.type,\n appNode.theme.id,\n appNode.theme.mode,\n ...appNode.features,\n ...scopePatternIds,\n ...focusAreas,\n ]),\n ],\n examples: options.examples ?? [],\n antiPatterns: options.antiPatterns ?? DEFAULT_REVIEW_ANTI_PATTERNS,\n successChecks: options.successChecks ?? DEFAULT_REVIEW_SUCCESS_CHECKS,\n tokenBudget: mergeTokenBudget(options.tokenBudget),\n data: {\n reviewType,\n shell: appNode.shell.config.type,\n theme: {\n id: appNode.theme.id,\n mode: appNode.theme.mode,\n shape: appNode.theme.shape,\n },\n routing: appNode.routing,\n features: appNode.features,\n routes,\n focusAreas,\n workflow,\n },\n renderedMarkdown: '',\n };\n\n pack.renderedMarkdown = renderExecutionPackMarkdown(pack);\n return pack;\n}\n\nexport async function compileExecutionPackBundle(\n essence: EssenceFile,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<ExecutionPackBundle> {\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n const generatedAt = new Date().toISOString();\n const sharedTarget = {\n framework: effectiveEssence.meta.target || null,\n runtime: effectiveEssence.meta.platform.type || null,\n adapter: resolvePackAdapter(effectiveEssence.meta.target, effectiveEssence.meta.platform.type),\n };\n\n const pipeline = await runPipeline(essence, {\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n resolver: options.resolver,\n });\n\n const navMeta = effectiveEssence.meta.navigation;\n // Preserve the full command_palette value when it's a structured contract;\n // coerce to boolean only when it's the legacy flag form.\n const commandPaletteValue: boolean | CommandPaletteContract =\n typeof navMeta?.command_palette === 'object' && navMeta.command_palette !== null\n ? (navMeta.command_palette as CommandPaletteContract)\n : Boolean(navMeta?.command_palette);\n\n // Compose theme decorator contract from registry data once and reuse for\n // both scaffold pack (canonical) and section packs (reference). Filter to\n // entries with the minimum data needed to render a useful row.\n const themeDecorators: ThemeDecoratorEntry[] | undefined = (() => {\n const defs = pipeline.registryTheme?.decorator_definitions;\n if (!defs) return undefined;\n const entries: ThemeDecoratorEntry[] = [];\n for (const [name, def] of Object.entries(defs)) {\n const intent = def.intent || def.description || '';\n const applyTo = (def.usage || []).join(', ');\n if (!intent && !applyTo) continue;\n entries.push({ class: name, intent, applyTo });\n }\n return entries.length > 0 ? entries : undefined;\n })();\n\n const scaffold = buildScaffoldPack(pipeline.ir, {\n target: sharedTarget,\n navigation: {\n commandPalette: commandPaletteValue,\n hotkeys: Array.isArray(navMeta?.hotkeys)\n ? navMeta.hotkeys\n .filter(\n (\n hotkey,\n ): hotkey is {\n key: string;\n route?: string;\n action?: string;\n label: string;\n semantics?: HotkeySemantics;\n } =>\n Boolean(\n hotkey && typeof hotkey.key === 'string' && typeof hotkey.label === 'string',\n ),\n )\n .map((hotkey) => ({\n key: hotkey.key,\n route: hotkey.route,\n label: hotkey.label,\n ...(hotkey.semantics ? { semantics: hotkey.semantics as HotkeySemantics } : {}),\n }))\n : [],\n ...(navMeta?.hotkey_semantics\n ? { hotkeySemantics: navMeta.hotkey_semantics as HotkeySemantics }\n : {}),\n },\n ...(themeDecorators ? { themeDecorators } : {}),\n });\n const review = buildReviewPack(pipeline.ir, {\n target: sharedTarget,\n });\n const sectionInputs = listPackSections(effectiveEssence);\n const pageInputs = listPackPages(effectiveEssence);\n\n const sections = sectionInputs.map((section) =>\n buildSectionPack(pipeline.ir, section, {\n target: sharedTarget,\n // themeDecorators intentionally NOT passed to section packs as of 1.7.22.\n // Section packs render a one-line pointer to scaffold-pack instead of\n // duplicating the full decorator table — F2 Phase 1 reports flagged\n // 7-10× duplication across context files. The decorators are still\n // available on each section pack as section-pack.theme.id allows the\n // renderer to compose the pointer with the correct theme name.\n }),\n );\n const pages = pageInputs.map((page) =>\n buildPagePack(pipeline.ir, page, {\n target: sharedTarget,\n }),\n );\n const mutations = (['add-page', 'modify'] as const).map((mutationType) =>\n buildMutationPack(pipeline.ir, {\n mutationType,\n target: sharedTarget,\n }),\n );\n\n const manifest: ExecutionPackManifest = {\n $schema: PACK_MANIFEST_SCHEMA_URL,\n version: '1.0.0',\n generatedAt,\n scaffold: {\n id: 'scaffold',\n markdown: 'scaffold-pack.md',\n json: 'scaffold-pack.json',\n },\n review: {\n id: 'review',\n markdown: 'review-pack.md',\n json: 'review-pack.json',\n },\n sections: sectionInputs.map((section) => ({\n id: section.id,\n markdown: `section-${section.id}-pack.md`,\n json: `section-${section.id}-pack.json`,\n pageIds: section.pageIds,\n })),\n pages: buildPageManifestEntries(pageInputs),\n mutations: (['add-page', 'modify'] as const).map((mutationType) => ({\n id: mutationType,\n markdown: `mutation-${mutationType}-pack.md`,\n json: `mutation-${mutationType}-pack.json`,\n mutationType,\n })),\n };\n\n return {\n $schema: EXECUTION_PACK_BUNDLE_SCHEMA_URL,\n generatedAt,\n sourceEssenceVersion: essence.version,\n manifest,\n scaffold,\n review,\n sections,\n pages,\n mutations,\n };\n}\n\nexport function selectExecutionPackFromBundle(\n bundle: ExecutionPackBundle,\n selector: ExecutionPackSelector,\n): SelectedExecutionPackResponse | null {\n const id = selector.id ?? null;\n let pack: SelectedExecutionPack | null = null;\n\n switch (selector.packType) {\n case 'scaffold':\n pack = bundle.scaffold;\n break;\n case 'review':\n pack = bundle.review;\n break;\n case 'section':\n pack = id ? (bundle.sections.find((entry) => entry.data.sectionId === id) ?? null) : null;\n break;\n case 'page':\n pack = id\n ? (bundle.pages.find(\n (entry) =>\n entry.data.pageId === id ||\n pageIdentity(entry.data.pageId, entry.data.sectionId) === id ||\n pageFileId(entry.data.pageId, entry.data.sectionId) === id,\n ) ?? null)\n : null;\n break;\n case 'mutation':\n pack = id ? (bundle.mutations.find((entry) => entry.data.mutationType === id) ?? null) : null;\n break;\n default:\n pack = null;\n break;\n }\n\n if (!pack) {\n return null;\n }\n\n return {\n $schema: SELECTED_EXECUTION_PACK_SCHEMA_URL,\n generatedAt: bundle.generatedAt,\n sourceEssenceVersion: bundle.sourceEssenceVersion,\n manifest: bundle.manifest,\n selector: {\n packType: selector.packType,\n id,\n },\n pack,\n };\n}\n\nexport async function compileSelectedExecutionPack(\n essence: EssenceFile,\n selector: ExecutionPackSelector,\n options: CompileExecutionPackBundleOptions = {},\n): Promise<SelectedExecutionPackResponse | null> {\n const bundle = await compileExecutionPackBundle(essence, options);\n return selectExecutionPackFromBundle(bundle, selector);\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\nimport { isV3, migrateV2ToV3, validateEssence } from '@decantr/essence-spec';\nimport type { ContentResolver, Theme as RegistryTheme } from '@decantr/registry';\nimport { createResolver } from '@decantr/registry';\nimport { buildPageIR } from './ir.js';\nimport { resolveEssence } from './resolve.js';\nimport type { IRAppNode, IRLayer, IRPageNode, IRShellNode, IRStoreNode } from './types.js';\nimport { pascalCase } from './utils.js';\n\nfunction extractRouting(essence: EssenceFile): 'hash' | 'history' | 'pathname' {\n // Modern-SPA default. See packages/cli/src/scaffold.ts getPlatformMeta for rationale.\n if (isV3(essence)) {\n return essence.meta.platform.routing || 'history';\n }\n return (\n ((essence as { platform?: { routing?: string } }).platform?.routing as\n | 'hash'\n | 'history'\n | 'pathname') || 'history'\n );\n}\n\nexport interface PipelineOptions {\n /** Path to content directory (patterns, archetypes, themes) */\n contentRoot?: string;\n\n /** Override paths for local content resolution */\n overridePaths?: string[];\n\n /** Only resolve specific page(s) */\n pageFilter?: string;\n\n /** Optional custom resolver for hosted or in-memory execution */\n resolver?: ContentResolver;\n}\n\nexport interface PipelineResult {\n /** The framework-agnostic intermediate representation */\n ir: IRAppNode;\n /**\n * The fully-resolved registry theme record, including `decorator_definitions`\n * and other rich theme data not carried in the lite IR `theme` node.\n * Consumers (e.g. pack builders) need this to render decorator contracts\n * into compiled artifacts.\n */\n registryTheme: RegistryTheme | null;\n}\n\n/**\n * Run the Design Pipeline:\n * 1. Validate Essence against schema + guard rules\n * 2. Resolve all references (patterns, theme, wiring) from registry\n * 3. Build framework-agnostic IR tree\n * 4. Return IR (no code generation — that's the consumer's job)\n */\nexport async function runPipeline(\n essence: EssenceFile,\n options: PipelineOptions,\n): Promise<PipelineResult> {\n // 1. Validate\n const validation = validateEssence(essence);\n if (!validation.valid) {\n throw new Error(`Invalid essence: ${validation.errors.join(', ')}`);\n }\n\n // 2. Auto-migrate v2 → v3 before processing\n const effectiveEssence = isV3(essence) ? essence : migrateV2ToV3(essence);\n\n // 3. Create resolver and resolve\n const resolver =\n options.resolver ??\n (() => {\n if (!options.contentRoot) {\n throw new Error('Pipeline options must include either a contentRoot or a resolver.');\n }\n\n return createResolver({\n contentRoot: options.contentRoot,\n overridePaths: options.overridePaths,\n });\n })();\n\n const resolved = await resolveEssence(effectiveEssence, resolver);\n\n // 4. Build IR pages (v3 sources get layer metadata)\n const layer: IRLayer | undefined = resolved.isV3Source ? 'blueprint' : undefined;\n const pageNodes: IRPageNode[] = [];\n for (const rp of resolved.pages) {\n const pageIR = buildPageIR(\n rp.page,\n rp.patterns,\n rp.wiring,\n resolved.registryTheme,\n { gap: resolved.density.gap },\n layer,\n );\n pageNodes.push(pageIR);\n }\n\n // Apply page filter\n let filteredPages = pageNodes;\n if (options.pageFilter) {\n filteredPages = pageNodes.filter((p) => p.pageId === options.pageFilter);\n }\n\n // 4. Build shell node\n const shellNode: IRShellNode = {\n type: 'shell',\n id: 'shell',\n children: [],\n config: resolved.shell,\n };\n\n // 5. Build store node\n const storeNode: IRStoreNode = {\n type: 'store',\n id: 'store',\n children: [],\n pageSignals: pageNodes.map((p) => ({\n name: p.pageId,\n pascalName: pascalCase(p.pageId),\n })),\n };\n\n // 6. Assemble app node\n const appNode: IRAppNode = {\n type: 'app',\n id: 'app',\n children: filteredPages,\n theme: resolved.theme,\n routes: resolved.routes,\n routing: extractRouting(resolved.essence),\n shell: shellNode,\n store: storeNode,\n features: resolved.features,\n };\n\n return { ir: appNode, registryTheme: resolved.registryTheme };\n}\n"],"mappings":"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","names":["isPatternRef","isColumnLayout","isPatternRef","isColumnLayout","isV3","migrateV2ToV3","isV3","isV3","isV3","migrateV2ToV3"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decantr/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Decantr core — execution-pack compiler primitives and shared Decantr utilities",
|
|
5
5
|
"author": "Decantr AI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@decantr/essence-spec": "1.0.5",
|
|
43
|
-
"@decantr/registry": "1.0.
|
|
43
|
+
"@decantr/registry": "1.0.3"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {},
|
|
46
46
|
"scripts": {
|
|
@@ -75,6 +75,20 @@
|
|
|
75
75
|
"items": {
|
|
76
76
|
"$ref": "https://decantr.ai/schemas/execution-pack.common.v1.json#/$defs/routeSummary"
|
|
77
77
|
}
|
|
78
|
+
},
|
|
79
|
+
"themeDecorators": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"description": "Canonical theme decorator contract — class + intent + slot hint. Lives ONCE in scaffold-pack and is referenced (not duplicated) by section packs as of 1.7.22.",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"required": ["class", "intent", "applyTo"],
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"properties": {
|
|
87
|
+
"class": { "type": "string", "minLength": 1 },
|
|
88
|
+
"intent": { "type": "string" },
|
|
89
|
+
"applyTo": { "type": "string" }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
78
92
|
}
|
|
79
93
|
},
|
|
80
94
|
"additionalProperties": false
|