@ryuenn3123/agentic-senior-core 4.3.7 → 4.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.agent-context/prompts/bootstrap-design.md +51 -35
  2. package/.agent-context/prompts/init-project.md +0 -2
  3. package/.agent-context/rules/architecture.md +1 -5
  4. package/.agent-context/rules/frontend-architecture.md +1 -1
  5. package/AGENTS.md +3 -2
  6. package/lib/cli/adaptive-context/catalog.mjs +0 -35
  7. package/lib/cli/audits/typography-palette-anti-repeat-audit.mjs +7 -23
  8. package/lib/cli/project-scaffolder/prompt-builders.mjs +13 -14
  9. package/lib/cli/project-scaffolder/storage.mjs +1 -1
  10. package/lib/cli/project-scaffolder/ui-scope-detection.mjs +36 -0
  11. package/lib/cli/project-scaffolder.mjs +1 -3
  12. package/package.json +1 -1
  13. package/scripts/adaptive-context/fixtures.mjs +7 -12
  14. package/scripts/context-triggered-audit.mjs +1 -6
  15. package/scripts/frontend-usability-audit.mjs +2 -7
  16. package/scripts/release-gate/constants.mjs +0 -12
  17. package/scripts/ui-design-judge/constants.mjs +1 -12
  18. package/scripts/ui-design-judge/design-execution-summary.mjs +50 -228
  19. package/scripts/ui-design-judge/prompting.mjs +3 -24
  20. package/scripts/validate/config.mjs +3 -87
  21. package/scripts/validate/file-structure.mjs +0 -3
  22. package/.agent-context/rules/efficiency-vs-hype.md +0 -15
  23. package/.agent-context/rules/git-workflow.md +0 -15
  24. package/.agent-context/rules/naming-conv.md +0 -35
  25. package/lib/cli/project-scaffolder/design-contract/sections/audits.mjs +0 -96
  26. package/lib/cli/project-scaffolder/design-contract/sections/conceptual-anchor.mjs +0 -167
  27. package/lib/cli/project-scaffolder/design-contract/sections/execution-handoff.mjs +0 -211
  28. package/lib/cli/project-scaffolder/design-contract/seed-signals.mjs +0 -79
  29. package/lib/cli/project-scaffolder/design-contract/signal-vocab.mjs +0 -64
  30. package/lib/cli/project-scaffolder/design-contract/validation/anchor-validators.mjs +0 -294
  31. package/lib/cli/project-scaffolder/design-contract/validation/audit-validators.mjs +0 -117
  32. package/lib/cli/project-scaffolder/design-contract/validation/completeness.mjs +0 -121
  33. package/lib/cli/project-scaffolder/design-contract/validation/execution-validators.mjs +0 -328
  34. package/lib/cli/project-scaffolder/design-contract/validation/helpers.mjs +0 -8
  35. package/lib/cli/project-scaffolder/design-contract/validation/research-dossier-validators.mjs +0 -104
  36. package/lib/cli/project-scaffolder/design-contract/validation/structural-validators.mjs +0 -79
  37. package/lib/cli/project-scaffolder/design-contract/validation/system-validators.mjs +0 -256
  38. package/lib/cli/project-scaffolder/design-contract/validation.mjs +0 -74
  39. package/lib/cli/project-scaffolder/design-contract.mjs +0 -470
@@ -1,167 +0,0 @@
1
- /**
2
- * Conceptual anchor section of the design intent contract. Encodes the rules
3
- * that force agents to commit to a real-world reference, motion, and typography
4
- * decision before UI implementation, instead of defaulting to spatial cliches.
5
- *
6
- * Carries the Section 3 dossier from
7
- * `.agent-context/prompts/research-design.md`:
8
- * - categoryCodes (Section 3a)
9
- * - anchorReference (Section 3b)
10
- * - creativeCommitments (Section 3c)
11
- */
12
-
13
- export function buildConceptualAnchorSection() {
14
- return {
15
- mode: 'required-when-no-external-research',
16
- seedMode: 'selection-policy-only',
17
- anchorReference: 'agent-defined-anchor-reference',
18
- researchBrief: '.agent-context/prompts/research-design.md',
19
- requiresAgentSelectionBeforeUiImplementation: true,
20
- userResearchAbsencePolicy: {
21
- userSuppliedResearchOnly: true,
22
- scaffoldSeedDoesNotCountAsResearch: true,
23
- priorUiDoesNotCountAsResearch: true,
24
- requireAgentLedResearchWhenAvailable: true,
25
- },
26
- candidateSelectionPolicy: {
27
- considerAtLeast: 3,
28
- discardObviousCandidateCount: 2,
29
- minimumCandidateDistance: 'high',
30
- discardPredictableCandidates: true,
31
- preferDistinctiveOverSafe: true,
32
- doNotRevealHiddenCandidateList: true,
33
- outputOnlyChosenAnchor: true,
34
- avoidSpatialPlaceMetaphorByDefault: true,
35
- preferSpecificOverGeneric: true,
36
- },
37
- creativeCommitmentPolicy: {
38
- requiredBeforeComplianceReview: true,
39
- recordInDesignDocs: true,
40
- requiredCommitmentFields: [
41
- 'specificReferencePoint',
42
- 'signatureMotion',
43
- 'typographicDecision',
44
- ],
45
- rejectGenericQualityWordsOnly: true,
46
- specificityFloor: 'name-real-material-instrument-artifact-architecture-editorial-genre-cinematic-behavior-exhibition-system-scientific-apparatus-or-industrial-mechanism',
47
- },
48
- forbiddenFinalAnchorTerms: [
49
- 'dashboard',
50
- 'cards',
51
- 'admin-panel',
52
- 'saas-shell',
53
- 'minimalist-interface',
54
- 'safe-admin-layout',
55
- 'room',
56
- 'darkroom',
57
- 'counting-room',
58
- 'control-room',
59
- 'war-room',
60
- 'studio',
61
- 'lab',
62
- 'cockpit',
63
- 'command-center',
64
- ],
65
- sourceDomains: [
66
- 'premium-interactive-web-experiences',
67
- 'cinematic-campaign-and-product-launch',
68
- 'contemporary-editorial-digital-design',
69
- 'cinematic-behavior-and-transition-systems',
70
- 'experimental-editorial-structure',
71
- 'complex-physical-engineering',
72
- 'material-artifacts-and-instruments',
73
- 'workflow-and-custody-systems',
74
- ],
75
- visualRiskBudget: {
76
- mode: 'high-distinctiveness-with-accessibility-and-performance-guardrails',
77
- allowRichMotionAndMicroInteraction: true,
78
- rejectTimidDefaultWhenAnchorSupportsExpressiveUi: true,
79
- rejectDependencyFearAsDownshiftReason: true,
80
- requireReducedMotionFallback: true,
81
- },
82
- literalTranslationPolicy: {
83
- preferNonLiteralTranslation: true,
84
- allowedLiteralUse: 'Only use literal anchor artifacts when they serve a named product function, control, state, or task overlay.',
85
- forbiddenLiteralUse: 'Do not turn anchor artifacts into decorative wallpaper, required chrome, default texture, or unavoidable theme props.',
86
- },
87
- spatialAutopilotPolicy: {
88
- forbiddenHabitTerms: ['room', 'darkroom', 'counting-room', 'control-room', 'war-room', 'studio', 'lab', 'cockpit', 'command-center'],
89
- allowedOnlyWhen: 'The product has a real physical place model, operational environment, or user workflow that depends on that place metaphor.',
90
- replacementPreference: 'Use artifacts, custody flows, instruments, data behaviors, material systems, editorial systems, service rituals, or interaction mechanisms.',
91
- reviewQuestion: 'Could this anchor still work if the word "room" was removed? If not, revise before UI code.',
92
- },
93
- requiredDerivedAxes: [
94
- 'typography',
95
- 'morphology',
96
- 'motion',
97
- 'responsive-composition',
98
- ],
99
- categoryCodes: {
100
- mode: 'agent-must-complete-before-ui-implementation',
101
- blockingByDefault: true,
102
- researchBriefSection: 'Section 3',
103
- researchBriefPath: '.agent-context/prompts/research-design.md',
104
- minimumEntries: 3,
105
- specificityRule: 'A category code is only valid if a reader unfamiliar with the project can visualize a specific aesthetic direction from the text alone, without seeing the UI and without knowing the product name.',
106
- antiLeakageRule: 'Listing a cliche identifies a trap; it does not endorse an aesthetic. Examples in the brief are NOT target aesthetics for any project. Each category code must carry an explicit rejection note so the cliche cannot quietly become the target.',
107
- failingExamples: [
108
- 'clean typography (too abstract, applies to anything)',
109
- 'modern color palette (not falsifiable)',
110
- 'smooth animations (describes nothing specific)',
111
- ],
112
- passingExamples: [
113
- "children's storybook illustration site: hand-painted gouache textures with irregular hand-lettered titles, off-grid spreads with whitespace gutters, page-turn pacing rather than scroll (instantly recognizable as kids book category default)",
114
- 'luxury car configurator: full-bleed monochrome photography on black, ultra-thin sans-serif tracked wide, slow horizontal scroll with locked vertical alignment, micro-counters that tick instead of slide (instantly recognizable as luxury auto category default)',
115
- 'academic philosophy journal: high-contrast black-on-cream, book-class serif body at 11pt with generous leading, footnote markers with hover panels, numbered table-of-contents navigation, no hero imagery (instantly recognizable as academic journal category default)',
116
- ],
117
- passingExamplesPolicy: 'These examples illustrate the description format only. They are AI-defaultable cliches of their categories and must NOT be adopted as target aesthetics for any project.',
118
- commonAiSafeClichesToReject: [
119
- 'dev-tool default: condensed tabular numerics with minimal chrome and monospace code blocks on dark slate background, sans-serif metadata at 11-12px, monochrome status dots, single-line settings rows',
120
- 'AI-startup landing default: purple-to-pink gradient hero with floating 3D glass cards, sans-serif display type at 700-900 weight, vague hero copy, three-up feature grid below the fold',
121
- 'health/wellness app default: mint accent on white surface with coral status indicators, rounded pill-shaped buttons, friendly sans-serif at high weight, soft drop shadows on cards',
122
- 'SaaS admin default: left-side icon-only nav, top utility bar, three-card KPI row above a single data table, neutral grey-on-white with one accent color, modal-driven detail flows',
123
- 'marketing site default: hero image with one-line headline plus subhead, three feature tiles below, two pricing tiers, testimonial carousel, footer link grid',
124
- ],
125
- commonAiSafeClichesPolicy: 'If the project sits anywhere near one of these AI-safe defaults, the matching cliche must appear in candidateEntries with an explicit rejection note. Software products pattern-match one of these without intervention; naming the trap is required even when the trap is uncomfortable to admit.',
126
- selfTestRule: 'Read each category code aloud to someone unfamiliar with the project. If they cannot visualize a specific aesthetic direction from the text alone, the code is too abstract; revise. If they say "that is basically the X cliche", the description is specific enough; the cliche then belongs on the reject list with a rejection note, not as a candidate target.',
127
- requiredFieldsPerEntry: [
128
- 'description',
129
- 'categoryDefaultReason',
130
- 'rejectionNote',
131
- ],
132
- forbiddenPlaceholderPhrases: [
133
- 'clean typography',
134
- 'modern color palette',
135
- 'smooth animations',
136
- 'best practices',
137
- 'good design',
138
- ],
139
- candidateEntries: [],
140
- },
141
-
142
- finalAnchorContract: {
143
- requiredFields: [
144
- 'name',
145
- 'anchorReference',
146
- 'agentResearchMode',
147
- 'sourceDomain',
148
- 'specificReferencePoint',
149
- 'rationale',
150
- 'signatureMotion',
151
- 'typographicDecision',
152
- 'derivedTokenLogic',
153
- 'visualRiskBudget',
154
- 'motionRiskBudget',
155
- 'cohesionChecks',
156
- ],
157
- derivedTokenLogicAxes: [
158
- 'morphology',
159
- 'motion',
160
- ],
161
- cohesionChecks: [
162
- 'no-dashboard-mental-model',
163
- 'motion-derived-from-anchor',
164
- ],
165
- },
166
- };
167
- }
@@ -1,211 +0,0 @@
1
- /**
2
- * Design execution and handoff sections of the design intent contract:
3
- * execution policy gates, the structured handoff payload, the review rubric,
4
- * and the context-hygiene rules that govern continuity across sessions.
5
- */
6
-
7
- import { GENERICITY_DRIFT_SIGNALS, VALID_BOLD_SIGNALS } from '../signal-vocab.mjs';
8
-
9
- export function buildDesignExecutionPolicySection() {
10
- return {
11
- representationStrategy: 'surface-plan-v1',
12
- seedRefinementRequiredBeforeUiImplementation: true,
13
- requireSurfacePlan: true,
14
- requireComponentGraph: true,
15
- requireViewportMutationPlan: true,
16
- requireInteractionStateMatrix: true,
17
- requireContentPriorityMap: true,
18
- requireTaskFlowNarrative: true,
19
- requireSignatureMoveRationale: true,
20
- requireCreativeCommitmentGate: true,
21
- requireStructuredHandoff: true,
22
- requireRepoEvidenceAlignment: true,
23
- forbidScreenshotDependency: true,
24
- separateRequiredOutcomesFromCandidateMoves: true,
25
- forbidCandidateMovesAsLockedRequirements: true,
26
- forbidLibraryThemeAsVisualAuthority: true,
27
- forbidLiteralAnchorChromeWithoutProductFunction: true,
28
- handoffFormatVersion: 'ui-handoff-v1',
29
- requirePerSurfaceMutationOps: true,
30
- forbidUniformSiblingSurfaceTreatment: true,
31
- zeroBasedRedesignResetsPriorVisualsWhenRequested: true,
32
- semanticReviewFocus: [
33
- 'distinctiveness-vs-genericity',
34
- 'contract-fidelity',
35
- 'hierarchy-and-task-priority',
36
- 'component-state-behavior',
37
- 'cross-viewport-mutation',
38
- ],
39
- };
40
- }
41
-
42
- export function buildDesignExecutionHandoffSection({ projectName, primaryDomain, mutationRules }) {
43
- return {
44
- version: 'ui-handoff-v1',
45
- location: 'inline-design-intent',
46
- status: 'seed-needs-refinement',
47
- seedMode: 'structure-first-scaffold',
48
- requiresTaskSpecificRefinement: true,
49
- primaryExperienceGoal: `Define the main ${String(primaryDomain || 'product').toLowerCase()} journey for ${projectName} from repo evidence, brief, and docs.`,
50
- surfacePlan: [
51
- {
52
- surfaceId: 'agent-defined-primary-experience',
53
- role: 'primary-context-synthesized-by-agent',
54
- goal: 'Choose the first task path from product evidence; reject template shells.',
55
- antiPatterns: ['dashboard-default', 'scale-only-responsive-layout'],
56
- },
57
- ],
58
- componentGraph: {
59
- nodes: [
60
- { id: 'primary-experience', role: 'agent-defined-primary', priority: 'high' },
61
- { id: 'supporting-context', role: 'agent-defined-support', priority: 'medium' },
62
- ],
63
- edges: [
64
- { from: 'primary-experience', to: 'supporting-context', relationship: 'task-priority-support' },
65
- ],
66
- },
67
- contentPriorityMap: {
68
- primary: ['agent-defined-core-task-or-reading-path'],
69
- secondary: ['agent-defined-supporting-context'],
70
- deferred: ['agent-defined-deferred-or-hidden-content'],
71
- },
72
- viewportMutationPlan: {
73
- mobile: {
74
- primaryOperation: 'agent-defined-mobile-recomposition',
75
- requiredSurfaceActions: [
76
- 'choose-mobile-task-order',
77
- 'disclose-or-remove-low-priority-content',
78
- ],
79
- forbiddenPatterns: ['scale-only-shrink'],
80
- rationale: mutationRules.mobile,
81
- },
82
- tablet: {
83
- primaryOperation: 'agent-defined-tablet-regrouping',
84
- requiredSurfaceActions: [
85
- 'define-medium-width-grouping',
86
- 'preserve-task-clarity',
87
- ],
88
- forbiddenPatterns: ['uniform-module-grid-without-role-change'],
89
- rationale: mutationRules.tablet,
90
- },
91
- desktop: {
92
- primaryOperation: 'agent-defined-desktop-composition',
93
- requiredSurfaceActions: [
94
- 'use-space-to-improve-hierarchy',
95
- 'avoid-equalizing-unrelated-content',
96
- ],
97
- forbiddenPatterns: ['interchangeable-dashboard-or-landing-chrome'],
98
- rationale: mutationRules.desktop,
99
- },
100
- },
101
- interactionStateMatrix: [
102
- {
103
- componentId: 'primary-interaction',
104
- states: ['default', 'hover', 'focus', 'loading', 'error'],
105
- notes: 'Refine states from project language and anchor; reject anonymous panels.',
106
- },
107
- ],
108
- expressionFlexibility: {
109
- lockedOutcomes: [
110
- 'preserve-primary-user-goal',
111
- 'preserve-accessibility-floor',
112
- 'preserve-production-content-policy',
113
- 'preserve-forbidden-patterns',
114
- ],
115
- candidateSignatureMoves: [
116
- 'agent-defined-candidate-move-not-locked-until-refined',
117
- ],
118
- flexibleAxes: [
119
- 'palette-primitives',
120
- 'typeface-choice',
121
- 'surface-treatment',
122
- 'component-library-skin',
123
- 'motion-implementation',
124
- 'anchor-artifact-literalness',
125
- ],
126
- lockingRule: 'A candidate move becomes required only after repo evidence, product function, accessibility need, or explicit user approval makes it necessary.',
127
- },
128
- taskFlowNarrative: [
129
- `Entry: start ${projectName} from real evidence, not a generic opener.`,
130
- 'Resolution: define proof, feedback, recovery, and next action.',
131
- ],
132
- visualResetStrategy: {
133
- activatesWhenUserRequests: [
134
- 'redesign from zero',
135
- 'redesain dari 0',
136
- ],
137
- existingUiAllowedAs: ['content-evidence', 'behavior-evidence', 'asset-source-evidence'],
138
- existingUiForbiddenAs: ['palette-source', 'layout-source', 'motion-source'],
139
- requiredResetAxes: ['composition', 'hierarchy', 'motion-or-interaction', 'responsive-information-architecture'],
140
- },
141
- signatureMoveRationale: 'Choose one project-specific visual, motion, type, or interaction move.',
142
- creativeCommitment: {
143
- status: 'agent-must-complete-before-ui-implementation',
144
- requiredFields: [
145
- 'specificReferencePoint',
146
- 'signatureMotion',
147
- 'typographicDecision',
148
- ],
149
- failureMode: 'generic quality words without a real-world reference fail',
150
- },
151
- implementationGuardrails: {
152
- requireBuildFromHandoff: true,
153
- requireGapNotesBeforeFallback: true,
154
- forbidGenericLayoutFallbackWithoutReason: true,
155
- requireLockedVsFlexibleDecisionReview: true,
156
- forbidCandidateMoveHardcoding: true,
157
- forbidTestingDemoCopyInUi: true,
158
- forbidTerminalOnlyUserFlows: true,
159
- },
160
- };
161
- }
162
-
163
- export function buildReviewRubricSection() {
164
- return {
165
- version: 'ui-rubric-v1',
166
- genericityAutoFail: true,
167
- dimensions: [
168
- { key: 'distinctiveness', blockingByDefault: true, question: 'Is the UI authored and product-specific?' },
169
- { key: 'contractFidelity', blockingByDefault: true, question: 'Does the UI follow contract, priorities, and accessibility?' },
170
- { key: 'visualConsistency', blockingByDefault: false, question: 'Do type, spacing, color, and states form one system?' },
171
- { key: 'heuristicUxQuality', blockingByDefault: false, question: 'Does the UI preserve clarity, feedback, and confidence?' },
172
- { key: 'motionDiscipline', blockingByDefault: false, question: 'Is motion purposeful, performant, reduced-motion-safe, and on-tone?' },
173
- ],
174
- genericitySignals: [...GENERICITY_DRIFT_SIGNALS],
175
- validBoldSignals: [...VALID_BOLD_SIGNALS],
176
- reportingRules: {
177
- mustExplainGenericity: true,
178
- mustSeparateTasteFromFailure: true,
179
- contractFidelityOverridesPersonalTaste: true,
180
- },
181
- };
182
- }
183
-
184
- export function buildContextHygieneSection() {
185
- return {
186
- continuityMode: 'opt-in-only',
187
- allowedSources: [
188
- 'current-repo-evidence',
189
- 'current-user-brief',
190
- 'current-project-docs',
191
- 'explicitly-approved-current-task-constraints',
192
- ],
193
- taintedSources: [
194
- 'prior-chat-visual-memory',
195
- 'unrelated-project-aesthetics',
196
- 'remembered-screenshots-without-current-approval',
197
- 'generic-template-recall',
198
- ],
199
- repoEvidenceOverridesMemory: true,
200
- requireExplicitContinuityApproval: true,
201
- forbidCarryoverWhenUnapproved: true,
202
- approvedExternalConstraintUsage: 'Convert approved external constraints into current-project rules; do not imitate source surfaces.',
203
- externalWebsiteReferencePolicy: 'Use outside websites for mechanics, constraints, and quality bar analysis only. Do not copy layout rhythm, palette, component skin, visual metaphor, or brand posture.',
204
- driftSignals: [
205
- 'palette-reused-without-brief-support',
206
- 'prior-ui-visual-dna-carried-into-reset-request',
207
- 'room-or-control-room-anchor-repeated-without-product-need',
208
- 'external-reference-copied-instead-of-translated',
209
- ],
210
- };
211
- }
@@ -1,79 +0,0 @@
1
- /**
2
- * Lightweight seed-signal helpers used by the contract builder to fill in
3
- * mathSystems, motion intent, and copy describing the project context. Kept
4
- * separate so the contract builder file stays focused on assembly.
5
- */
6
-
7
- export function shouldBootstrapDesignDocument(discoveryAnswers, initContext) {
8
- const normalizedDomain = String(discoveryAnswers.primaryDomain || '').trim().toLowerCase();
9
- const normalizedBlueprint = String(initContext.blueprintFileName || '').trim().toLowerCase();
10
-
11
- const isUiDomain = normalizedDomain.includes('web')
12
- || normalizedDomain.includes('mobile')
13
- || normalizedDomain.includes('frontend')
14
- || normalizedDomain.includes('fullstack')
15
- || normalizedDomain.includes('ui');
16
-
17
- const isBackendOnlyDomain = normalizedDomain.includes('api service')
18
- || normalizedDomain.includes('cli tool')
19
- || normalizedDomain.includes('library');
20
-
21
- const blueprintLooksUi = normalizedBlueprint.includes('frontend')
22
- || normalizedBlueprint.includes('landing')
23
- || normalizedBlueprint.includes('ui');
24
-
25
- if (isUiDomain) {
26
- return true;
27
- }
28
-
29
- if (!isBackendOnlyDomain && blueprintLooksUi) {
30
- return true;
31
- }
32
-
33
- return false;
34
- }
35
-
36
- export function buildStructureFirstSeedSignals({
37
- projectName,
38
- projectDescription,
39
- primaryDomain,
40
- supplementalFields = {},
41
- }) {
42
- const normalizedDescription = String(projectDescription || '').trim();
43
- const repoEvidenceSummary = supplementalFields?.repoEvidence?.designEvidenceSummary || null;
44
- const hasRepoEvidence = Boolean(
45
- repoEvidenceSummary
46
- || (Array.isArray(supplementalFields?.repoEvidence?.workspaceUiEntries)
47
- && supplementalFields.repoEvidence.workspaceUiEntries.length > 0),
48
- );
49
- const evidenceSourceLabel = hasRepoEvidence
50
- ? 'current repo evidence, existing UI code, and the active brief'
51
- : 'the active brief and any repo evidence available at synthesis time';
52
- const projectContextLabel = normalizedDescription
53
- ? `the product context "${normalizedDescription}"`
54
- : 'the current product context';
55
-
56
- return {
57
- designPhilosophy: `Synthesize design for ${projectName || 'this project'} from ${evidenceSourceLabel}. Choose visual language, libraries, color, type, spacing, and interaction from ${projectContextLabel}; verify technology claims with official docs.`,
58
- typographyScaleRatio: 'agent-calibrated-from-content-platform-and-readability',
59
- baseGridUnit: 'agent-calibrated-from-platform-density-and-implementation-stack',
60
- spacingPattern: 'agent-defined-from-task-flow-and-viewport-needs',
61
- densityMode: 'agent-defined-from-user-task-device-and-content-pressure',
62
- colorIntent: `Choose semantic palette roles from ${projectContextLabel}, repo evidence, and accessibility. Reject scaffold or SaaS palette defaults.`,
63
- paletteRoles: ['agent-defined-semantic-roles'],
64
- distinctiveMoves: [
65
- 'Choose one product-specific move from task, audience, content, repo evidence, and docs.',
66
- ],
67
- motionPurpose: 'Use expressive motion when it improves hierarchy, continuity, feedback, memorability, or confidence. Verify new motion libraries with official docs.',
68
- componentMorphology: {
69
- mobile: 'Recompose for touch, task priority, and constrained attention.',
70
- tablet: 'Regroup surfaces for medium width without cloning desktop or mobile.',
71
- desktop: 'Use space for hierarchy and scanability; avoid template grids.',
72
- },
73
- mutationRules: {
74
- mobile: 'Reorder, merge, or disclose content for mobile. Reject scale-only shrink.',
75
- tablet: 'Regroup for tablet instead of width-only desktop reduction.',
76
- desktop: 'Use space intentionally; avoid equal-weight modules without evidence.',
77
- },
78
- };
79
- }
@@ -1,64 +0,0 @@
1
- /**
2
- * Vocabulary lists for genericity / forbidden / valid-bold drift signals used
3
- * across the design contract. Kept in one file so additions and removals stay
4
- * traceable.
5
- */
6
-
7
- export const GENERICITY_DRIFT_SIGNALS = [
8
- 'offline-prescribed-style-used-as-final-direction',
9
- 'unresearched-library-or-framework-choice',
10
- 'missing-conceptual-anchor-without-external-research',
11
- 'visual-decisions-not-derived-from-conceptual-anchor',
12
- 'ai-safe-ui-template-look',
13
- 'ai-color-default-palette-without-product-role-behavior',
14
- 'brandless-clean-template-look',
15
- 'interchangeable-product-renaming-test-fails',
16
- 'decorative-grid-or-glow-wallpaper-without-product-function',
17
- 'decorative-line-or-calibration-wallpaper-without-product-function',
18
- 'measurement-or-calibration-marks-used-as-page-background',
19
- 'testing-demo-or-placeholder-copy-shipped-to-ui',
20
- 'terminal-only-user-flow-without-product-reason',
21
- 'safe-cream-slate-or-monochrome-palette-used-as-readability-excuse',
22
- 'generic-abstract-logo-or-iconography',
23
- 'timid-anchor-that-renames-dashboard-or-admin-shell',
24
- 'motion-suppressed-without-accessibility-or-performance-reason',
25
- 'motion-or-3d-omitted-from-fear-without-fit-analysis',
26
- 'modern-library-rejected-from-dependency-fear-without-tradeoff-analysis',
27
- 'component-library-selected-by-habit-without-product-fit',
28
- 'scale-only-responsive-layout',
29
- 'zero-based-redesign-kept-prior-visual-dna',
30
- 'restyle-instead-of-recomposition',
31
- 'literal-anchor-artifacts-used-as-required-ui-chrome',
32
- 'candidate-signature-move-treated-as-locked-implementation',
33
- 'library-theme-tokens-drive-visual-language',
34
- 'spatial-room-anchor-used-by-habit',
35
- 'place-metaphor-used-as-layout-model-without-product-function',
36
- 'external-website-reference-copied-as-style',
37
- 'tailwind-only-or-component-kit-used-as-neutrality-claim',
38
- 'framework-selected-by-familiarity-instead-of-evidence',
39
- 'manual-framework-scaffold-used-when-official-setup-fits',
40
- ];
41
-
42
- export const FORBIDDEN_PATTERN_SIGNALS = [
43
- ...GENERICITY_DRIFT_SIGNALS.filter((signal) => signal !== 'unresearched-library-or-framework-choice'),
44
- 'single-safe-typographic-family-without-role-contrast-or-rationale',
45
- ];
46
-
47
- export const VALID_BOLD_SIGNALS = [
48
- 'single-cohesive-conceptual-anchor',
49
- 'high-variance-candidate-selection',
50
- 'context-derived-visual-direction',
51
- 'three-at-a-glance-product-specific-signals',
52
- 'visually-exploratory-accessible-palette-derived-from-product',
53
- 'audacious-accessible-palette-with-product-role-behavior',
54
- 'background-or-geometry-serves-product-function',
55
- 'motion-or-spatial-experience-derived-from-anchor',
56
- 'explicit-3d-canvas-fit-or-nonfit-decision',
57
- 'official-docs-backed-modern-library-choice',
58
- 'headless-or-component-primitive-restyled-to-product-language',
59
- 'responsive-recomposition-by-task-priority',
60
- 'purposeful-motion-with-reduced-motion-path',
61
- 'non-spatial-product-anchor-or-workflow-mechanism',
62
- 'official-scaffolder-used-for-supported-project-shape',
63
- 'framework-choice-compared-against-plausible-alternative',
64
- ];