@ankhorage/devtools 1.9.5 → 1.10.0
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/tools/skills/assets/ankhorage-project-structure/references/skill-distribution.md +5 -0
- package/dist/tools/skills/assets/zora-designer/SKILL.md +89 -0
- package/dist/tools/skills/assets/zora-designer/agents/openai.yaml +6 -0
- package/dist/tools/skills/assets/zora-designer/assets/audit-rubric.json +312 -0
- package/dist/tools/skills/assets/zora-designer/references/artifact.md +93 -0
- package/dist/tools/skills/assets/zora-designer/references/audit.md +100 -0
- package/dist/tools/skills/assets/zora-designer/references/workflow.md +137 -0
- package/dist/tools/skills/assets/zora-designer/scripts/audit.mjs +573 -0
- package/dist/tools/skills/assets/zora-designer/scripts/owner-api.mjs +440 -0
- package/dist/tools/skills/assets/zora-designer/scripts/scaffold-template.mjs +222 -0
- package/dist/tools/skills/managed.js +10 -9
- package/dist/tools/skills/selection.d.ts +7 -0
- package/dist/tools/skills/selection.js +82 -0
- package/package.json +1 -1
package/dist/tools/skills/assets/ankhorage-project-structure/references/skill-distribution.md
CHANGED
|
@@ -54,6 +54,11 @@ Do not copy every available skill into every repository.
|
|
|
54
54
|
- External, personal, experimental, and task-specific skills are not part of Devtools sync.
|
|
55
55
|
- A repository may own additional skill directories beside the Devtools-managed set.
|
|
56
56
|
|
|
57
|
+
The `zora-designer` profile skill is selected for the ZORA, Templates, and Studio owners and for
|
|
58
|
+
generated-app authoring repositories that consume ZORA with the Ankhorage Runtime, Templates, or
|
|
59
|
+
Studio application model. Plain libraries and unrelated tooling packages retain only baseline
|
|
60
|
+
skills.
|
|
61
|
+
|
|
57
62
|
Prefer the same repository-trait detection used by other Devtools profiles. Add explicit metadata
|
|
58
63
|
only for an actual ambiguity; do not require each repository to repeat a default skill list.
|
|
59
64
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zora-designer
|
|
3
|
+
description: >
|
|
4
|
+
Design one application screen or an ordered screen series, audit a URL or supplied image
|
|
5
|
+
evidence, and author an Ankhorage Templates manifest or starter using installed ZORA metadata
|
|
6
|
+
and theme APIs. Use for category-driven design decisions, design audits and scoring, visual
|
|
7
|
+
reconstruction with ZORA elements, or template creation. Do not use for illustration-only work.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ZORA Designer
|
|
11
|
+
|
|
12
|
+
Design, audit, and author through the target repository's released owner APIs. Keep
|
|
13
|
+
`zora-designer.md` as review evidence; the application manifest and owner contracts remain runtime
|
|
14
|
+
authority.
|
|
15
|
+
|
|
16
|
+
## Route the request
|
|
17
|
+
|
|
18
|
+
- `interactive`: resolve a design configuration without silently creating code or images.
|
|
19
|
+
- `screen`: design one screen and, when requested, produce a concept image or implementation.
|
|
20
|
+
- `screens`: design a coherent ordered series with shared navigation, state, and tokens.
|
|
21
|
+
- `audit`: evaluate a URL, one supplied image, or an ordered image series with explicit evidence.
|
|
22
|
+
- `template`: compose a canonical `AppManifest`; in Templates, scaffold the normal starter source
|
|
23
|
+
and registry entry.
|
|
24
|
+
|
|
25
|
+
Natural language is enough. Ask only when an unresolved choice would materially change the output.
|
|
26
|
+
Read [workflow.md](references/workflow.md) for the ordered process and capability gates.
|
|
27
|
+
|
|
28
|
+
## Start with the owners
|
|
29
|
+
|
|
30
|
+
From the target repository, run:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
bun .agents/skills/zora-designer/scripts/owner-api.mjs inspect
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The helper loads public exports from installed `@ankhorage/templates`, `@ankhorage/zora/theme`, and
|
|
37
|
+
`@ankhorage/zora/metadata`. If it reports a missing or outdated owner, update the released package
|
|
38
|
+
through the repository's normal dependency workflow. Never copy a catalog, token inventory, color
|
|
39
|
+
algorithm, theme compiler, component schema, or manifest implementation into this skill.
|
|
40
|
+
|
|
41
|
+
Use owner terminology verbatim: `GeneratedColorRole`, `ThemeTokens.colors`, `ThemeSemantics`, and
|
|
42
|
+
`SemanticColorToken`. Do not introduce aliases or naming cleanup here.
|
|
43
|
+
|
|
44
|
+
## Preserve decisions and evidence
|
|
45
|
+
|
|
46
|
+
Resolve values in this order: current request, current session, verified project state, confirmed
|
|
47
|
+
existing brief target, category preset, then safe global default. Record an origin for each value.
|
|
48
|
+
Keep target design separate from observed runtime state and report drift rather than overwriting one
|
|
49
|
+
with the other.
|
|
50
|
+
|
|
51
|
+
For scoring, evidence limits, release gates, and finding rules, read
|
|
52
|
+
[audit.md](references/audit.md). For deterministic `zora-designer.md` shape and serialization, read
|
|
53
|
+
[artifact.md](references/artifact.md).
|
|
54
|
+
|
|
55
|
+
## Compose only supported ZORA elements
|
|
56
|
+
|
|
57
|
+
Inspect `ZORA_COMPONENT_META` and `ZORA_THEME_RECIPE_META`. Map a source region only when the
|
|
58
|
+
element's semantic responsibility, structure, states/interactions, accessibility contract, props,
|
|
59
|
+
events, and data requirements fit. Visual resemblance alone is insufficient.
|
|
60
|
+
|
|
61
|
+
If no exact element fits:
|
|
62
|
+
|
|
63
|
+
1. use the metadata-backed `MissingElement` draft node at that location;
|
|
64
|
+
2. record the evidence, warning, requested capability, and application blocker;
|
|
65
|
+
3. create or link a ZORA owner issue;
|
|
66
|
+
4. stop release application until a released real element replaces it.
|
|
67
|
+
|
|
68
|
+
Never disguise the gap with a generic container, invented prop, or custom application workaround.
|
|
69
|
+
|
|
70
|
+
## Capability truthfulness
|
|
71
|
+
|
|
72
|
+
- Concept image output requires an available image-generation capability.
|
|
73
|
+
- URL intake and authoritative runtime screenshots require a browser/runtime capture capability.
|
|
74
|
+
- Image audits require the supplied original image or ordered series.
|
|
75
|
+
|
|
76
|
+
When a required capability or source is unavailable, report that deliverable or evidence scope as
|
|
77
|
+
blocked. Do not simulate an image, browser observation, or runtime proof. Clearly distinguish
|
|
78
|
+
generated concept images from authoritative runtime captures.
|
|
79
|
+
|
|
80
|
+
## Validate before handoff
|
|
81
|
+
|
|
82
|
+
- Compile the category design and both theme modes through installed owner APIs.
|
|
83
|
+
- Validate manifest composition and preserve every owner diagnostic.
|
|
84
|
+
- Confirm every manifest node and recipe against current ZORA metadata.
|
|
85
|
+
- Run deterministic audit arithmetic when an audit is in scope.
|
|
86
|
+
- Keep screenshot-only behavior `not-assessable`.
|
|
87
|
+
- Require a ready application gate before release; a score never overrides a blocker.
|
|
88
|
+
- Update `zora-designer.md` and report target/runtime drift, unsupported capabilities, and owner
|
|
89
|
+
issues.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: 'ZORA Designer'
|
|
3
|
+
short_description: 'Design, audit, and author Ankhorage screens and templates through ZORA.'
|
|
4
|
+
default_prompt: 'Use $zora-designer to design, audit, or author this Ankhorage interface.'
|
|
5
|
+
policy:
|
|
6
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "zora-designer/audit-rubric/v1",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "R01",
|
|
6
|
+
"name": "Clarity",
|
|
7
|
+
"weight": 7,
|
|
8
|
+
"generation": "Use unambiguous labels, recognizable controls, plain-language instructions, and a visible primary task.",
|
|
9
|
+
"audit": "Check calls to action, icons, headings, affordances, state, and consequences; do not infer accessible names from pixels.",
|
|
10
|
+
"criteria": [
|
|
11
|
+
"purpose-and-primary-task",
|
|
12
|
+
"labels-and-copy",
|
|
13
|
+
"icons-and-affordances",
|
|
14
|
+
"consequences-and-state-clarity"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "R02",
|
|
19
|
+
"name": "Consistency",
|
|
20
|
+
"weight": 5,
|
|
21
|
+
"generation": "Reuse owner tokens, components, terminology, navigation placement, and state behavior.",
|
|
22
|
+
"audit": "Group repeated one-off styling, labels, placement, or behavior under their systemic root cause.",
|
|
23
|
+
"criteria": [
|
|
24
|
+
"tokens-and-components",
|
|
25
|
+
"terminology",
|
|
26
|
+
"navigation-and-placement",
|
|
27
|
+
"interaction-and-state-behavior"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "R03",
|
|
32
|
+
"name": "Simplicity",
|
|
33
|
+
"weight": 4,
|
|
34
|
+
"generation": "Keep elements that support comprehension, completion, confidence, or brand intent; disclose advanced detail progressively.",
|
|
35
|
+
"audit": "Check redundant controls, avoidable steps, repeated explanation, and decorative competition without penalizing required domain complexity.",
|
|
36
|
+
"criteria": [
|
|
37
|
+
"necessity-and-redundancy",
|
|
38
|
+
"task-step-efficiency",
|
|
39
|
+
"progressive-disclosure",
|
|
40
|
+
"decorative-competition"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "R04",
|
|
45
|
+
"name": "Visual hierarchy",
|
|
46
|
+
"weight": 7,
|
|
47
|
+
"generation": "Create a deliberate reading and action order through scale, weight, contrast, position, grouping, and whitespace.",
|
|
48
|
+
"audit": "Compare focal priority, heading order, action emphasis, and visual order against semantic and focus order.",
|
|
49
|
+
"criteria": [
|
|
50
|
+
"focal-priority",
|
|
51
|
+
"heading-and-content-order",
|
|
52
|
+
"action-priority",
|
|
53
|
+
"visual-semantic-focus-order"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "R05",
|
|
58
|
+
"name": "Scannability",
|
|
59
|
+
"weight": 5,
|
|
60
|
+
"generation": "Chunk content with meaningful headings, concise labels, stable alignment, and task-appropriate line length and density.",
|
|
61
|
+
"audit": "Check walls of text, weak anchors, long forms, comparison alignment, and key-information discovery.",
|
|
62
|
+
"criteria": [
|
|
63
|
+
"chunking-and-headings",
|
|
64
|
+
"alignment-and-comparison",
|
|
65
|
+
"line-length-and-density",
|
|
66
|
+
"key-information-discovery"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "R06",
|
|
71
|
+
"name": "Color contrast",
|
|
72
|
+
"weight": 10,
|
|
73
|
+
"generation": "Meet applicable contrast requirements in every state, mode, overlay, and composite background using computed owner values.",
|
|
74
|
+
"audit": "Use measurements for ratios; visual evidence can identify risk but cannot prove exact composited contrast.",
|
|
75
|
+
"criteria": [
|
|
76
|
+
"normal-and-large-text",
|
|
77
|
+
"active-ui-and-graphics",
|
|
78
|
+
"focus-and-selection",
|
|
79
|
+
"states-overlays-images-gradients"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "R07",
|
|
84
|
+
"name": "Intentional color",
|
|
85
|
+
"weight": 5,
|
|
86
|
+
"generation": "Assign color through semantic roles, use high chroma sparingly, and provide a non-color cue for every meaning.",
|
|
87
|
+
"audit": "Check semantic conflicts, color-only state, competing accents, and separation of brand from severity meaning.",
|
|
88
|
+
"criteria": [
|
|
89
|
+
"semantic-role-consistency",
|
|
90
|
+
"non-color-cues",
|
|
91
|
+
"accent-restraint",
|
|
92
|
+
"brand-status-separation"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "R08",
|
|
97
|
+
"name": "Negative space",
|
|
98
|
+
"weight": 4,
|
|
99
|
+
"generation": "Use whitespace to reveal grouping, hierarchy, focus, and rhythm at the intended product density.",
|
|
100
|
+
"audit": "Check control crowding, edge collisions, uneven rhythm, disconnected empty regions, and space masking weak hierarchy.",
|
|
101
|
+
"criteria": [
|
|
102
|
+
"internal-rhythm",
|
|
103
|
+
"external-rhythm",
|
|
104
|
+
"edge-clearance-and-group-separation",
|
|
105
|
+
"density-balance"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "R09",
|
|
110
|
+
"name": "Typography hierarchy",
|
|
111
|
+
"weight": 7,
|
|
112
|
+
"generation": "Use a small tokenized type scale, clear role mapping, readable metrics, verified fonts, and robust scaling.",
|
|
113
|
+
"audit": "Check arbitrary styles, essential text size, line height, unavailable weights or glyphs, clipping, and semantic heading alignment.",
|
|
114
|
+
"criteria": [
|
|
115
|
+
"roles-and-scale",
|
|
116
|
+
"line-height-measure-tracking",
|
|
117
|
+
"font-glyph-availability",
|
|
118
|
+
"scaling-clipping-semantics"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "R10",
|
|
123
|
+
"name": "Immediate feedback",
|
|
124
|
+
"weight": 5,
|
|
125
|
+
"generation": "Define relevant pressed, selected, hover, focus, loading, success, error, empty, and disabled behavior.",
|
|
126
|
+
"audit": "Check silent actions, unstable progress, duplicate submission, and state feedback; static images cannot pass behavior criteria alone.",
|
|
127
|
+
"criteria": [
|
|
128
|
+
"direct-interaction-feedback",
|
|
129
|
+
"async-loading-progress",
|
|
130
|
+
"outcome-and-empty-feedback",
|
|
131
|
+
"focus-hover-disabled-states"
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "R11",
|
|
136
|
+
"name": "User control",
|
|
137
|
+
"weight": 5,
|
|
138
|
+
"generation": "Provide exit, cancel, undo, pause, retry, and reversible paths proportional to risk while preserving user work.",
|
|
139
|
+
"audit": "Check traps, unnecessary irreversibility, destructive action safety, and dismissals that lose data or context.",
|
|
140
|
+
"criteria": [
|
|
141
|
+
"exit-cancel-back",
|
|
142
|
+
"undo-retry-reversibility",
|
|
143
|
+
"destructive-confirmation",
|
|
144
|
+
"input-and-context-preservation"
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "R12",
|
|
149
|
+
"name": "Error prevention and recovery",
|
|
150
|
+
"weight": 7,
|
|
151
|
+
"generation": "Prevent predictable errors, validate at useful times, identify the problem and remedy, and preserve valid input.",
|
|
152
|
+
"audit": "Check constraints, defaults, timing, error association, human-readable recovery, retry, and data preservation.",
|
|
153
|
+
"criteria": [
|
|
154
|
+
"prevention-constraints-defaults",
|
|
155
|
+
"validation-timing",
|
|
156
|
+
"error-identification-association",
|
|
157
|
+
"recovery-and-data-preservation"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "R13",
|
|
162
|
+
"name": "Familiar patterns",
|
|
163
|
+
"weight": 4,
|
|
164
|
+
"generation": "Use platform and domain conventions unless a different pattern is demonstrably more suitable and learnable.",
|
|
165
|
+
"audit": "Check surprising navigation, placement, or control behavior and familiar-looking elements that behave unexpectedly.",
|
|
166
|
+
"criteria": [
|
|
167
|
+
"navigation-conventions",
|
|
168
|
+
"control-conventions",
|
|
169
|
+
"domain-flow-conventions",
|
|
170
|
+
"innovation-learnability"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "R14",
|
|
175
|
+
"name": "Choice limitation",
|
|
176
|
+
"weight": 3,
|
|
177
|
+
"generation": "Prioritize choices, provide defaults, group options, and progressively reveal advanced decisions.",
|
|
178
|
+
"audit": "Check equal-priority action clusters, ungrouped menus, deferrable decisions, and large sets without discovery support.",
|
|
179
|
+
"criteria": [
|
|
180
|
+
"priority-and-defaults",
|
|
181
|
+
"option-grouping",
|
|
182
|
+
"progressive-choice-disclosure",
|
|
183
|
+
"search-filter-for-large-sets"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "R15",
|
|
188
|
+
"name": "Target sizing",
|
|
189
|
+
"weight": 7,
|
|
190
|
+
"generation": "Size and space complete interactive bounds for the actual touch, pointer, keyboard, and assistive input profile.",
|
|
191
|
+
"audit": "Measure bounds rather than glyphs and consider platform baselines, exceptions, edge placement, reach, frequency, and consequence.",
|
|
192
|
+
"criteria": [
|
|
193
|
+
"interactive-bound-size",
|
|
194
|
+
"spacing-and-overlap",
|
|
195
|
+
"reach-edge-frequency",
|
|
196
|
+
"input-specific-equivalence"
|
|
197
|
+
]
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"id": "R16",
|
|
201
|
+
"name": "Proximity and grouping",
|
|
202
|
+
"weight": 5,
|
|
203
|
+
"generation": "Place labels, help, errors, actions, and content near the items they describe and expose groups without color alone.",
|
|
204
|
+
"audit": "Check detached labels or errors, misassociated actions, ambiguous containers, and grouping based only on color.",
|
|
205
|
+
"criteria": [
|
|
206
|
+
"label-control-association",
|
|
207
|
+
"help-error-proximity",
|
|
208
|
+
"action-container-association",
|
|
209
|
+
"group-boundary-and-alignment"
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "R17",
|
|
214
|
+
"name": "Accessibility",
|
|
215
|
+
"weight": 10,
|
|
216
|
+
"generation": "Support semantics, names, keyboard and focus, alternatives, reflow, scaling, orientation, reduced motion, localization, and assistive updates.",
|
|
217
|
+
"audit": "Use appropriate runtime, source, and accessibility evidence; score contrast under R06 and target size under R15 without duplicate deductions.",
|
|
218
|
+
"criteria": [
|
|
219
|
+
"semantics-names-roles-values",
|
|
220
|
+
"keyboard-focus-order-and-traps",
|
|
221
|
+
"reflow-zoom-scaling-orientation",
|
|
222
|
+
"alternatives-announcements-motion-localization"
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
"statusFactors": {
|
|
227
|
+
"pass": 1,
|
|
228
|
+
"minor": 0.75,
|
|
229
|
+
"major": 0.4,
|
|
230
|
+
"critical": 0,
|
|
231
|
+
"not-assessable": null,
|
|
232
|
+
"not-applicable": null
|
|
233
|
+
},
|
|
234
|
+
"confidenceFactors": {
|
|
235
|
+
"high": 1,
|
|
236
|
+
"medium": 0.67,
|
|
237
|
+
"low": 0.33,
|
|
238
|
+
"unknown": 0
|
|
239
|
+
},
|
|
240
|
+
"releaseGates": [
|
|
241
|
+
{
|
|
242
|
+
"id": "RG01",
|
|
243
|
+
"name": "core-task-operability",
|
|
244
|
+
"criteria": [
|
|
245
|
+
"primary-task-reachable-and-completable",
|
|
246
|
+
"required-controls-operable",
|
|
247
|
+
"state-and-outcome-perceivable",
|
|
248
|
+
"no-blocking-task-failure"
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"id": "RG02",
|
|
253
|
+
"name": "keyboard-focus-and-no-trap",
|
|
254
|
+
"criteria": [
|
|
255
|
+
"keyboard-equivalent-operation",
|
|
256
|
+
"visible-focus",
|
|
257
|
+
"logical-focus-order",
|
|
258
|
+
"no-keyboard-trap-and-contained-modal-focus"
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "RG03",
|
|
263
|
+
"name": "semantics-names-roles-values-and-announcements",
|
|
264
|
+
"criteria": [
|
|
265
|
+
"semantic-structure",
|
|
266
|
+
"accessible-names",
|
|
267
|
+
"roles-states-and-values",
|
|
268
|
+
"announcements-errors-and-live-updates"
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"id": "RG04",
|
|
273
|
+
"name": "visual-AA-contrast-color-reflow-and-resize",
|
|
274
|
+
"criteria": [
|
|
275
|
+
"text-contrast",
|
|
276
|
+
"non-text-contrast-and-color-cues",
|
|
277
|
+
"reflow-zoom-orientation-and-text-spacing",
|
|
278
|
+
"text-resize-without-clipping-or-loss"
|
|
279
|
+
]
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"id": "RG05",
|
|
283
|
+
"name": "input-AA-target-drag-and-gesture-operation",
|
|
284
|
+
"criteria": [
|
|
285
|
+
"minimum-target-size-or-exception",
|
|
286
|
+
"target-spacing-and-obstruction",
|
|
287
|
+
"drag-and-complex-gesture-alternative",
|
|
288
|
+
"pointer-touch-and-motion-equivalence"
|
|
289
|
+
]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"id": "RG06",
|
|
293
|
+
"name": "error-recovery-and-destructive-safety",
|
|
294
|
+
"criteria": [
|
|
295
|
+
"error-identification-and-prevention",
|
|
296
|
+
"recovery-and-input-preservation",
|
|
297
|
+
"destructive-confirmation-or-reversal",
|
|
298
|
+
"cancel-back-retry-and-context-preservation"
|
|
299
|
+
]
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"id": "RG07",
|
|
303
|
+
"name": "blocking-owner-or-runtime-diagnostics",
|
|
304
|
+
"criteria": [
|
|
305
|
+
"owner-diagnostics-pass",
|
|
306
|
+
"runtime-matches-approved-target",
|
|
307
|
+
"no-unresolved-application-blocker",
|
|
308
|
+
"required-validation-evidence-present"
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Portable `zora-designer.md` Artifact
|
|
2
|
+
|
|
3
|
+
`zora-designer.md` is the deterministic design/audit decision record. It is never runtime theme or
|
|
4
|
+
manifest authority. The serializer and its ordered frontmatter/section skeleton live in
|
|
5
|
+
[audit.mjs](../scripts/audit.mjs); do not maintain another template.
|
|
6
|
+
|
|
7
|
+
## Document lifecycle
|
|
8
|
+
|
|
9
|
+
Use these document statuses:
|
|
10
|
+
|
|
11
|
+
- `draft`: required decisions or evidence are still unresolved;
|
|
12
|
+
- `resolved`: the requested configuration is complete and applicable;
|
|
13
|
+
- `resolved-with-gaps`: design decisions are complete but owner/runtime support is not;
|
|
14
|
+
- `blocked`: the requested deliverable cannot proceed;
|
|
15
|
+
- `audited`: the available evidence has been assessed and limitations are explicit.
|
|
16
|
+
|
|
17
|
+
Use `documentKind: configuration` for interactive/design/template work and `audit` for an audit.
|
|
18
|
+
Generation self-checks belong under validation; do not create a pretend audit.
|
|
19
|
+
|
|
20
|
+
## Canonical input to the serializer
|
|
21
|
+
|
|
22
|
+
Provide a JSON object with these responsibilities. Missing optional data stays empty or `null`; it
|
|
23
|
+
is never invented:
|
|
24
|
+
|
|
25
|
+
- `language` and `status`;
|
|
26
|
+
- `source`: mode, original inputs, ordered evidence, capability limitations;
|
|
27
|
+
- `config`: requested/resolved category, intent, platform target profiles, theme coverage, primary,
|
|
28
|
+
harmony, tone pair, typography, and advanced profile, each with origins;
|
|
29
|
+
- `derivation`: owner provenance, diagnostics, assumptions, unsupported concepts, and explicit
|
|
30
|
+
target/runtime drift;
|
|
31
|
+
- `tokens`: current owner-computed token output, never copied token definitions;
|
|
32
|
+
- `components`: metadata-backed recipe decisions and required states;
|
|
33
|
+
- `screens`: ordered screen specifications and evidence relationships;
|
|
34
|
+
- `validation`: scope, gates, application gate, owner/runtime drift, and blockers;
|
|
35
|
+
- `auditInput`: criterion and release-gate assessments consumed by the canonical calculator;
|
|
36
|
+
- `findings`, `risks`, `openDecisions`, and preserved `userNotes`.
|
|
37
|
+
|
|
38
|
+
The serializer emits a JSON-compatible YAML frontmatter document with stable key order and a fixed
|
|
39
|
+
human-readable section order. JSON is a valid YAML subset and avoids ambiguous scalar coercion.
|
|
40
|
+
Never add timestamps, random choices, environment paths, or unstable prose.
|
|
41
|
+
|
|
42
|
+
## Origin and target/observed rules
|
|
43
|
+
|
|
44
|
+
Every resolved input records one origin from:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
user | session | project | existing-brief | category-default | global-default |
|
|
48
|
+
observed | inferred | derived | unknown
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Current explicit input wins. `derived` means mechanically resolved from separately recorded inputs.
|
|
52
|
+
Preserve user notes verbatim. Regenerate derived content rather than retaining obsolete generated
|
|
53
|
+
values as compatibility state.
|
|
54
|
+
|
|
55
|
+
During audits and migrations, declared target configuration and observed implementation remain
|
|
56
|
+
separate. Record owner/runtime drift with owner, path, owner value, design target, evidence, failed
|
|
57
|
+
gate, and required owner change. A complete target can be `resolved-with-gaps` while application is
|
|
58
|
+
blocked.
|
|
59
|
+
|
|
60
|
+
## Validation states
|
|
61
|
+
|
|
62
|
+
Validation scopes are `configuration`, `composition`, `runtime`, and `audit`. A gate is
|
|
63
|
+
`not-applicable`, `not-assessable`, `pass`, `fail`, or `blocked`. Configuration-only work does not
|
|
64
|
+
fail for absent runtime interaction evidence; it marks that scope not applicable.
|
|
65
|
+
|
|
66
|
+
Aggregate validation in this order: blocker, failure, not run, pass with non-blocking gaps, then
|
|
67
|
+
pass. Resolve the application gate separately. A runtime blocker affects aggregate status only when
|
|
68
|
+
runtime application is in the requested scope.
|
|
69
|
+
|
|
70
|
+
Every unresolved `MissingElement` records a blocker, owner issue link when one exists, and the
|
|
71
|
+
condition for replacing it with a released real ZORA element.
|
|
72
|
+
|
|
73
|
+
## Deterministic audit fields
|
|
74
|
+
|
|
75
|
+
The audit calculator supplies score, coverage, applicable and assessed weight, rounding policy,
|
|
76
|
+
confidence, possible range, release gate and items, complete rule results, findings with allocated
|
|
77
|
+
score impact, risks, passed rules, and not-assessable criteria. Keep unavailable scalar values as
|
|
78
|
+
`null`; do not omit them or substitute zero.
|
|
79
|
+
|
|
80
|
+
An image or series records each original source separately with dimensions and order. A URL records
|
|
81
|
+
the capture viewport, theme mode, state, and reproduction. Concept images are labeled generated;
|
|
82
|
+
runtime captures are labeled observed/measured and include their capture source.
|
|
83
|
+
|
|
84
|
+
## Output and persistence
|
|
85
|
+
|
|
86
|
+
Write to an explicit output path when supplied; otherwise update an existing artifact at the target
|
|
87
|
+
root or create it there. If the target is not writable, return the complete proposed artifact and
|
|
88
|
+
state that it was not persisted.
|
|
89
|
+
|
|
90
|
+
Before returning, confirm the artifact matches the requested mode, every resolved value has an
|
|
91
|
+
origin, owner identifiers were inspected, exact measurements came from tools, invisible behavior
|
|
92
|
+
was not passed from screenshots, gaps block application, and the manifest remains canonical runtime
|
|
93
|
+
authority.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Evidence-Aware Design Audit
|
|
2
|
+
|
|
3
|
+
The canonical rubric, weights, criterion keys, status factors, confidence factors, and release-gate
|
|
4
|
+
inventory live in [audit-rubric.json](../assets/audit-rubric.json). The calculation implementation
|
|
5
|
+
in [audit.mjs](../scripts/audit.mjs) loads that file. Do not reproduce either list or the arithmetic
|
|
6
|
+
in prompts, references, tests, or application code.
|
|
7
|
+
|
|
8
|
+
Inspect the current catalog when needed:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
bun .agents/skills/zora-designer/scripts/audit.mjs catalog
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Evidence intake
|
|
15
|
+
|
|
16
|
+
Every evidence item has a stable ID, kind, location or screen/viewport/state, precise observation,
|
|
17
|
+
evidence level, confidence and factor, reproduction steps, and limitations. Preserve URL capture
|
|
18
|
+
parameters and ordered image-series position.
|
|
19
|
+
|
|
20
|
+
Use these evidence levels:
|
|
21
|
+
|
|
22
|
+
- `measured`: reproducible source, computed runtime value, accessibility tree, instrumented test, or
|
|
23
|
+
reliable tool output;
|
|
24
|
+
- `observed`: clearly visible behavior or high-resolution visual evidence;
|
|
25
|
+
- `estimated`: approximate measurement with a known scale or compositing limitation;
|
|
26
|
+
- `inferred`: plausible intent without direct proof;
|
|
27
|
+
- `not-assessable`: the source cannot demonstrate the criterion.
|
|
28
|
+
|
|
29
|
+
Confidence is explicit, not inferred from the evidence-level word. High-confidence computed runtime
|
|
30
|
+
evidence and medium-confidence design metadata can both be measured in different senses.
|
|
31
|
+
|
|
32
|
+
A visual-only audit may assess composition, hierarchy, apparent typography, approximate spacing,
|
|
33
|
+
visible states, and color risk. It cannot positively verify semantic names, keyboard or focus order,
|
|
34
|
+
screen-reader announcements, responsive reflow, text scaling, target dimensions without a trusted
|
|
35
|
+
scale, loading feedback, recovery behavior, or performance.
|
|
36
|
+
|
|
37
|
+
## Criterion assessment
|
|
38
|
+
|
|
39
|
+
Assess all canonical criteria from the rubric asset. For each criterion record:
|
|
40
|
+
|
|
41
|
+
- `applicable` and why;
|
|
42
|
+
- `status` using the asset's canonical status keys;
|
|
43
|
+
- `evidenceIds` and the non-empty `essentialEvidenceIds` needed to reproduce any assessed status;
|
|
44
|
+
- `confidenceFactor` equal to the minimum factor among essential evidence;
|
|
45
|
+
- `reason`.
|
|
46
|
+
|
|
47
|
+
Unavailable evidence is `not-assessable`, not inapplicable. A criterion is inapplicable only when
|
|
48
|
+
the product or audited scope genuinely has no such responsibility.
|
|
49
|
+
|
|
50
|
+
Repeated instances influence severity and remediation but do not create repeated deductions. Map
|
|
51
|
+
one root cause to one primary criterion and cross-reference related rules without scoring them
|
|
52
|
+
again. C.R.A.P., visual dominance, implementation quality, performance, and user testing are useful
|
|
53
|
+
cross-checks or delivery gates, not extra weighted rules.
|
|
54
|
+
|
|
55
|
+
Run deterministic calculation through `calculateAudit` or the audit CLI. It derives rule totals,
|
|
56
|
+
score, evidence coverage, possible range, aggregate confidence, release items, and the aggregate
|
|
57
|
+
release gate from the canonical asset. Do not hand-calculate or round intermediate values.
|
|
58
|
+
|
|
59
|
+
Interpretation rules:
|
|
60
|
+
|
|
61
|
+
- A non-null score always appears with coverage, confidence, and possible range.
|
|
62
|
+
- Low coverage makes the score provisional even when the score is high.
|
|
63
|
+
- Confidence describes evidence quality; coverage describes how much applicable rubric weight was
|
|
64
|
+
assessed.
|
|
65
|
+
- No applicable criteria yields null score, coverage, range, and confidence.
|
|
66
|
+
- Applicable but wholly unassessed criteria yield null score, zero coverage, and a 0–100 range.
|
|
67
|
+
- The numerical score never overrides a failed or unassessed release gate.
|
|
68
|
+
|
|
69
|
+
## Release gates
|
|
70
|
+
|
|
71
|
+
Populate every canonical release item and subcriterion from the asset. Missing evidence does not
|
|
72
|
+
make a release subcriterion inapplicable. One item fails if any applicable subcriterion fails,
|
|
73
|
+
passes only when at least one applies and all applicable subcriteria pass, and remains
|
|
74
|
+
`not-assessable` when applicable evidence is incomplete. The aggregate gate fails on any item
|
|
75
|
+
failure and passes only when all applicable items pass.
|
|
76
|
+
|
|
77
|
+
Any confirmed applicable WCAG A/AA failure, keyboard trap, inaccessible core task, unrecoverable
|
|
78
|
+
destructive flow, owner diagnostic blocker, or equivalent critical blocker fails the relevant gate
|
|
79
|
+
even if the weighted score is high. This compact gate is not a formal WCAG conformance claim.
|
|
80
|
+
|
|
81
|
+
## Findings, risks, and remediation
|
|
82
|
+
|
|
83
|
+
A scored finding contains a stable ID, primary rule and criterion, severity, location, evidence,
|
|
84
|
+
evidence level, expected result, user/task impact, deduplicated root cause, non-scoring related
|
|
85
|
+
rules, smallest useful fix, verification, confidence, evidence IDs, and script-allocated score
|
|
86
|
+
impact. Exact colors, ratios, selectors, and dimensions require measurement.
|
|
87
|
+
|
|
88
|
+
Plausible but unconfirmed concerns are non-scoring risks. Each risk records its signal, evidence
|
|
89
|
+
level, confidence, possible impact, and verification needed. It cannot lower the score or fail a
|
|
90
|
+
release gate until evidence promotes it to a finding.
|
|
91
|
+
|
|
92
|
+
Prioritize remediation in this order:
|
|
93
|
+
|
|
94
|
+
1. release-gate, accessibility, safety, and core-task blockers;
|
|
95
|
+
2. shared owner tokens or components that resolve multiple findings;
|
|
96
|
+
3. major hierarchy, form, navigation, and recovery problems;
|
|
97
|
+
4. localized usability and consistency issues;
|
|
98
|
+
5. aesthetic polish.
|
|
99
|
+
|
|
100
|
+
Improve the owning shared primitive before patching instances or inventing a Studio-only path.
|