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.
@@ -7,9 +7,9 @@ All paths are relative to the target project.
7
7
 
8
8
  Required top-level fields:
9
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.
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`. Status is
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`, and `status`. A shipped asset must
41
- exist when `dreative audit` runs.
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": "award.spatialSignature",
75
+ "ruleId": "media.keyAssetTreatment",
63
76
  "decision": "substituted",
64
77
  "declaredAt": "2026-01-01T00:30:00.000Z",
65
- "reason": "The archival concept has no physical subject, so a product prop would misrepresent the material.",
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 at least three materially different roles",
69
- "Pointer and scroll input visibly reshape its depth"
81
+ "The specimen appears in materially different structural roles",
82
+ "Pointer and scroll input visibly reshape the specimen"
70
83
  ],
71
- "evidenceIds": ["spatial-type-desktop", "spatial-type-mobile"]
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`: 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.
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": 1,
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 requires a timestamp and concrete proof: an existing artifact
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, verification evidence, and the
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": "Use a recognizable real GLB or photoreal cutout prop staged in a designed berth.",
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 depth, recurrence, interaction, and visual dominance on desktop and mobile.",
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": "Use an image or video depth dive when the concept and assets support depth.",
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.award.pixelCoverage",
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": "At least half of key images, minimum three, use distinct pixel-class treatments.",
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": "One coherent alternative media system visibly develops through at least three materially different roles or states.",
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.diversityOrDevelopment",
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": "Use four distinct mechanisms across three input drivers.",
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": "One coherent signature mechanism develops through at least three materially different states with two quieter secondary mechanisms and two drivers.",
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: 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.
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 dimensional or spatial signature is subject-honest, staged,
36
- and resilient. A real GLB/cutout is the proven default, not the only medium.
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 three memorable moments without sacrificing function.
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": 2 },
10
- "doctrineVersion": { "const": 2 },
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": 4, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
96
- "drivers": { "type": "array", "minItems": 3, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
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": 3, "uniqueItems": true, "items": { "type": "string", "minLength": 12 } },
107
- "secondaryMechanisms": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
108
- "drivers": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
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": { "type": "string", "minLength": 1 } },
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": 1 },
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 award concepts with depth-capable
68
- assets, a depth dive is the default because it repeatedly produced a legible
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
- ### Pixel coverage (`media.award.pixelCoverage`)
80
+ ### Key-asset treatment (`media.keyAssetTreatment`)
77
81
 
78
- The proven award default is pixel-class treatment on at least half of hero/key
79
- images, minimum three, using distinct mechanisms with quiet-class rests. This
80
- exists because dogfood builds shipped one strong hero while the remaining page
81
- stayed static.
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
- A registered substitution is valid when one coherent media system visibly
84
- develops through at least three materially different roles or states—for
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. Evidence must make each state obvious.
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, purpose, treatment class, driver,
123
- mobile behavior, fallback, and success criteria. At expressive/award, record the
124
- page's `creativeStrategy` as diversity or development.
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