@contentful/experience-design-system-cli 2.32.1-dev-build-b7d2d34.0 → 2.32.1-dev-build-71db090.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +1 -1
- package/dist/src/index.js +26 -24
- package/package.json +6 -6
- package/skills/generate-components.md +5 -5
package/dist/package.json
CHANGED
package/dist/src/index.js
CHANGED
|
@@ -17899,7 +17899,7 @@ __export(CredentialsStep_exports, {
|
|
|
17899
17899
|
});
|
|
17900
17900
|
import { useState as useState15, useEffect as useEffect7, useRef as useRef3 } from "react";
|
|
17901
17901
|
import { Box as Box28, Text as Text28 } from "ink";
|
|
17902
|
-
import { jsx as jsx28, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
17902
|
+
import { Fragment as Fragment9, jsx as jsx28, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
17903
17903
|
function CredentialsStep({
|
|
17904
17904
|
summary,
|
|
17905
17905
|
error: externalError,
|
|
@@ -18015,8 +18015,10 @@ function CredentialsStep({
|
|
|
18015
18015
|
] }),
|
|
18016
18016
|
/* @__PURE__ */ jsxs28(Box28, { flexDirection: "column", marginTop: 1, gap: 0, children: [
|
|
18017
18017
|
/* @__PURE__ */ jsx28(Text28, { children: initialSpaceId && initialCmaToken ? "Credentials pre-filled from experiences setup. Press Enter to continue or edit any field to update." : "Enter the Contentful space you want to import into." }),
|
|
18018
|
-
!(initialSpaceId && initialCmaToken) && /* @__PURE__ */
|
|
18019
|
-
|
|
18018
|
+
!(initialSpaceId && initialCmaToken) && /* @__PURE__ */ jsxs28(Fragment9, { children: [
|
|
18019
|
+
/* @__PURE__ */ jsx28(Text28, { dimColor: true, children: "These credentials are used both to align agent suggestions with what already exists in the space and to push your import at the end. Press S to skip and run without space context (push will be disabled)." }),
|
|
18020
|
+
/* @__PURE__ */ jsx28(Text28, { dimColor: true, children: "Tip: run experiences setup to save these to ~/.config/experiences/credentials.json so they pre-fill here automatically." })
|
|
18021
|
+
] })
|
|
18020
18022
|
] }),
|
|
18021
18023
|
/* @__PURE__ */ jsxs28(Box28, { flexDirection: "column", gap: 0, marginTop: 1, children: [
|
|
18022
18024
|
renderField("Space ID", spaceId, "spaceId"),
|
|
@@ -18215,7 +18217,7 @@ var init_preview_diff = __esm({
|
|
|
18215
18217
|
// packages/experience-design-system-cli/src/import/tui/steps/WizardPreviewStep.tsx
|
|
18216
18218
|
import { useState as useState16, useMemo as useMemo3 } from "react";
|
|
18217
18219
|
import { Box as Box29, Text as Text29, useStdout as useStdout3 } from "ink";
|
|
18218
|
-
import { Fragment as
|
|
18220
|
+
import { Fragment as Fragment10, jsx as jsx29, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
18219
18221
|
function buildPreviewDiffLines(preview) {
|
|
18220
18222
|
const lines = [];
|
|
18221
18223
|
const { components, tokens } = preview;
|
|
@@ -18392,7 +18394,7 @@ function WizardPreviewStep({
|
|
|
18392
18394
|
] }),
|
|
18393
18395
|
/* @__PURE__ */ jsx29(Text29, { dimColor: true, children: "\u2500".repeat(40) })
|
|
18394
18396
|
] }),
|
|
18395
|
-
hasAnything ? /* @__PURE__ */ jsxs29(
|
|
18397
|
+
hasAnything ? /* @__PURE__ */ jsxs29(Fragment10, { children: [
|
|
18396
18398
|
/* @__PURE__ */ jsx29(Text29, { children: "Here's what will happen in your space:" }),
|
|
18397
18399
|
hasComponents && /* @__PURE__ */ jsxs29(Box29, { flexDirection: "column", gap: 0, children: [
|
|
18398
18400
|
/* @__PURE__ */ jsx29(Box29, { gap: 1, marginTop: 1, children: /* @__PURE__ */ jsx29(Text29, { bold: true, dimColor: true, children: "ComponentTypes" }) }),
|
|
@@ -18558,7 +18560,7 @@ var init_WizardPreviewStep = __esm({
|
|
|
18558
18560
|
|
|
18559
18561
|
// packages/experience-design-system-cli/src/import/tui/steps/DoneStep.tsx
|
|
18560
18562
|
import { Box as Box30, Text as Text30 } from "ink";
|
|
18561
|
-
import { Fragment as
|
|
18563
|
+
import { Fragment as Fragment11, jsx as jsx30, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
18562
18564
|
function DoneStep({
|
|
18563
18565
|
componentTypes,
|
|
18564
18566
|
designTokens,
|
|
@@ -18579,7 +18581,7 @@ function DoneStep({
|
|
|
18579
18581
|
const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
|
|
18580
18582
|
const success = totalFailed === 0;
|
|
18581
18583
|
function EntityRows({ entity, label }) {
|
|
18582
|
-
return /* @__PURE__ */ jsxs30(
|
|
18584
|
+
return /* @__PURE__ */ jsxs30(Fragment11, { children: [
|
|
18583
18585
|
entity.created > 0 && /* @__PURE__ */ jsxs30(Box30, { gap: 1, children: [
|
|
18584
18586
|
/* @__PURE__ */ jsx30(Text30, { color: PALETTE.success, children: "\u2713" }),
|
|
18585
18587
|
/* @__PURE__ */ jsxs30(Text30, { children: [
|
|
@@ -20751,7 +20753,7 @@ var init_scope_gate_columns = __esm({
|
|
|
20751
20753
|
// packages/experience-design-system-cli/src/import/tui/steps/ScopeGateStep.tsx
|
|
20752
20754
|
import { Box as Box39, Text as Text41, useStdout as useStdout4 } from "ink";
|
|
20753
20755
|
import React21, { useEffect as useEffect10, useMemo as useMemo5, useRef as useRef4, useState as useState21 } from "react";
|
|
20754
|
-
import { Fragment as
|
|
20756
|
+
import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
20755
20757
|
function capReasonForFocusedRow(reason, width) {
|
|
20756
20758
|
const safeWidth = Math.max(20, width);
|
|
20757
20759
|
const budget = safeWidth * FOCUSED_REASON_MAX_LINES;
|
|
@@ -21500,7 +21502,7 @@ function ScopeGateStep({
|
|
|
21500
21502
|
graph
|
|
21501
21503
|
}
|
|
21502
21504
|
),
|
|
21503
|
-
columnPlan.layout === "three-column" && /* @__PURE__ */ jsxs41(
|
|
21505
|
+
columnPlan.layout === "three-column" && /* @__PURE__ */ jsxs41(Fragment12, { children: [
|
|
21504
21506
|
/* @__PURE__ */ jsx42(Box39, { width: 2, flexShrink: 0 }),
|
|
21505
21507
|
/* @__PURE__ */ jsx42(
|
|
21506
21508
|
AddedComponentsColumn,
|
|
@@ -21675,7 +21677,7 @@ function AddedComponentsColumn(props) {
|
|
|
21675
21677
|
borderColor: focused ? PALETTE.inverse : void 0,
|
|
21676
21678
|
children: [
|
|
21677
21679
|
/* @__PURE__ */ jsx42(ColumnHeader, { title: "Added components", width, focused }),
|
|
21678
|
-
entries.length === 0 ? /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: "(none)" }) : /* @__PURE__ */ jsxs41(
|
|
21680
|
+
entries.length === 0 ? /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: "(none)" }) : /* @__PURE__ */ jsxs41(Fragment12, { children: [
|
|
21679
21681
|
window.above > 0 && /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: `\u2191 ${window.above} more` }),
|
|
21680
21682
|
entries.slice(window.start, window.end).map((entry, vi) => {
|
|
21681
21683
|
const i = window.start + vi;
|
|
@@ -21738,7 +21740,7 @@ function AddedGroupsColumn(props) {
|
|
|
21738
21740
|
borderColor: focused ? PALETTE.inverse : void 0,
|
|
21739
21741
|
children: [
|
|
21740
21742
|
/* @__PURE__ */ jsx42(ColumnHeader, { title: "Added groups", width, focused }),
|
|
21741
|
-
entries.length === 0 ? /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: "(none)" }) : /* @__PURE__ */ jsxs41(
|
|
21743
|
+
entries.length === 0 ? /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: "(none)" }) : /* @__PURE__ */ jsxs41(Fragment12, { children: [
|
|
21742
21744
|
window.above > 0 && /* @__PURE__ */ jsx42(Text41, { dimColor: true, children: `\u2191 ${window.above} more` }),
|
|
21743
21745
|
entries.slice(window.start, window.end).map((g, vi) => {
|
|
21744
21746
|
const i = window.start + vi;
|
|
@@ -22444,7 +22446,7 @@ import {
|
|
|
22444
22446
|
CDF_PROPERTY_CATEGORIES,
|
|
22445
22447
|
DESIGN_TOKEN_TYPES as DESIGN_TOKEN_TYPES2
|
|
22446
22448
|
} from "@contentful/experience-design-system-types";
|
|
22447
|
-
import { Fragment as
|
|
22449
|
+
import { Fragment as Fragment13, jsx as jsx45, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
22448
22450
|
function parseToState(json) {
|
|
22449
22451
|
let parsed;
|
|
22450
22452
|
try {
|
|
@@ -22646,7 +22648,7 @@ function PropRow({
|
|
|
22646
22648
|
activeField === "category" && /* @__PURE__ */ jsx45(Picker, { value: prop.category, active: true }),
|
|
22647
22649
|
/* @__PURE__ */ jsx45(Text44, { dimColor: !selected, children: "req:" }),
|
|
22648
22650
|
activeField === "required" ? /* @__PURE__ */ jsx45(Toggle, { value: prop.required, active: true }) : /* @__PURE__ */ jsx45(Toggle, { value: prop.required, active: false }),
|
|
22649
|
-
prop.type === "enum" && /* @__PURE__ */ jsxs44(
|
|
22651
|
+
prop.type === "enum" && /* @__PURE__ */ jsxs44(Fragment13, { children: [
|
|
22650
22652
|
/* @__PURE__ */ jsx45(Text44, { dimColor: !selected, children: "values:" }),
|
|
22651
22653
|
/* @__PURE__ */ jsxs44(Text44, { color: selected ? PALETTE.warning : PALETTE.inverse, children: [
|
|
22652
22654
|
"[",
|
|
@@ -22654,7 +22656,7 @@ function PropRow({
|
|
|
22654
22656
|
"]"
|
|
22655
22657
|
] })
|
|
22656
22658
|
] }),
|
|
22657
|
-
prop.type === "token" && /* @__PURE__ */ jsxs44(
|
|
22659
|
+
prop.type === "token" && /* @__PURE__ */ jsxs44(Fragment13, { children: [
|
|
22658
22660
|
/* @__PURE__ */ jsx45(Text44, { dimColor: !selected, children: "kind:" }),
|
|
22659
22661
|
activeField === "tokenKind" ? /* @__PURE__ */ jsx45(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx45(Text44, { color: selected ? PALETTE.success : PALETTE.inverse, children: prop.tokenKind || "\u2014" })
|
|
22660
22662
|
] })
|
|
@@ -23859,7 +23861,7 @@ var init_cycle_panel_scroll = __esm({
|
|
|
23859
23861
|
|
|
23860
23862
|
// packages/experience-design-system-cli/src/analyze/select/tui/components/RationalePanel.tsx
|
|
23861
23863
|
import { Box as Box43, Text as Text45 } from "ink";
|
|
23862
|
-
import { Fragment as
|
|
23864
|
+
import { Fragment as Fragment14, jsx as jsx46, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
23863
23865
|
function wrapText(text, innerWidth) {
|
|
23864
23866
|
if (!text) return [""];
|
|
23865
23867
|
const width = Math.max(1, innerWidth);
|
|
@@ -23939,7 +23941,7 @@ function RationalePanel({
|
|
|
23939
23941
|
children: [
|
|
23940
23942
|
/* @__PURE__ */ jsxs45(Box43, { children: [
|
|
23941
23943
|
/* @__PURE__ */ jsx46(Text45, { bold: true, dimColor: !active, children: `RATIONALE \u2014 ${componentName}` }),
|
|
23942
|
-
overflowed && /* @__PURE__ */ jsxs45(
|
|
23944
|
+
overflowed && /* @__PURE__ */ jsxs45(Fragment14, { children: [
|
|
23943
23945
|
/* @__PURE__ */ jsx46(Box43, { flexGrow: 1 }),
|
|
23944
23946
|
/* @__PURE__ */ jsx46(Text45, { dimColor: !active, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
|
|
23945
23947
|
] })
|
|
@@ -24663,7 +24665,7 @@ var init_history = __esm({
|
|
|
24663
24665
|
// packages/experience-design-system-cli/src/import/tui/steps/GenerateReviewStep.tsx
|
|
24664
24666
|
import { useEffect as useEffect13, useMemo as useMemo7, useRef as useRef7, useState as useState26 } from "react";
|
|
24665
24667
|
import { Box as Box46, Text as Text48, useStdout as useStdout6 } from "ink";
|
|
24666
|
-
import { Fragment as
|
|
24668
|
+
import { Fragment as Fragment15, jsx as jsx49, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
24667
24669
|
function sortComponentsForSidebar2(components, cycleParticipants) {
|
|
24668
24670
|
const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
|
|
24669
24671
|
const tier = (c2) => {
|
|
@@ -26057,7 +26059,7 @@ function GenerateReviewStep({
|
|
|
26057
26059
|
const isCursor = idx === breakCursor;
|
|
26058
26060
|
return /* @__PURE__ */ jsx49(Text48, { inverse: isCursor, children: `${isCursor ? "\u25B6" : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `break-${idx}`);
|
|
26059
26061
|
}),
|
|
26060
|
-
breakConfirm ? /* @__PURE__ */ jsxs48(
|
|
26062
|
+
breakConfirm ? /* @__PURE__ */ jsxs48(Fragment15, { children: [
|
|
26061
26063
|
/* @__PURE__ */ jsx49(Text48, { children: " " }),
|
|
26062
26064
|
/* @__PURE__ */ jsx49(Text48, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" })
|
|
26063
26065
|
] }) : /* @__PURE__ */ jsx49(Text48, { dimColor: true, children: "[\u2191\u2193/j/k] move [Enter] delete [x/Esc] close" })
|
|
@@ -26139,7 +26141,7 @@ function GenerateReviewStep({
|
|
|
26139
26141
|
] }),
|
|
26140
26142
|
removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs48(Box46, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
|
|
26141
26143
|
/* @__PURE__ */ jsx49(Text48, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
|
|
26142
|
-
!removedBannerCollapsed && /* @__PURE__ */ jsxs48(
|
|
26144
|
+
!removedBannerCollapsed && /* @__PURE__ */ jsxs48(Fragment15, { children: [
|
|
26143
26145
|
/* @__PURE__ */ jsx49(Text48, { children: " " }),
|
|
26144
26146
|
removedComponents.map((rc) => /* @__PURE__ */ jsx49(Text48, { children: removedComponentLine(rc) }, rc.id))
|
|
26145
26147
|
] })
|
|
@@ -26316,7 +26318,7 @@ function GenerateReviewStep({
|
|
|
26316
26318
|
graph: sidebarGraph
|
|
26317
26319
|
}
|
|
26318
26320
|
),
|
|
26319
|
-
/* @__PURE__ */ jsx49(Box46, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: selected ? /* @__PURE__ */ jsxs48(
|
|
26321
|
+
/* @__PURE__ */ jsx49(Box46, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: selected ? /* @__PURE__ */ jsxs48(Fragment15, { children: [
|
|
26320
26322
|
/* @__PURE__ */ jsxs48(Box46, { children: [
|
|
26321
26323
|
/* @__PURE__ */ jsx49(Text48, { bold: true, children: selected.key }),
|
|
26322
26324
|
/* @__PURE__ */ jsx49(Box46, { flexGrow: 1 }),
|
|
@@ -26485,11 +26487,11 @@ function GenerateReviewStep({
|
|
|
26485
26487
|
autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx49(Text48, { dimColor: true, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
|
|
26486
26488
|
] }),
|
|
26487
26489
|
!dialogOpen && !searchOpen && searchQuery && /* @__PURE__ */ jsx49(Box46, { children: /* @__PURE__ */ jsx49(Text48, { dimColor: true, children: `/${searchQuery} (${searchMatchCount}/${components.length} matches) \xB7 [Esc] clear` }) }),
|
|
26488
|
-
!dialogOpen && sidebarFocused && /* @__PURE__ */ jsx49(Box46, { columnGap: 2, flexWrap: "wrap", children: panelOpen === "token-review" ? /* @__PURE__ */ jsxs48(
|
|
26490
|
+
!dialogOpen && sidebarFocused && /* @__PURE__ */ jsx49(Box46, { columnGap: 2, flexWrap: "wrap", children: panelOpen === "token-review" ? /* @__PURE__ */ jsxs48(Fragment15, { children: [
|
|
26489
26491
|
legendEntry("[\u2191/\u2193]", "move"),
|
|
26490
26492
|
legendEntry("[Enter]", "edit allowed"),
|
|
26491
26493
|
legendEntry("[Esc]", "close")
|
|
26492
|
-
] }) : /* @__PURE__ */ jsxs48(
|
|
26494
|
+
] }) : /* @__PURE__ */ jsxs48(Fragment15, { children: [
|
|
26493
26495
|
legendEntry("[j/k]", "move"),
|
|
26494
26496
|
legendEntry("[a]", "accept"),
|
|
26495
26497
|
legendEntry("[r]", "reject"),
|
|
@@ -26657,7 +26659,7 @@ var init_GenerateReviewStep = __esm({
|
|
|
26657
26659
|
// packages/experience-design-system-cli/src/import/tui/steps/AtomicGenerateReviewStep.tsx
|
|
26658
26660
|
import { useEffect as useEffect14, useRef as useRef8, useState as useState27 } from "react";
|
|
26659
26661
|
import { Box as Box47, Text as Text49, useStdout as useStdout7 } from "ink";
|
|
26660
|
-
import { Fragment as
|
|
26662
|
+
import { Fragment as Fragment16, jsx as jsx50, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
26661
26663
|
function sortComponentsForSidebar3(components) {
|
|
26662
26664
|
return [...components].sort((a, b) => {
|
|
26663
26665
|
const aEmpty = Object.keys(a.entry.$properties ?? {}).length === 0;
|
|
@@ -27382,7 +27384,7 @@ function AtomicGenerateReviewStep({
|
|
|
27382
27384
|
width: sidebarWidth
|
|
27383
27385
|
}
|
|
27384
27386
|
),
|
|
27385
|
-
/* @__PURE__ */ jsx50(Box47, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: selected ? /* @__PURE__ */ jsxs49(
|
|
27387
|
+
/* @__PURE__ */ jsx50(Box47, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: selected ? /* @__PURE__ */ jsxs49(Fragment16, { children: [
|
|
27386
27388
|
/* @__PURE__ */ jsxs49(Box47, { children: [
|
|
27387
27389
|
/* @__PURE__ */ jsx50(Text49, { bold: true, children: selected.key }),
|
|
27388
27390
|
/* @__PURE__ */ jsx50(Box47, { flexGrow: 1 }),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/experience-design-system-cli",
|
|
3
|
-
"version": "2.32.1-dev-build-
|
|
3
|
+
"version": "2.32.1-dev-build-71db090.0",
|
|
4
4
|
"description": "Contentful Experiences design system import CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"svelte": "^5.56.4",
|
|
41
41
|
"ts-morph": "^27.0.2",
|
|
42
42
|
"typescript": "^5.9.3",
|
|
43
|
-
"@contentful/experience-design-system-
|
|
44
|
-
"@contentful/experience-design-system-
|
|
43
|
+
"@contentful/experience-design-system-types": "2.32.1-dev-build-71db090.0",
|
|
44
|
+
"@contentful/experience-design-system-cli-v2": "2.32.1-dev-build-71db090.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@tsconfig/node24": "^24.0.4",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"ink-testing-library": "^4.0.0",
|
|
54
54
|
"typescript-eslint": "^8.67.0",
|
|
55
55
|
"vitest": "^4.0.16",
|
|
56
|
-
"@contentful/experience-design-system-client": "2.32.1-dev-build-
|
|
57
|
-
"@contentful/experience-design-system-
|
|
58
|
-
"@contentful/experience-design-system-
|
|
56
|
+
"@contentful/experience-design-system-client": "2.32.1-dev-build-71db090.0",
|
|
57
|
+
"@contentful/experience-design-system-extraction": "2.32.1-dev-build-71db090.0",
|
|
58
|
+
"@contentful/experience-design-system-generation": "2.32.1-dev-build-71db090.0"
|
|
59
59
|
},
|
|
60
60
|
"repository": {
|
|
61
61
|
"type": "git",
|
|
@@ -556,19 +556,19 @@ invent a `values` list. The uncertain answer is `cdf_type: "string"`, every time
|
|
|
556
556
|
|
|
557
557
|
The preamble may include an "Existing components in the target Contentful space" JSON block with a `likelyMatch` (a fuzzy-matched space component that likely corresponds to the codebase component you're classifying), an `otherComponents` list, and a rolled-up token summary. Use it to align your classifications with what the customer already has.
|
|
558
558
|
|
|
559
|
-
### When `likelyMatch` is present — align
|
|
559
|
+
### When `likelyMatch` is present — align rename intent + categories + slot names
|
|
560
560
|
|
|
561
|
-
Your goal is **consistency**: the customer will see the diff between what you propose and what already exists, and every unnecessary
|
|
561
|
+
Your goal is **consistency**: the customer will see the diff between what you propose and what already exists, and every unnecessary category flip or slot-shape mismatch becomes review friction.
|
|
562
562
|
|
|
563
|
-
1. **Prop names**:
|
|
563
|
+
1. **Prop names**: `classify_prop.prop` MUST always be the codebase prop name — that's the DB lookup key. When a codebase prop looks like it corresponds to an existing space prop (e.g. codebase `kind` ↔ space `variant`, codebase `text` ↔ space `label`), keep `prop` as the codebase name and put the alignment note in `reason`, e.g. `"looks like existing space prop 'variant' — customer may want to reconcile at review"`. Never rewrite `prop` itself; reconciliation happens downstream, not in this tool call.
|
|
564
564
|
2. **Categories**: match the space's category (`design` / `content`) for equivalent props, even if you'd normally categorize differently. Note the alignment in `reason`.
|
|
565
565
|
3. **Slot names**: match slot IDs / names when the shape is equivalent.
|
|
566
566
|
4. **Enum values**: never invent new values to bridge a mismatch. If the codebase's enum diverges from the space's, classify against your best-effort mapping and cite the divergence in `reason` — this is a signal for human review, not a green light to rewrite the space's enum.
|
|
567
|
-
5. **Never
|
|
567
|
+
5. **Never realign silently.** Every classification influenced by the `likelyMatch` MUST cite it in `reason`.
|
|
568
568
|
|
|
569
569
|
### When only `otherComponents` is present (no direct match)
|
|
570
570
|
|
|
571
|
-
Use the list to constrain slot `
|
|
571
|
+
Use the list to constrain slot `allowed_components` — do not propose a slot that accepts component types the space doesn't have.
|
|
572
572
|
|
|
573
573
|
### Token binding
|
|
574
574
|
|