@ryuenn3123/agentic-senior-core 3.0.34 → 3.0.36

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.
@@ -96,10 +96,13 @@ In reset mode:
96
96
  ## Design Quality Bar
97
97
 
98
98
  The UI must feel authored by a strong UI/UX designer, not assembled from default cards and safe framework chrome.
99
+ The UI must not look like a first-pass AI template. "Readable" and "safe" are not enough when the brief calls for an authored product experience.
99
100
 
100
101
  Do:
101
102
  - Synthesize a visual direction from the project context and explain why it fits.
102
103
  - Choose color, typography, spacing, motion, density, and component morphology dynamically from the product and audience.
104
+ - Make at least three at-a-glance product-specific signals visible on new screens or broad redesigns: for example a data treatment, physical metaphor, motion behavior, iconography system, spatial structure, or state language that would not transfer cleanly to a different product.
105
+ - Use visually exploratory, product-derived palettes while preserving WCAG contrast and status clarity. The design may be quiet, but it must not hide inside safe cream, slate, monochrome, or gradient defaults.
103
106
  - Use modern, expressive interaction and motion as part of the core design language, especially when it improves hierarchy, feedback, delight, confidence, or memorability.
104
107
  - Use 3D or spatial/canvas experiences as primary UI only when they improve product understanding or exploration while preserving navigation, content clarity, user actions, performance, accessibility, and non-3D fallbacks.
105
108
  - Keep frontend code clean, componentized, accessible, and easy to maintain.
@@ -107,7 +110,9 @@ Do:
107
110
  - Make design decisions explicit before coding, then implement consistently.
108
111
 
109
112
  Do not:
113
+ - Ship AI-safe UI: predictable card stacks, rounded template panels, generic abstract marks, decorative grid wallpaper, beige or slate safety palettes, soft glow backgrounds, or first-output composition with only local copy swapped in.
110
114
  - Default to generic SaaS heroes, balanced card grids, soft startup gradients, or dashboard chrome without product rationale.
115
+ - Use background lines, grids, scanlines, noise, glows, blobs, logos, or geometric decoration unless each motif has a named product function such as alignment, measurement, navigation, crop guidance, timeline reading, status, or motion continuity.
111
116
  - Let desktop, tablet, and mobile be the same design merely scaled down.
112
117
  - Let heading, body, data, and metadata collapse into one safe typographic treatment without rationale.
113
118
  - Reuse colors, layout shapes, or motion signatures from unrelated memory.
@@ -145,6 +150,7 @@ For every UI task, define how major surfaces change across mobile, tablet, and d
145
150
  The JSON must stay machine-readable and project-specific. It should record:
146
151
  - the confirmed project context and assumptions to validate
147
152
  - agent-chosen visual direction, not scaffold-chosen direction
153
+ - an `aiSafeUiAudit` or equivalent review signal that states why the screen is not interchangeable with a generic AI-generated template
148
154
  - `motionPaletteDecision` with motion density source, required interaction states, palette autopilot risk, and whether 3D/canvas is useful or unnecessary
149
155
  - `conceptualAnchor` and how typography, spacing, morphology, motion, and responsive composition derive from it when no external research was provided
150
156
  - `derivedTokenLogic` with exact `anchorReference` traceability for color, spacing, typography, and motion tokens
@@ -166,6 +172,8 @@ The review must block or flag:
166
172
  - inaccessible contrast, focus, target size, keyboard, auth, or dynamic-status behavior
167
173
  - scale-only responsive behavior
168
174
  - unresearched dependency choices
175
+ - AI-safe UI drift: interchangeable card grids, safe cream/slate/monochrome palettes, generic abstract logos, decorative grid wallpaper, or a screen that can be renamed to another product without visual changes
176
+ - palette choices that use readability as a reason to stay in safe defaults instead of deriving a richer but accessible palette from the product
169
177
  - default component-kit styling without product rationale
170
178
  - missing or disconnected `conceptualAnchor` when no external design research was provided
171
179
  - visual direction copied from unrelated memory or external references
@@ -47,10 +47,12 @@ Do not use this file to teach generic frontend basics the model already knows.
47
47
  ## Anti-Generic UI Boundaries
48
48
 
49
49
  - Do not default to interchangeable dashboard chrome, balanced card grids, centered marketing shells, or generic component-kit surfaces unless the product explicitly needs them.
50
+ - Do not ship "AI-safe UI": predictable card stacks, rounded rectangles, generic abstract logos, decorative grids, beige or slate safety palettes, soft glow backgrounds, and first-output template composition are review findings when they are not directly required by the product.
50
51
  - Do not let repeated surfaces share the same visual treatment by habit. Repetition is allowed only when the contract explains the product reason.
51
52
  - Do not use default framework button and input treatment as the final UI language.
52
53
  - Do not let heading, body, and data/meta roles collapse into one safe typographic family without explicit rationale.
53
- - At least one visual, interaction, content, motion, or state behavior must read as project-specific at a glance.
54
+ - At least three visual, interaction, content, motion, or state behaviors must read as project-specific at a glance for new screens or broad redesigns. For a narrow component edit, at least one touched behavior must preserve or improve project specificity.
55
+ - If the UI could be renamed to another product category without changing its composition, palette, iconography, and motion language, treat that as genericity drift and revise before implementation is considered complete.
54
56
 
55
57
  ## Dynamic Avant-Garde Anchor Boundary
56
58
 
@@ -74,7 +76,9 @@ Do not use this file to teach generic frontend basics the model already knows.
74
76
  - Product categories are heuristics, not style presets. Use them only as a starting signal, then choose motion density from user task, content density, brand intent, device/performance budget, and accessibility needs.
75
77
  - If the category is unclear, infer from the dominant task: reading, scanning, form completion, data comparison, product inspection, storytelling, learning, play, or spatial exploration.
76
78
  - For interactive UI, map the required states before coding: default, hover, focus-visible, active/pressed, disabled, loading, empty, error, success, and transition.
77
- - Do not default to dark slate, cream/beige/tan, purple-blue gradients, monochrome palettes, or uniform card surfaces unless current project evidence supports them. If one of those palettes is used, document why it fits and add enough role contrast that the UI does not read as a template.
79
+ - Prefer visually exploratory, product-derived palettes over safe template palettes. High readability is mandatory, but readability must not be used as an excuse for cream/beige/tan, dark slate, purple-blue gradients, monochrome palettes, or uniform card surfaces.
80
+ - Do not default to dark slate, cream/beige/tan, purple-blue gradients, monochrome palettes, or uniform card surfaces unless current project evidence supports them. If one of those palettes is used, document why it fits, add enough role contrast that the UI does not read as a template, and include at least one product-specific color behavior that would not make sense in a generic SaaS screen.
81
+ - Background lines, grids, scanlines, noise, glows, blobs, abstract logos, and decorative geometry are invalid when used as wallpaper. They must serve a named product function such as alignment, crop guidance, map/route orientation, timeline reading, measurement, status, or motion continuity.
78
82
  - Use the existing motion stack first. Add animation, 3D, canvas, or scroll dependencies only when they materially improve delivery speed, interaction quality, maintainability, or product understanding.
79
83
  - Motion should be absent only for a named reason: repeated high-frequency workflow, long-form reading focus, data-density scanning, reduced-motion need, or performance constraint.
80
84
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-04-26T23:40:08.786Z",
2
+ "generatedAt": "2026-04-27T06:06:55.854Z",
3
3
  "reportName": "memory-continuity-benchmark",
4
4
  "schemaVersion": "1.0.0",
5
5
  "passed": true,
package/.cursorrules CHANGED
@@ -1,6 +1,6 @@
1
1
  # AGENTIC-SENIOR-CORE DYNAMIC GOVERNANCE RULESET
2
2
 
3
- Generated by Agentic-Senior-Core CLI v3.0.34
3
+ Generated by Agentic-Senior-Core CLI v3.0.36
4
4
  Timestamp: 2026-04-26T23:31:29.580Z
5
5
  Selected policy file: .agent-context/policies/llm-judge-threshold.json
6
6
 
package/.windsurfrules CHANGED
@@ -1,6 +1,6 @@
1
1
  # AGENTIC-SENIOR-CORE DYNAMIC GOVERNANCE RULESET
2
2
 
3
- Generated by Agentic-Senior-Core CLI v3.0.34
3
+ Generated by Agentic-Senior-Core CLI v3.0.36
4
4
  Timestamp: 2026-04-26T23:31:29.580Z
5
5
  Selected policy file: .agent-context/policies/llm-judge-threshold.json
6
6
 
@@ -8,6 +8,7 @@ export function shouldBootstrapDesignDocument(discoveryAnswers, initContext) {
8
8
  const isUiDomain = normalizedDomain.includes('web')
9
9
  || normalizedDomain.includes('mobile')
10
10
  || normalizedDomain.includes('frontend')
11
+ || normalizedDomain.includes('fullstack')
11
12
  || normalizedDomain.includes('ui');
12
13
 
13
14
  const isBackendOnlyDomain = normalizedDomain.includes('api service')
@@ -228,9 +229,23 @@ function buildDesignIntentContractObject({
228
229
  productCategorySignal: 'agent-inferred-starting-heuristic',
229
230
  densityDecisionSource: 'Agent must choose motion density from task, content density, brand intent, device/performance, and accessibility evidence; product categories are heuristics, not style presets.',
230
231
  requiredInteractionStates: ['default', 'hover', 'focus-visible', 'active', 'disabled', 'loading', 'empty', 'error', 'success', 'transition'],
231
- paletteAutopilotRisks: ['dark-slate-default', 'cream-beige-default', 'purple-blue-gradient-default', 'monochrome-template-default', 'uniform-card-surface-default'],
232
+ paletteAutopilotRisks: ['dark-slate-default', 'cream-beige-default', 'purple-blue-gradient-default', 'monochrome-template-default', 'uniform-card-surface-default', 'generic-grid-wallpaper-default', 'soft-glow-ai-template-default'],
232
233
  spatialDecision: 'Agent must state whether 3D/canvas/WebGL is useful or unnecessary for product understanding, exploration, or storytelling.',
233
234
  },
235
+ aiSafeUiAudit: {
236
+ status: 'agent-must-complete-before-ui-implementation',
237
+ failureDefinition: 'UI is AI-safe when it relies on predictable card stacks, rounded template panels, generic abstract logos, decorative grid wallpaper, beige or slate safety palettes, soft glow backgrounds, or first-output composition with only local copy swapped in.',
238
+ interchangeabilityTest: `If this UI can be renamed from ${projectName} to another product category without changing composition, palette, iconography, and motion language, the design is genericity drift and must be revised.`,
239
+ requiredProductSpecificSignals: [
240
+ 'agent-defined-product-specific-data-treatment',
241
+ 'agent-defined-product-specific-motion-or-state-behavior',
242
+ 'agent-defined-product-specific-morphology-iconography-or-spatial-structure',
243
+ ],
244
+ paletteExplorationRule: 'Use a visually exploratory product-derived palette while preserving WCAG contrast and status clarity; do not use readability as an excuse for cream, slate, monochrome, or gradient defaults.',
245
+ backgroundPatternRule: 'Lines, grids, scanlines, noise, glows, blobs, logos, and geometric decoration must serve a named product function such as alignment, measurement, navigation, crop guidance, timeline reading, status, or motion continuity.',
246
+ reviewQuestion: 'What at-a-glance visual evidence proves this screen belongs to this product and not a generic AI-generated template?',
247
+ blockingByDefault: true,
248
+ },
234
249
  libraryResearchStatus: 'pending-verification',
235
250
  libraryDecisions: [
236
251
  {
@@ -501,6 +516,11 @@ function buildDesignIntentContractObject({
501
516
  'unresearched-library-or-framework-choice',
502
517
  'missing-conceptual-anchor-without-external-research',
503
518
  'visual-decisions-not-derived-from-conceptual-anchor',
519
+ 'ai-safe-ui-template-look',
520
+ 'interchangeable-product-renaming-test-fails',
521
+ 'decorative-grid-or-glow-wallpaper-without-product-function',
522
+ 'safe-cream-slate-or-monochrome-palette-used-as-readability-excuse',
523
+ 'generic-abstract-logo-or-iconography',
504
524
  'timid-anchor-that-renames-dashboard-or-admin-shell',
505
525
  'motion-suppressed-without-accessibility-or-performance-reason',
506
526
  'scale-only-responsive-layout',
@@ -511,6 +531,9 @@ function buildDesignIntentContractObject({
511
531
  'single-cohesive-conceptual-anchor',
512
532
  'high-variance-candidate-selection',
513
533
  'context-derived-visual-direction',
534
+ 'three-at-a-glance-product-specific-signals',
535
+ 'visually-exploratory-accessible-palette-derived-from-product',
536
+ 'background-or-geometry-serves-product-function',
514
537
  'responsive-recomposition-by-task-priority',
515
538
  'purposeful-motion-with-reduced-motion-path',
516
539
  ],
@@ -545,6 +568,7 @@ function buildDesignIntentContractObject({
545
568
  },
546
569
  experiencePrinciples: [
547
570
  'Design must feel project-specific, not interchangeable with generic SaaS templates.',
571
+ 'Readable UI must still avoid AI-safe template look; safety is not a substitute for authored visual direction.',
548
572
  'Major interface decisions must be explainable in product and user terms.',
549
573
  'Accessibility, responsiveness, and implementation realism are non-negotiable.',
550
574
  'Cross-viewport behavior must reorganize tasks and navigation, not just scale the desktop layout down.',
@@ -556,6 +580,11 @@ function buildDesignIntentContractObject({
556
580
  'offline-prescribed-style-used-as-final-direction',
557
581
  'missing-conceptual-anchor-without-external-research',
558
582
  'visual-decisions-not-derived-from-conceptual-anchor',
583
+ 'ai-safe-ui-template-look',
584
+ 'interchangeable-product-renaming-test-fails',
585
+ 'decorative-grid-or-glow-wallpaper-without-product-function',
586
+ 'safe-cream-slate-or-monochrome-palette-used-as-readability-excuse',
587
+ 'generic-abstract-logo-or-iconography',
559
588
  'timid-anchor-that-renames-dashboard-or-admin-shell',
560
589
  'motion-suppressed-without-accessibility-or-performance-reason',
561
590
  'scale-only-responsive-layout',
@@ -585,6 +614,10 @@ function buildDesignIntentContractObject({
585
614
  genericityAutoFail: true,
586
615
  requireSignatureMove: true,
587
616
  rejectTemplateNeutralLayout: true,
617
+ requireAiSafeUiAudit: true,
618
+ rejectAiSafeUiTemplateLook: true,
619
+ requireThreeProductSpecificSignals: true,
620
+ rejectDecorativeBackgroundPatternsWithoutProductFunction: true,
588
621
  },
589
622
  requiredDesignSections: DESIGN_REQUIRED_SECTIONS,
590
623
  implementation: {
@@ -892,6 +925,36 @@ export function validateDesignIntentContract(designIntentContract) {
892
925
  }
893
926
  }
894
927
 
928
+ if (!designIntentContract.aiSafeUiAudit || typeof designIntentContract.aiSafeUiAudit !== 'object') {
929
+ validationErrors.push('designIntent.aiSafeUiAudit must exist.');
930
+ } else {
931
+ const aiSafeUiAudit = designIntentContract.aiSafeUiAudit;
932
+ if (aiSafeUiAudit.status !== 'agent-must-complete-before-ui-implementation') {
933
+ validationErrors.push('designIntent.aiSafeUiAudit.status must require completion before UI implementation.');
934
+ }
935
+ if (!String(aiSafeUiAudit.failureDefinition || '').includes('AI-safe')) {
936
+ validationErrors.push('designIntent.aiSafeUiAudit.failureDefinition must define AI-safe UI drift.');
937
+ }
938
+ if (!String(aiSafeUiAudit.interchangeabilityTest || '').includes('renamed')) {
939
+ validationErrors.push('designIntent.aiSafeUiAudit.interchangeabilityTest must include the rename/interchangeability test.');
940
+ }
941
+ if (!Array.isArray(aiSafeUiAudit.requiredProductSpecificSignals) || aiSafeUiAudit.requiredProductSpecificSignals.length < 3) {
942
+ validationErrors.push('designIntent.aiSafeUiAudit.requiredProductSpecificSignals must list at least three product-specific signals.');
943
+ }
944
+ if (!String(aiSafeUiAudit.paletteExplorationRule || '').trim()) {
945
+ validationErrors.push('designIntent.aiSafeUiAudit.paletteExplorationRule must be a non-empty string.');
946
+ }
947
+ if (!String(aiSafeUiAudit.backgroundPatternRule || '').trim()) {
948
+ validationErrors.push('designIntent.aiSafeUiAudit.backgroundPatternRule must be a non-empty string.');
949
+ }
950
+ if (!String(aiSafeUiAudit.reviewQuestion || '').trim()) {
951
+ validationErrors.push('designIntent.aiSafeUiAudit.reviewQuestion must be a non-empty string.');
952
+ }
953
+ if (aiSafeUiAudit.blockingByDefault !== true) {
954
+ validationErrors.push('designIntent.aiSafeUiAudit.blockingByDefault must equal true.');
955
+ }
956
+ }
957
+
895
958
  if (!designIntentContract.tokenSystem || typeof designIntentContract.tokenSystem !== 'object') {
896
959
  validationErrors.push('designIntent.tokenSystem must exist.');
897
960
  } else {
@@ -1260,9 +1323,28 @@ export function validateDesignIntentContract(designIntentContract) {
1260
1323
  }
1261
1324
  if (!Array.isArray(designIntentContract.reviewRubric.genericitySignals) || designIntentContract.reviewRubric.genericitySignals.length < 3) {
1262
1325
  validationErrors.push('designIntent.reviewRubric.genericitySignals must list common genericity drift signals.');
1326
+ } else {
1327
+ for (const requiredSignal of [
1328
+ 'ai-safe-ui-template-look',
1329
+ 'interchangeable-product-renaming-test-fails',
1330
+ 'decorative-grid-or-glow-wallpaper-without-product-function',
1331
+ ]) {
1332
+ if (!designIntentContract.reviewRubric.genericitySignals.includes(requiredSignal)) {
1333
+ validationErrors.push(`designIntent.reviewRubric.genericitySignals must include "${requiredSignal}".`);
1334
+ }
1335
+ }
1263
1336
  }
1264
1337
  if (!Array.isArray(designIntentContract.reviewRubric.validBoldSignals) || designIntentContract.reviewRubric.validBoldSignals.length < 3) {
1265
1338
  validationErrors.push('designIntent.reviewRubric.validBoldSignals must list legitimate authored signals.');
1339
+ } else {
1340
+ for (const requiredSignal of [
1341
+ 'three-at-a-glance-product-specific-signals',
1342
+ 'visually-exploratory-accessible-palette-derived-from-product',
1343
+ ]) {
1344
+ if (!designIntentContract.reviewRubric.validBoldSignals.includes(requiredSignal)) {
1345
+ validationErrors.push(`designIntent.reviewRubric.validBoldSignals must include "${requiredSignal}".`);
1346
+ }
1347
+ }
1266
1348
  }
1267
1349
  if (!designIntentContract.reviewRubric.reportingRules || typeof designIntentContract.reviewRubric.reportingRules !== 'object') {
1268
1350
  validationErrors.push('designIntent.reviewRubric.reportingRules must exist.');
@@ -1291,6 +1373,16 @@ export function validateDesignIntentContract(designIntentContract) {
1291
1373
 
1292
1374
  if (!Array.isArray(designIntentContract.forbiddenPatterns) || designIntentContract.forbiddenPatterns.length < 4) {
1293
1375
  validationErrors.push('designIntent.forbiddenPatterns must list concrete anti-generic patterns.');
1376
+ } else {
1377
+ for (const requiredPattern of [
1378
+ 'ai-safe-ui-template-look',
1379
+ 'interchangeable-product-renaming-test-fails',
1380
+ 'decorative-grid-or-glow-wallpaper-without-product-function',
1381
+ ]) {
1382
+ if (!designIntentContract.forbiddenPatterns.includes(requiredPattern)) {
1383
+ validationErrors.push(`designIntent.forbiddenPatterns must include "${requiredPattern}".`);
1384
+ }
1385
+ }
1294
1386
  }
1295
1387
 
1296
1388
  return validationErrors;
@@ -165,7 +165,8 @@ export function resolveProjectDocTargets(discoveryAnswers) {
165
165
  const hasDatabase = !discoveryAnswers.databaseChoice.toLowerCase().startsWith('none');
166
166
  const isApiOrWebDomain = ['API service', 'Web application'].includes(discoveryAnswers.primaryDomain)
167
167
  || discoveryAnswers.primaryDomain.toLowerCase().includes('api')
168
- || discoveryAnswers.primaryDomain.toLowerCase().includes('web');
168
+ || discoveryAnswers.primaryDomain.toLowerCase().includes('web')
169
+ || discoveryAnswers.primaryDomain.toLowerCase().includes('fullstack');
169
170
 
170
171
  const requiredDocFileNames = [
171
172
  'project-brief.md',
@@ -126,25 +126,26 @@ export function buildDesignBootstrapPrompt({
126
126
  '6. antiAdjectives',
127
127
  '7. visualDirection',
128
128
  '8. derivedTokenLogic',
129
- '9. libraryResearchStatus',
130
- '10. libraryDecisions',
131
- '11. mathSystems',
132
- '12. tokenSystem',
133
- '13. colorTruth',
134
- '14. crossViewportAdaptation',
135
- '15. motionSystem',
136
- '16. componentMorphology',
137
- '17. accessibilityPolicy',
138
- '18. designExecutionPolicy',
139
- '19. designExecutionHandoff',
140
- '20. reviewRubric',
141
- '21. contextHygiene',
142
- '22. experiencePrinciples',
143
- '23. forbiddenPatterns',
144
- '24. validationHints',
145
- '25. requiredDesignSections',
146
- '26. implementation',
147
- '27. repoEvidence when onboarding or detector evidence exists',
129
+ '9. aiSafeUiAudit',
130
+ '10. libraryResearchStatus',
131
+ '11. libraryDecisions',
132
+ '12. mathSystems',
133
+ '13. tokenSystem',
134
+ '14. colorTruth',
135
+ '15. crossViewportAdaptation',
136
+ '16. motionSystem',
137
+ '17. componentMorphology',
138
+ '18. accessibilityPolicy',
139
+ '19. designExecutionPolicy',
140
+ '20. designExecutionHandoff',
141
+ '21. reviewRubric',
142
+ '22. contextHygiene',
143
+ '23. experiencePrinciples',
144
+ '24. forbiddenPatterns',
145
+ '25. validationHints',
146
+ '26. requiredDesignSections',
147
+ '27. implementation',
148
+ '28. repoEvidence when onboarding or detector evidence exists',
148
149
  '',
149
150
  '## Hard Rules',
150
151
  '1. No copy-paste from external style guides.',
@@ -171,6 +172,10 @@ export function buildDesignBootstrapPrompt({
171
172
  '22. Treat prior website memory, unrelated project aesthetics, and remembered screenshots as tainted context unless the user explicitly approves continuity.',
172
173
  '23. Design continuity is opt-in. If no approved continuity exists, synthesize from the current repo evidence, current brief, and current project docs only.',
173
174
  '24. Make at least one memorable visual bet so the resulting system is recognizable and not template-neutral.',
175
+ '24a. Do not ship AI-safe UI: predictable card stacks, rounded template panels, generic abstract logos, decorative grid wallpaper, beige or slate safety palettes, soft glow backgrounds, or first-output composition with only local copy swapped in are review findings.',
176
+ '24b. New screens and broad redesigns must expose at least three at-a-glance product-specific signals and pass the rename test: if the UI can be renamed to another product category without changing composition, palette, iconography, and motion language, revise it before coding.',
177
+ '24c. Background lines, grids, scanlines, noise, glows, blobs, logos, and geometric decoration must serve a named product function such as alignment, measurement, navigation, crop guidance, timeline reading, status, or motion continuity.',
178
+ '24d. Use visually exploratory, product-derived palettes while preserving WCAG contrast and status clarity; readability must not become an excuse for cream, slate, monochrome, or gradient defaults.',
174
179
  '25. Define a stable review rubric for distinctiveness, contract fidelity, visual consistency, heuristic UX quality, and motion discipline.',
175
180
  '26. Genericity findings must name the actual drift signal. Do not label something generic without explaining the anti-pattern or rubric dimension.',
176
181
  '27. Review rubric must support automatic genericity failure when named drift signals dominate a redesign or new UI surface.',
@@ -43,6 +43,15 @@ export async function generateProjectDocumentation(
43
43
  const expectedDocFileNames = [...requiredDocFileNames];
44
44
  const generatedPromptFileNames = [];
45
45
  const materializedFileNames = [];
46
+ const shouldCreateDesignContract = shouldBootstrapDesignDocument(discoveryAnswers, initContext);
47
+
48
+ if (shouldCreateDesignContract) {
49
+ for (const designContractFileName of UI_DESIGN_CONTRACT_FILE_NAMES) {
50
+ if (!expectedDocFileNames.includes(designContractFileName)) {
51
+ expectedDocFileNames.push(designContractFileName);
52
+ }
53
+ }
54
+ }
46
55
 
47
56
  const projectContextPromptFileName = 'bootstrap-project-context.md';
48
57
  const projectContextPromptContent = buildProjectContextBootstrapPrompt({
@@ -58,7 +67,7 @@ export async function generateProjectDocumentation(
58
67
  );
59
68
  generatedPromptFileNames.push(projectContextPromptFileName);
60
69
 
61
- if (shouldBootstrapDesignDocument(discoveryAnswers, initContext)) {
70
+ if (shouldCreateDesignContract) {
62
71
  const designPromptFileName = 'bootstrap-design.md';
63
72
  const designPromptContent = buildDesignBootstrapPrompt({
64
73
  discoveryAnswers,
@@ -75,12 +84,6 @@ export async function generateProjectDocumentation(
75
84
  });
76
85
  await fs.writeFile(path.join(docsDirectoryPath, designIntentSeedFileName), designIntentSeedContent, 'utf8');
77
86
  materializedFileNames.push(designIntentSeedFileName);
78
-
79
- for (const designContractFileName of UI_DESIGN_CONTRACT_FILE_NAMES) {
80
- if (!expectedDocFileNames.includes(designContractFileName)) {
81
- expectedDocFileNames.push(designContractFileName);
82
- }
83
- }
84
87
  }
85
88
 
86
89
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "3.0.34",
3
+ "version": "3.0.36",
4
4
  "type": "module",
5
5
  "description": "Force your AI Agent to code like a Staff Engineer, not a Junior.",
6
6
  "bin": {
@@ -320,6 +320,10 @@ export const REQUIRED_UI_DESIGN_AUTOMATION_SNIPPETS = [
320
320
  'source of truth',
321
321
  'research current official docs',
322
322
  'motionPaletteDecision',
323
+ 'AI-safe UI',
324
+ 'visually exploratory, product-derived palettes',
325
+ 'decorative grid wallpaper',
326
+ '`aiSafeUiAudit`',
323
327
  'product categories are heuristics',
324
328
  'Responsive design means recomposition, not resizing.',
325
329
  'agent-chosen visual direction',
@@ -379,6 +383,11 @@ export const REQUIRED_UI_DESIGN_AUTOMATION_SNIPPETS = [
379
383
  'structure-first-scaffold',
380
384
  'colorTruth',
381
385
  'motionPaletteDecision',
386
+ 'aiSafeUiAudit',
387
+ 'ai-safe-ui-template-look',
388
+ 'interchangeable-product-renaming-test-fails',
389
+ 'decorative-grid-or-glow-wallpaper-without-product-function',
390
+ 'requireAiSafeUiAudit',
382
391
  'forbidAutopilotPalettesWithoutEvidence',
383
392
  'rolesAreMinimumScaffold',
384
393
  'crossViewportAdaptation',