@ryuenn3123/agentic-senior-core 3.0.22 → 3.0.25

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.
@@ -27,6 +27,22 @@ The agent must summarize what it used from that research, discard what does not
27
27
 
28
28
  User-supplied research may influence the candidate set for motion, scroll, UI primitives, canvas/3D, charts, icons, typography, and interaction patterns, but the final choice must still be project-fit, accessible, performant, and maintainable.
29
29
 
30
+ ## Dynamic Avant-Garde Anchor Engine
31
+
32
+ If the user requests UI work but provides no user-supplied research, design reference, screenshot study, or library note, do not start coding immediately. This is not permission to fall back to the scaffold, prior UI, or generic software metaphors. First synthesize one advanced conceptual anchor that will unify the interface.
33
+
34
+ User-supplied research means current-task evidence from the user. The scaffold seed, this repo's offline examples, old design docs, and prior UI do not count as research. If live research is available, perform agent-led research into current official docs for any technology choices and current premium interaction/design patterns before selecting the anchor. If live research is unavailable, state that limitation in the design docs and synthesize from product context plus broad design knowledge without pretending the seed was research.
35
+
36
+ Do not use basic software UI labels as the final anchor, including "dashboard", "portal", "cards", "admin panel", "SaaS shell", "web app shell", or "minimalist interface".
37
+
38
+ The agent must internally consider at least three substantially different, high-variance candidate anchors, discard the two most obvious, safest, or easiest-to-predict options, and record only the surviving anchor and concise rationale. Do not expose hidden deliberation or the rejected candidate list.
39
+
40
+ The final anchor must come from broad non-template domains such as complex physical engineering, high-end industrial design, cinematic spatial interfaces, experimental editorial structure, advanced architecture, scientific instrumentation, advanced data visualization, exhibition/wayfinding systems, or premium interactive web experiences. These are search domains, not style presets.
41
+
42
+ Write the chosen anchor into `docs/design-intent.json` as `conceptualAnchor`, including agentResearchMode, sourceDomain, rationale, derivedTokenLogic, visualRiskBudget, motionRiskBudget, and cohesionChecks. Typography, spacing, density, color behavior, morphology, motion, and responsive composition must logically derive from that single anchor. If a later design choice does not follow from the anchor, revise the contract before coding.
43
+
44
+ Motion is not a garnish. The agent may use rich animation, fluid transitions, spatial reveals, scroll choreography, micro-interactions, and modern motion libraries when they support the anchor, remain performant, and include reduced-motion fallbacks. Do not suppress motion merely to look safe.
45
+
30
46
  ## Zero-Based Redesign Protocol
31
47
 
32
48
  If the user says "redesign from zero", "redesain dari 0", "ulang dari 0", "research ulang", or equivalent reset language, activate reset mode.
@@ -89,6 +105,7 @@ For every UI task, define how major surfaces change across mobile, tablet, and d
89
105
  The JSON must stay machine-readable and project-specific. It should record:
90
106
  - the confirmed project context and assumptions to validate
91
107
  - agent-chosen visual direction, not scaffold-chosen direction
108
+ - `conceptualAnchor` and how typography, spacing, morphology, motion, and responsive composition derive from it when no external research was provided
92
109
  - agent-chosen semantic color roles, typography system, spacing rhythm, and motion approach
93
110
  - token layering with primitive, semantic, and component tokens
94
111
  - viewport mutation rules for mobile, tablet, and desktop
@@ -107,6 +124,7 @@ The review must block or flag:
107
124
  - scale-only responsive behavior
108
125
  - unresearched dependency choices
109
126
  - default component-kit styling without product rationale
127
+ - missing or disconnected `conceptualAnchor` when no external design research was provided
110
128
  - visual direction copied from unrelated memory or external references
111
129
  - genericity findings that cannot name the exact drift signal
112
130
 
@@ -52,6 +52,14 @@ Do not use this file to teach generic frontend basics the model already knows.
52
52
  - Do not let heading, body, and data/meta roles collapse into one safe typographic family without explicit rationale.
53
53
  - At least one visual, interaction, content, motion, or state behavior must read as project-specific at a glance.
54
54
 
55
+ ## Dynamic Avant-Garde Anchor Boundary
56
+
57
+ - If the user gives no current-task visual research or reference, the scaffold, old UI, and existing design docs do not count as research.
58
+ - Before UI code, choose one agent-synthesized conceptual anchor from high-variance non-software domains and record only the final anchor in `docs/design-intent.json`.
59
+ - Internally reject the safest dashboard, portal, card-grid, admin-shell, or minimalist-web-app mental model before writing CSS.
60
+ - Typography, spacing, morphology, motion, and responsive recomposition must derive from the chosen anchor, not from framework defaults.
61
+ - Rich motion, spatial transitions, and micro-interactions are allowed when they support the anchor and include reduced-motion and performance safeguards.
62
+
55
63
  ## Responsive Mutation Requirements
56
64
 
57
65
  - Responsive quality is not allowed to be scale-only. At least one surface must materially change position, grouping, priority, or disclosure strategy between mobile and desktop.
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-04-24T11:30:00.104Z",
2
+ "generatedAt": "2026-04-24T17:20:37.769Z",
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.22
3
+ Generated by Agentic-Senior-Core CLI v3.0.25
4
4
  Timestamp: 2026-04-24T06:02:48.303Z
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.22
3
+ Generated by Agentic-Senior-Core CLI v3.0.25
4
4
  Timestamp: 2026-04-24T06:02:48.303Z
5
5
  Selected policy file: .agent-context/policies/llm-judge-threshold.json
6
6
 
package/README.md CHANGED
@@ -10,12 +10,13 @@
10
10
  **Production-grade Rules Engine (Governance Engine) for AI coding agents.**
11
11
  Works with Cursor, Windsurf, GitHub Copilot, Claude Code, Gemini, and other LLM-powered IDE workflows.
12
12
 
13
- Latest release: 3.0.9 (2026-04-20).
13
+ Latest release: 3.0.25 (2026-04-25).
14
14
 
15
- Highlights in 3.0.9:
16
- - Design bootstrap prompts now rely on shipped project evidence instead of assuming extra docs exist in every initialized repository.
17
- - Dynamic UI design guidance now emphasizes structure, rationale, and anti-generic constraints without anchoring to brand systems.
18
- - Init prompts now point agents at the active onboarding and compiled-rule context that actually exists in target projects.
15
+ Highlights in 3.0.25:
16
+ - UI design bootstrap now forces a dynamic conceptual anchor when no current-task visual research is provided.
17
+ - Agents must use live/current-year research for ecosystem, framework, dependency, Docker, and modern UI/library claims instead of offline repository guesses.
18
+ - Frontend guidance now rejects safe dashboard/admin-panel defaults, requires responsive recomposition, and allows rich modern motion when it supports the chosen concept.
19
+ - Generated design-intent seeds are more compact, leaving the LLM room to synthesize project-specific visual direction instead of inheriting verbose scaffold bias.
19
20
 
20
21
  </div>
21
22
 
@@ -37,6 +38,20 @@ One command to initialize rules, checklists, and strict AI coding guidelines con
37
38
 
38
39
  ---
39
40
 
41
+ ## Design Direction
42
+
43
+ For UI, UX, layout, screen, Tailwind, frontend, or redesign work, the pack routes agents through the design bootstrap and frontend architecture rules before code changes.
44
+
45
+ The intended behavior is agent-led, not offline-template-led:
46
+
47
+ - Existing projects: read the real repository, docs, UI surface, and current user brief before changing design.
48
+ - Fresh projects: ask the LLM agent to recommend the stack and design approach from current evidence instead of silently choosing a hardcoded framework.
49
+ - No visual reference provided: synthesize one modern conceptual anchor first, then derive typography, spacing, morphology, motion, and responsive behavior from that anchor.
50
+ - Modern UI claims: research current-year libraries and patterns when relevant; 2026 work should use 2026 evidence, and future years should update automatically through agent research.
51
+ - Anti-generic rule: avoid safe dashboard shells, admin panels, card grids, scale-only mobile layouts, and static no-motion interfaces unless the product context explicitly justifies them.
52
+
53
+ ---
54
+
40
55
  ## MCP Quick Setup (VS Code)
41
56
 
42
57
  1. Generate workspace MCP config:
@@ -51,8 +51,6 @@ function buildStructureFirstSeedSignals({
51
51
 
52
52
  return {
53
53
  designPhilosophy: `Use ${evidenceSourceLabel} to synthesize the design system for ${projectName || 'this project'}. This seed is only a decision scaffold: the LLM must choose the visual language, libraries, color system, typography, spacing, and interaction model from ${projectContextLabel}, current repo evidence, and live official documentation when a technology claim is needed.`,
54
- brandAdjectives: ['agent-synthesized-from-current-context'],
55
- antiAdjectives: ['offline-prescribed-style', 'template-by-default', 'scale-only-responsive', 'unresearched-library-choice'],
56
54
  typographyScaleRatio: 'agent-calibrated-from-content-platform-and-readability',
57
55
  baseGridUnit: 'agent-calibrated-from-platform-density-and-implementation-stack',
58
56
  spacingPattern: 'agent-defined-from-task-flow-and-viewport-needs',
@@ -60,16 +58,9 @@ function buildStructureFirstSeedSignals({
60
58
  colorIntent: `Choose semantic palette roles from ${projectContextLabel}, current repo evidence, and accessibility needs. Do not inherit fixed palettes or generic SaaS color defaults from this scaffold.`,
61
59
  paletteRoles: ['agent-defined-semantic-roles'],
62
60
  distinctiveMoves: [
63
- 'Research and choose a current, project-fit visual direction instead of inheriting any offline preset from this scaffold.',
64
- 'Define at least one recognizable design move from the product task, audience, content, and repo evidence before implementation.',
65
- 'Document why the chosen move belongs to this project and which common LLM bad habit it intentionally avoids.',
61
+ 'Choose one recognizable design move from product task, audience, content, repo evidence, and current docs; do not inherit a scaffold preset.',
66
62
  ],
67
63
  motionPurpose: 'Use modern motion when it improves hierarchy, continuity, feedback, memorability, or perceived product quality. If implementation needs a motion library, the LLM must choose a current compatible option from official docs instead of relying on an offline default.',
68
- motionChoreography: 'Define choreography from the product experience and implementation stack. Keep it performant and reduced-motion-safe; do not suppress rich interaction by default.',
69
- motionDurations: {
70
- desktop: 'agent-calibrated',
71
- mobile: 'agent-calibrated',
72
- },
73
64
  componentMorphology: {
74
65
  mobile: 'Recompose the experience for touch, task priority, and constrained attention. Mobile should be a deliberate mobile design, not a shrunken desktop.',
75
66
  tablet: 'Regroup surfaces for medium-width use, preserving task clarity without cloning either desktop or mobile blindly.',
@@ -121,8 +112,6 @@ function buildDesignIntentContractObject({
121
112
  : toTitleCase(initContext.blueprintFileName),
122
113
  },
123
114
  designPhilosophy: inferredKeywords.designPhilosophy,
124
- brandAdjectives: inferredKeywords.brandAdjectives,
125
- antiAdjectives: inferredKeywords.antiAdjectives,
126
115
  visualDirection: {
127
116
  seedMode: 'scaffold-only',
128
117
  requiresProjectSpecificSynthesis: true,
@@ -139,14 +128,78 @@ function buildDesignIntentContractObject({
139
128
  candidateDomains: [
140
129
  'visual-direction',
141
130
  'motion-and-scroll',
142
- 'ui-primitives',
143
- 'canvas-3d-or-rich-media',
144
- 'charts-and-data-visualization',
145
- 'icons-and-illustration',
146
- 'typography-and-interaction-patterns',
131
+ 'ui-primitives-or-rich-media',
132
+ 'typography-and-interaction',
147
133
  ],
148
134
  finalDecisionAuthority: 'agent-llm-from-project-fit-accessibility-performance-maintainability-and-current-official-docs',
149
135
  },
136
+ conceptualAnchor: {
137
+ mode: 'required-when-no-external-research',
138
+ seedMode: 'selection-policy-only',
139
+ requiresAgentSelectionBeforeUiImplementation: true,
140
+ userResearchAbsencePolicy: {
141
+ userSuppliedResearchOnly: true,
142
+ scaffoldSeedDoesNotCountAsResearch: true,
143
+ priorUiDoesNotCountAsResearch: true,
144
+ requireAgentLedResearchWhenAvailable: true,
145
+ },
146
+ candidateSelectionPolicy: {
147
+ considerAtLeast: 3,
148
+ discardObviousCandidateCount: 2,
149
+ minimumCandidateDistance: 'high',
150
+ discardPredictableCandidates: true,
151
+ preferDistinctiveOverSafe: true,
152
+ doNotRevealHiddenCandidateList: true,
153
+ outputOnlyChosenAnchor: true,
154
+ },
155
+ forbiddenFinalAnchorTerms: [
156
+ 'dashboard',
157
+ 'cards',
158
+ 'admin-panel',
159
+ 'saas-shell',
160
+ 'minimalist-interface',
161
+ 'safe-admin-layout',
162
+ ],
163
+ sourceDomains: [
164
+ 'complex-physical-engineering',
165
+ 'cinematic-spatial-interface',
166
+ 'experimental-editorial-structure',
167
+ 'scientific-instrumentation',
168
+ 'premium-interactive-web-experiences',
169
+ ],
170
+ visualRiskBudget: {
171
+ mode: 'high-distinctiveness-with-accessibility-and-performance-guardrails',
172
+ allowRichMotionAndMicroInteraction: true,
173
+ rejectTimidDefaultWhenAnchorSupportsExpressiveUi: true,
174
+ requireReducedMotionFallback: true,
175
+ },
176
+ requiredDerivedAxes: [
177
+ 'typography',
178
+ 'morphology',
179
+ 'motion',
180
+ 'responsive-composition',
181
+ ],
182
+ finalAnchorContract: {
183
+ requiredFields: [
184
+ 'name',
185
+ 'agentResearchMode',
186
+ 'sourceDomain',
187
+ 'rationale',
188
+ 'derivedTokenLogic',
189
+ 'visualRiskBudget',
190
+ 'motionRiskBudget',
191
+ 'cohesionChecks',
192
+ ],
193
+ derivedTokenLogicAxes: [
194
+ 'morphology',
195
+ 'motion',
196
+ ],
197
+ cohesionChecks: [
198
+ 'no-dashboard-mental-model',
199
+ 'motion-derived-from-anchor',
200
+ ],
201
+ },
202
+ },
150
203
  mathSystems: {
151
204
  typographyScaleRatio: inferredKeywords.typographyScaleRatio,
152
205
  baseGridUnit: inferredKeywords.baseGridUnit,
@@ -163,7 +216,6 @@ function buildDesignIntentContractObject({
163
216
  componentTokensConsumeSemantic: true,
164
217
  forbidDirectComponentPrimitiveBypass: true,
165
218
  aliasReferenceStyle: 'brace-reference',
166
- aliasingStrategy: 'Primitive tokens hold raw values, semantic tokens carry intent, and component tokens consume semantic aliases instead of raw values.',
167
219
  fallbackPolicy: {
168
220
  forbidRawHexOutsidePrimitives: true,
169
221
  forbidRawSpacingOutsidePrimitives: true,
@@ -174,12 +226,6 @@ function buildDesignIntentContractObject({
174
226
  forbidDotsInNames: true,
175
227
  forbidSquareBracketsInNames: true,
176
228
  },
177
- tokenLayerRoles: {
178
- primitive: 'Raw values such as colors, spacing, radius, typography, and motion primitives.',
179
- semantic: 'Contextual intent tokens such as primary action, muted surface, emphasis text, or critical state.',
180
- component: 'Component-scoped tokens that consume semantic aliases and preserve local consistency without redefining the system.',
181
- },
182
- platformOutputs: ['json-contract', 'css-variables'],
183
229
  },
184
230
  colorTruth: {
185
231
  format: 'OKLCH',
@@ -199,19 +245,14 @@ function buildDesignIntentContractObject({
199
245
  motionSystem: {
200
246
  allowMeaningfulMotion: true,
201
247
  purpose: inferredKeywords.motionPurpose,
202
- choreography: inferredKeywords.motionChoreography,
203
- desktopDurationMs: inferredKeywords.motionDurations.desktop,
204
- mobileDurationMs: inferredKeywords.motionDurations.mobile,
205
248
  seedToneLocked: false,
206
249
  respectReducedMotion: true,
207
- preferTransformAndOpacity: true,
208
- avoidDecorativeMotionForItsOwnSake: true,
209
250
  },
210
251
  componentMorphology: {
211
252
  requireStateBehaviorMatrix: true,
212
253
  preserveIdentityAcrossViewports: true,
213
254
  seedBehaviorsRequireRefinement: true,
214
- stateKeys: ['default', 'hover', 'focus', 'active', 'disabled', 'loading', 'error'],
255
+ stateKeys: ['default', 'focus', 'loading', 'error'],
215
256
  viewportBehavior: inferredKeywords.componentMorphology,
216
257
  },
217
258
  accessibilityPolicy: {
@@ -268,45 +309,33 @@ function buildDesignIntentContractObject({
268
309
  status: 'seed-needs-refinement',
269
310
  seedMode: 'structure-first-scaffold',
270
311
  requiresTaskSpecificRefinement: true,
271
- primaryExperienceGoal: `Ask the LLM to define the main ${String(primaryDomain || 'product').toLowerCase()} journey in ${projectName} from repo evidence, product context, user goals, and current official documentation where technology choices matter. This scaffold must not prescribe the final visual layout.`,
312
+ primaryExperienceGoal: `Define the main ${String(primaryDomain || 'product').toLowerCase()} journey for ${projectName} from repo evidence, the brief, and current docs. The seed must not prescribe final layout.`,
272
313
  surfacePlan: [
273
314
  {
274
315
  surfaceId: 'agent-defined-primary-experience',
275
- role: 'llm-synthesized-from-current-context',
276
- goal: `Define the primary UI experience for ${projectName} from the actual product task, audience, data, and repo evidence before coding.`,
277
- primaryAction: 'The LLM must choose the first decisive action or reading path and explain why it fits the project.',
278
- supportingModules: ['agent-defined-from-current-context'],
279
- layoutAntiPatternToAvoid: 'template-default-without-product-rationale',
280
- signatureMoveHint: 'Choose and document one project-specific visual, interaction, or content move. Do not inherit it from this scaffold.',
281
- },
282
- {
283
- surfaceId: 'agent-defined-supporting-experience',
284
- role: 'llm-synthesized-supporting-context',
285
- goal: 'Define supporting, proof, utility, or recovery surfaces from actual user needs instead of cloning generic cards or rails.',
286
- primaryAction: 'The LLM must decide what belongs beside, below, hidden behind disclosure, or removed based on task priority.',
287
- supportingModules: ['agent-defined-from-current-context'],
288
- layoutAntiPatternToAvoid: 'scale-only-responsive-layout',
289
- signatureMoveHint: 'Explain how supporting content changes across viewports and why the change improves the experience.',
316
+ role: 'primary-context-synthesized-by-agent',
317
+ goal: 'Choose the first task or reading path from product evidence and reject template shells.',
318
+ antiPatterns: ['dashboard-default', 'scale-only-responsive-layout'],
290
319
  },
291
320
  ],
292
321
  componentGraph: {
293
322
  nodes: [
294
323
  {
295
- id: 'agent-defined-primary-experience',
296
- role: 'primary-experience-after-synthesis',
324
+ id: 'primary-experience',
325
+ role: 'agent-defined-primary',
297
326
  priority: 'high',
298
327
  },
299
328
  {
300
- id: 'agent-defined-supporting-experience',
301
- role: 'supporting-experience-after-synthesis',
329
+ id: 'supporting-context',
330
+ role: 'agent-defined-support',
302
331
  priority: 'medium',
303
332
  },
304
333
  ],
305
334
  edges: [
306
335
  {
307
- from: 'agent-defined-primary-experience',
308
- to: 'agent-defined-supporting-experience',
309
- relationship: 'agent-defined-from-task-priority',
336
+ from: 'primary-experience',
337
+ to: 'supporting-context',
338
+ relationship: 'task-priority-support',
310
339
  },
311
340
  ],
312
341
  },
@@ -325,25 +354,21 @@ function buildDesignIntentContractObject({
325
354
  mobile: {
326
355
  primaryOperation: 'agent-defined-mobile-recomposition',
327
356
  requiredSurfaceActions: [
328
- 'choose-mobile-specific-task-order',
329
- 'merge-disclose-or-remove-low-priority-content',
330
- 'adapt-interaction-model-for-touch',
357
+ 'choose-mobile-task-order',
358
+ 'disclose-or-remove-low-priority-content',
331
359
  ],
332
360
  forbiddenPatterns: [
333
361
  'scale-only-shrink',
334
- 'desktop-order-preserved-without-priority-shift',
335
362
  ],
336
363
  rationale: inferredKeywords.mutationRules.mobile,
337
364
  },
338
365
  tablet: {
339
366
  primaryOperation: 'agent-defined-tablet-regrouping',
340
367
  requiredSurfaceActions: [
341
- 'define-medium-width-information-architecture',
342
- 'avoid-cloning-desktop-by-width-only',
368
+ 'define-medium-width-grouping',
343
369
  'preserve-task-clarity',
344
370
  ],
345
371
  forbiddenPatterns: [
346
- 'desktop-layout-reduced-by-width-only',
347
372
  'uniform-module-grid-without-role-change',
348
373
  ],
349
374
  rationale: inferredKeywords.mutationRules.tablet,
@@ -352,11 +377,9 @@ function buildDesignIntentContractObject({
352
377
  primaryOperation: 'agent-defined-desktop-composition',
353
378
  requiredSurfaceActions: [
354
379
  'use-space-to-improve-hierarchy',
355
- 'define-scan-pattern-and-action-priority',
356
380
  'avoid-equalizing-unrelated-content',
357
381
  ],
358
382
  forbiddenPatterns: [
359
- 'template-shell-without-product-rationale',
360
383
  'interchangeable-dashboard-or-landing-chrome',
361
384
  ],
362
385
  rationale: inferredKeywords.mutationRules.desktop,
@@ -364,33 +387,25 @@ function buildDesignIntentContractObject({
364
387
  },
365
388
  interactionStateMatrix: [
366
389
  {
367
- componentId: 'primary-action-control',
368
- states: ['default', 'hover', 'focus', 'loading', 'success', 'error'],
369
- notes: 'Refine these states with project-specific feedback language and visual treatment, but keep them legible, decisive, and consistent across all supported viewports.',
370
- },
371
- {
372
- componentId: 'primary-content-module',
373
- states: ['default', 'focus', 'expanded', 'loading', 'error'],
374
- notes: 'Refine this module so it preserves hierarchy and progressive disclosure without collapsing into anonymous cards or safe default dashboard panels.',
390
+ componentId: 'primary-interaction',
391
+ states: ['default', 'hover', 'focus', 'loading', 'error'],
392
+ notes: 'Refine states from project language and the conceptual anchor; do not use anonymous default panels.',
375
393
  },
376
394
  ],
377
395
  taskFlowNarrative: [
378
- `Entry: the LLM must define how ${projectName} starts the user journey from real product evidence instead of a generic opening pattern.`,
379
- 'Decision: the LLM must define hierarchy, proof, state language, and interaction behavior from the actual task.',
380
- 'Resolution: the LLM must define feedback, recovery, and next-useful-action behavior without defaulting to leftover template chrome.',
396
+ `Entry: define how ${projectName} starts the journey from real evidence, not a generic opener.`,
397
+ 'Resolution: define proof, feedback, recovery, and next action without leftover template chrome.',
381
398
  ],
382
399
  visualResetStrategy: {
383
400
  activatesWhenUserRequests: [
384
401
  'redesign from zero',
385
402
  'redesain dari 0',
386
- 'ulang dari 0',
387
- 'research ulang',
388
403
  ],
389
- existingUiAllowedAs: ['content-evidence', 'behavior-evidence', 'accessibility-evidence', 'asset-source-evidence'],
390
- existingUiForbiddenAs: ['palette-source', 'typography-source', 'layout-source', 'motion-source', 'component-morphology-source'],
391
- requiredResetAxes: ['composition', 'hierarchy', 'palette-and-typography', 'motion-or-interaction', 'responsive-information-architecture'],
404
+ existingUiAllowedAs: ['content-evidence', 'behavior-evidence', 'asset-source-evidence'],
405
+ existingUiForbiddenAs: ['palette-source', 'layout-source', 'motion-source'],
406
+ requiredResetAxes: ['composition', 'hierarchy', 'motion-or-interaction', 'responsive-information-architecture'],
392
407
  },
393
- signatureMoveRationale: 'The LLM must choose the project-specific visual, motion, typographic, compositional, or interaction move after reading current context and explain why a generic fallback would weaken the product.',
408
+ signatureMoveRationale: 'Agent must choose one project-specific visual, motion, typographic, or interaction move and explain why generic fallback weakens it.',
394
409
  implementationGuardrails: {
395
410
  requireBuildFromHandoff: true,
396
411
  requireGapNotesBeforeFallback: true,
@@ -430,20 +445,20 @@ function buildDesignIntentContractObject({
430
445
  genericitySignals: [
431
446
  'offline-prescribed-style-used-as-final-direction',
432
447
  'unresearched-library-or-framework-choice',
433
- 'default-component-kit-treatment-without-product-rationale',
448
+ 'missing-conceptual-anchor-without-external-research',
449
+ 'visual-decisions-not-derived-from-conceptual-anchor',
450
+ 'timid-anchor-that-renames-dashboard-or-admin-shell',
451
+ 'motion-suppressed-without-accessibility-or-performance-reason',
434
452
  'scale-only-responsive-layout',
435
- 'template-shell-without-product-rationale',
436
453
  'zero-based-redesign-kept-prior-visual-dna',
437
454
  'restyle-instead-of-recomposition',
438
- 'inaccessible-or-decorative-motion',
439
455
  ],
440
456
  validBoldSignals: [
457
+ 'single-cohesive-conceptual-anchor',
458
+ 'high-variance-candidate-selection',
441
459
  'context-derived-visual-direction',
442
- 'official-docs-backed-library-choice',
443
460
  'responsive-recomposition-by-task-priority',
444
461
  'purposeful-motion-with-reduced-motion-path',
445
- 'documented-design-rationale-before-code',
446
- 'clean-component-and-token-architecture',
447
462
  ],
448
463
  reportingRules: {
449
464
  mustExplainGenericity: true,
@@ -471,10 +486,7 @@ function buildDesignIntentContractObject({
471
486
  approvedExternalConstraintUsage: 'Convert explicit user-supplied external constraints into current-project rules without comparing against or imitating the source surface.',
472
487
  driftSignals: [
473
488
  'palette-reused-without-brief-support',
474
- 'motion-signature-reused-without-approval',
475
- 'layout-shape-matches-unrelated-project-memory',
476
489
  'prior-ui-visual-dna-carried-into-reset-request',
477
- 'existing-design-doc-treated-as-style-continuity-during-zero-based-redesign',
478
490
  ],
479
491
  },
480
492
  experiencePrinciples: [
@@ -482,17 +494,17 @@ function buildDesignIntentContractObject({
482
494
  'Major interface decisions must be explainable in product and user terms.',
483
495
  'Accessibility, responsiveness, and implementation realism are non-negotiable.',
484
496
  'Cross-viewport behavior must reorganize tasks and navigation, not just scale the desktop layout down.',
485
- 'Modern libraries and interaction patterns may be used when the LLM verifies they fit the project and current official docs.',
486
- 'Motion may be rich and memorable when it improves the product experience, but it must stay purposeful, performant, and optional for reduced-motion users.',
487
- 'At least one visual, interaction, content, or motion decision must be recognizable at a glance and justified from context.',
497
+ 'A single agent-chosen conceptual anchor must unify typography, spacing, morphology, motion, and responsive composition when user research is absent.',
498
+ 'Expressive motion and spatial interaction are allowed when they support the anchor and remain accessible and performant.',
488
499
  'When the user asks for a zero-based redesign, existing UI becomes content and behavior evidence only; prior visual DNA must be discarded unless explicitly approved.',
489
500
  ],
490
501
  forbiddenPatterns: [
491
502
  'offline-prescribed-style-used-as-final-direction',
492
- 'unresearched-library-or-framework-choice',
493
- 'default-component-kit-treatment-without-product-rationale',
503
+ 'missing-conceptual-anchor-without-external-research',
504
+ 'visual-decisions-not-derived-from-conceptual-anchor',
505
+ 'timid-anchor-that-renames-dashboard-or-admin-shell',
506
+ 'motion-suppressed-without-accessibility-or-performance-reason',
494
507
  'scale-only-responsive-layout',
495
- 'template-shell-without-product-rationale',
496
508
  'zero-based-redesign-kept-prior-visual-dna',
497
509
  'restyle-instead-of-recomposition',
498
510
  'single-safe-typographic-family-without-role-contrast-or-rationale',
@@ -511,6 +523,9 @@ function buildDesignIntentContractObject({
511
523
  requireStructuredDesignExecutionPolicy: true,
512
524
  requireStructuredDesignHandoff: true,
513
525
  requireVisualResetStrategyWhenZeroBasedRedesignRequested: true,
526
+ requireConceptualAnchorWhenNoExternalResearch: true,
527
+ requireAgentLedAnchorResearchWhenUserResearchMissing: true,
528
+ rejectTimidDashboardAnchor: true,
514
529
  requireReviewRubric: true,
515
530
  requireGenericityExplanation: true,
516
531
  genericityAutoFail: true,
@@ -526,6 +541,7 @@ function buildDesignIntentContractObject({
526
541
  requireViewportMutationRules: true,
527
542
  requirePurposefulMotionGuidelines: true,
528
543
  requireRecognizableVisualBet: true,
544
+ requireConceptualAnchor: true,
529
545
  bootstrapPrompt: '.agent-context/prompts/bootstrap-design.md',
530
546
  autoLoadedRuleFiles: [
531
547
  '.agent-context/prompts/bootstrap-design.md',
@@ -560,6 +576,151 @@ export function validateDesignIntentContract(designIntentContract) {
560
576
  validationErrors.push('designIntent.designPhilosophy must be a non-empty string.');
561
577
  }
562
578
 
579
+ if (!designIntentContract.externalResearchIntake || typeof designIntentContract.externalResearchIntake !== 'object') {
580
+ validationErrors.push('designIntent.externalResearchIntake must exist.');
581
+ } else {
582
+ if (designIntentContract.externalResearchIntake.userSuppliedResearchPolicy !== 'read-as-candidate-evidence-not-final-prescription') {
583
+ validationErrors.push('designIntent.externalResearchIntake.userSuppliedResearchPolicy must preserve user research as candidate evidence.');
584
+ }
585
+ if (designIntentContract.externalResearchIntake.requireOfficialDocsVerificationForTechnologyClaims !== true) {
586
+ validationErrors.push('designIntent.externalResearchIntake.requireOfficialDocsVerificationForTechnologyClaims must equal true.');
587
+ }
588
+ if (
589
+ !Array.isArray(designIntentContract.externalResearchIntake.candidateDomains)
590
+ || !designIntentContract.externalResearchIntake.candidateDomains.includes('motion-and-scroll')
591
+ ) {
592
+ validationErrors.push('designIntent.externalResearchIntake.candidateDomains must include motion-and-scroll.');
593
+ }
594
+ }
595
+
596
+ if (!designIntentContract.conceptualAnchor || typeof designIntentContract.conceptualAnchor !== 'object') {
597
+ validationErrors.push('designIntent.conceptualAnchor must exist.');
598
+ } else {
599
+ const conceptualAnchor = designIntentContract.conceptualAnchor;
600
+ if (conceptualAnchor.mode !== 'required-when-no-external-research') {
601
+ validationErrors.push('designIntent.conceptualAnchor.mode must equal "required-when-no-external-research".');
602
+ }
603
+ if (conceptualAnchor.seedMode !== 'selection-policy-only') {
604
+ validationErrors.push('designIntent.conceptualAnchor.seedMode must equal "selection-policy-only".');
605
+ }
606
+ if (conceptualAnchor.requiresAgentSelectionBeforeUiImplementation !== true) {
607
+ validationErrors.push('designIntent.conceptualAnchor.requiresAgentSelectionBeforeUiImplementation must equal true.');
608
+ }
609
+ const userResearchAbsencePolicy = conceptualAnchor.userResearchAbsencePolicy;
610
+ if (!userResearchAbsencePolicy || typeof userResearchAbsencePolicy !== 'object') {
611
+ validationErrors.push('designIntent.conceptualAnchor.userResearchAbsencePolicy must exist.');
612
+ } else {
613
+ if (userResearchAbsencePolicy.userSuppliedResearchOnly !== true) {
614
+ validationErrors.push('designIntent.conceptualAnchor.userResearchAbsencePolicy.userSuppliedResearchOnly must equal true.');
615
+ }
616
+ if (userResearchAbsencePolicy.scaffoldSeedDoesNotCountAsResearch !== true) {
617
+ validationErrors.push('designIntent.conceptualAnchor.userResearchAbsencePolicy.scaffoldSeedDoesNotCountAsResearch must equal true.');
618
+ }
619
+ if (userResearchAbsencePolicy.priorUiDoesNotCountAsResearch !== true) {
620
+ validationErrors.push('designIntent.conceptualAnchor.userResearchAbsencePolicy.priorUiDoesNotCountAsResearch must equal true.');
621
+ }
622
+ if (userResearchAbsencePolicy.requireAgentLedResearchWhenAvailable !== true) {
623
+ validationErrors.push('designIntent.conceptualAnchor.userResearchAbsencePolicy.requireAgentLedResearchWhenAvailable must equal true.');
624
+ }
625
+ }
626
+ const candidateSelectionPolicy = conceptualAnchor.candidateSelectionPolicy;
627
+ if (!candidateSelectionPolicy || typeof candidateSelectionPolicy !== 'object') {
628
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy must exist.');
629
+ } else {
630
+ if (candidateSelectionPolicy.considerAtLeast < 3) {
631
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.considerAtLeast must be at least 3.');
632
+ }
633
+ if (candidateSelectionPolicy.discardObviousCandidateCount < 2) {
634
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.discardObviousCandidateCount must be at least 2.');
635
+ }
636
+ if (candidateSelectionPolicy.minimumCandidateDistance !== 'high') {
637
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.minimumCandidateDistance must equal "high".');
638
+ }
639
+ if (candidateSelectionPolicy.discardPredictableCandidates !== true) {
640
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.discardPredictableCandidates must equal true.');
641
+ }
642
+ if (candidateSelectionPolicy.preferDistinctiveOverSafe !== true) {
643
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.preferDistinctiveOverSafe must equal true.');
644
+ }
645
+ if (candidateSelectionPolicy.doNotRevealHiddenCandidateList !== true) {
646
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.doNotRevealHiddenCandidateList must equal true.');
647
+ }
648
+ if (candidateSelectionPolicy.outputOnlyChosenAnchor !== true) {
649
+ validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.outputOnlyChosenAnchor must equal true.');
650
+ }
651
+ }
652
+ if (
653
+ !Array.isArray(conceptualAnchor.forbiddenFinalAnchorTerms)
654
+ || !conceptualAnchor.forbiddenFinalAnchorTerms.includes('dashboard')
655
+ || !conceptualAnchor.forbiddenFinalAnchorTerms.includes('cards')
656
+ || !conceptualAnchor.forbiddenFinalAnchorTerms.includes('safe-admin-layout')
657
+ ) {
658
+ validationErrors.push('designIntent.conceptualAnchor.forbiddenFinalAnchorTerms must reject basic UI labels.');
659
+ }
660
+ if (
661
+ !Array.isArray(conceptualAnchor.sourceDomains)
662
+ || conceptualAnchor.sourceDomains.length < 4
663
+ || !conceptualAnchor.sourceDomains.includes('complex-physical-engineering')
664
+ || !conceptualAnchor.sourceDomains.includes('cinematic-spatial-interface')
665
+ || !conceptualAnchor.sourceDomains.includes('premium-interactive-web-experiences')
666
+ ) {
667
+ validationErrors.push('designIntent.conceptualAnchor.sourceDomains must list broad non-template anchor domains.');
668
+ }
669
+ const visualRiskBudget = conceptualAnchor.visualRiskBudget;
670
+ if (!visualRiskBudget || typeof visualRiskBudget !== 'object') {
671
+ validationErrors.push('designIntent.conceptualAnchor.visualRiskBudget must exist.');
672
+ } else {
673
+ if (visualRiskBudget.mode !== 'high-distinctiveness-with-accessibility-and-performance-guardrails') {
674
+ validationErrors.push('designIntent.conceptualAnchor.visualRiskBudget.mode must preserve high-distinctiveness guardrails.');
675
+ }
676
+ if (visualRiskBudget.allowRichMotionAndMicroInteraction !== true) {
677
+ validationErrors.push('designIntent.conceptualAnchor.visualRiskBudget.allowRichMotionAndMicroInteraction must equal true.');
678
+ }
679
+ if (visualRiskBudget.rejectTimidDefaultWhenAnchorSupportsExpressiveUi !== true) {
680
+ validationErrors.push('designIntent.conceptualAnchor.visualRiskBudget.rejectTimidDefaultWhenAnchorSupportsExpressiveUi must equal true.');
681
+ }
682
+ if (visualRiskBudget.requireReducedMotionFallback !== true) {
683
+ validationErrors.push('designIntent.conceptualAnchor.visualRiskBudget.requireReducedMotionFallback must equal true.');
684
+ }
685
+ }
686
+ if (
687
+ !Array.isArray(conceptualAnchor.requiredDerivedAxes)
688
+ || !conceptualAnchor.requiredDerivedAxes.includes('typography')
689
+ || !conceptualAnchor.requiredDerivedAxes.includes('responsive-composition')
690
+ ) {
691
+ validationErrors.push('designIntent.conceptualAnchor.requiredDerivedAxes must include typography and responsive-composition.');
692
+ }
693
+ const finalAnchorContract = conceptualAnchor.finalAnchorContract;
694
+ if (!finalAnchorContract || typeof finalAnchorContract !== 'object') {
695
+ validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract must exist.');
696
+ } else {
697
+ if (
698
+ !Array.isArray(finalAnchorContract.requiredFields)
699
+ || !finalAnchorContract.requiredFields.includes('agentResearchMode')
700
+ || !finalAnchorContract.requiredFields.includes('derivedTokenLogic')
701
+ || !finalAnchorContract.requiredFields.includes('visualRiskBudget')
702
+ || !finalAnchorContract.requiredFields.includes('motionRiskBudget')
703
+ || !finalAnchorContract.requiredFields.includes('cohesionChecks')
704
+ ) {
705
+ validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract.requiredFields must require agentResearchMode, derivedTokenLogic, visualRiskBudget, motionRiskBudget, and cohesionChecks.');
706
+ }
707
+ if (
708
+ !Array.isArray(finalAnchorContract.derivedTokenLogicAxes)
709
+ || !finalAnchorContract.derivedTokenLogicAxes.includes('motion')
710
+ || !finalAnchorContract.derivedTokenLogicAxes.includes('morphology')
711
+ ) {
712
+ validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract.derivedTokenLogicAxes must include motion and morphology.');
713
+ }
714
+ if (
715
+ !Array.isArray(finalAnchorContract.cohesionChecks)
716
+ || !finalAnchorContract.cohesionChecks.includes('no-dashboard-mental-model')
717
+ || !finalAnchorContract.cohesionChecks.includes('motion-derived-from-anchor')
718
+ ) {
719
+ validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract.cohesionChecks must reject dashboard mental models and require motion derivation.');
720
+ }
721
+ }
722
+ }
723
+
563
724
  if (!designIntentContract.mathSystems || typeof designIntentContract.mathSystems !== 'object') {
564
725
  validationErrors.push('designIntent.mathSystems must exist.');
565
726
  } else {
@@ -176,6 +176,9 @@ export function buildDesignBootstrapPrompt({
176
176
  '30. In zero-based redesign mode, the new contract must name the discarded prior visual DNA and materially reset composition, hierarchy, palette/typography, motion or interaction, and responsive information architecture.',
177
177
  '31. If modern UI, animation, scroll, 3D, canvas, chart, or icon libraries are useful, choose them from current official docs and record source URL, fetched date, reason, risk, and accessibility fallback.',
178
178
  '32. If the user supplies research files, library lists, screenshots, articles, or benchmark notes, read them as candidate evidence, summarize the useful signals, filter by project fit, and verify technology claims against current official docs before implementation.',
179
+ '33. If no user-supplied research or reference is supplied for UI work, activate the Dynamic Avant-Garde Anchor Engine before coding. User-supplied research means current-task evidence from the user; this scaffold, prior UI, and old design docs do not count as research.',
180
+ '34. In Dynamic Avant-Garde mode, perform agent-led research when available, then internally consider at least three high-variance conceptual anchors, discard the two safest or most predictable options, output only the chosen anchor and rationale, and forbid final anchors named dashboard, portal, cards, admin panel, SaaS shell, web app shell, or minimalist interface.',
181
+ '35. The chosen anchor must drive typography, spacing, density, color behavior, morphology, motion, and responsive composition. If expressive motion, spatial transitions, micro-interactions, or modern animation libraries support the anchor, use them with performance notes and reduced-motion fallbacks instead of suppressing motion to look safe.',
179
182
  '',
180
183
  '## Project Inputs',
181
184
  `- Project name: ${discoveryAnswers.projectName}`,
@@ -205,7 +208,9 @@ export function buildDesignBootstrapPrompt({
205
208
  '11. Ensure both files stay project-specific, dynamic, and practical for implementation and review. The seed may guide structure, but it must not decide style offline.',
206
209
  '12. Keep visualResetStrategy in the machine-readable handoff so reset-language tasks cannot quietly become restyles of the previous UI.',
207
210
  '13. Preserve externalResearchIntake so user-provided research becomes reviewed evidence without turning into an offline style or dependency preset.',
208
- '14. After the contract exists, use it as a first-class source for future UI tasks.',
211
+ '14. Preserve conceptualAnchor so prompt-only UI work has one cohesive non-template concept instead of a mixed collection of bold but unrelated visual decisions.',
212
+ '15. Record conceptualAnchor.agentResearchMode, visualRiskBudget, motionRiskBudget, and cohesionChecks so the final UI cannot quietly fall back to a timid dashboard/admin mental model.',
213
+ '16. After the contract exists, use it as a first-class source for future UI tasks.',
209
214
  '',
210
215
  ].join('\n');
211
216
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "3.0.22",
3
+ "version": "3.0.25",
4
4
  "type": "module",
5
5
  "description": "Force your AI Agent to code like a Staff Engineer, not a Junior.",
6
6
  "bin": {