dreative 0.5.2 → 0.5.4
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/audit.js +87 -11
- package/dist/cli/audit.test.js +40 -1
- package/dist/cli/docsCheck.js +1 -1
- package/dist/server/index.js +10 -5
- package/dist/shared/artifacts.js +157 -4
- package/dist/shared/artifacts.test.js +101 -0
- package/dist/shared/design.js +212 -26
- package/dist/shared/design.test.js +70 -0
- package/dist/shared/ruleSystem.js +101 -11
- package/dist/shared/ruleSystem.test.js +94 -19
- package/dist/ui/assets/{index-CKwmbx2j.js → index-BQhYTdSa.js} +11 -11
- package/dist/ui/index.html +1 -1
- package/package.json +5 -5
- package/skill/dreative/DESIGN.md +47 -35
- package/skill/dreative/PLAN.md +97 -55
- package/skill/dreative/SKILL.md +35 -12
- package/skill/dreative/recipes/motion-recipes.md +24 -0
- package/skill/dreative/references/ARTIFACTS.md +52 -18
- package/skill/dreative/references/RULES.json +9 -9
- package/skill/dreative/references/TIERS.md +14 -6
- package/skill/dreative/schemas/plan.schema.json +161 -11
- package/skill/dreative/schemas/verify.schema.json +22 -2
- package/skill/dreative/skills/media.md +28 -14
- package/skill/dreative/skills/mobile.md +19 -13
- package/skill/dreative/skills/motion.md +45 -8
|
@@ -7,9 +7,9 @@ All paths are relative to the target project.
|
|
|
7
7
|
|
|
8
8
|
Required top-level fields:
|
|
9
9
|
|
|
10
|
-
- `version:
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
- `version: 3`, `doctrineVersion: 3`. Legacy v2 plans remain readable only for
|
|
11
|
+
compatibility and receive a migration warning; they do not satisfy v3 depth,
|
|
12
|
+
mobile, expression, or evidence guarantees.
|
|
13
13
|
- `request`, `createdAt`
|
|
14
14
|
- `tier`: `solid | premium | expressive | award`
|
|
15
15
|
- `depth`: `restyle | relayout | restructure | reimagine`
|
|
@@ -17,6 +17,8 @@ Required top-level fields:
|
|
|
17
17
|
- `skillPolicy`: hybrid routing policy, global foundations, explicit user page
|
|
18
18
|
assignments, and `routingApproved: true`
|
|
19
19
|
- `designRead`: `{ register, concept, signature }`
|
|
20
|
+
- `coherence`: global visual/interaction languages, shared primitives,
|
|
21
|
+
page-specific register/task models, continuity, and prohibited repeated shells
|
|
20
22
|
- `preservationManifest`: normally `.dreative/preservation.json`
|
|
21
23
|
- `decisionLedger`: normally `.dreative/ledger.json`
|
|
22
24
|
- `pages`: ordered pages, each with its assigned skills and delivery sections
|
|
@@ -24,6 +26,8 @@ Required top-level fields:
|
|
|
24
26
|
declared during planning
|
|
25
27
|
- `ruleExceptions`: bounded substitutions of evidence-backed defaults
|
|
26
28
|
- `creativeStrategy`: `diversity` or `development` at expressive/award tiers
|
|
29
|
+
- `motionComplexityBudget`: hero moments, calm sections, shared language,
|
|
30
|
+
device limits, progressive enhancement, and anti-default review
|
|
27
31
|
- `fontDecision`: candidates, reflex markers, ledger history, and justification
|
|
28
32
|
- `experimentalPlan`: per-section candidates and the selected two or three peaks
|
|
29
33
|
- `conceptExploration` and `recipeAccess`: proof recipes were loaded only after
|
|
@@ -31,14 +35,23 @@ Required top-level fields:
|
|
|
31
35
|
|
|
32
36
|
Every selected skill must appear on at least one page. Every page includes `ux`
|
|
33
37
|
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.
|
|
38
|
+
page. A section may use only skills assigned to its parent page. Each page also
|
|
39
|
+
requires `register`, the depth-derived `sourceStrategy`, a concrete
|
|
40
|
+
`structuralDelta`, and a page-level `mobileBlueprint`. Expressive/award pages
|
|
41
|
+
require an `expression` contract or `intentionalCalm`; at least one page across
|
|
42
|
+
the product must carry authored expression.
|
|
35
43
|
|
|
36
44
|
Each section requires `id`, `name`, `layoutFamily`, `skills`, `interactions`,
|
|
37
|
-
`mobile`, `fallback`, `verification`, `assets`, and `status`.
|
|
45
|
+
`mobile`, `fallback`, typed `verification`, `assets`, and `status`. Verification
|
|
46
|
+
criteria include a stable id, claim, evidence kind, page/section, and required
|
|
47
|
+
viewport classes. At expressive/
|
|
48
|
+
award it also requires `motionTreatment`: class, static composition, start/end
|
|
49
|
+
states, changes, pins, handoff, purpose, mechanism, mobile, and reduced motion. Status is
|
|
38
50
|
`planned | shipped | fallback | cut`; fallback/cut requires `reason`.
|
|
39
51
|
|
|
40
|
-
Each asset requires `id`, `path`, `purpose`,
|
|
41
|
-
|
|
52
|
+
Each asset requires `id`, `path`, `purpose`, `importance`, `preparation`, and
|
|
53
|
+
`status`. Preparation records flat/decompose/variants/sequence, named
|
|
54
|
+
derivatives, and rationale. A shipped asset must exist when `dreative audit` runs.
|
|
42
55
|
|
|
43
56
|
### Routing authority
|
|
44
57
|
|
|
@@ -59,16 +72,16 @@ evidence IDs. The exception must predate `implementationStartedAt`.
|
|
|
59
72
|
|
|
60
73
|
```json
|
|
61
74
|
{
|
|
62
|
-
"ruleId": "
|
|
75
|
+
"ruleId": "media.keyAssetTreatment",
|
|
63
76
|
"decision": "substituted",
|
|
64
77
|
"declaredAt": "2026-01-01T00:30:00.000Z",
|
|
65
|
-
"reason": "The
|
|
78
|
+
"reason": "The archive contains no raster key imagery, so inventing photography would misrepresent the supplied material.",
|
|
66
79
|
"alternative": "A persistent variable-type specimen becomes index, spatial architecture, and interactive control.",
|
|
67
80
|
"successCriteria": [
|
|
68
|
-
"The specimen appears in
|
|
69
|
-
"Pointer and scroll input visibly reshape
|
|
81
|
+
"The specimen appears in materially different structural roles",
|
|
82
|
+
"Pointer and scroll input visibly reshape the specimen"
|
|
70
83
|
],
|
|
71
|
-
"evidenceIds": ["
|
|
84
|
+
"evidenceIds": ["type-system-desktop", "type-system-mobile"]
|
|
72
85
|
}
|
|
73
86
|
```
|
|
74
87
|
|
|
@@ -76,9 +89,15 @@ evidence IDs. The exception must predate `implementationStartedAt`.
|
|
|
76
89
|
|
|
77
90
|
At `expressive` and `award`, `creativeStrategy.path` is either:
|
|
78
91
|
|
|
79
|
-
- `diversity`:
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
- `diversity`: the concept-related mechanisms and drivers the experience needs;
|
|
93
|
+
or
|
|
94
|
+
- `development`: one named mechanism with materially different states and
|
|
95
|
+
quieter support.
|
|
96
|
+
|
|
97
|
+
`motionComplexityBudget` concentrates complexity into one to three hero moments
|
|
98
|
+
(normally two or three; one for a short page), names calm sections and the
|
|
99
|
+
shared language, and records the anti-default review. It is contextual, not a
|
|
100
|
+
mechanism quota.
|
|
82
101
|
|
|
83
102
|
When `experimental` is selected, `experimentalPlan` records one candidate for
|
|
84
103
|
every major section and marks only two or three as selected. Other sections
|
|
@@ -97,7 +116,7 @@ category from the registry. Repeating a recent display font needs an additional
|
|
|
97
116
|
|
|
98
117
|
```json
|
|
99
118
|
{
|
|
100
|
-
"version":
|
|
119
|
+
"version": 2,
|
|
101
120
|
"createdAt": "2026-01-01T00:00:00.000Z",
|
|
102
121
|
"items": [
|
|
103
122
|
{
|
|
@@ -127,6 +146,11 @@ Schema: `schemas/verify.schema.json`.
|
|
|
127
146
|
{
|
|
128
147
|
"id": "mobile-nav",
|
|
129
148
|
"criterion": "Mobile navigation opens and closes",
|
|
149
|
+
"kind": "interaction",
|
|
150
|
+
"criterionId": "navigation-mobile",
|
|
151
|
+
"pageId": "home",
|
|
152
|
+
"sectionId": "navigation",
|
|
153
|
+
"viewportClass": "mobile",
|
|
130
154
|
"status": "pass",
|
|
131
155
|
"evidence": "Escape closes and focus returns to trigger",
|
|
132
156
|
"proof": {
|
|
@@ -142,13 +166,22 @@ Schema: `schemas/verify.schema.json`.
|
|
|
142
166
|
}
|
|
143
167
|
```
|
|
144
168
|
|
|
145
|
-
Every evidence row
|
|
169
|
+
Every evidence row is joined to its planned criterion by id, page, section,
|
|
170
|
+
evidence kind, and viewport class. Every important page requires desktop
|
|
171
|
+
(approximately 1280/1440px), mobile (approximately 390×844), and narrow-mobile
|
|
172
|
+
(approximately 320px) evidence; deep redesigns also require structural-depth
|
|
173
|
+
evidence and every page requires preservation evidence. Every row requires a timestamp and concrete proof: an existing artifact
|
|
146
174
|
path, command + exit code, tested URL/console count, FPS/frame-time measurement,
|
|
147
175
|
or Playwright test identifier. `dreative audit` checks referenced artifact paths
|
|
148
176
|
and rejects passing commands with nonzero exits or passing runs with console
|
|
149
177
|
errors. `fail` blocks completion. Use `not-applicable` only with a concrete
|
|
150
178
|
explanation and proof of why the criterion does not apply.
|
|
151
179
|
|
|
180
|
+
For expressive/award motion, tag evidence with `timelineState`: initial, early,
|
|
181
|
+
mid-transition, final, handoff, mobile, and reduced-motion; add pinned midpoint
|
|
182
|
+
and exit states when relevant. Record the post-inspection refinement in
|
|
183
|
+
`refinement` with findings, changes, and passing evidence IDs.
|
|
184
|
+
|
|
152
185
|
## `.dreative/ledger.json`
|
|
153
186
|
|
|
154
187
|
The ledger is append-only design memory:
|
|
@@ -176,5 +209,6 @@ store secrets, personal notes, or unrelated conversation.
|
|
|
176
209
|
## Audit
|
|
177
210
|
|
|
178
211
|
Run `dreative audit`. It validates schemas, skill dependency closure, section
|
|
179
|
-
completion, shipped assets, preservation needles,
|
|
212
|
+
completion, shipped assets, preservation needles, exact criterion/evidence
|
|
213
|
+
associations, required viewports, structural depth, anti-slop warnings, and the
|
|
180
214
|
decision ledger. `--json` emits a machine-readable report.
|
|
@@ -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,9 +22,15 @@ 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
|
|
27
|
-
-
|
|
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.
|
|
29
|
+
- At least one project-specific mechanism communicates content, state,
|
|
30
|
+
progression, selection, navigation, transformation, or spatial relationship.
|
|
31
|
+
Entrances, hover elevation, gradients, and large type alone do not satisfy
|
|
32
|
+
the tier. A calm page may document why while the wider product retains a
|
|
33
|
+
coherent authored expression system.
|
|
28
34
|
- Mobile translations and reduced-motion fallbacks are implemented, not noted.
|
|
29
35
|
- Frame behavior and heavy asset cost are measured.
|
|
30
36
|
|
|
@@ -32,11 +38,13 @@ all lower-tier requirements.
|
|
|
32
38
|
|
|
33
39
|
- Everything in Expressive.
|
|
34
40
|
- A distinctive persistent spatial, media, or material system shapes the journey.
|
|
35
|
-
- One unmistakable
|
|
36
|
-
and resilient.
|
|
41
|
+
- One unmistakable spatial, media, typographic, or material signature is
|
|
42
|
+
subject-honest, staged, and resilient. WebGL/3D is used only when justified.
|
|
37
43
|
- Runtime evidence covers effects, transferred weight, frame time, occlusion,
|
|
38
44
|
context loss/loading, and fallbacks.
|
|
39
|
-
- The page has
|
|
45
|
+
- The page has a small number of memorable moments without sacrificing function.
|
|
40
46
|
|
|
41
47
|
Do not force Award requirements on product dashboards, checkout, forms, or users
|
|
42
48
|
who asked for calm professional work. Ambition is a product decision, not a score.
|
|
49
|
+
Transformation depth remains separate: `restructure + solid` changes page
|
|
50
|
+
architecture, while `restyle + expressive` may retain it honestly.
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
"title": "Dreative Multi-Page Direct Design Plan",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"additionalProperties": false,
|
|
7
|
-
"required": ["version", "request", "createdAt", "tier", "depth", "skills", "skillPolicy", "designRead", "pages", "preservationManifest", "decisionLedger"],
|
|
7
|
+
"required": ["version", "doctrineVersion", "request", "createdAt", "tier", "depth", "skills", "skillPolicy", "designRead", "coherence", "pages", "preservationManifest", "decisionLedger"],
|
|
8
8
|
"properties": {
|
|
9
|
-
"version": { "const":
|
|
10
|
-
"doctrineVersion": { "const":
|
|
9
|
+
"version": { "const": 3 },
|
|
10
|
+
"doctrineVersion": { "const": 3 },
|
|
11
11
|
"request": { "type": "string", "minLength": 1 },
|
|
12
12
|
"createdAt": { "type": "string", "format": "date-time" },
|
|
13
13
|
"tier": { "enum": ["solid", "premium", "expressive", "award"] },
|
|
@@ -48,10 +48,12 @@
|
|
|
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" },
|
|
54
55
|
"recipeAccess": { "type": "array", "items": { "$ref": "#/$defs/recipeAccess" } },
|
|
56
|
+
"coherence": { "$ref": "#/$defs/coherence" },
|
|
55
57
|
"pages": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/page" } },
|
|
56
58
|
"preservationManifest": { "type": "string", "minLength": 1 },
|
|
57
59
|
"decisionLedger": { "type": "string", "minLength": 1 }
|
|
@@ -92,8 +94,8 @@
|
|
|
92
94
|
"required": ["path", "mechanisms", "drivers"],
|
|
93
95
|
"properties": {
|
|
94
96
|
"path": { "const": "diversity" },
|
|
95
|
-
"mechanisms": { "type": "array", "minItems":
|
|
96
|
-
"drivers": { "type": "array", "minItems":
|
|
97
|
+
"mechanisms": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
98
|
+
"drivers": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
97
99
|
}
|
|
98
100
|
},
|
|
99
101
|
{
|
|
@@ -103,13 +105,50 @@
|
|
|
103
105
|
"properties": {
|
|
104
106
|
"path": { "const": "development" },
|
|
105
107
|
"signatureMechanism": { "type": "string", "minLength": 1 },
|
|
106
|
-
"states": { "type": "array", "minItems":
|
|
107
|
-
"secondaryMechanisms": { "type": "array", "
|
|
108
|
-
"drivers": { "type": "array", "minItems":
|
|
108
|
+
"states": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "type": "string", "minLength": 12 } },
|
|
109
|
+
"secondaryMechanisms": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
110
|
+
"drivers": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
113
|
]
|
|
112
114
|
},
|
|
115
|
+
"motionComplexityBudget": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"required": ["heroMoments", "calmSectionIds", "sharedLanguage", "deviceLimits", "progressiveEnhancement", "antiDefaultReview"],
|
|
119
|
+
"properties": {
|
|
120
|
+
"heroMoments": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"minItems": 1,
|
|
123
|
+
"maxItems": 3,
|
|
124
|
+
"items": {
|
|
125
|
+
"type": "object",
|
|
126
|
+
"additionalProperties": false,
|
|
127
|
+
"required": ["sectionId", "reason"],
|
|
128
|
+
"properties": {
|
|
129
|
+
"sectionId": { "type": "string", "minLength": 1 },
|
|
130
|
+
"reason": { "type": "string", "minLength": 20 }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"calmSectionIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
135
|
+
"sharedLanguage": { "type": "string", "minLength": 20 },
|
|
136
|
+
"deviceLimits": { "type": "string", "minLength": 20 },
|
|
137
|
+
"progressiveEnhancement": { "type": "string", "minLength": 20 },
|
|
138
|
+
"antiDefaultReview": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"additionalProperties": false,
|
|
141
|
+
"required": ["basicMotionAssessment", "compositionHandoff", "visualStateChange", "conceptSpecificity", "memorableMoment"],
|
|
142
|
+
"properties": {
|
|
143
|
+
"basicMotionAssessment": { "type": "string", "minLength": 20 },
|
|
144
|
+
"compositionHandoff": { "type": "string", "minLength": 20 },
|
|
145
|
+
"visualStateChange": { "type": "string", "minLength": 20 },
|
|
146
|
+
"conceptSpecificity": { "type": "string", "minLength": 20 },
|
|
147
|
+
"memorableMoment": { "type": "string", "minLength": 20 }
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
113
152
|
"fontDecision": {
|
|
114
153
|
"type": "object",
|
|
115
154
|
"additionalProperties": false,
|
|
@@ -199,11 +238,22 @@
|
|
|
199
238
|
"asset": {
|
|
200
239
|
"type": "object",
|
|
201
240
|
"additionalProperties": false,
|
|
202
|
-
"required": ["id", "path", "purpose", "status"],
|
|
241
|
+
"required": ["id", "path", "purpose", "importance", "preparation", "status"],
|
|
203
242
|
"properties": {
|
|
204
243
|
"id": { "type": "string", "minLength": 1 },
|
|
205
244
|
"path": { "type": "string", "minLength": 1 },
|
|
206
245
|
"purpose": { "type": "string", "minLength": 1 },
|
|
246
|
+
"importance": { "enum": ["supporting", "key"] },
|
|
247
|
+
"preparation": {
|
|
248
|
+
"type": "object",
|
|
249
|
+
"additionalProperties": false,
|
|
250
|
+
"required": ["decision", "derivatives", "rationale"],
|
|
251
|
+
"properties": {
|
|
252
|
+
"decision": { "enum": ["flat", "decompose", "variants", "sequence"] },
|
|
253
|
+
"derivatives": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
254
|
+
"rationale": { "type": "string", "minLength": 12 }
|
|
255
|
+
}
|
|
256
|
+
},
|
|
207
257
|
"status": { "$ref": "#/$defs/status" },
|
|
208
258
|
"reason": { "type": "string", "minLength": 1 }
|
|
209
259
|
}
|
|
@@ -218,21 +268,121 @@
|
|
|
218
268
|
"layoutFamily": { "type": "string", "minLength": 1 },
|
|
219
269
|
"skills": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/skill" } },
|
|
220
270
|
"interactions": { "type": "array", "items": { "type": "string" } },
|
|
271
|
+
"motionTreatment": { "$ref": "#/$defs/motionTreatment" },
|
|
221
272
|
"mobile": { "type": "string", "minLength": 1 },
|
|
222
273
|
"fallback": { "type": "string", "minLength": 1 },
|
|
223
|
-
"verification": { "type": "array", "minItems": 1, "items": { "
|
|
274
|
+
"verification": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/verificationCriterion" } },
|
|
224
275
|
"assets": { "type": "array", "items": { "$ref": "#/$defs/asset" } },
|
|
225
276
|
"status": { "$ref": "#/$defs/status" },
|
|
226
277
|
"reason": { "type": "string", "minLength": 1 }
|
|
227
278
|
}
|
|
228
279
|
},
|
|
280
|
+
"motionTreatment": {
|
|
281
|
+
"type": "object",
|
|
282
|
+
"additionalProperties": false,
|
|
283
|
+
"required": ["class", "staticComposition", "startState", "endState", "changes", "pinnedElements", "handoff", "purpose", "mechanism", "mobile", "reducedMotion"],
|
|
284
|
+
"properties": {
|
|
285
|
+
"class": { "enum": ["none", "decorative", "structural", "transformational"] },
|
|
286
|
+
"staticComposition": { "type": "string", "minLength": 12 },
|
|
287
|
+
"startState": { "type": "string", "minLength": 12 },
|
|
288
|
+
"endState": { "type": "string", "minLength": 12 },
|
|
289
|
+
"changes": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
290
|
+
"pinnedElements": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
291
|
+
"handoff": { "type": "string", "minLength": 12 },
|
|
292
|
+
"purpose": { "type": "string", "minLength": 12 },
|
|
293
|
+
"mechanism": { "type": "string", "minLength": 12 },
|
|
294
|
+
"mobile": { "type": "string", "minLength": 12 },
|
|
295
|
+
"reducedMotion": { "type": "string", "minLength": 12 }
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"verificationCriterion": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"additionalProperties": false,
|
|
301
|
+
"required": ["id", "claim", "kind", "pageId", "viewports"],
|
|
302
|
+
"properties": {
|
|
303
|
+
"id": { "type": "string", "minLength": 1 },
|
|
304
|
+
"claim": { "type": "string", "minLength": 12 },
|
|
305
|
+
"kind": { "enum": ["visual", "interaction", "responsive", "preservation", "structural-depth"] },
|
|
306
|
+
"pageId": { "type": "string", "minLength": 1 },
|
|
307
|
+
"sectionId": { "type": "string", "minLength": 1 },
|
|
308
|
+
"viewports": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["desktop", "mobile", "narrow-mobile", "non-visual"] } }
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
"pageRegister": { "enum": ["marketing-storytelling", "discovery-browse", "task-transaction", "account-status", "administration", "data-dense-utility", "authentication", "system-state"] },
|
|
312
|
+
"structuralDelta": {
|
|
313
|
+
"type": "object",
|
|
314
|
+
"additionalProperties": false,
|
|
315
|
+
"required": ["existingModel", "proposedModel", "existingParadigm", "proposedParadigm", "materialChanges", "survivingBoundaries", "rebuiltBoundaries", "preservedContracts", "retainedPatterns", "forbiddenCarryovers", "depthHonesty"],
|
|
316
|
+
"properties": {
|
|
317
|
+
"existingModel": { "type": "string", "minLength": 12 },
|
|
318
|
+
"proposedModel": { "type": "string", "minLength": 12 },
|
|
319
|
+
"existingParadigm": { "type": "string", "minLength": 12 },
|
|
320
|
+
"proposedParadigm": { "type": "string", "minLength": 12 },
|
|
321
|
+
"materialChanges": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 12 } },
|
|
322
|
+
"survivingBoundaries": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
323
|
+
"rebuiltBoundaries": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
324
|
+
"preservedContracts": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
325
|
+
"retainedPatterns": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["pattern", "rationale"], "properties": { "pattern": { "type": "string", "minLength": 1 }, "rationale": { "type": "string", "minLength": 12 } } } },
|
|
326
|
+
"forbiddenCarryovers": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
327
|
+
"depthHonesty": { "type": "string", "minLength": 20 }
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
"mobileBlueprint": {
|
|
331
|
+
"type": "object",
|
|
332
|
+
"additionalProperties": false,
|
|
333
|
+
"required": ["primaryTask", "firstViewportPurpose", "contentOrder", "beforeFirstScroll", "primaryThumbAction", "stickyElements", "safeArea", "navigationModel", "mobileOnlyComposition", "desktopTranslation", "mediaStrategy", "motionStrategy", "keyboardAndForms", "composition390", "fallback320", "stackingRejection", "verificationChecks"],
|
|
334
|
+
"properties": {
|
|
335
|
+
"primaryTask": { "type": "string", "minLength": 1 },
|
|
336
|
+
"firstViewportPurpose": { "type": "string", "minLength": 12 },
|
|
337
|
+
"contentOrder": { "type": "array", "minItems": 2, "items": { "type": "string", "minLength": 1 } },
|
|
338
|
+
"beforeFirstScroll": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
339
|
+
"primaryThumbAction": { "type": "object", "additionalProperties": false, "required": ["action", "placement"], "properties": { "action": { "type": "string", "minLength": 1 }, "placement": { "type": "string", "minLength": 12 } } },
|
|
340
|
+
"stickyElements": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
341
|
+
"safeArea": { "type": "string", "minLength": 12 },
|
|
342
|
+
"navigationModel": { "type": "string", "minLength": 12 },
|
|
343
|
+
"mobileOnlyComposition": { "type": "string", "minLength": 12 },
|
|
344
|
+
"desktopTranslation": { "type": "object", "additionalProperties": false, "required": ["retained", "translated", "removed", "replaced"], "properties": { "retained": { "type": "array", "items": { "type": "string" } }, "translated": { "type": "array", "items": { "type": "string" } }, "removed": { "type": "array", "items": { "type": "string" } }, "replaced": { "type": "array", "items": { "type": "string" } } } },
|
|
345
|
+
"mediaStrategy": { "type": "string", "minLength": 12 },
|
|
346
|
+
"motionStrategy": { "type": "string", "minLength": 12 },
|
|
347
|
+
"keyboardAndForms": { "type": "string", "minLength": 12 },
|
|
348
|
+
"composition390": { "type": "string", "minLength": 12 },
|
|
349
|
+
"fallback320": { "type": "string", "minLength": 12 },
|
|
350
|
+
"stackingRejection": { "type": "string", "minLength": 12 },
|
|
351
|
+
"verificationChecks": { "type": "array", "minItems": 13, "uniqueItems": true, "items": { "enum": ["no-horizontal-overflow", "no-clipped-content", "fixed-elements-clear-content", "safe-area-spacing", "primary-task-discoverable", "primary-action-reachable", "touch-targets", "software-keyboard-usable", "no-hover-only", "intentional-mobile-composition", "mobile-content-order", "motion-media-translated", "no-decorative-task-blocker"] } }
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"expression": {
|
|
355
|
+
"type": "object",
|
|
356
|
+
"additionalProperties": false,
|
|
357
|
+
"required": ["mechanism", "communicates", "projectFit", "location", "mobileTranslation", "reducedMotion", "fallback", "verification"],
|
|
358
|
+
"properties": {
|
|
359
|
+
"mechanism": { "type": "string", "minLength": 12 }, "communicates": { "type": "string", "minLength": 12 }, "projectFit": { "type": "string", "minLength": 12 }, "location": { "type": "string", "minLength": 12 }, "mobileTranslation": { "type": "string", "minLength": 12 }, "reducedMotion": { "type": "string", "minLength": 12 }, "fallback": { "type": "string", "minLength": 12 }, "verification": { "type": "string", "minLength": 12 }
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
"coherence": {
|
|
363
|
+
"type": "object", "additionalProperties": false,
|
|
364
|
+
"required": ["globalVisualLanguage", "globalInteractionLanguage", "sharedPrimitives", "pageSpecificCompositions", "crossPageContinuity", "prohibitedRepeatedShells"],
|
|
365
|
+
"properties": {
|
|
366
|
+
"globalVisualLanguage": { "type": "string", "minLength": 12 }, "globalInteractionLanguage": { "type": "string", "minLength": 12 },
|
|
367
|
+
"sharedPrimitives": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
368
|
+
"pageSpecificCompositions": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["pageId", "register", "taskModel", "expressionLevel"], "properties": { "pageId": { "type": "string", "minLength": 1 }, "register": { "$ref": "#/$defs/pageRegister" }, "taskModel": { "type": "string", "minLength": 12 }, "expressionLevel": { "enum": ["calm", "authored"] } } } },
|
|
369
|
+
"crossPageContinuity": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
370
|
+
"prohibitedRepeatedShells": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }
|
|
371
|
+
}
|
|
372
|
+
},
|
|
229
373
|
"page": {
|
|
230
374
|
"type": "object",
|
|
231
375
|
"additionalProperties": false,
|
|
232
|
-
"required": ["id", "name", "skills", "sections"],
|
|
376
|
+
"required": ["id", "name", "register", "sourceStrategy", "structuralDelta", "mobileBlueprint", "skills", "sections"],
|
|
233
377
|
"properties": {
|
|
234
378
|
"id": { "type": "string", "minLength": 1 },
|
|
235
379
|
"name": { "type": "string", "minLength": 1 },
|
|
380
|
+
"register": { "$ref": "#/$defs/pageRegister" },
|
|
381
|
+
"sourceStrategy": { "enum": ["patch", "recompose", "rebuild-from-contracts"] },
|
|
382
|
+
"structuralDelta": { "$ref": "#/$defs/structuralDelta" },
|
|
383
|
+
"mobileBlueprint": { "$ref": "#/$defs/mobileBlueprint" },
|
|
384
|
+
"expression": { "$ref": "#/$defs/expression" },
|
|
385
|
+
"intentionalCalm": { "type": "string", "minLength": 20 },
|
|
236
386
|
"skills": { "$ref": "#/$defs/skillList" },
|
|
237
387
|
"sections": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/section" } }
|
|
238
388
|
}
|
|
@@ -6,19 +6,28 @@
|
|
|
6
6
|
"additionalProperties": false,
|
|
7
7
|
"required": ["version", "generatedAt", "evidence"],
|
|
8
8
|
"properties": {
|
|
9
|
-
"version": { "const":
|
|
9
|
+
"version": { "const": 2 },
|
|
10
10
|
"generatedAt": { "type": "string", "format": "date-time" },
|
|
11
11
|
"evidence": {
|
|
12
12
|
"type": "array",
|
|
13
13
|
"items": {
|
|
14
14
|
"type": "object",
|
|
15
15
|
"additionalProperties": false,
|
|
16
|
-
"required": ["id", "criterion", "status", "evidence", "proof"],
|
|
16
|
+
"required": ["id", "criterion", "kind", "criterionId", "pageId", "viewportClass", "status", "evidence", "proof"],
|
|
17
17
|
"properties": {
|
|
18
18
|
"id": { "type": "string", "minLength": 1 },
|
|
19
19
|
"criterion": { "type": "string", "minLength": 1 },
|
|
20
|
+
"kind": { "enum": ["visual", "interaction", "responsive", "preservation", "structural-depth"] },
|
|
21
|
+
"criterionId": { "type": "string", "minLength": 1 },
|
|
22
|
+
"pageId": { "type": "string", "minLength": 1 },
|
|
23
|
+
"sectionId": { "type": "string", "minLength": 1 },
|
|
24
|
+
"viewportClass": { "enum": ["desktop", "mobile", "narrow-mobile", "non-visual"] },
|
|
25
|
+
"mobileChecks": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["no-horizontal-overflow", "no-clipped-content", "fixed-elements-clear-content", "safe-area-spacing", "primary-task-discoverable", "primary-action-reachable", "touch-targets", "software-keyboard-usable", "no-hover-only", "intentional-mobile-composition", "mobile-content-order", "motion-media-translated", "no-decorative-task-blocker"] } },
|
|
20
26
|
"status": { "enum": ["pass", "fail", "not-applicable"] },
|
|
21
27
|
"evidence": { "type": "string", "minLength": 1 },
|
|
28
|
+
"timelineState": {
|
|
29
|
+
"enum": ["initial", "early", "mid-transition", "final", "handoff", "pinned-midpoint", "pinned-exit", "mobile", "reduced-motion"]
|
|
30
|
+
},
|
|
22
31
|
"proof": {
|
|
23
32
|
"type": "object",
|
|
24
33
|
"additionalProperties": false,
|
|
@@ -56,6 +65,17 @@
|
|
|
56
65
|
}
|
|
57
66
|
}
|
|
58
67
|
}
|
|
68
|
+
},
|
|
69
|
+
"refinement": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"additionalProperties": false,
|
|
72
|
+
"required": ["inspectedAt", "findings", "changes", "evidenceIds"],
|
|
73
|
+
"properties": {
|
|
74
|
+
"inspectedAt": { "type": "string", "format": "date-time" },
|
|
75
|
+
"findings": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
76
|
+
"changes": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
77
|
+
"evidenceIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
|
|
78
|
+
}
|
|
59
79
|
}
|
|
60
80
|
}
|
|
61
81
|
}
|
|
@@ -47,6 +47,11 @@ zoom treatments is the recurring failure this skill exists to prevent.
|
|
|
47
47
|
|
|
48
48
|
- Edit assets before placement: crop to the blueprint, grade to the palette,
|
|
49
49
|
compress, cut clean loops, create posters, and prepare masks/depth/plates.
|
|
50
|
+
For every key image, record whether it stays flat or needs a transparent
|
|
51
|
+
subject, foreground/middle/background planes, isolated objects, separate
|
|
52
|
+
shadow/glow, clean plate, SVG/CSS mask, tile/fragment map, depth/displacement
|
|
53
|
+
map, alternate crop/pose, generated keyframe, frame sequence, Canvas/WebGL
|
|
54
|
+
texture, or mobile-specific composition.
|
|
50
55
|
- A treatment claiming to transform an image must consume that image's pixels
|
|
51
56
|
and align to its bounds. A separate shader/noise rectangle floating over a
|
|
52
57
|
static image is decoration, not treatment.
|
|
@@ -64,26 +69,26 @@ measurable success criteria, and runtime evidence.
|
|
|
64
69
|
|
|
65
70
|
At expressive/award ambition, the proven default is one memorable point where
|
|
66
71
|
the visitor moves from observing media to affecting, entering, transforming, or
|
|
67
|
-
controlling its visual logic. For image-led
|
|
68
|
-
|
|
69
|
-
immersive peak.
|
|
72
|
+
controlling its visual logic. For image-led concepts with depth-capable assets,
|
|
73
|
+
a depth dive is one strong candidate—not an automatic default.
|
|
70
74
|
|
|
71
75
|
Valid registered alternatives include decomposition/reassembly, temporal
|
|
72
76
|
scrubbing, physical drag/inertia, refractive exploration, scene-responsive
|
|
73
77
|
media, or a brand-specific transformation of equal perceptual impact. A curtain,
|
|
74
78
|
fade, plain parallax, or rectangle movement alone is not equivalent.
|
|
75
79
|
|
|
76
|
-
###
|
|
80
|
+
### Key-asset treatment (`media.keyAssetTreatment`)
|
|
77
81
|
|
|
78
|
-
The proven award default is
|
|
79
|
-
|
|
80
|
-
exists because dogfood builds
|
|
81
|
-
stayed
|
|
82
|
+
The proven expressive/award default is a deliberate preparation and motion role
|
|
83
|
+
for every key image, with transformation concentrated where it shapes the story
|
|
84
|
+
and quiet-class rests elsewhere. This exists because dogfood builds treated one
|
|
85
|
+
hero while the remaining imagery stayed inert or repeated fade-and-zoom.
|
|
82
86
|
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
There is no target percentage, minimum image count, or required effect family.
|
|
88
|
+
One coherent media system may visibly develop through different roles—for
|
|
85
89
|
example archive sheets becoming a draggable surface, then a tunnel, then a
|
|
86
|
-
final mark
|
|
90
|
+
final mark—or distinct images may receive different concept-led treatments.
|
|
91
|
+
Evidence must make the important state changes obvious.
|
|
87
92
|
|
|
88
93
|
### Perceivability
|
|
89
94
|
|
|
@@ -98,6 +103,14 @@ Prefer, in order: supplied/client assets; generated assets suited to the exact
|
|
|
98
103
|
section; verified sourced media; clearly labeled placeholders. Generation is
|
|
99
104
|
the start of production, not the finished asset.
|
|
100
105
|
|
|
106
|
+
When video or separated source material is absent, first attempt the strongest
|
|
107
|
+
feasible stylized treatment: depth separation, camera movement through layers,
|
|
108
|
+
related generated keyframes, a bounded frame sequence, masks between crops or
|
|
109
|
+
states, tiles/fragments, Canvas pixels/particles, shader displacement, blending,
|
|
110
|
+
or use as a texture in a larger composition. Do not imply this is real video.
|
|
111
|
+
Ask for missing source material only when the requested result cannot be
|
|
112
|
+
approximated convincingly; never leave a placeholder for future advanced motion.
|
|
113
|
+
|
|
101
114
|
For isolated props:
|
|
102
115
|
|
|
103
116
|
- reserve a compositional berth that never covers text or controls;
|
|
@@ -119,9 +132,10 @@ are invalid implementations.
|
|
|
119
132
|
|
|
120
133
|
## 6. Planning and verification
|
|
121
134
|
|
|
122
|
-
The blueprint records asset path/source,
|
|
123
|
-
|
|
124
|
-
page's `creativeStrategy`
|
|
135
|
+
The blueprint records asset path/source, importance, preparation decision and
|
|
136
|
+
derivatives, purpose, treatment class, driver, mobile behavior, fallback, and
|
|
137
|
+
success criteria. At expressive/award, record the page's `creativeStrategy` and
|
|
138
|
+
contextual `motionComplexityBudget`.
|
|
125
139
|
|
|
126
140
|
Verification records:
|
|
127
141
|
|