@ryuenn3123/agentic-senior-core 3.0.22 → 3.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent-context/prompts/bootstrap-design.md +14 -0
- package/.agent-context/state/memory-continuity-benchmark.json +1 -1
- package/.cursorrules +1 -1
- package/.windsurfrules +1 -1
- package/lib/cli/project-scaffolder/design-contract.mjs +151 -0
- package/lib/cli/project-scaffolder/prompt-builders.mjs +3 -1
- package/package.json +1 -1
|
@@ -27,6 +27,18 @@ 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
|
+
## Advanced Conceptual Anchor
|
|
31
|
+
|
|
32
|
+
If the user requests UI work but provides no external research, design reference, screenshot study, or library note, do not start coding immediately. First synthesize one advanced conceptual anchor that will unify the interface.
|
|
33
|
+
|
|
34
|
+
Do not use basic software UI labels as the final anchor, including "dashboard", "portal", "cards", "admin panel", "SaaS shell", or "minimalist interface".
|
|
35
|
+
|
|
36
|
+
The agent must consider at least three substantially different candidate anchors internally, discard predictable or generic candidates, and record only the surviving anchor and concise rationale. Do not expose hidden deliberation or the rejected candidate list.
|
|
37
|
+
|
|
38
|
+
The final anchor must come from broad non-template domains such as complex physical engineering, high-end industrial design, experimental editorial structure, advanced architecture, scientific instrumentation, or spatial information systems. These are search domains, not style presets.
|
|
39
|
+
|
|
40
|
+
Write the chosen anchor into `docs/design-intent.json` as `conceptualAnchor`, then derive typography, spacing, density, color behavior, morphology, motion, and responsive composition from that single anchor. If a later design choice does not logically follow from the anchor, revise the contract before coding.
|
|
41
|
+
|
|
30
42
|
## Zero-Based Redesign Protocol
|
|
31
43
|
|
|
32
44
|
If the user says "redesign from zero", "redesain dari 0", "ulang dari 0", "research ulang", or equivalent reset language, activate reset mode.
|
|
@@ -89,6 +101,7 @@ For every UI task, define how major surfaces change across mobile, tablet, and d
|
|
|
89
101
|
The JSON must stay machine-readable and project-specific. It should record:
|
|
90
102
|
- the confirmed project context and assumptions to validate
|
|
91
103
|
- agent-chosen visual direction, not scaffold-chosen direction
|
|
104
|
+
- `conceptualAnchor` and how typography, spacing, morphology, motion, and responsive composition derive from it when no external research was provided
|
|
92
105
|
- agent-chosen semantic color roles, typography system, spacing rhythm, and motion approach
|
|
93
106
|
- token layering with primitive, semantic, and component tokens
|
|
94
107
|
- viewport mutation rules for mobile, tablet, and desktop
|
|
@@ -107,6 +120,7 @@ The review must block or flag:
|
|
|
107
120
|
- scale-only responsive behavior
|
|
108
121
|
- unresearched dependency choices
|
|
109
122
|
- default component-kit styling without product rationale
|
|
123
|
+
- missing or disconnected `conceptualAnchor` when no external design research was provided
|
|
110
124
|
- visual direction copied from unrelated memory or external references
|
|
111
125
|
- genericity findings that cannot name the exact drift signal
|
|
112
126
|
|
package/.cursorrules
CHANGED
package/.windsurfrules
CHANGED
|
@@ -147,6 +147,60 @@ function buildDesignIntentContractObject({
|
|
|
147
147
|
],
|
|
148
148
|
finalDecisionAuthority: 'agent-llm-from-project-fit-accessibility-performance-maintainability-and-current-official-docs',
|
|
149
149
|
},
|
|
150
|
+
conceptualAnchor: {
|
|
151
|
+
mode: 'required-when-no-external-research',
|
|
152
|
+
seedMode: 'selection-policy-only',
|
|
153
|
+
requiresAgentSelectionBeforeUiImplementation: true,
|
|
154
|
+
candidateSelectionPolicy: {
|
|
155
|
+
considerAtLeast: 3,
|
|
156
|
+
discardPredictableCandidates: true,
|
|
157
|
+
doNotRevealHiddenCandidateList: true,
|
|
158
|
+
outputOnlyChosenAnchor: true,
|
|
159
|
+
},
|
|
160
|
+
forbiddenFinalAnchorTerms: [
|
|
161
|
+
'dashboard',
|
|
162
|
+
'portal',
|
|
163
|
+
'cards',
|
|
164
|
+
'admin-panel',
|
|
165
|
+
'saas-shell',
|
|
166
|
+
'minimalist-interface',
|
|
167
|
+
],
|
|
168
|
+
sourceDomains: [
|
|
169
|
+
'complex-physical-engineering',
|
|
170
|
+
'high-end-industrial-design',
|
|
171
|
+
'experimental-editorial-structure',
|
|
172
|
+
'advanced-architecture',
|
|
173
|
+
'scientific-instrumentation',
|
|
174
|
+
'spatial-information-systems',
|
|
175
|
+
],
|
|
176
|
+
requiredDerivedAxes: [
|
|
177
|
+
'typography',
|
|
178
|
+
'spacing',
|
|
179
|
+
'density',
|
|
180
|
+
'color-behavior',
|
|
181
|
+
'morphology',
|
|
182
|
+
'motion',
|
|
183
|
+
'responsive-composition',
|
|
184
|
+
],
|
|
185
|
+
finalAnchorContract: {
|
|
186
|
+
requiredFields: [
|
|
187
|
+
'name',
|
|
188
|
+
'sourceDomain',
|
|
189
|
+
'rationale',
|
|
190
|
+
'derivedTokenLogic',
|
|
191
|
+
'cohesionChecks',
|
|
192
|
+
],
|
|
193
|
+
derivedTokenLogicAxes: [
|
|
194
|
+
'typography',
|
|
195
|
+
'spacing',
|
|
196
|
+
'density',
|
|
197
|
+
'color-behavior',
|
|
198
|
+
'morphology',
|
|
199
|
+
'motion',
|
|
200
|
+
'responsive-composition',
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
},
|
|
150
204
|
mathSystems: {
|
|
151
205
|
typographyScaleRatio: inferredKeywords.typographyScaleRatio,
|
|
152
206
|
baseGridUnit: inferredKeywords.baseGridUnit,
|
|
@@ -430,6 +484,8 @@ function buildDesignIntentContractObject({
|
|
|
430
484
|
genericitySignals: [
|
|
431
485
|
'offline-prescribed-style-used-as-final-direction',
|
|
432
486
|
'unresearched-library-or-framework-choice',
|
|
487
|
+
'missing-conceptual-anchor-without-external-research',
|
|
488
|
+
'visual-decisions-not-derived-from-conceptual-anchor',
|
|
433
489
|
'default-component-kit-treatment-without-product-rationale',
|
|
434
490
|
'scale-only-responsive-layout',
|
|
435
491
|
'template-shell-without-product-rationale',
|
|
@@ -438,6 +494,7 @@ function buildDesignIntentContractObject({
|
|
|
438
494
|
'inaccessible-or-decorative-motion',
|
|
439
495
|
],
|
|
440
496
|
validBoldSignals: [
|
|
497
|
+
'single-cohesive-conceptual-anchor',
|
|
441
498
|
'context-derived-visual-direction',
|
|
442
499
|
'official-docs-backed-library-choice',
|
|
443
500
|
'responsive-recomposition-by-task-priority',
|
|
@@ -485,11 +542,14 @@ function buildDesignIntentContractObject({
|
|
|
485
542
|
'Modern libraries and interaction patterns may be used when the LLM verifies they fit the project and current official docs.',
|
|
486
543
|
'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
544
|
'At least one visual, interaction, content, or motion decision must be recognizable at a glance and justified from context.',
|
|
545
|
+
'When no external design research is provided, a single advanced conceptual anchor must unify typography, spacing, morphology, motion, and responsive composition.',
|
|
488
546
|
'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
547
|
],
|
|
490
548
|
forbiddenPatterns: [
|
|
491
549
|
'offline-prescribed-style-used-as-final-direction',
|
|
492
550
|
'unresearched-library-or-framework-choice',
|
|
551
|
+
'missing-conceptual-anchor-without-external-research',
|
|
552
|
+
'visual-decisions-not-derived-from-conceptual-anchor',
|
|
493
553
|
'default-component-kit-treatment-without-product-rationale',
|
|
494
554
|
'scale-only-responsive-layout',
|
|
495
555
|
'template-shell-without-product-rationale',
|
|
@@ -511,6 +571,7 @@ function buildDesignIntentContractObject({
|
|
|
511
571
|
requireStructuredDesignExecutionPolicy: true,
|
|
512
572
|
requireStructuredDesignHandoff: true,
|
|
513
573
|
requireVisualResetStrategyWhenZeroBasedRedesignRequested: true,
|
|
574
|
+
requireConceptualAnchorWhenNoExternalResearch: true,
|
|
514
575
|
requireReviewRubric: true,
|
|
515
576
|
requireGenericityExplanation: true,
|
|
516
577
|
genericityAutoFail: true,
|
|
@@ -526,6 +587,7 @@ function buildDesignIntentContractObject({
|
|
|
526
587
|
requireViewportMutationRules: true,
|
|
527
588
|
requirePurposefulMotionGuidelines: true,
|
|
528
589
|
requireRecognizableVisualBet: true,
|
|
590
|
+
requireConceptualAnchor: true,
|
|
529
591
|
bootstrapPrompt: '.agent-context/prompts/bootstrap-design.md',
|
|
530
592
|
autoLoadedRuleFiles: [
|
|
531
593
|
'.agent-context/prompts/bootstrap-design.md',
|
|
@@ -560,6 +622,95 @@ export function validateDesignIntentContract(designIntentContract) {
|
|
|
560
622
|
validationErrors.push('designIntent.designPhilosophy must be a non-empty string.');
|
|
561
623
|
}
|
|
562
624
|
|
|
625
|
+
if (!designIntentContract.externalResearchIntake || typeof designIntentContract.externalResearchIntake !== 'object') {
|
|
626
|
+
validationErrors.push('designIntent.externalResearchIntake must exist.');
|
|
627
|
+
} else {
|
|
628
|
+
if (designIntentContract.externalResearchIntake.userSuppliedResearchPolicy !== 'read-as-candidate-evidence-not-final-prescription') {
|
|
629
|
+
validationErrors.push('designIntent.externalResearchIntake.userSuppliedResearchPolicy must preserve user research as candidate evidence.');
|
|
630
|
+
}
|
|
631
|
+
if (designIntentContract.externalResearchIntake.requireOfficialDocsVerificationForTechnologyClaims !== true) {
|
|
632
|
+
validationErrors.push('designIntent.externalResearchIntake.requireOfficialDocsVerificationForTechnologyClaims must equal true.');
|
|
633
|
+
}
|
|
634
|
+
if (
|
|
635
|
+
!Array.isArray(designIntentContract.externalResearchIntake.candidateDomains)
|
|
636
|
+
|| !designIntentContract.externalResearchIntake.candidateDomains.includes('motion-and-scroll')
|
|
637
|
+
) {
|
|
638
|
+
validationErrors.push('designIntent.externalResearchIntake.candidateDomains must include motion-and-scroll.');
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
if (!designIntentContract.conceptualAnchor || typeof designIntentContract.conceptualAnchor !== 'object') {
|
|
643
|
+
validationErrors.push('designIntent.conceptualAnchor must exist.');
|
|
644
|
+
} else {
|
|
645
|
+
const conceptualAnchor = designIntentContract.conceptualAnchor;
|
|
646
|
+
if (conceptualAnchor.mode !== 'required-when-no-external-research') {
|
|
647
|
+
validationErrors.push('designIntent.conceptualAnchor.mode must equal "required-when-no-external-research".');
|
|
648
|
+
}
|
|
649
|
+
if (conceptualAnchor.seedMode !== 'selection-policy-only') {
|
|
650
|
+
validationErrors.push('designIntent.conceptualAnchor.seedMode must equal "selection-policy-only".');
|
|
651
|
+
}
|
|
652
|
+
if (conceptualAnchor.requiresAgentSelectionBeforeUiImplementation !== true) {
|
|
653
|
+
validationErrors.push('designIntent.conceptualAnchor.requiresAgentSelectionBeforeUiImplementation must equal true.');
|
|
654
|
+
}
|
|
655
|
+
const candidateSelectionPolicy = conceptualAnchor.candidateSelectionPolicy;
|
|
656
|
+
if (!candidateSelectionPolicy || typeof candidateSelectionPolicy !== 'object') {
|
|
657
|
+
validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy must exist.');
|
|
658
|
+
} else {
|
|
659
|
+
if (candidateSelectionPolicy.considerAtLeast < 3) {
|
|
660
|
+
validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.considerAtLeast must be at least 3.');
|
|
661
|
+
}
|
|
662
|
+
if (candidateSelectionPolicy.discardPredictableCandidates !== true) {
|
|
663
|
+
validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.discardPredictableCandidates must equal true.');
|
|
664
|
+
}
|
|
665
|
+
if (candidateSelectionPolicy.doNotRevealHiddenCandidateList !== true) {
|
|
666
|
+
validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.doNotRevealHiddenCandidateList must equal true.');
|
|
667
|
+
}
|
|
668
|
+
if (candidateSelectionPolicy.outputOnlyChosenAnchor !== true) {
|
|
669
|
+
validationErrors.push('designIntent.conceptualAnchor.candidateSelectionPolicy.outputOnlyChosenAnchor must equal true.');
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
if (
|
|
673
|
+
!Array.isArray(conceptualAnchor.forbiddenFinalAnchorTerms)
|
|
674
|
+
|| !conceptualAnchor.forbiddenFinalAnchorTerms.includes('dashboard')
|
|
675
|
+
|| !conceptualAnchor.forbiddenFinalAnchorTerms.includes('cards')
|
|
676
|
+
) {
|
|
677
|
+
validationErrors.push('designIntent.conceptualAnchor.forbiddenFinalAnchorTerms must reject basic UI labels.');
|
|
678
|
+
}
|
|
679
|
+
if (
|
|
680
|
+
!Array.isArray(conceptualAnchor.sourceDomains)
|
|
681
|
+
|| conceptualAnchor.sourceDomains.length < 4
|
|
682
|
+
|| !conceptualAnchor.sourceDomains.includes('complex-physical-engineering')
|
|
683
|
+
) {
|
|
684
|
+
validationErrors.push('designIntent.conceptualAnchor.sourceDomains must list broad non-template anchor domains.');
|
|
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('derivedTokenLogic')
|
|
700
|
+
|| !finalAnchorContract.requiredFields.includes('cohesionChecks')
|
|
701
|
+
) {
|
|
702
|
+
validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract.requiredFields must require derivedTokenLogic and cohesionChecks.');
|
|
703
|
+
}
|
|
704
|
+
if (
|
|
705
|
+
!Array.isArray(finalAnchorContract.derivedTokenLogicAxes)
|
|
706
|
+
|| !finalAnchorContract.derivedTokenLogicAxes.includes('motion')
|
|
707
|
+
|| !finalAnchorContract.derivedTokenLogicAxes.includes('morphology')
|
|
708
|
+
) {
|
|
709
|
+
validationErrors.push('designIntent.conceptualAnchor.finalAnchorContract.derivedTokenLogicAxes must include motion and morphology.');
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
563
714
|
if (!designIntentContract.mathSystems || typeof designIntentContract.mathSystems !== 'object') {
|
|
564
715
|
validationErrors.push('designIntent.mathSystems must exist.');
|
|
565
716
|
} else {
|
|
@@ -176,6 +176,7 @@ 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 external research or reference is supplied for UI work, choose one advanced conceptual anchor before coding. Consider multiple candidate anchors internally, discard predictable ones, output only the chosen anchor and rationale, and derive typography, spacing, morphology, motion, and responsive composition from that anchor.',
|
|
179
180
|
'',
|
|
180
181
|
'## Project Inputs',
|
|
181
182
|
`- Project name: ${discoveryAnswers.projectName}`,
|
|
@@ -205,7 +206,8 @@ export function buildDesignBootstrapPrompt({
|
|
|
205
206
|
'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
207
|
'12. Keep visualResetStrategy in the machine-readable handoff so reset-language tasks cannot quietly become restyles of the previous UI.',
|
|
207
208
|
'13. Preserve externalResearchIntake so user-provided research becomes reviewed evidence without turning into an offline style or dependency preset.',
|
|
208
|
-
'14.
|
|
209
|
+
'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.',
|
|
210
|
+
'15. After the contract exists, use it as a first-class source for future UI tasks.',
|
|
209
211
|
'',
|
|
210
212
|
].join('\n');
|
|
211
213
|
}
|