dreative 0.5.1 → 0.5.2
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/README.md +49 -27
- package/dist/cli/audit.js +206 -0
- package/dist/cli/audit.test.js +79 -0
- package/dist/cli/docsCheck.js +163 -0
- package/dist/cli/docsCheck.test.js +8 -0
- package/dist/cli/index.js +45 -9
- package/dist/server/preview.js +73 -73
- package/dist/server/store.js +11 -0
- package/dist/shared/artifacts.js +162 -0
- package/dist/shared/design.js +42 -22
- package/dist/shared/ruleSystem.js +130 -0
- package/dist/shared/ruleSystem.test.js +187 -0
- package/dist/shared/skillSystem.js +173 -0
- package/dist/shared/skillSystem.test.js +110 -0
- package/dist/ui/assets/{index--vztc_MR.js → index-CKwmbx2j.js} +13 -13
- package/dist/ui/index.html +12 -12
- package/package.json +5 -3
- package/skill/dreative/DESIGN.md +121 -93
- package/skill/dreative/PLAN.md +229 -92
- package/skill/dreative/SKILL.md +218 -137
- package/skill/dreative/frameworks/nextjs.md +13 -0
- package/skill/dreative/frameworks/react-vite.md +12 -0
- package/skill/dreative/frameworks/styling.md +14 -0
- package/skill/dreative/frameworks/sveltekit.md +10 -0
- package/skill/dreative/frameworks/vue-nuxt.md +12 -0
- package/skill/dreative/recipes/3d-recipes.md +44 -0
- package/skill/dreative/recipes/cinematic-recipes.md +19 -0
- package/skill/dreative/recipes/immersive-recipes.md +18 -0
- package/skill/dreative/recipes/media-recipes.md +60 -0
- package/skill/dreative/recipes/motion-recipes.md +44 -0
- package/skill/dreative/references/ARTIFACTS.md +180 -0
- package/skill/dreative/references/REFLEX_FONTS.json +44 -0
- package/skill/dreative/references/RULES.json +186 -0
- package/skill/dreative/references/SKILL_CONTRACT.md +30 -0
- package/skill/dreative/references/TIERS.md +42 -0
- package/skill/dreative/schemas/plan.schema.json +241 -0
- package/skill/dreative/schemas/verify.schema.json +61 -0
- package/skill/dreative/skills/3d.md +94 -267
- package/skill/dreative/skills/cinematic.md +56 -232
- package/skill/dreative/skills/experimental.md +108 -95
- package/skill/dreative/skills/immersive.md +61 -223
- package/skill/dreative/skills/interaction.md +9 -1
- package/skill/dreative/skills/media.md +135 -564
- package/skill/dreative/skills/mobile.md +128 -117
- package/skill/dreative/skills/motion.md +89 -256
- package/skill/dreative/skills/refined.md +116 -102
- package/skill/dreative/skills/ux.md +155 -144
- package/dist/server/ai.js +0 -177
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Motion implementation recipes
|
|
2
|
+
|
|
3
|
+
Load only after three original choreography concepts are recorded. Record access
|
|
4
|
+
in `recipeAccess`.
|
|
5
|
+
|
|
6
|
+
## Component motion
|
|
7
|
+
|
|
8
|
+
- Presence: animate enter/exit around semantic state; exits are shorter and
|
|
9
|
+
simpler; return focus deliberately.
|
|
10
|
+
- Layout: use transform-based layout animation and stable keys; avoid animating
|
|
11
|
+
expensive dimensions in dense UI.
|
|
12
|
+
- Gestures: pointer capture, velocity, bounds, and spring settle; provide
|
|
13
|
+
keyboard/touch equivalents.
|
|
14
|
+
|
|
15
|
+
## Scroll choreography
|
|
16
|
+
|
|
17
|
+
- IntersectionObserver for one-shot reveals; visible content is the default.
|
|
18
|
+
- Motion `useScroll`/transforms for bounded component-linked progress.
|
|
19
|
+
- GSAP context + ScrollTrigger for multi-element chapters; one Lenis instance
|
|
20
|
+
and one ticker when smooth scrolling is justified.
|
|
21
|
+
- Sticky CSS for simple pinning; cap pin length and remove/shorten on mobile.
|
|
22
|
+
- Velocity treatments use damped/clamped derivatives, never raw scroll deltas.
|
|
23
|
+
|
|
24
|
+
## Type
|
|
25
|
+
|
|
26
|
+
- Split lines/words/characters only for selected display moments; keep accessible
|
|
27
|
+
source text and restore wrappers on cleanup.
|
|
28
|
+
- Variable-font axes can become a coherent development mechanism when states
|
|
29
|
+
change meaningfully rather than merely pulsing.
|
|
30
|
+
|
|
31
|
+
## Setup and cleanup
|
|
32
|
+
|
|
33
|
+
- Scope GSAP with context and call `revert()`.
|
|
34
|
+
- Cancel rAF, observers, media queries, and event listeners on unmount.
|
|
35
|
+
- Pause continuous work on `document.hidden` and outside the viewport.
|
|
36
|
+
- Test SSR/hydration so content never flashes then hides.
|
|
37
|
+
|
|
38
|
+
## Performance/fallback
|
|
39
|
+
|
|
40
|
+
- Animate transform/opacity or shader state; avoid layout reads after writes.
|
|
41
|
+
- Precompute measurements on resize, reuse objects, and cap continuous work.
|
|
42
|
+
- Reduced motion uses final readable states and retains necessary feedback.
|
|
43
|
+
- Fallback preserves timing hierarchy: setup, peak, rest, and resolution remain
|
|
44
|
+
legible even when the mechanism becomes static.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Direct Design artifacts
|
|
2
|
+
|
|
3
|
+
Use JSON as the machine source of truth and Markdown only as its readable view.
|
|
4
|
+
All paths are relative to the target project.
|
|
5
|
+
|
|
6
|
+
## `.dreative/plan.json`
|
|
7
|
+
|
|
8
|
+
Required top-level fields:
|
|
9
|
+
|
|
10
|
+
- `version: 2`
|
|
11
|
+
- `doctrineVersion: 2` for the bounded-creative-controls format. Legacy v2
|
|
12
|
+
plans without this field remain readable and receive a migration warning.
|
|
13
|
+
- `request`, `createdAt`
|
|
14
|
+
- `tier`: `solid | premium | expressive | award`
|
|
15
|
+
- `depth`: `restyle | relayout | restructure | reimagine`
|
|
16
|
+
- `skills`: user-approved, dependency-resolved pool including `ux` and `mobile`
|
|
17
|
+
- `skillPolicy`: hybrid routing policy, global foundations, explicit user page
|
|
18
|
+
assignments, and `routingApproved: true`
|
|
19
|
+
- `designRead`: `{ register, concept, signature }`
|
|
20
|
+
- `preservationManifest`: normally `.dreative/preservation.json`
|
|
21
|
+
- `decisionLedger`: normally `.dreative/ledger.json`
|
|
22
|
+
- `pages`: ordered pages, each with its assigned skills and delivery sections
|
|
23
|
+
- `implementationStartedAt`: timestamp used to prove rule substitutions were
|
|
24
|
+
declared during planning
|
|
25
|
+
- `ruleExceptions`: bounded substitutions of evidence-backed defaults
|
|
26
|
+
- `creativeStrategy`: `diversity` or `development` at expressive/award tiers
|
|
27
|
+
- `fontDecision`: candidates, reflex markers, ledger history, and justification
|
|
28
|
+
- `experimentalPlan`: per-section candidates and the selected two or three peaks
|
|
29
|
+
- `conceptExploration` and `recipeAccess`: proof recipes were loaded only after
|
|
30
|
+
original concepts were recorded
|
|
31
|
+
|
|
32
|
+
Every selected skill must appear on at least one page. Every page includes `ux`
|
|
33
|
+
and `mobile`, but optional treatments are assigned only where they serve that
|
|
34
|
+
page. A section may use only skills assigned to its parent page.
|
|
35
|
+
|
|
36
|
+
Each section requires `id`, `name`, `layoutFamily`, `skills`, `interactions`,
|
|
37
|
+
`mobile`, `fallback`, `verification`, `assets`, and `status`. Status is
|
|
38
|
+
`planned | shipped | fallback | cut`; fallback/cut requires `reason`.
|
|
39
|
+
|
|
40
|
+
Each asset requires `id`, `path`, `purpose`, and `status`. A shipped asset must
|
|
41
|
+
exist when `dreative audit` runs.
|
|
42
|
+
|
|
43
|
+
### Routing authority
|
|
44
|
+
|
|
45
|
+
The user's selection is authoritative. Routing may place selected-but-unassigned
|
|
46
|
+
skills and suggest additional treatments, but it never activates an unselected
|
|
47
|
+
optional skill. Explicit page assignments always win. If the user selects all,
|
|
48
|
+
all ten skills appear in the overall plan; this does not mean all ten belong on
|
|
49
|
+
every page. Show the proposed page matrix and obtain approval before setting
|
|
50
|
+
`routingApproved: true`.
|
|
51
|
+
|
|
52
|
+
## Rule substitutions
|
|
53
|
+
|
|
54
|
+
Rules live in `references/RULES.json`. Hard gates cannot appear in
|
|
55
|
+
`ruleExceptions`. A valid substitution includes the registered `ruleId`,
|
|
56
|
+
`decision: "substituted"`, planning timestamp, specific reason, concrete
|
|
57
|
+
alternative, at least two observable success criteria, and passing verification
|
|
58
|
+
evidence IDs. The exception must predate `implementationStartedAt`.
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"ruleId": "award.spatialSignature",
|
|
63
|
+
"decision": "substituted",
|
|
64
|
+
"declaredAt": "2026-01-01T00:30:00.000Z",
|
|
65
|
+
"reason": "The archival concept has no physical subject, so a product prop would misrepresent the material.",
|
|
66
|
+
"alternative": "A persistent variable-type specimen becomes index, spatial architecture, and interactive control.",
|
|
67
|
+
"successCriteria": [
|
|
68
|
+
"The specimen appears in at least three materially different roles",
|
|
69
|
+
"Pointer and scroll input visibly reshape its depth"
|
|
70
|
+
],
|
|
71
|
+
"evidenceIds": ["spatial-type-desktop", "spatial-type-mobile"]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Creative strategy and experimental hierarchy
|
|
76
|
+
|
|
77
|
+
At `expressive` and `award`, `creativeStrategy.path` is either:
|
|
78
|
+
|
|
79
|
+
- `diversity`: at least four distinct mechanisms and three drivers; or
|
|
80
|
+
- `development`: one named mechanism with three materially different states,
|
|
81
|
+
two quieter secondary mechanisms, and two drivers.
|
|
82
|
+
|
|
83
|
+
When `experimental` is selected, `experimentalPlan` records one candidate for
|
|
84
|
+
every major section and marks only two or three as selected. Other sections
|
|
85
|
+
support, rest, contrast, prepare, or transform those peaks.
|
|
86
|
+
|
|
87
|
+
## Font decision
|
|
88
|
+
|
|
89
|
+
`fontDecision` records at least three candidates, identifies reflex fonts using
|
|
90
|
+
`references/REFLEX_FONTS.json`, and includes the last three display fonts from
|
|
91
|
+
the ledger. A reflex winner needs a specific brand/metrics/product/reference/
|
|
92
|
+
language/variable-font/performance reason, recorded in `reasonKinds` using a
|
|
93
|
+
category from the registry. Repeating a recent display font needs an additional
|
|
94
|
+
`repeatJustification`.
|
|
95
|
+
|
|
96
|
+
## `.dreative/preservation.json`
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"version": 1,
|
|
101
|
+
"createdAt": "2026-01-01T00:00:00.000Z",
|
|
102
|
+
"items": [
|
|
103
|
+
{
|
|
104
|
+
"id": "nav-pricing",
|
|
105
|
+
"kind": "link",
|
|
106
|
+
"file": "src/components/Nav.tsx",
|
|
107
|
+
"needle": "href=\"/pricing\"",
|
|
108
|
+
"purpose": "Primary pricing navigation"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Allowed kinds: `link`, `handler`, `form-field`, `visible-copy`, `state`,
|
|
115
|
+
`analytics-hook`, `accessibility`, `route`. Intentional changes add
|
|
116
|
+
`intentionallyChanged: true` and a non-empty `changeReason`.
|
|
117
|
+
|
|
118
|
+
## `.dreative/verify.json`
|
|
119
|
+
|
|
120
|
+
Schema: `schemas/verify.schema.json`.
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"version": 1,
|
|
125
|
+
"generatedAt": "2026-01-01T00:00:00.000Z",
|
|
126
|
+
"evidence": [
|
|
127
|
+
{
|
|
128
|
+
"id": "mobile-nav",
|
|
129
|
+
"criterion": "Mobile navigation opens and closes",
|
|
130
|
+
"status": "pass",
|
|
131
|
+
"evidence": "Escape closes and focus returns to trigger",
|
|
132
|
+
"proof": {
|
|
133
|
+
"timestamp": "2026-01-01T00:00:00.000Z",
|
|
134
|
+
"artifactPath": ".dreative/screenshots/mobile-nav.png",
|
|
135
|
+
"viewport": { "width": 390, "height": 844, "dpr": 2 },
|
|
136
|
+
"testedUrl": "http://localhost:3000",
|
|
137
|
+
"consoleErrorCount": 0,
|
|
138
|
+
"playwrightTestId": "navigation closes with Escape"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Every evidence row requires a timestamp and concrete proof: an existing artifact
|
|
146
|
+
path, command + exit code, tested URL/console count, FPS/frame-time measurement,
|
|
147
|
+
or Playwright test identifier. `dreative audit` checks referenced artifact paths
|
|
148
|
+
and rejects passing commands with nonzero exits or passing runs with console
|
|
149
|
+
errors. `fail` blocks completion. Use `not-applicable` only with a concrete
|
|
150
|
+
explanation and proof of why the criterion does not apply.
|
|
151
|
+
|
|
152
|
+
## `.dreative/ledger.json`
|
|
153
|
+
|
|
154
|
+
The ledger is append-only design memory:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"version": 1,
|
|
159
|
+
"entries": [
|
|
160
|
+
{
|
|
161
|
+
"at": "2026-01-01T00:00:00.000Z",
|
|
162
|
+
"request": "Redesign landing page",
|
|
163
|
+
"tier": "premium",
|
|
164
|
+
"chosen": ["Editorial split with product photography"],
|
|
165
|
+
"rejected": ["Bento dashboard", "Dark cinematic world"],
|
|
166
|
+
"failures": [],
|
|
167
|
+
"userPreferences": ["Calm motion", "No custom cursor"]
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Record only project-relevant design preferences and technical failures. Never
|
|
174
|
+
store secrets, personal notes, or unrelated conversation.
|
|
175
|
+
|
|
176
|
+
## Audit
|
|
177
|
+
|
|
178
|
+
Run `dreative audit`. It validates schemas, skill dependency closure, section
|
|
179
|
+
completion, shipped assets, preservation needles, verification evidence, and the
|
|
180
|
+
decision ledger. `--json` emits a machine-readable report.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"purpose": "Flag frequently reflexive choices for explicit reasoning; these fonts are not inherently bad or prohibited.",
|
|
4
|
+
"fonts": [
|
|
5
|
+
"Inter",
|
|
6
|
+
"Arial",
|
|
7
|
+
"Helvetica",
|
|
8
|
+
"Roboto",
|
|
9
|
+
"Open Sans",
|
|
10
|
+
"DM Sans",
|
|
11
|
+
"DM Serif",
|
|
12
|
+
"Space Grotesk",
|
|
13
|
+
"Space Mono",
|
|
14
|
+
"Outfit",
|
|
15
|
+
"Plus Jakarta Sans",
|
|
16
|
+
"Instrument Sans",
|
|
17
|
+
"Instrument Serif",
|
|
18
|
+
"Fraunces",
|
|
19
|
+
"Playfair Display",
|
|
20
|
+
"Poppins",
|
|
21
|
+
"Montserrat",
|
|
22
|
+
"Lato",
|
|
23
|
+
"Oswald",
|
|
24
|
+
"Raleway",
|
|
25
|
+
"Merriweather"
|
|
26
|
+
],
|
|
27
|
+
"validReasonKinds": [
|
|
28
|
+
"existing-brand",
|
|
29
|
+
"design-system-metrics",
|
|
30
|
+
"product-register",
|
|
31
|
+
"supplied-reference",
|
|
32
|
+
"language-coverage",
|
|
33
|
+
"variable-font-capability",
|
|
34
|
+
"performance",
|
|
35
|
+
"physical-editorial-historical-reference"
|
|
36
|
+
],
|
|
37
|
+
"invalidGenericReasons": [
|
|
38
|
+
"looks clean and modern",
|
|
39
|
+
"clean and modern",
|
|
40
|
+
"looks professional",
|
|
41
|
+
"felt better",
|
|
42
|
+
"fits the design"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"wordingPrinciple": "Follow the proven default, or outperform it with a named alternative, measurable success criteria, and runtime evidence.",
|
|
4
|
+
"rules": [
|
|
5
|
+
{
|
|
6
|
+
"id": "preservation.noLoss",
|
|
7
|
+
"category": "hard-gate",
|
|
8
|
+
"observedFailure": "Redesigns silently removed links, handlers, copy, routes, states, or analytics hooks.",
|
|
9
|
+
"defaultRemedy": "Complete and pass the preservation manifest before delivery.",
|
|
10
|
+
"exceptionAllowed": false,
|
|
11
|
+
"exceptionTest": "none",
|
|
12
|
+
"reviewAfterRuns": 0
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "ux.functional",
|
|
16
|
+
"category": "hard-gate",
|
|
17
|
+
"observedFailure": "Visually ambitious pages shipped broken navigation, forms, states, focus, or pointer behavior.",
|
|
18
|
+
"defaultRemedy": "Pass the functional UX audit with keyboard and pointer evidence.",
|
|
19
|
+
"exceptionAllowed": false,
|
|
20
|
+
"exceptionTest": "none",
|
|
21
|
+
"reviewAfterRuns": 0
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "mobile.required",
|
|
25
|
+
"category": "hard-gate",
|
|
26
|
+
"observedFailure": "Desktop effects were cropped, unusable, or absent on touch devices.",
|
|
27
|
+
"defaultRemedy": "Ship a deliberate mobile treatment for every page and effect.",
|
|
28
|
+
"exceptionAllowed": false,
|
|
29
|
+
"exceptionTest": "none",
|
|
30
|
+
"reviewAfterRuns": 0
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "motion.reducedMotion",
|
|
34
|
+
"category": "hard-gate",
|
|
35
|
+
"observedFailure": "Motion-heavy pages ignored user preferences or hid content when animation failed.",
|
|
36
|
+
"defaultRemedy": "Ship visible defaults and a tested reduced-motion path.",
|
|
37
|
+
"exceptionAllowed": false,
|
|
38
|
+
"exceptionTest": "none",
|
|
39
|
+
"reviewAfterRuns": 0
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "spatial.noOcclusion",
|
|
43
|
+
"category": "hard-gate",
|
|
44
|
+
"observedFailure": "Traveling decoration and canvases covered text, controls, or pointer targets.",
|
|
45
|
+
"defaultRemedy": "Pass the occlusion and pointer-events sweep at desktop and mobile sizes.",
|
|
46
|
+
"exceptionAllowed": false,
|
|
47
|
+
"exceptionTest": "none",
|
|
48
|
+
"reviewAfterRuns": 0
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "3d.noCodedOrganic",
|
|
52
|
+
"category": "hard-gate",
|
|
53
|
+
"observedFailure": "Organic real-world subjects built from primitives looked like crude blobs and damaged credibility.",
|
|
54
|
+
"defaultRemedy": "Use a real GLB, a photoreal cutout, sourced photography, or remove the claimed object.",
|
|
55
|
+
"exceptionAllowed": false,
|
|
56
|
+
"exceptionTest": "none",
|
|
57
|
+
"reviewAfterRuns": 0
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "effects.runtimeFallback",
|
|
61
|
+
"category": "hard-gate",
|
|
62
|
+
"observedFailure": "WebGL, video, and scroll effects left blank or broken content when runtime assumptions failed.",
|
|
63
|
+
"defaultRemedy": "Ship and exercise loading, context-loss, low-power, and static fallbacks.",
|
|
64
|
+
"exceptionAllowed": false,
|
|
65
|
+
"exceptionTest": "none",
|
|
66
|
+
"reviewAfterRuns": 0
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "verification.realEvidence",
|
|
70
|
+
"category": "hard-gate",
|
|
71
|
+
"observedFailure": "Agents claimed checks passed without commands, screenshots, traces, or measurements.",
|
|
72
|
+
"defaultRemedy": "Attach structured, auditable proof to every passing verification claim.",
|
|
73
|
+
"exceptionAllowed": false,
|
|
74
|
+
"exceptionTest": "none",
|
|
75
|
+
"reviewAfterRuns": 0
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "assets.plannedExist",
|
|
79
|
+
"category": "hard-gate",
|
|
80
|
+
"observedFailure": "Plans promised distinct assets that were missing, duplicated, or never rendered.",
|
|
81
|
+
"defaultRemedy": "Reconcile every shipped asset path against the plan and rendered page.",
|
|
82
|
+
"exceptionAllowed": false,
|
|
83
|
+
"exceptionTest": "none",
|
|
84
|
+
"reviewAfterRuns": 0
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "content.visible",
|
|
88
|
+
"category": "hard-gate",
|
|
89
|
+
"observedFailure": "JS animation and effect layers made content invisible or inaccessible.",
|
|
90
|
+
"defaultRemedy": "Content remains visible and usable before enhancement and when effects fail.",
|
|
91
|
+
"exceptionAllowed": false,
|
|
92
|
+
"exceptionTest": "none",
|
|
93
|
+
"reviewAfterRuns": 0
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "typography.reflexChoice",
|
|
97
|
+
"category": "evidence-backed-default",
|
|
98
|
+
"observedFailure": "Agents repeatedly chose the same training-data fonts using generic clean-and-modern reasoning.",
|
|
99
|
+
"defaultRemedy": "Explore at least three candidates, mark reflex fonts, read the recent ledger, and choose a brand-specific voice.",
|
|
100
|
+
"exceptionAllowed": true,
|
|
101
|
+
"exceptionTest": "A reflex font has a specific brand, metric, product, language, variable-font, performance, or supplied-reference reason.",
|
|
102
|
+
"reviewAfterRuns": 5
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "award.spatialSignature",
|
|
106
|
+
"category": "evidence-backed-default",
|
|
107
|
+
"observedFailure": "Award builds used a generic orb or had no recurring dimensional system beyond the hero.",
|
|
108
|
+
"defaultRemedy": "Use a recognizable real GLB or photoreal cutout prop staged in a designed berth.",
|
|
109
|
+
"exceptionAllowed": true,
|
|
110
|
+
"exceptionTest": "A named alternative creates equivalent depth, recurrence, interaction, and visual dominance on desktop and mobile.",
|
|
111
|
+
"reviewAfterRuns": 5
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "3d.signatureRecognizable",
|
|
115
|
+
"category": "evidence-backed-default",
|
|
116
|
+
"observedFailure": "Abstract coded spheres, blobs, and toruses were promoted as signature objects and read as generic demos.",
|
|
117
|
+
"defaultRemedy": "Promote a recognizable subject; keep abstract geometry supporting-only.",
|
|
118
|
+
"exceptionAllowed": true,
|
|
119
|
+
"exceptionTest": "A brand-native abstract instrument has a nameable function, material identity, recurrence, and input response rather than being ambient decoration.",
|
|
120
|
+
"reviewAfterRuns": 5
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "media.award.participatoryMoment",
|
|
124
|
+
"category": "evidence-backed-default",
|
|
125
|
+
"observedFailure": "Award media remained something visitors only watched while the page claimed immersion.",
|
|
126
|
+
"defaultRemedy": "Use an image or video depth dive when the concept and assets support depth.",
|
|
127
|
+
"exceptionAllowed": true,
|
|
128
|
+
"exceptionTest": "The visitor affects, enters, transforms, scrubs, drags, refracts, or controls the media's visual logic with equal perceptual impact.",
|
|
129
|
+
"reviewAfterRuns": 5
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "media.award.pixelCoverage",
|
|
133
|
+
"category": "evidence-backed-default",
|
|
134
|
+
"observedFailure": "Award builds shipped one set-piece while all other key images remained static or used basic fade-and-zoom.",
|
|
135
|
+
"defaultRemedy": "At least half of key images, minimum three, use distinct pixel-class treatments.",
|
|
136
|
+
"exceptionAllowed": true,
|
|
137
|
+
"exceptionTest": "One coherent alternative media system visibly develops through at least three materially different roles or states.",
|
|
138
|
+
"reviewAfterRuns": 5
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "motion.expressive.diversityOrDevelopment",
|
|
142
|
+
"category": "evidence-backed-default",
|
|
143
|
+
"observedFailure": "Multiple sections repeated the same simple reveal or used unrelated effects only to satisfy a catalog.",
|
|
144
|
+
"defaultRemedy": "Use four distinct mechanisms across three input drivers.",
|
|
145
|
+
"exceptionAllowed": true,
|
|
146
|
+
"exceptionTest": "One coherent signature mechanism develops through at least three materially different states with two quieter secondary mechanisms and two drivers.",
|
|
147
|
+
"reviewAfterRuns": 5
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "exploration.provocationRoll",
|
|
151
|
+
"category": "creative-provocation",
|
|
152
|
+
"observedFailure": "Agents converged on the first familiar concept and repeated prior signatures.",
|
|
153
|
+
"defaultRemedy": "Use a random provocation to force at least one divergent exploration concept.",
|
|
154
|
+
"exceptionAllowed": true,
|
|
155
|
+
"exceptionTest": "The exploration still records three genuinely divergent, brand-native concepts.",
|
|
156
|
+
"reviewAfterRuns": 5
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "experimental.sectionCandidates",
|
|
160
|
+
"category": "creative-provocation",
|
|
161
|
+
"observedFailure": "Experimental mode added effects to a conventional page or made every section compete as a technical demo.",
|
|
162
|
+
"defaultRemedy": "Explore one non-obvious candidate per major section, then ship only the strongest two or three.",
|
|
163
|
+
"exceptionAllowed": true,
|
|
164
|
+
"exceptionTest": "The plan records hierarchy: selected peaks plus supporting, resting, contrasting, or transforming sections.",
|
|
165
|
+
"reviewAfterRuns": 5
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"id": "recipes.afterExploration",
|
|
169
|
+
"category": "creative-provocation",
|
|
170
|
+
"observedFailure": "Large effect catalogs anchored concepts before the agent understood the brand or assets.",
|
|
171
|
+
"defaultRemedy": "Record three original concepts before loading recipe references.",
|
|
172
|
+
"exceptionAllowed": true,
|
|
173
|
+
"exceptionTest": "Early recipe access is limited to feasibility for a user-mandated technique and is recorded explicitly.",
|
|
174
|
+
"reviewAfterRuns": 5
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "layout.familiesArePrompts",
|
|
178
|
+
"category": "creative-provocation",
|
|
179
|
+
"observedFailure": "Suggested layout families became repeated templates instead of content-shaped compositions.",
|
|
180
|
+
"defaultRemedy": "Use layout-family labels to provoke exploration, not as mandatory templates.",
|
|
181
|
+
"exceptionAllowed": true,
|
|
182
|
+
"exceptionTest": "The shipped composition is brand-native, structurally honest, and passes hierarchy and repetition checks.",
|
|
183
|
+
"reviewAfterRuns": 5
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Specialist skill contract
|
|
2
|
+
|
|
3
|
+
Every specialist skill follows this contract, in addition to its own doctrine:
|
|
4
|
+
|
|
5
|
+
Universal foundation: ux and baseline mobile apply to every web page.
|
|
6
|
+
|
|
7
|
+
1. **Load when:** selected in `plan.skills` or clearly triggered by the brief.
|
|
8
|
+
2. **Do not load when:** the treatment adds cost without serving the request.
|
|
9
|
+
3. **Dependencies:** resolve the skill graph in `SKILL.md`; `ux` and `mobile`
|
|
10
|
+
are universal.
|
|
11
|
+
4. **Deliverables:** name concrete components, effects, assets, and states in the
|
|
12
|
+
plan—never select a skill as a mood label.
|
|
13
|
+
5. **Budget:** define asset/runtime limits appropriate to the ambition tier.
|
|
14
|
+
6. **Accessibility:** provide keyboard, reduced-motion, semantic, and readable
|
|
15
|
+
fallbacks for every treatment.
|
|
16
|
+
7. **Fallback:** name the cheaper robust version before implementation.
|
|
17
|
+
8. **Definition of done:** record observable evidence in `verify.json` and pass
|
|
18
|
+
`dreative audit`.
|
|
19
|
+
|
|
20
|
+
A specialist file may strengthen these floors but may not weaken them.
|
|
21
|
+
|
|
22
|
+
Rules use three categories from `RULES.json`:
|
|
23
|
+
|
|
24
|
+
- hard gates are objective delivery failures and cannot be waived;
|
|
25
|
+
- evidence-backed defaults are proven remedies with bounded substitutions;
|
|
26
|
+
- creative provocations generate exploration candidates, not mandatory clutter.
|
|
27
|
+
|
|
28
|
+
Follow the proven default, or outperform it with a named alternative,
|
|
29
|
+
measurable success criteria, and runtime evidence. Generate and record three
|
|
30
|
+
brand-native concepts before loading any `recipes/` reference.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Ambition tiers
|
|
2
|
+
|
|
3
|
+
Choose the lowest tier that honestly satisfies the request. Higher tiers inherit
|
|
4
|
+
all lower-tier requirements.
|
|
5
|
+
|
|
6
|
+
## Solid (`solid`)
|
|
7
|
+
|
|
8
|
+
- Complete, accessible, responsive interface.
|
|
9
|
+
- Existing behavior and preservation manifest pass.
|
|
10
|
+
- Clear hierarchy, coherent type/color/spacing, designed states.
|
|
11
|
+
- Desktop, keyboard, reduced-motion, and approximately 390px mobile verified.
|
|
12
|
+
- Heavy media or bespoke motion is not required.
|
|
13
|
+
|
|
14
|
+
## Premium (`premium`)
|
|
15
|
+
|
|
16
|
+
- Everything in Solid.
|
|
17
|
+
- A named register, design concept, and visible signature detail.
|
|
18
|
+
- Intentional photography/media treatment and a dedicated craft pass.
|
|
19
|
+
- Layout composition varies by content; no repeated default-card solution.
|
|
20
|
+
- Motion is restrained and purposeful unless the brief asks for more.
|
|
21
|
+
|
|
22
|
+
## Expressive (`expressive`)
|
|
23
|
+
|
|
24
|
+
- Everything in Premium.
|
|
25
|
+
- A recorded diversity-or-development path: several distinct mechanisms/drivers,
|
|
26
|
+
or one signature mechanism developing through three states with quiet support.
|
|
27
|
+
- At least one input-driven treatment; entrances alone do not satisfy the tier.
|
|
28
|
+
- Mobile translations and reduced-motion fallbacks are implemented, not noted.
|
|
29
|
+
- Frame behavior and heavy asset cost are measured.
|
|
30
|
+
|
|
31
|
+
## Award (`award`)
|
|
32
|
+
|
|
33
|
+
- Everything in Expressive.
|
|
34
|
+
- A distinctive persistent spatial, media, or material system shapes the journey.
|
|
35
|
+
- One unmistakable dimensional or spatial signature is subject-honest, staged,
|
|
36
|
+
and resilient. A real GLB/cutout is the proven default, not the only medium.
|
|
37
|
+
- Runtime evidence covers effects, transferred weight, frame time, occlusion,
|
|
38
|
+
context loss/loading, and fallbacks.
|
|
39
|
+
- The page has three memorable moments without sacrificing function.
|
|
40
|
+
|
|
41
|
+
Do not force Award requirements on product dashboards, checkout, forms, or users
|
|
42
|
+
who asked for calm professional work. Ambition is a product decision, not a score.
|