dreative 0.5.2 → 0.5.3
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/dist/cli/docsCheck.js +1 -1
- package/dist/shared/artifacts.js +58 -0
- package/dist/shared/design.js +3 -2
- package/dist/shared/ruleSystem.js +100 -10
- package/dist/shared/ruleSystem.test.js +94 -19
- package/package.json +1 -1
- package/skill/dreative/DESIGN.md +34 -26
- package/skill/dreative/PLAN.md +84 -52
- package/skill/dreative/SKILL.md +21 -9
- package/skill/dreative/recipes/motion-recipes.md +24 -0
- package/skill/dreative/references/ARTIFACTS.md +27 -11
- package/skill/dreative/references/RULES.json +9 -9
- package/skill/dreative/references/TIERS.md +7 -5
- package/skill/dreative/schemas/plan.schema.json +74 -6
- package/skill/dreative/schemas/verify.schema.json +14 -0
- package/skill/dreative/skills/media.md +28 -14
- package/skill/dreative/skills/mobile.md +13 -12
- package/skill/dreative/skills/motion.md +45 -8
package/skill/dreative/PLAN.md
CHANGED
|
@@ -34,17 +34,16 @@ Enumerate what your environment can actually produce, and write the result down
|
|
|
34
34
|
Rules:
|
|
35
35
|
- Probe by LOOKING (list your tools, `which ffmpeg`, check MCP config), never by
|
|
36
36
|
assuming. A capability you didn't verify doesn't exist.
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
generated stills + ken-burns or a shader surface; **no image-gen → media
|
|
37
|
+
- Missing video, 3D, or separated source layers is not automatically a blocker.
|
|
38
|
+
First plan the strongest honest treatment available from generated/sourced
|
|
39
|
+
stills, local image processing, transparent cutouts, SVG, CSS, Canvas,
|
|
40
|
+
generated keyframes, or existing project assets. Ask for a tool or source
|
|
41
|
+
asset only when the requested result cannot be approximated convincingly;
|
|
42
|
+
present the concrete best-effort fallback in that question. Never install a
|
|
43
|
+
tool silently and never leave an "advanced animation later" placeholder.
|
|
44
|
+
- The probe result changes the blueprint: no video-gen → stills become layered
|
|
45
|
+
scenes, masks, related keyframes, frame sequences, tiles/fragments, Canvas
|
|
46
|
+
samples, or shader textures as the concept warrants; **no image-gen → media
|
|
48
47
|
cells become `source-image` (DESIGN.md §7's priority: verified stock/CDN
|
|
49
48
|
photography), every planned cutout prop becomes a sourced-and-matted photo
|
|
50
49
|
or is cut, and any 3D of an organic real-world subject is re-planned as a
|
|
@@ -59,7 +58,7 @@ Rules:
|
|
|
59
58
|
Draft the page as a compact table BEFORE asking anything — the decision phase
|
|
60
59
|
presents choices about a concrete plan, not abstractions. Per section:
|
|
61
60
|
|
|
62
|
-
| section | layout family | media
|
|
61
|
+
| section | layout family | media + preparation | motion class/treatment | interaction | intensity | fallback |
|
|
63
62
|
|
|
64
63
|
- **media plan** — one of: `generate-image` (subject + exact aspect + palette/
|
|
65
64
|
light-temperature prompt notes), `generate-video` (loop subject, 5-10s,
|
|
@@ -72,8 +71,7 @@ presents choices about a concrete plan, not abstractions. Per section:
|
|
|
72
71
|
where media itself becomes the visitor-controlled spectacle, not a specific
|
|
73
72
|
catalog effect. A different solution uses a registered planning-time
|
|
74
73
|
substitution with observable success criteria and evidence IDs.
|
|
75
|
-
When
|
|
76
|
-
concepts with depth-capable assets), its
|
|
74
|
+
When a concept-led set-piece uses a depth dive, its
|
|
77
75
|
`generate-image` cell must plan a DEPTH-CAPABLE composition (a corridor,
|
|
78
76
|
room, landscape, machinery receding — something a camera can enter) and
|
|
79
77
|
the companion assets in the same cell: the depth map and/or the separated
|
|
@@ -102,17 +100,18 @@ presents choices about a concrete plan, not abstractions. Per section:
|
|
|
102
100
|
Every 3D prop cell also names its BERTH (3d.md §3): which lane/stage of
|
|
103
101
|
the section it occupies and what the layout does to make room — a prop
|
|
104
102
|
planned "over the hero image" or with no berth is an invalid cell.
|
|
105
|
-
At the `award` tier the outcome gate is one unmistakable
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
At
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
103
|
+
At the `award` tier the outcome gate is one unmistakable spatial, media,
|
|
104
|
+
typographic, or material signature that shapes the journey. If the concept
|
|
105
|
+
calls for a recognizable physical subject, use a real GLB or photoreal cutout
|
|
106
|
+
with a berth and source. Typography, layered photography, data, SVG/Canvas,
|
|
107
|
+
or a scene instrument may be the stronger direct choice; no substitution is
|
|
108
|
+
needed merely because 3D is absent. Generic orbs/blobs/toruses remain invalid.
|
|
109
|
+
At expressive/award, the media column records whether each hero/key image
|
|
110
|
+
stays flat or becomes motion-ready through cutouts, depth layers, masks,
|
|
111
|
+
fragments, maps, alternate states, a frame sequence, or a Canvas/WebGL
|
|
112
|
+
texture. Transform only where it strengthens the concept; a still may remain
|
|
113
|
+
flat as an intentional rest. The default in `media.keyAssetTreatment` is a
|
|
114
|
+
coherent asset-preparation decision, not a pixel-effect quota.
|
|
116
115
|
- **Travel map (mandatory when any element persists across sections).** If
|
|
117
116
|
the blueprint contains a fixed canvas object, a recurring signature, or any
|
|
118
117
|
scroll-morphing prop that lives through more than one section, add a travel
|
|
@@ -121,35 +120,67 @@ presents choices about a concrete plan, not abstractions. Per section:
|
|
|
121
120
|
it never sits over text or controls (DESIGN.md §15). No berth fits ⇒ the
|
|
122
121
|
object is scripted HIDDEN for that section. A persistent object without a
|
|
123
122
|
travel map is an unplanned collision that verify will find later — plan it
|
|
124
|
-
now.
|
|
125
|
-
|
|
123
|
+
now. When the set-piece claims transformation, its pixels, layers, form, or
|
|
124
|
+
role must visibly change; placement choreography alone does not qualify.
|
|
126
125
|
- **Diversity or development (dial ≥ 7 / expressive+).** Choose and record one
|
|
127
|
-
path in `creativeStrategy`. Diversity uses
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
plan gate, not a target:** at `expressive`/`award` ambition the blueprint
|
|
137
|
-
must enumerate every §9 item for its dial — which element carries it, what
|
|
138
|
-
triggers it — or explicitly name the item as cut with a reason. A plan that
|
|
139
|
-
neither covers nor justifies a §9 item is incomplete; rework it before
|
|
140
|
-
presenting, don't ship the gap to the build.
|
|
126
|
+
path in `creativeStrategy`. Diversity uses only the mechanisms and drivers the
|
|
127
|
+
concept needs, tied together by a shared language. Development evolves one
|
|
128
|
+
coherent signature through materially different roles with quieter support.
|
|
129
|
+
The same reveal repeated with different values is neither path. Do not add
|
|
130
|
+
unrelated mechanisms to satisfy a count.
|
|
131
|
+
- **motion treatment** — from motion.md/immersive.md/cinematic.md vocabulary,
|
|
132
|
+
with dial-appropriate ambition. At `expressive`/`award`, complete every
|
|
133
|
+
`motionTreatment` field below and name the element/driver for each planned
|
|
134
|
+
moment. A generic or incomplete treatment is reworked before presentation.
|
|
141
135
|
- **intensity (the pacing map)** — 1–10 per section: how loud this section is
|
|
142
136
|
(motion + media + visual weight combined). The page must read as a CURVE, not
|
|
143
137
|
a flat line: uniform intensity fails in both directions (all loud = exhausting,
|
|
144
|
-
all quiet = the set-piece feels bolted on). Place deliberate rests
|
|
145
|
-
|
|
146
|
-
|
|
138
|
+
all quiet = the set-piece feels bolted on). Place deliberate rests around
|
|
139
|
+
hero moments where the content permits so they land; supporting sections
|
|
140
|
+
should not compete with them. A blueprint whose
|
|
147
141
|
intensity column is all the same number is incomplete — rework the pacing
|
|
148
142
|
before presenting.
|
|
149
|
-
- **fallback** — for every ambitious cell (WebGL, sim, scrubbed sequence,
|
|
150
|
-
generated video), the concrete boring version that ships if the fancy one
|
|
151
|
-
fails runtime verification. A plan cell without a fallback is not ambitious,
|
|
152
|
-
it's fragile.
|
|
143
|
+
- **fallback** — for every ambitious cell (WebGL, sim, scrubbed sequence,
|
|
144
|
+
generated video), the concrete boring version that ships if the fancy one
|
|
145
|
+
fails runtime verification. A plan cell without a fallback is not ambitious,
|
|
146
|
+
it's fragile.
|
|
147
|
+
|
|
148
|
+
### Motion treatment and complexity budget
|
|
149
|
+
|
|
150
|
+
At expressive/award, write a coherent scene sequence before implementation. For
|
|
151
|
+
every major section record in `motionTreatment`:
|
|
152
|
+
|
|
153
|
+
- static composition and motion class (`none`, `decorative`, `structural`, or
|
|
154
|
+
`transformational`);
|
|
155
|
+
- starting and ending visual states;
|
|
156
|
+
- what changes, persists, pins, enters, transforms, combines, fragments, or exits;
|
|
157
|
+
- the handoff into the next composition;
|
|
158
|
+
- narrative/emotional purpose;
|
|
159
|
+
- rendering mechanism;
|
|
160
|
+
- mobile translation and reduced-motion state.
|
|
161
|
+
|
|
162
|
+
Decorative motion introduces or responds. Structural motion controls hierarchy,
|
|
163
|
+
pacing, pinning, and composition. Transformational motion changes form or turns
|
|
164
|
+
one composition into the next. Opacity, translate, scale, and light parallax are
|
|
165
|
+
not sufficient evidence of structural or transformational motion.
|
|
166
|
+
|
|
167
|
+
Record `motionComplexityBudget`: normally two or three hero moments (one is valid
|
|
168
|
+
for a short page), calm sections around them, shared motion language, target-
|
|
169
|
+
device limits, and progressive enhancement. Spend complexity where the story
|
|
170
|
+
changes state; do not distribute medium-complexity effects evenly.
|
|
171
|
+
|
|
172
|
+
Choose the simplest mechanism capable of producing the intended transformation
|
|
173
|
+
convincingly. Simplicity means implementation suitability, not visual blandness.
|
|
174
|
+
Choose deliberately among CSS, Motion, GSAP/ScrollTrigger, SVG masks/filters,
|
|
175
|
+
`clip-path`, DOM fragments, Canvas 2D, WebGL/shaders, image sequences, video,
|
|
176
|
+
Lottie/vector animation, and 3D. Neither basic transforms nor WebGL/3D/pixels are
|
|
177
|
+
an unexamined default.
|
|
178
|
+
|
|
179
|
+
Before approving the plan, record `antiDefaultReview` answers: are images mostly
|
|
180
|
+
fading/scaling/sliding; are sections independent reveals; where is the major
|
|
181
|
+
composition handoff; how does motion change visual state; could this system fit
|
|
182
|
+
an unrelated site; what is memorable; and how does movement express the concept?
|
|
183
|
+
If the result is generic at expressive/award, revise the scene plan now.
|
|
153
184
|
|
|
154
185
|
Plus four page-level lines: register + design read (DESIGN.md §2), signature
|
|
155
186
|
element, animation stack (ONE system: GSAP+Lenis or motion/react — motion.md §2),
|
|
@@ -160,10 +191,11 @@ discovered at build time: if the signature is a visual OBJECT, it must be a
|
|
|
160
191
|
subject a stranger names correctly (3d.md §1–2's subject test). An abstract
|
|
161
192
|
crude coded organic form is a hard-gate failure. Generic spheres/orbs/rings/
|
|
162
193
|
blobs/toruses with no brand-native function remain invalid signatures. The
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
194
|
+
award work chooses the medium that makes the signature most legible and
|
|
195
|
+
concept-specific. A real GLB or rung-2 transparent photoreal cutout is preferred
|
|
196
|
+
when the signature is a recognizable physical subject; spatial typography,
|
|
197
|
+
layered photography, data structure, or an interactive instrument can be the
|
|
198
|
+
direct plan when the concept supports it. **Coded custom 3D is
|
|
167
199
|
capability-gated at the probe (§1):** offer/plan it only when the probe
|
|
168
200
|
verified an actual quality path — a real GLB in reach, image-gen for
|
|
169
201
|
albedo/label textures, an HDRI/environment source. No verified texture path
|
package/skill/dreative/SKILL.md
CHANGED
|
@@ -72,17 +72,23 @@ Detailed doctrine belongs in those references, not in this orchestration file.
|
|
|
72
72
|
work, show a page × skill matrix: the user can assign treatments to specific
|
|
73
73
|
pages, and approve routing for selected skills left unassigned. Every section
|
|
74
74
|
names its layout family, skills, assets, interactions, mobile translation,
|
|
75
|
-
fallback, and verification criteria.
|
|
75
|
+
fallback, and verification criteria. Expressive/award plans also include a
|
|
76
|
+
motion treatment for every major section: static composition, start/end
|
|
77
|
+
states, changes, pins, handoff, purpose, mechanism, mobile translation, and
|
|
78
|
+
reduced-motion state.
|
|
76
79
|
- Render a concise `.dreative/plan.md` for the user and for session re-entry.
|
|
77
80
|
|
|
78
81
|
The approved plan is a delivery contract. A section ends as `shipped`,
|
|
79
82
|
`fallback`, or `cut` with a reason—never silently omitted.
|
|
80
83
|
|
|
81
84
|
At `expressive` and `award`, choose one coherent quality path: `diversity`
|
|
82
|
-
(several mechanisms
|
|
83
|
-
mechanism evolving through
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
(several concept-related mechanisms/drivers) or `development` (one signature
|
|
86
|
+
mechanism evolving through materially different roles with quiet support).
|
|
87
|
+
Allocate a contextual motion-complexity budget: concentrate effort into a small
|
|
88
|
+
number of hero moments, name calm sections, and run the anti-default review.
|
|
89
|
+
Do not satisfy ambition through mechanism quotas. Experimental work explores one
|
|
90
|
+
non-obvious candidate per major section, then selects only the strongest two or
|
|
91
|
+
three to ship.
|
|
86
92
|
|
|
87
93
|
### 3.3 Select skills
|
|
88
94
|
|
|
@@ -117,8 +123,10 @@ must appear somewhere in the overall plan, but not on every page.
|
|
|
117
123
|
|
|
118
124
|
### 3.4 Build
|
|
119
125
|
|
|
120
|
-
- Prepare planned media before section implementation.
|
|
121
|
-
|
|
126
|
+
- Prepare planned media before section implementation. Treat generated stills as
|
|
127
|
+
raw material: decide whether each asset stays flat or needs cutouts, depth
|
|
128
|
+
layers, masks, fragments, variants, maps, or a frame sequence. Record the
|
|
129
|
+
decision, derivatives, rationale, and delivery status in the plan.
|
|
122
130
|
- Follow the chosen framework adapter and the repository's established patterns.
|
|
123
131
|
- Preserve the manifest unless the user explicitly approved a change; record
|
|
124
132
|
approved divergence with a reason.
|
|
@@ -151,9 +159,13 @@ Verification is evidence, not prose asserting that something was checked.
|
|
|
151
159
|
4. Check the console, links, forms, keyboard path, states, reduced motion,
|
|
152
160
|
responsive overflow, and pointer hit areas.
|
|
153
161
|
5. For motion/WebGL/video, record runtime evidence and performance numbers.
|
|
162
|
+
Capture initial, early, mid-transition, final, handoff, mobile, and
|
|
163
|
+
reduced-motion states; add pinned midpoint/exit states when pinning exists.
|
|
154
164
|
6. Reconcile every plan section and asset against what visibly shipped.
|
|
155
|
-
7.
|
|
156
|
-
|
|
165
|
+
7. At expressive/award, visually inspect the captured states, make at least one
|
|
166
|
+
refinement to timing, composition, readability, or continuity, and record it.
|
|
167
|
+
8. Write `.dreative/verify.json` and run `dreative audit`.
|
|
168
|
+
9. Fix every error. Warnings require either a fix or a recorded justification.
|
|
157
169
|
|
|
158
170
|
Every evidence-backed substitution references passing evidence IDs whose proof
|
|
159
171
|
meets its declared success criteria. Vague reasons such as "it did not fit",
|
|
@@ -21,6 +21,30 @@ in `recipeAccess`.
|
|
|
21
21
|
- Sticky CSS for simple pinning; cap pin length and remove/shorten on mobile.
|
|
22
22
|
- Velocity treatments use damped/clamped derivatives, never raw scroll deltas.
|
|
23
23
|
|
|
24
|
+
## Optional transformation patterns
|
|
25
|
+
|
|
26
|
+
Choose only patterns that express the concept:
|
|
27
|
+
|
|
28
|
+
- **Image fragmentation:** split a source into aligned DOM/SVG/Canvas tiles or
|
|
29
|
+
sampled pixels; disperse, filter, and reconstruct the actual image.
|
|
30
|
+
- **Composition handoff:** carry an object, mask, grid, or type structure from
|
|
31
|
+
one section into the next instead of resetting the page.
|
|
32
|
+
- **Layered image dive:** separate depth planes or use a depth map and move the
|
|
33
|
+
camera through the composition.
|
|
34
|
+
- **Mask migration:** evolve one mask window across images or sections.
|
|
35
|
+
- **Object persistence:** keep a key subject staged while its environment,
|
|
36
|
+
scale, supporting content, and berth change.
|
|
37
|
+
- **Generated-keyframe morph:** blend related still states through masking,
|
|
38
|
+
displacement, or a bounded frame sequence.
|
|
39
|
+
- **Pixel-to-object reconstruction:** assemble sampled text/image particles into
|
|
40
|
+
a recognizable subject.
|
|
41
|
+
- **Typography-to-image:** use readable type as mask, grid, path, or fragment
|
|
42
|
+
source that becomes imagery.
|
|
43
|
+
- **Environmental system:** drive texture, light, particles, type, and objects
|
|
44
|
+
from the same scroll/interaction state.
|
|
45
|
+
- **Editorial sequence:** treat a long section as one pinned timeline with
|
|
46
|
+
deliberate internal states rather than independent blocks.
|
|
47
|
+
|
|
24
48
|
## Type
|
|
25
49
|
|
|
26
50
|
- Split lines/words/characters only for selected display moments; keep accessible
|
|
@@ -24,6 +24,8 @@ Required top-level fields:
|
|
|
24
24
|
declared during planning
|
|
25
25
|
- `ruleExceptions`: bounded substitutions of evidence-backed defaults
|
|
26
26
|
- `creativeStrategy`: `diversity` or `development` at expressive/award tiers
|
|
27
|
+
- `motionComplexityBudget`: hero moments, calm sections, shared language,
|
|
28
|
+
device limits, progressive enhancement, and anti-default review
|
|
27
29
|
- `fontDecision`: candidates, reflex markers, ledger history, and justification
|
|
28
30
|
- `experimentalPlan`: per-section candidates and the selected two or three peaks
|
|
29
31
|
- `conceptExploration` and `recipeAccess`: proof recipes were loaded only after
|
|
@@ -34,11 +36,14 @@ and `mobile`, but optional treatments are assigned only where they serve that
|
|
|
34
36
|
page. A section may use only skills assigned to its parent page.
|
|
35
37
|
|
|
36
38
|
Each section requires `id`, `name`, `layoutFamily`, `skills`, `interactions`,
|
|
37
|
-
`mobile`, `fallback`, `verification`, `assets`, and `status`.
|
|
39
|
+
`mobile`, `fallback`, `verification`, `assets`, and `status`. At expressive/
|
|
40
|
+
award it also requires `motionTreatment`: class, static composition, start/end
|
|
41
|
+
states, changes, pins, handoff, purpose, mechanism, mobile, and reduced motion. Status is
|
|
38
42
|
`planned | shipped | fallback | cut`; fallback/cut requires `reason`.
|
|
39
43
|
|
|
40
|
-
Each asset requires `id`, `path`, `purpose`,
|
|
41
|
-
|
|
44
|
+
Each asset requires `id`, `path`, `purpose`, `importance`, `preparation`, and
|
|
45
|
+
`status`. Preparation records flat/decompose/variants/sequence, named
|
|
46
|
+
derivatives, and rationale. A shipped asset must exist when `dreative audit` runs.
|
|
42
47
|
|
|
43
48
|
### Routing authority
|
|
44
49
|
|
|
@@ -59,16 +64,16 @@ evidence IDs. The exception must predate `implementationStartedAt`.
|
|
|
59
64
|
|
|
60
65
|
```json
|
|
61
66
|
{
|
|
62
|
-
"ruleId": "
|
|
67
|
+
"ruleId": "media.keyAssetTreatment",
|
|
63
68
|
"decision": "substituted",
|
|
64
69
|
"declaredAt": "2026-01-01T00:30:00.000Z",
|
|
65
|
-
"reason": "The
|
|
70
|
+
"reason": "The archive contains no raster key imagery, so inventing photography would misrepresent the supplied material.",
|
|
66
71
|
"alternative": "A persistent variable-type specimen becomes index, spatial architecture, and interactive control.",
|
|
67
72
|
"successCriteria": [
|
|
68
|
-
"The specimen appears in
|
|
69
|
-
"Pointer and scroll input visibly reshape
|
|
73
|
+
"The specimen appears in materially different structural roles",
|
|
74
|
+
"Pointer and scroll input visibly reshape the specimen"
|
|
70
75
|
],
|
|
71
|
-
"evidenceIds": ["
|
|
76
|
+
"evidenceIds": ["type-system-desktop", "type-system-mobile"]
|
|
72
77
|
}
|
|
73
78
|
```
|
|
74
79
|
|
|
@@ -76,9 +81,15 @@ evidence IDs. The exception must predate `implementationStartedAt`.
|
|
|
76
81
|
|
|
77
82
|
At `expressive` and `award`, `creativeStrategy.path` is either:
|
|
78
83
|
|
|
79
|
-
- `diversity`:
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
- `diversity`: the concept-related mechanisms and drivers the experience needs;
|
|
85
|
+
or
|
|
86
|
+
- `development`: one named mechanism with materially different states and
|
|
87
|
+
quieter support.
|
|
88
|
+
|
|
89
|
+
`motionComplexityBudget` concentrates complexity into one to three hero moments
|
|
90
|
+
(normally two or three; one for a short page), names calm sections and the
|
|
91
|
+
shared language, and records the anti-default review. It is contextual, not a
|
|
92
|
+
mechanism quota.
|
|
82
93
|
|
|
83
94
|
When `experimental` is selected, `experimentalPlan` records one candidate for
|
|
84
95
|
every major section and marks only two or three as selected. Other sections
|
|
@@ -149,6 +160,11 @@ and rejects passing commands with nonzero exits or passing runs with console
|
|
|
149
160
|
errors. `fail` blocks completion. Use `not-applicable` only with a concrete
|
|
150
161
|
explanation and proof of why the criterion does not apply.
|
|
151
162
|
|
|
163
|
+
For expressive/award motion, tag evidence with `timelineState`: initial, early,
|
|
164
|
+
mid-transition, final, handoff, mobile, and reduced-motion; add pinned midpoint
|
|
165
|
+
and exit states when relevant. Record the post-inspection refinement in
|
|
166
|
+
`refinement` with findings, changes, and passing evidence IDs.
|
|
167
|
+
|
|
152
168
|
## `.dreative/ledger.json`
|
|
153
169
|
|
|
154
170
|
The ledger is append-only design memory:
|
|
@@ -105,9 +105,9 @@
|
|
|
105
105
|
"id": "award.spatialSignature",
|
|
106
106
|
"category": "evidence-backed-default",
|
|
107
107
|
"observedFailure": "Award builds used a generic orb or had no recurring dimensional system beyond the hero.",
|
|
108
|
-
"defaultRemedy": "
|
|
108
|
+
"defaultRemedy": "Plan one concept-specific spatial, media, typographic, or material signature that recurs and changes state.",
|
|
109
109
|
"exceptionAllowed": true,
|
|
110
|
-
"exceptionTest": "A named alternative creates equivalent
|
|
110
|
+
"exceptionTest": "A named alternative creates equivalent recurrence, interaction, visual dominance, and journey continuity on desktop and mobile.",
|
|
111
111
|
"reviewAfterRuns": 5
|
|
112
112
|
},
|
|
113
113
|
{
|
|
@@ -123,27 +123,27 @@
|
|
|
123
123
|
"id": "media.award.participatoryMoment",
|
|
124
124
|
"category": "evidence-backed-default",
|
|
125
125
|
"observedFailure": "Award media remained something visitors only watched while the page claimed immersion.",
|
|
126
|
-
"defaultRemedy": "
|
|
126
|
+
"defaultRemedy": "Create one concept-specific point where the visitor affects, enters, transforms, or controls the media's visual logic.",
|
|
127
127
|
"exceptionAllowed": true,
|
|
128
128
|
"exceptionTest": "The visitor affects, enters, transforms, scrubs, drags, refracts, or controls the media's visual logic with equal perceptual impact.",
|
|
129
129
|
"reviewAfterRuns": 5
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
|
-
"id": "media.
|
|
132
|
+
"id": "media.keyAssetTreatment",
|
|
133
133
|
"category": "evidence-backed-default",
|
|
134
134
|
"observedFailure": "Award builds shipped one set-piece while all other key images remained static or used basic fade-and-zoom.",
|
|
135
|
-
"defaultRemedy": "
|
|
135
|
+
"defaultRemedy": "Give every key image an explicit flat-or-decompose decision and concentrate meaningful transformation where the narrative changes state.",
|
|
136
136
|
"exceptionAllowed": true,
|
|
137
|
-
"exceptionTest": "
|
|
137
|
+
"exceptionTest": "A coherent alternative media system makes key imagery intentional while preserving calm sections and asset feasibility.",
|
|
138
138
|
"reviewAfterRuns": 5
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
|
-
"id": "motion.expressive.
|
|
141
|
+
"id": "motion.expressive.architecture",
|
|
142
142
|
"category": "evidence-backed-default",
|
|
143
143
|
"observedFailure": "Multiple sections repeated the same simple reveal or used unrelated effects only to satisfy a catalog.",
|
|
144
|
-
"defaultRemedy": "
|
|
144
|
+
"defaultRemedy": "Plan the page as connected visual states with a small number of hero moments, calm sections, and a concept-specific handoff language.",
|
|
145
145
|
"exceptionAllowed": true,
|
|
146
|
-
"exceptionTest": "
|
|
146
|
+
"exceptionTest": "A coherent signature mechanism develops through materially different states without requiring unrelated mechanisms or gimmick quotas.",
|
|
147
147
|
"reviewAfterRuns": 5
|
|
148
148
|
},
|
|
149
149
|
{
|
|
@@ -22,8 +22,10 @@ all lower-tier requirements.
|
|
|
22
22
|
## Expressive (`expressive`)
|
|
23
23
|
|
|
24
24
|
- Everything in Premium.
|
|
25
|
-
- A recorded diversity-or-development path:
|
|
26
|
-
or one signature mechanism developing through
|
|
25
|
+
- A recorded diversity-or-development path: concept-related mechanisms/drivers,
|
|
26
|
+
or one signature mechanism developing through materially different states.
|
|
27
|
+
- A section-by-section motion treatment and contextual complexity budget
|
|
28
|
+
concentrate structural/transformational motion into a few hero moments.
|
|
27
29
|
- At least one input-driven treatment; entrances alone do not satisfy the tier.
|
|
28
30
|
- Mobile translations and reduced-motion fallbacks are implemented, not noted.
|
|
29
31
|
- Frame behavior and heavy asset cost are measured.
|
|
@@ -32,11 +34,11 @@ all lower-tier requirements.
|
|
|
32
34
|
|
|
33
35
|
- Everything in Expressive.
|
|
34
36
|
- A distinctive persistent spatial, media, or material system shapes the journey.
|
|
35
|
-
- One unmistakable
|
|
36
|
-
and resilient.
|
|
37
|
+
- One unmistakable spatial, media, typographic, or material signature is
|
|
38
|
+
subject-honest, staged, and resilient. WebGL/3D is used only when justified.
|
|
37
39
|
- Runtime evidence covers effects, transferred weight, frame time, occlusion,
|
|
38
40
|
context loss/loading, and fallbacks.
|
|
39
|
-
- The page has
|
|
41
|
+
- The page has a small number of memorable moments without sacrificing function.
|
|
40
42
|
|
|
41
43
|
Do not force Award requirements on product dashboards, checkout, forms, or users
|
|
42
44
|
who asked for calm professional work. Ambition is a product decision, not a score.
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"implementationStartedAt": { "type": "string", "format": "date-time" },
|
|
49
49
|
"ruleExceptions": { "type": "array", "items": { "$ref": "#/$defs/ruleException" } },
|
|
50
50
|
"creativeStrategy": { "$ref": "#/$defs/creativeStrategy" },
|
|
51
|
+
"motionComplexityBudget": { "$ref": "#/$defs/motionComplexityBudget" },
|
|
51
52
|
"fontDecision": { "$ref": "#/$defs/fontDecision" },
|
|
52
53
|
"experimentalPlan": { "$ref": "#/$defs/experimentalPlan" },
|
|
53
54
|
"conceptExploration": { "$ref": "#/$defs/conceptExploration" },
|
|
@@ -92,8 +93,8 @@
|
|
|
92
93
|
"required": ["path", "mechanisms", "drivers"],
|
|
93
94
|
"properties": {
|
|
94
95
|
"path": { "const": "diversity" },
|
|
95
|
-
"mechanisms": { "type": "array", "minItems":
|
|
96
|
-
"drivers": { "type": "array", "minItems":
|
|
96
|
+
"mechanisms": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
97
|
+
"drivers": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
97
98
|
}
|
|
98
99
|
},
|
|
99
100
|
{
|
|
@@ -103,13 +104,50 @@
|
|
|
103
104
|
"properties": {
|
|
104
105
|
"path": { "const": "development" },
|
|
105
106
|
"signatureMechanism": { "type": "string", "minLength": 1 },
|
|
106
|
-
"states": { "type": "array", "minItems":
|
|
107
|
-
"secondaryMechanisms": { "type": "array", "
|
|
108
|
-
"drivers": { "type": "array", "minItems":
|
|
107
|
+
"states": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "type": "string", "minLength": 12 } },
|
|
108
|
+
"secondaryMechanisms": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
109
|
+
"drivers": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
112
|
]
|
|
112
113
|
},
|
|
114
|
+
"motionComplexityBudget": {
|
|
115
|
+
"type": "object",
|
|
116
|
+
"additionalProperties": false,
|
|
117
|
+
"required": ["heroMoments", "calmSectionIds", "sharedLanguage", "deviceLimits", "progressiveEnhancement", "antiDefaultReview"],
|
|
118
|
+
"properties": {
|
|
119
|
+
"heroMoments": {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"minItems": 1,
|
|
122
|
+
"maxItems": 3,
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"additionalProperties": false,
|
|
126
|
+
"required": ["sectionId", "reason"],
|
|
127
|
+
"properties": {
|
|
128
|
+
"sectionId": { "type": "string", "minLength": 1 },
|
|
129
|
+
"reason": { "type": "string", "minLength": 20 }
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"calmSectionIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
134
|
+
"sharedLanguage": { "type": "string", "minLength": 20 },
|
|
135
|
+
"deviceLimits": { "type": "string", "minLength": 20 },
|
|
136
|
+
"progressiveEnhancement": { "type": "string", "minLength": 20 },
|
|
137
|
+
"antiDefaultReview": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"required": ["basicMotionAssessment", "compositionHandoff", "visualStateChange", "conceptSpecificity", "memorableMoment"],
|
|
141
|
+
"properties": {
|
|
142
|
+
"basicMotionAssessment": { "type": "string", "minLength": 20 },
|
|
143
|
+
"compositionHandoff": { "type": "string", "minLength": 20 },
|
|
144
|
+
"visualStateChange": { "type": "string", "minLength": 20 },
|
|
145
|
+
"conceptSpecificity": { "type": "string", "minLength": 20 },
|
|
146
|
+
"memorableMoment": { "type": "string", "minLength": 20 }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
113
151
|
"fontDecision": {
|
|
114
152
|
"type": "object",
|
|
115
153
|
"additionalProperties": false,
|
|
@@ -199,11 +237,22 @@
|
|
|
199
237
|
"asset": {
|
|
200
238
|
"type": "object",
|
|
201
239
|
"additionalProperties": false,
|
|
202
|
-
"required": ["id", "path", "purpose", "status"],
|
|
240
|
+
"required": ["id", "path", "purpose", "importance", "preparation", "status"],
|
|
203
241
|
"properties": {
|
|
204
242
|
"id": { "type": "string", "minLength": 1 },
|
|
205
243
|
"path": { "type": "string", "minLength": 1 },
|
|
206
244
|
"purpose": { "type": "string", "minLength": 1 },
|
|
245
|
+
"importance": { "enum": ["supporting", "key"] },
|
|
246
|
+
"preparation": {
|
|
247
|
+
"type": "object",
|
|
248
|
+
"additionalProperties": false,
|
|
249
|
+
"required": ["decision", "derivatives", "rationale"],
|
|
250
|
+
"properties": {
|
|
251
|
+
"decision": { "enum": ["flat", "decompose", "variants", "sequence"] },
|
|
252
|
+
"derivatives": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
253
|
+
"rationale": { "type": "string", "minLength": 12 }
|
|
254
|
+
}
|
|
255
|
+
},
|
|
207
256
|
"status": { "$ref": "#/$defs/status" },
|
|
208
257
|
"reason": { "type": "string", "minLength": 1 }
|
|
209
258
|
}
|
|
@@ -218,6 +267,7 @@
|
|
|
218
267
|
"layoutFamily": { "type": "string", "minLength": 1 },
|
|
219
268
|
"skills": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/skill" } },
|
|
220
269
|
"interactions": { "type": "array", "items": { "type": "string" } },
|
|
270
|
+
"motionTreatment": { "$ref": "#/$defs/motionTreatment" },
|
|
221
271
|
"mobile": { "type": "string", "minLength": 1 },
|
|
222
272
|
"fallback": { "type": "string", "minLength": 1 },
|
|
223
273
|
"verification": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
@@ -226,6 +276,24 @@
|
|
|
226
276
|
"reason": { "type": "string", "minLength": 1 }
|
|
227
277
|
}
|
|
228
278
|
},
|
|
279
|
+
"motionTreatment": {
|
|
280
|
+
"type": "object",
|
|
281
|
+
"additionalProperties": false,
|
|
282
|
+
"required": ["class", "staticComposition", "startState", "endState", "changes", "pinnedElements", "handoff", "purpose", "mechanism", "mobile", "reducedMotion"],
|
|
283
|
+
"properties": {
|
|
284
|
+
"class": { "enum": ["none", "decorative", "structural", "transformational"] },
|
|
285
|
+
"staticComposition": { "type": "string", "minLength": 12 },
|
|
286
|
+
"startState": { "type": "string", "minLength": 12 },
|
|
287
|
+
"endState": { "type": "string", "minLength": 12 },
|
|
288
|
+
"changes": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
289
|
+
"pinnedElements": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
290
|
+
"handoff": { "type": "string", "minLength": 12 },
|
|
291
|
+
"purpose": { "type": "string", "minLength": 12 },
|
|
292
|
+
"mechanism": { "type": "string", "minLength": 12 },
|
|
293
|
+
"mobile": { "type": "string", "minLength": 12 },
|
|
294
|
+
"reducedMotion": { "type": "string", "minLength": 12 }
|
|
295
|
+
}
|
|
296
|
+
},
|
|
229
297
|
"page": {
|
|
230
298
|
"type": "object",
|
|
231
299
|
"additionalProperties": false,
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"criterion": { "type": "string", "minLength": 1 },
|
|
20
20
|
"status": { "enum": ["pass", "fail", "not-applicable"] },
|
|
21
21
|
"evidence": { "type": "string", "minLength": 1 },
|
|
22
|
+
"timelineState": {
|
|
23
|
+
"enum": ["initial", "early", "mid-transition", "final", "handoff", "pinned-midpoint", "pinned-exit", "mobile", "reduced-motion"]
|
|
24
|
+
},
|
|
22
25
|
"proof": {
|
|
23
26
|
"type": "object",
|
|
24
27
|
"additionalProperties": false,
|
|
@@ -56,6 +59,17 @@
|
|
|
56
59
|
}
|
|
57
60
|
}
|
|
58
61
|
}
|
|
62
|
+
},
|
|
63
|
+
"refinement": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": false,
|
|
66
|
+
"required": ["inspectedAt", "findings", "changes", "evidenceIds"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"inspectedAt": { "type": "string", "format": "date-time" },
|
|
69
|
+
"findings": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
70
|
+
"changes": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
71
|
+
"evidenceIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
72
|
+
}
|
|
59
73
|
}
|
|
60
74
|
}
|
|
61
75
|
}
|