ui-design-workbench-cli 0.5.0__py3-none-any.whl
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.
- android_resource_resolver.py +370 -0
- android_xml_support.py +230 -0
- apple_resource_resolver.py +141 -0
- coverage_report.py +134 -0
- fidelity_adapter_api.py +89 -0
- fidelity_adapters.py +508 -0
- fidelity_core.py +241 -0
- fidelity_platform_adapters.py +902 -0
- ir_contracts.py +76 -0
- native_render_android.py +160 -0
- native_render_apple.py +165 -0
- native_render_contracts.py +148 -0
- native_render_registry.py +86 -0
- quality_common.py +217 -0
- render_preview.py +1797 -0
- scan_ui.py +1485 -0
- scoped_context.py +458 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/SKILL.md +52 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/adapter-api.md +20 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/agent-integrations.md +39 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/cache-protocol.md +61 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/design-modes.md +109 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/fidelity.md +53 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/ir-schema.md +412 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/native-rendering.md +40 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/platform-profiles.json +84 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/platform-standards.md +131 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/platforms.md +40 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/quality-automation.md +77 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/review-workflow.md +135 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/ui-guidance-mode.md +22 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/ui-policy-schema.md +83 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/ui-reviewer.md +175 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/validation.md +34 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/references/workbench-ui.md +108 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/native-render-state.schema.json +71 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-agent-job.schema.json +36 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-graph.schema.json +46 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-ir.patch.schema.json +36 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-ir.schema.json +296 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/uidw-config.schema.json +68 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/android_resource_resolver.py +370 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/android_xml_support.py +230 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/apple_resource_resolver.py +141 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/coverage_report.py +134 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/fidelity_adapter_api.py +89 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/fidelity_adapters.py +508 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/fidelity_core.py +241 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/fidelity_platform_adapters.py +902 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/generate_interaction_matrix.py +166 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/ir_contracts.py +76 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/merge_review_state.py +267 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/native_render_android.py +160 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/native_render_apple.py +165 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/native_render_contracts.py +148 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/native_render_registry.py +86 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/quality_common.py +217 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/render_preview.py +1797 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/scan_ui.py +1485 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/scoped_context.py +458 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/smoke_preview.js +978 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/uidw.py +2821 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/uidw_mcp.py +282 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/validate_platform_profiles.py +93 -0
- ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/scripts/visual_regression.py +141 -0
- ui_design_workbench_cli-0.5.0.dist-info/METADATA +133 -0
- ui_design_workbench_cli-0.5.0.dist-info/RECORD +73 -0
- ui_design_workbench_cli-0.5.0.dist-info/WHEEL +5 -0
- ui_design_workbench_cli-0.5.0.dist-info/entry_points.txt +3 -0
- ui_design_workbench_cli-0.5.0.dist-info/top_level.txt +20 -0
- uidw.py +2821 -0
- uidw_mcp.py +282 -0
- validate_platform_profiles.py +93 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Evidence-based UI/UX reviewer
|
|
2
|
+
|
|
3
|
+
Use this workflow when the user asks to review, audit, critique, simplify, or improve an existing interface and expects corrected visual proposals.
|
|
4
|
+
|
|
5
|
+
## Review contract
|
|
6
|
+
|
|
7
|
+
The reviewer must produce three connected artifacts:
|
|
8
|
+
|
|
9
|
+
1. an accurate, source-linked `Before` reconstruction;
|
|
10
|
+
2. a prioritized audit whose findings are anchored to screens and nodes;
|
|
11
|
+
3. one or more restrained correction versions that can be opened directly in `Before / After`.
|
|
12
|
+
|
|
13
|
+
Do not edit application source during the review. Do not redesign untouched regions, invent product requirements, or turn personal taste into a defect. A missing runtime fact remains a validation gap rather than a confident finding.
|
|
14
|
+
|
|
15
|
+
## Evidence order
|
|
16
|
+
|
|
17
|
+
Use the strongest applicable evidence in this order:
|
|
18
|
+
|
|
19
|
+
1. explicit product requirements, user feedback, research, analytics, or support evidence supplied in scope;
|
|
20
|
+
2. repository behavior, task flow, content, design tokens, components, platform versions, and intentional project conventions;
|
|
21
|
+
3. official target-platform guidance from [platform-standards.md](platform-standards.md), including accessibility requirements;
|
|
22
|
+
4. established usability heuristics for visibility, match to user language, control and recovery, consistency, error prevention, recognition, efficiency, minimalism, error recovery, and help;
|
|
23
|
+
5. a clearly labelled inference with `confidence: low` when stronger evidence is unavailable.
|
|
24
|
+
|
|
25
|
+
Never fabricate research, analytics, user intent, legal requirements, or runtime accessibility results. Heuristics can identify risk, not prove that users fail.
|
|
26
|
+
|
|
27
|
+
Use stable heuristic references when needed: `heuristic.visibility`, `heuristic.real-world-language`, `heuristic.user-control`, `heuristic.consistency`, `heuristic.error-prevention`, `heuristic.recognition`, `heuristic.efficiency`, `heuristic.minimalism`, `heuristic.error-recovery`, and `heuristic.help`. Pair a heuristic with source evidence and a platform/accessibility reference whenever the finding depends on a concrete control or behavior.
|
|
28
|
+
|
|
29
|
+
## Scope before scoring
|
|
30
|
+
|
|
31
|
+
Record:
|
|
32
|
+
|
|
33
|
+
- audited platforms and installed UI frameworks;
|
|
34
|
+
- primary and secondary user tasks;
|
|
35
|
+
- included screens, logical views, routes, and relevant states;
|
|
36
|
+
- excluded areas with reasons;
|
|
37
|
+
- available evidence and validation gaps;
|
|
38
|
+
- viewport classes, input methods, themes, localization/RTL, and accessibility conditions in scope.
|
|
39
|
+
|
|
40
|
+
Review the complete requested flow, not only a visually representative screen. Check default, loading, empty, error, offline, permission, disabled, success, destructive confirmation, long content, text scaling, and adaptive layouts where applicable.
|
|
41
|
+
|
|
42
|
+
## Review lenses
|
|
43
|
+
|
|
44
|
+
Evaluate only lenses relevant to the product and platform:
|
|
45
|
+
|
|
46
|
+
- task flow and information architecture;
|
|
47
|
+
- navigation, orientation, back/cancel, and context preservation;
|
|
48
|
+
- visual hierarchy, density, grouping, alignment, spacing, and typography;
|
|
49
|
+
- action priority, affordance, labels, discoverability, and icon comprehension;
|
|
50
|
+
- forms, validation, error prevention, retained input, and recovery;
|
|
51
|
+
- feedback, progress, system status, empty/loading/error/success states;
|
|
52
|
+
- platform component and interaction conformity;
|
|
53
|
+
- accessibility semantics, focus, keyboard, target size, contrast, scaling, motion, and assistive technology structure;
|
|
54
|
+
- responsive/adaptive behavior, safe areas, localization expansion, RTL, and long content;
|
|
55
|
+
- transient surfaces and interaction sequences: menus, popovers, drawers, dialogs, tooltips, selection changes, repeated actions, and dismissal behavior;
|
|
56
|
+
- consistency with the project's mapped component system;
|
|
57
|
+
- content clarity, terminology, destructive wording, and unnecessary cognitive load;
|
|
58
|
+
- privacy, trust, irreversible actions, and exposure of sensitive information when visible in the UI.
|
|
59
|
+
|
|
60
|
+
Do not reward decoration. Simpler means fewer decisions, clearer grouping, safer defaults, less repetition, or a shorter task path—not merely fewer visible elements.
|
|
61
|
+
|
|
62
|
+
## Mandatory interactive behavior pass
|
|
63
|
+
|
|
64
|
+
A visual snapshot is insufficient when the deliverable contains working controls. Exercise the generated HTML preview before completing the review, without running the real application:
|
|
65
|
+
|
|
66
|
+
1. Run every workbench view at least once: `All screens`, `Prototype`, `Single screen`, and the dedicated `Compare` view when retained versions are available. Switch the active ordinary-view version independently.
|
|
67
|
+
2. In `All screens`, test Fit plus manual zoom at 20%, 100%, and 200%. Screen geometry and relative positions must remain stable: zoom scales one shared canvas, its scrollable bounds grow or shrink with that canvas, and cards must not reflow into or overlap one another.
|
|
68
|
+
3. Open each application-menu item in sequence. At most one menu or popover may remain open. Verify dismissal by selecting an item, clicking outside, pressing `Escape`, changing view, and reopening the same trigger.
|
|
69
|
+
4. Exercise navigation, back/forward, panel show/hide, panel resizing, interaction-mode changes, repeated clicks, and the relevant product menus, drawers, dialogs, tabs, and state actions. Check both the end state and intermediate/transient states.
|
|
70
|
+
5. Repeat the interaction pass at the primary review viewport and one narrower adaptive viewport, using pointer and keyboard paths where the control supports both.
|
|
71
|
+
|
|
72
|
+
Record an observed failure as a finding with the exact action sequence, start state, resulting state, affected screen or workbench region, and user impact. If browser interaction is unavailable, list these scenarios as validation gaps and do not claim the interactive review is complete.
|
|
73
|
+
|
|
74
|
+
### State-transition and cross-control matrix
|
|
75
|
+
|
|
76
|
+
Inventory every stateful control and every visible value derived from it. For each transition, verify the complete contract rather than checking only whether the main content changed:
|
|
77
|
+
|
|
78
|
+
- trigger state, action, expected next state, and a repeated/reverse action;
|
|
79
|
+
- visual selection/pressed/open/disabled state;
|
|
80
|
+
- text, number, badge, tooltip, status, and accessible-name synchronization;
|
|
81
|
+
- focus destination, keyboard path, dismissal, and history behavior;
|
|
82
|
+
- effects on dependent controls, panels, menus, selection, scroll position, and persisted state;
|
|
83
|
+
- geometry at the new state: clipping, overlap, reflow, occlusion, reachable scroll bounds, and stable anchors.
|
|
84
|
+
|
|
85
|
+
Include paired and chained actions that can expose stale or conflicting state, for example: zoom → reset → zoom, Fit → resize panel → Fit, open menu A → open menu B → outside click, select node → zoom → hide panel → restore panel, and switch view → browser Back/Forward. Test boundary values and at least one intermediate value, not only defaults.
|
|
86
|
+
|
|
87
|
+
The audit records these checks under `review.audit.interactionChecks`. Each entry states `id`, `startState`, `actions`, `expected`, `observed`, `result`, `viewports`, and `inputMethods`. A `complete` audit cannot contain an untested (`not-run`) interaction check.
|
|
88
|
+
|
|
89
|
+
After the reasoned audit and proposal render, run the HTML Diagnostics Runner. Use its measured report to catch state synchronization, shared-canvas drift/overlap, menu conflicts, text containment, padding/height variance, small targets, and missing accessible names across every rendered screen. Reconcile every failure with the expert findings or a documented false-positive/validation gap. Automated geometry and DOM checks never replace the separate UX assessment: they cannot decide whether information architecture, icon meaning, action priority, cognitive load, or platform idiom is appropriate.
|
|
90
|
+
|
|
91
|
+
### Mandatory typography and geometry pass
|
|
92
|
+
|
|
93
|
+
Treat text and spacing as measurable layout, not as subjective polish. For every toolbar, menu, form row, repeated card, and button group at the reviewed viewport/zoom combinations:
|
|
94
|
+
|
|
95
|
+
- define the intended typography roles and verify a coherent hierarchy of family, size, weight, line height, color, and emphasis;
|
|
96
|
+
- compare sibling label baselines and the top, center, and bottom edges of their control boxes; investigate visible deviation greater than 1 CSS px after normalizing page transforms;
|
|
97
|
+
- measure effective top/right/bottom/left padding, icon-label gap, target box, and spacing between adjacent controls; equal variants must use equal geometry unless the difference is intentional and recorded;
|
|
98
|
+
- count rendered text lines and compare `scrollWidth/clientWidth` and `scrollHeight/clientHeight`; flag unintended wrapping, clipping, ellipsis, overflow, or text leaving its container;
|
|
99
|
+
- verify active, inactive, hover, focus, disabled, loading, and selected variants do not change label position or control dimensions unexpectedly;
|
|
100
|
+
- repeat with long localized labels, text scaling, narrow width, Fit, 100%, and the supported zoom boundaries; distinguish deliberate wrapping from accidental wrapping;
|
|
101
|
+
- visually check optical alignment of icons and text after numeric measurements, because equal boxes do not guarantee equal perceived alignment.
|
|
102
|
+
|
|
103
|
+
Store results under `review.audit.layoutChecks`. Each entry includes `id`, `scope`, `viewports`, `zoomLevels`, `metrics`, `expected`, `observed`, `result`, and linked `findingIds` when it fails. A completed audit requires checks for typographic hierarchy, sibling alignment/baseline, control padding, text containment, and icon-label optical alignment. If geometry cannot be measured, mark the audit partial and record the validation gap.
|
|
104
|
+
|
|
105
|
+
## Separate UX assessment
|
|
106
|
+
|
|
107
|
+
Run a dedicated UX assessment after correctness and interaction testing. Do not collapse UX into a list of rendering bugs. Evaluate:
|
|
108
|
+
|
|
109
|
+
- whether the primary task, current mode, current screen, navigation availability, and next likely action are evident without trial clicks;
|
|
110
|
+
- whether information architecture and grouping match the user's mental model and keep related controls together;
|
|
111
|
+
- whether actions are placed where users expect them, ordered by frequency and consequence, and separated when accidental activation is costly;
|
|
112
|
+
- whether labels, icons, and tooltips make the outcome predictable before activation;
|
|
113
|
+
- whether icon metaphors are conventional for the target platform, visually consistent in family, stroke/fill, optical size, alignment, and emphasis, and distinguishable from adjacent icons;
|
|
114
|
+
- whether icon-only controls have accessible names and whether unfamiliar or ambiguous icons retain a visible label or concise tooltip;
|
|
115
|
+
- whether button size, target area, spacing, hierarchy, disabled/pressed/loading feedback, and destructive styling fit the platform and input method;
|
|
116
|
+
- whether density, repeated controls, competing emphasis, long panels, and simultaneous tool groups overload the interface or hide the primary workflow;
|
|
117
|
+
- whether progressive disclosure removes complexity without hiding essential state or navigation;
|
|
118
|
+
- whether the interface remains coherent at supported widths, zoom levels, text scaling, localization expansion, themes, and input methods.
|
|
119
|
+
- whether typography roles create an intentional hierarchy and repeated controls share stable baselines, padding, label position, and optical alignment.
|
|
120
|
+
|
|
121
|
+
Treat visual beauty as coherence, balance, craft, and fit with the project/platform—not as personal taste. Record assessments under `review.audit.uxAssessment`, with one entry per relevant lens containing `lens`, `status`, `observation`, and linked `findingIds` or a validation gap. A deep review must explicitly cover information architecture, discoverability, action placement, iconography, typographic hierarchy, spacing/alignment, control ergonomics, density/cognitive load, feedback/state visibility, and adaptive behavior.
|
|
122
|
+
|
|
123
|
+
## Finding quality gate
|
|
124
|
+
|
|
125
|
+
Every finding under `review.audit.findings` contains:
|
|
126
|
+
|
|
127
|
+
- stable `id` and concise `title`;
|
|
128
|
+
- `category` and `severity`;
|
|
129
|
+
- `confidence`: `high`, `medium`, or `low`;
|
|
130
|
+
- `screenId` and, when possible, `nodeId` plus source mapping;
|
|
131
|
+
- `observation`: what is verifiably present;
|
|
132
|
+
- `impact`: the user or business consequence;
|
|
133
|
+
- `recommendation`: a concrete correction that preserves stated constraints;
|
|
134
|
+
- non-empty `evidence`, each with `type`, `ref`, and a short `note`;
|
|
135
|
+
- `effort`: `small`, `medium`, or `large`;
|
|
136
|
+
- `proposalVersionId` and optional `decisionId`, or `noProposalReason`.
|
|
137
|
+
|
|
138
|
+
Valid evidence types are `requirement`, `user-feedback`, `research`, `analytics`, `source`, `project-pattern`, `platform-standard`, `accessibility-standard`, and `heuristic`. A URL or standard identifier must be specific enough to verify; `best practice` is not evidence.
|
|
139
|
+
|
|
140
|
+
Use one finding for one causal problem. When a design-system defect repeats, create one `systemic: true` finding with `instances` rather than flooding the audit with duplicates.
|
|
141
|
+
|
|
142
|
+
## Severity and prioritization
|
|
143
|
+
|
|
144
|
+
- `blocker`: prevents the primary task, causes data loss/security/safety risk, or excludes a required user group with no viable workaround.
|
|
145
|
+
- `high`: creates likely errors, severe disorientation, inaccessible core interaction, or substantial abandonment risk.
|
|
146
|
+
- `medium`: adds recurring friction, ambiguity, unnecessary effort, or inconsistent platform behavior without blocking completion.
|
|
147
|
+
- `low`: localized clarity, consistency, or polish issue with limited task impact.
|
|
148
|
+
|
|
149
|
+
Do not infer severity from visual ugliness. Consider task criticality, reach/frequency, reversibility, evidence confidence, and implementation effort. Keep the scorecard traceable to findings; never invent an overall numeric score from intuition.
|
|
150
|
+
|
|
151
|
+
## Correction proposals
|
|
152
|
+
|
|
153
|
+
1. Preserve the baseline nodes and routes.
|
|
154
|
+
2. Create a primary proposal that fixes the highest-value coherent group with the fewest unrelated changes.
|
|
155
|
+
3. Link the version's `findingIds` and `decisionIds` to the audit.
|
|
156
|
+
4. Use project components first, then the platform baseline. Record deviations.
|
|
157
|
+
5. Preserve business rules, data availability, analytics hooks, accessibility labels, and accepted content unless the finding explicitly addresses them.
|
|
158
|
+
6. Add another variant only when it demonstrates a meaningful tradeoff such as density versus guidance or persistent versus progressive disclosure.
|
|
159
|
+
7. Keep unresolved runtime questions in `review.audit.validationGaps`; do not fake them in HTML.
|
|
160
|
+
|
|
161
|
+
Each blocker/high finding must either open a corrected comparison or explain why a responsible visual proposal cannot be made without more evidence.
|
|
162
|
+
|
|
163
|
+
## Presentation order
|
|
164
|
+
|
|
165
|
+
Present:
|
|
166
|
+
|
|
167
|
+
1. a concise audit summary and coverage statement;
|
|
168
|
+
2. blocker/high findings first, then medium/low;
|
|
169
|
+
3. systemic findings before repeated instances;
|
|
170
|
+
4. direct navigation to the affected screen/node;
|
|
171
|
+
5. `Before / After` for each linked proposal;
|
|
172
|
+
6. tradeoffs and validation gaps;
|
|
173
|
+
7. explicit design approval controls, separate from source-edit approval.
|
|
174
|
+
|
|
175
|
+
The HTML workbench lets the user filter findings, focus the affected element, compare its proposed correction, and accept/reject the finding. Export those decisions with annotations for the next iteration.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Delivery validation
|
|
2
|
+
|
|
3
|
+
Run this checklist for every final bundle. The detailed commands and report formats live in [quality-automation.md](quality-automation.md).
|
|
4
|
+
|
|
5
|
+
## Coverage and fidelity
|
|
6
|
+
|
|
7
|
+
- Inventory includes platforms, all screens/logical views/routes/navigation targets, source-evidenced surfaces, components, tokens, assets, and explicit exclusions. `screenTree` contains every screen exactly once and preserves every discovered `groupPath`/`parentFragment`; a flat list is not complete hierarchy coverage.
|
|
8
|
+
- Coverage is 100% for declared screens, routes, and visible navigation. Component mappings and source/design evidence pass the mode-specific thresholds.
|
|
9
|
+
- The viewport content box matches the target size. Reconstruction reports `exact`, `high`, `approximate`, or `unsupported`; never claim pixel parity without runtime comparison.
|
|
10
|
+
- Platform profile, semantics, target size, states, contrast, accessibility, installed-framework constraints, and input methods are explicit and pass strict validation or remain named blockers.
|
|
11
|
+
|
|
12
|
+
## Workbench behavior
|
|
13
|
+
|
|
14
|
+
- All screens uses a single scalable canvas at Fit, 20%, 100%, and 200% without changing card dimensions, reflow, overlap, or incorrect scroll bounds. Zoom reset updates both geometry and displayed value.
|
|
15
|
+
- Prototype navigation, browser history, Single-screen freezing, active/hover-target tree colors, menu mutual exclusion/dismissal, panel collapse/resize persistence, compact overlay behavior, and selection/scroll persistence all work.
|
|
16
|
+
- Properties, Review, and Comments are isolated contextual panels. Icons use one coherent SVG family, icon-only actions have names/tooltips, and top chrome remains compact and unambiguous.
|
|
17
|
+
- The Problems toggle, active-version selector, Compare view, left/right version selectors, and split/overlay choices expose accurate states without duplicating commands or changing unrelated toolbar geometry.
|
|
18
|
+
- Finding markers use the same stable numbers as the Problems list, remain anchored after zoom/scroll/resize, open only one inline description at a time, collapse back to a circle, follow all finding filters, and never edit source. Findings declared in a proposal's `resolvedFindingIds` are hidden only on that version and stay visible on the baseline side of Compare.
|
|
19
|
+
|
|
20
|
+
## Deep review
|
|
21
|
+
|
|
22
|
+
- Exercise default, loading, empty, error, offline, permission, disabled, success, destructive, focus, active/inactive, long-label/localization, text-scale, theme, narrow, and platform-specific states where applicable.
|
|
23
|
+
- Build interaction and cross-control scenarios for single, repeated, reverse, chained, boundary, and intermediate actions. Verify visual state, displayed values, focus, history, persistence, dependencies, scroll, and geometry after every transition.
|
|
24
|
+
- Measure typography hierarchy, baselines, four-side padding, icon-label gaps, box edges/heights, line counts, clipping, containment, overflow, and optical alignment at primary/compact viewports and zoom boundaries.
|
|
25
|
+
- Run a separate UX assessment of information architecture, discoverability, action priority/location, icon meaning/style, ergonomics, density/cognitive load, feedback/state visibility, progressive disclosure, adaptive behavior, platform fit, and visual coherence.
|
|
26
|
+
- Every non-pass check links to stable findings. Each finding has evidence, observation, impact, recommendation, severity, confidence, source target, standard/project basis, and proposal or `noProposalReason`. Consolidate repeated causal defects as systemic findings.
|
|
27
|
+
|
|
28
|
+
## Automation and approval
|
|
29
|
+
|
|
30
|
+
- Run strict platform validation, strict coverage, interaction-matrix generation for stateful UI, primary/compact diagnostics, screenshot plus geometry capture, and visual regression only against an explicitly approved matching baseline.
|
|
31
|
+
- The Review entry point checks the declared scope, records exact coverage/history, groups systemic failures, and exposes Problems and Changes with task-language decisions.
|
|
32
|
+
- Agent jobs include stable selection/scope/revision data, immutable-baseline rules, allowed writes, and `sourceChangeAllowed: false`. Preparing a proposal or review never claims execution started.
|
|
33
|
+
- A proposal requires explicit design acceptance. A separate source plan still requires approval of intended application files and diff.
|
|
34
|
+
- The preview performs no network requests. Report unsupported constructs, skipped tests, validation gaps, and residual risk.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Production workbench UI
|
|
2
|
+
|
|
3
|
+
Use this reference when generating the review workbench shell itself. It governs the editor chrome around reconstructed screens; it must never leak into the product UI being reviewed.
|
|
4
|
+
|
|
5
|
+
## Canvas-first information architecture
|
|
6
|
+
|
|
7
|
+
Give each persistent region one job:
|
|
8
|
+
|
|
9
|
+
- a narrow left rail starts with the conventional File/menu trigger, then switches Screens, Properties, Review, and Comments, exposes the language icon menu, controls right-panel visibility, and remains available when panels collapse;
|
|
10
|
+
- the left panel contains project/screen navigation, hierarchy, search, and low-priority coverage metadata;
|
|
11
|
+
- one compact document bar contains product identity, current screen path, and the single active version used by ordinary views; document actions and locale selection stay in the rail instead of consuming canvas width;
|
|
12
|
+
- the canvas owns screen previews and comparisons;
|
|
13
|
+
- a floating canvas palette switches view and interaction tools and independently toggles `Problems`;
|
|
14
|
+
- Compare is a dedicated view: its compact contextual bar selects the left and right versions and then the split/overlay layout. Do not mix version selection with view selection through a `Before / Compare / After` visibility group;
|
|
15
|
+
- a small bottom-right cluster owns zoom only;
|
|
16
|
+
- the right panel is contextual and shows only `Properties`, `Review`, or `Comments`. Every area is directly reachable from the rail, while Inspect and Comment canvas tools also open their matching area; do not add a duplicate tab row inside the panel.
|
|
17
|
+
|
|
18
|
+
Do not duplicate the same primary control in several persistent regions. Menu commands may repeat toolbar actions only as a conventional keyboard/menu fallback. Keep document actions, canvas tools, object properties, review decisions, and navigation visually distinct.
|
|
19
|
+
|
|
20
|
+
This structure follows stable patterns documented in Figma, Sketch, and Penpot: navigation/layers on the left, a dominant scrollable canvas, contextual properties on the right, dedicated prototype/comment modes, and collapsible UI for more canvas space.
|
|
21
|
+
|
|
22
|
+
Official pattern references:
|
|
23
|
+
|
|
24
|
+
- Figma navigation and panels: https://help.figma.com/hc/en-us/articles/360039831974-Explore-the-navigation-bar-and-left-sidebar
|
|
25
|
+
- Figma properties and prototype modes: https://help.figma.com/hc/en-us/articles/360039832014-Design-Prototype-and-view-Code-in-the-Properties-Panel
|
|
26
|
+
- Figma comments: https://help.figma.com/hc/en-us/articles/360039825314
|
|
27
|
+
- Sketch toolbar: https://www.sketch.com/docs/interface-and-settings/the-mac-app-interface/the-toolbar/
|
|
28
|
+
- Sketch layer list: https://www.sketch.com/docs/interface-and-settings/the-mac-app-interface/the-layer-list/
|
|
29
|
+
- Sketch canvas: https://www.sketch.com/docs/interface-and-settings/the-mac-app-interface/the-canvas/
|
|
30
|
+
- Penpot interface: https://help.penpot.app/user-guide/first-steps/the-interface/
|
|
31
|
+
|
|
32
|
+
## Progressive disclosure
|
|
33
|
+
|
|
34
|
+
- Show the screen tree by default on wide windows.
|
|
35
|
+
- Show only the active right-panel tab. Selecting an inspection or comment tool opens its matching tab.
|
|
36
|
+
- Keep diagnostics collapsed until requested or until a run has non-pass results.
|
|
37
|
+
- Present Review as three explicit user steps: `Проверка`, `Проблемы`, and `Исправление`. Each step must show its completion state and a short plain-language outcome.
|
|
38
|
+
- Keep exactly one visually primary contextual action in the sticky footer. It advances the workflow: check the interface, inspect issues, prepare a fix, compare it, approve it, and apply it.
|
|
39
|
+
- Selection is a separate transition: after choosing findings, step 2 says exactly how many are selected and offers `Перейти к исправлению · N`. It must not start proposal generation or show an apply-to-project action.
|
|
40
|
+
- Show `Применить исправления · N` only while step 3 is active, only after the selected proposal has been compared and approved. Steps 1 and 2 must never expose source-application wording.
|
|
41
|
+
- Count expert and runtime findings together in the human-facing result. Never report “no issues” while unresolved expert findings exist.
|
|
42
|
+
- Keep coverage, history, raw diagnostics, AI handoff, JSON import/export, and direct source changes inside collapsed `Дополнительно` or caution regions. They are escape hatches for advanced users, not parallel primary workflows.
|
|
43
|
+
- Keep finding observation and actions visible; place impact, recommendation, and evidence in an expandable detail region.
|
|
44
|
+
- Use the same stable number for each finding in the Problems list and on the canvas. Canvas markers remain circles until clicked, open one compact anchored card at a time, and expose an unambiguous top-right collapse control that restores the circle.
|
|
45
|
+
- Render unresolved user comments on the canvas as numbered markers from a distinct, non-severity color family. They open and collapse like findings but remain a separate semantic layer and list.
|
|
46
|
+
- Use short empty states that name the next direct action. Do not add tutorial paragraphs to compensate for ambiguous controls.
|
|
47
|
+
- Do not vertically stack the three steps or expose multiple competing “start/fix/export” buttons. Secondary actions may remain available inside expandable details but must not compete visually with the contextual primary action.
|
|
48
|
+
- Name versions by user meaning: `Исходный макет` and `Новый макет`, optionally followed by a concise proposal name. Do not expose unexplained `Before`/`After` labels. Fresh redesign previews open the newest proposal by default and clearly identify it as the new mockup; this does not imply that source files were changed.
|
|
49
|
+
- Keep the finding lifecycle explicit: `Найдена → Выбрана → Учтена в новом макете → Макет подтверждён → Применена → Проверена`. `resolvedFindingIds` stops at “Учтена в новом макете”; it must never make a card, step, or version look applied or verified. Only a targeted passing `verification` record may produce `Применено и проверено`.
|
|
50
|
+
- Show the proposal status persistently beside the version selector. Until source implementation and targeted verification are recorded, use `Ещё не применён к проекту` (or `Задание на применение подготовлено` after handoff), even after the proposal is approved.
|
|
51
|
+
|
|
52
|
+
## Controls and visual system
|
|
53
|
+
|
|
54
|
+
- Use one coherent inline SVG icon family with equal view boxes, stroke behavior, optical size, and alignment. Do not use mixed Unicode glyphs as workbench icons.
|
|
55
|
+
- Keep icon-only controls for conventional actions such as panel collapse, zoom, and export. Give every icon-only control an accessible name and concise tooltip.
|
|
56
|
+
- Retain visible labels for modes whose meaning is not safely conveyed by an icon alone. Labels may collapse at narrow widths.
|
|
57
|
+
- Use restrained neutral surfaces, one primary accent, semantic success/warning/error colors, subtle borders, and elevation only for floating or transient surfaces.
|
|
58
|
+
- Base dense desktop controls on a 28–32 px visual box while preserving at least a 24×24 CSS px WCAG target and larger targets where space permits.
|
|
59
|
+
- Use stable typography roles: 13 px panel/page title, 10–11 px primary control/body text, 8–9 px metadata. Never shrink essential task text merely to fit a panel.
|
|
60
|
+
- Equivalent segmented controls must share height, padding, baseline, icon box, and selected-state geometry.
|
|
61
|
+
- Localize every built-in workbench label, accessible name, tooltip, empty state, and toast at runtime with native-language choices (`Русский`, `English`) and persist the locale in local storage plus `?lang=`. Stable internal values may remain English. Never translate the reconstructed product, screen names, version names, findings, comments, or evidence.
|
|
62
|
+
|
|
63
|
+
## Adaptive behavior
|
|
64
|
+
|
|
65
|
+
- Wide layout: left navigation and contextual right panel may coexist.
|
|
66
|
+
- Compact desktop/tablet layout: panels become overlays. Opening one closes the other so the canvas retains a useful working width.
|
|
67
|
+
- Narrow layout: rail remains; panel labels and nonessential document-bar items collapse before controls disappear.
|
|
68
|
+
- Panel width, active tab, selected node, review filter, scroll, and collapse state persist by review revision.
|
|
69
|
+
- Persist review results independently from the generated shell version. Rebuilding `ui-preview.html` with unchanged target screens/nodes/versions must restore diagnostics, run history, selections, decisions, annotations, and view context automatically. Never let unload or incidental UI interaction overwrite a quarantined stale snapshot before the reviewer chooses migrate or discard.
|
|
70
|
+
- Version runtime diagnostics independently. An engine upgrade or a new run removes obsolete runtime findings but preserves expert findings, decisions, annotations, run history, and view context.
|
|
71
|
+
- Put `Сохранить ревью` and `Восстановить ревью` in File. Both are explicit actions; opening or checking a preview must never download a file.
|
|
72
|
+
- A panel opened from a finding, comment, inspection tool, diagnostic, or application menu must select the relevant tab automatically.
|
|
73
|
+
|
|
74
|
+
## Interaction contract
|
|
75
|
+
|
|
76
|
+
- `All screens`, `Prototype`, `Single screen`, optional `Variants`, and `Compare` are view modes and stay in one group. `Variants` is disabled when the current screen has neither extra scenarios nor extra source-evidenced themes; do not create filler states or themes merely to enable it. No other persistent control may also enter Compare.
|
|
77
|
+
- The bottom canvas palette keeps view modes plus only the pointer/Interact escape action. `Properties` and `Comments` in the rail activate Inspect and Comment respectively; the Problems visibility toggle lives inside the Problems panel, so these commands are not duplicated in the persistent bottom palette.
|
|
78
|
+
- Prototype is the only mode in which declared navigation changes screens. Entering it activates Interact, and selecting a screen in the tree preserves Prototype instead of silently falling back to Single screen.
|
|
79
|
+
- Single screen and Prototype show one stable compact control bar only when alternatives exist. Use fixed-width native selectors for Theme and State rather than one button per value; changing long labels must not resize the bar, move the canvas, or lose keyboard focus. One grid action opens `Variants`, which provides `By theme`, `By state`, and, only when both dimensions vary, `Matrix`. The matrix is split into visually separate theme sections; it must not flatten every combination into one unlabelled grid. Every device retains its theme, scenario patch, stable geometry, and label.
|
|
80
|
+
- Selecting a node synchronizes canvas highlight, layer/screen context, and the Properties or Comments panel without losing canvas scroll.
|
|
81
|
+
- Menus and popovers are mutually exclusive and close on action, outside click, `Escape`, or view change.
|
|
82
|
+
- Diagnostics must be observational: menu, keyboard, and interaction checks may use inert diagnostic controls but must never activate export, source-change, clipboard, navigation, or other consequential user commands. `ui-review-state.json` is downloaded only after an explicit user click on `Сохранить ревью`.
|
|
83
|
+
- The current screen and hovered navigation destination use distinct colors.
|
|
84
|
+
- Design approval and source implementation are separate phases with separate actions. The primary safe flow is preview → approve → `Apply to project`; the Problems workspace also exposes one unmistakable `Fix everything in project` fast path. Never label a generated After mockup as a completed project fix.
|
|
85
|
+
- Ordinary views render exactly one version chosen in the document bar. Version selection never changes the view mode.
|
|
86
|
+
- Compare mode allows any two retained review versions, not only baseline versus latest, while preserving the immutable baseline. Its left/right selectors and Split/Overlay controls appear only inside the dedicated Compare context and never duplicate the main view switcher.
|
|
87
|
+
- `Problems` is a visibility layer, not a separate review mode. Its marker set follows the current severity/source/screen/focused-block filters and never invents an anchor for a finding whose screen cannot be located.
|
|
88
|
+
- Clicking a finding marker opens its description on the canvas without navigating away. Opening a second marker closes the first; hiding Problems, changing screen/version, or collapsing the card leaves list state and numbering synchronized.
|
|
89
|
+
- Place markers beside the device they annotate, not in one global right-hand stack. In Compare, markers for the left version use the outer left edge and markers for the right version use the outer right edge; in ordinary views choose the nearest device edge to the anchor. User-comment markers follow the same placement rule in their own color.
|
|
90
|
+
- Bind each review to an immutable `reviewVersionId`, defaulting to the baseline. Version selectors change only what is displayed; they never retarget or rerun the review. Baseline finding markers appear only on that reviewed version, never on proposal versions, and only on the original side of Compare. A correction version lists the baseline findings it addresses in `resolvedFindingIds`; this means “shown as corrected in this proposal”, not source implementation or verification. Merely linking a finding with `findingIds`, setting legacy `status: resolved`, approving the proposal, or preparing an agent handoff is also insufficient.
|
|
91
|
+
- Finding and comment markers use the scrollable canvas as their containing block, resolve collisions independently for each rendered device and side, and are remeasured after zoom, canvas/device scroll, resize, version change, and panel layout change. They must remain beside the owning device; leader lines preserve the exact node relationship when collision avoidance changes the vertical slot.
|
|
92
|
+
- Holding the middle mouse button and dragging pans the entire canvas in both axes where overflow exists. Prevent browser autoscroll, show a grabbing cursor while active, and release capture on pointer up/cancel without activating product controls.
|
|
93
|
+
- Large reviews default to all screens but may be scoped to the current screen. The scope and exact counts must travel in diagnostics and AI handoff payloads.
|
|
94
|
+
|
|
95
|
+
## Production acceptance gate
|
|
96
|
+
|
|
97
|
+
Before delivery:
|
|
98
|
+
|
|
99
|
+
1. Render screenshots at a primary viewport and one compact viewport.
|
|
100
|
+
2. Inspect visual hierarchy, canvas area, panel competition, icon consistency, label baselines, spacing, clipping, selected states, empty states, and floating-control occlusion.
|
|
101
|
+
3. Run the Diagnostics Runner and the review workflow smoke test.
|
|
102
|
+
4. Click the one-button review launcher and confirm that it covers every screen/profile, converts every non-pass result into a focused finding set without duplicates, and enables a self-contained expert-review export only after completion.
|
|
103
|
+
5. Verify the agent handoff uses an absolute review-directory path, prepares only a prompt/job, clearly asks the user to send it, requires no server or open port, and leaves source modification blocked. Verify `Скопировать запрос`, `Обновить макет`, and the JSON fallback independently; test native adapters separately.
|
|
104
|
+
6. Verify Summary/Problems/Changes isolation, contextual primary-action progression, source/screen filters, bulk selection, named run history, expert-result import, revision/project rejection, and active proposal comparison.
|
|
105
|
+
7. Verify compact-width panel mutual exclusion, every right-panel tab, every view/tool combination, panel resizing/collapse, menu dismissal, zoom, tree search, and version approval.
|
|
106
|
+
8. Verify Problems state, active-version selection, dedicated Compare version pairing/layout, direct-link state normalization, marker/list number parity, per-version resolution, per-device-side placement, distinct user-comment markers, collision-free layout and anchoring after zoom/scroll/resize, single-popover behavior, and collapse back to a marker.
|
|
107
|
+
9. Verify the restored rail commands, File and language icon menus, mutually exclusive menu dismissal, middle-button canvas pan, pointer release/cancel, marker click isolation, RU/EN switching, locale persistence, and that product/user content remains untranslated.
|
|
108
|
+
10. Reject the shell if understanding the primary controls depends on permanent help copy.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/Elgreed/ui-design-workbench/schemas/native-render-state.schema.json",
|
|
4
|
+
"title": "UI Design Workbench native render state",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "type", "repository", "status", "currentFidelityTier", "nativeExecutionStarted", "platforms", "providers", "captures"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": { "const": 1 },
|
|
9
|
+
"type": { "const": "ui-design-workbench-native-render-state" },
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["root"],
|
|
13
|
+
"properties": { "root": { "type": "string" } },
|
|
14
|
+
"additionalProperties": true
|
|
15
|
+
},
|
|
16
|
+
"status": { "enum": ["pass", "not-applicable"] },
|
|
17
|
+
"currentFidelityTier": { "enum": ["structural", "native-preview", "device-verified"] },
|
|
18
|
+
"nativeExecutionStarted": { "type": "boolean" },
|
|
19
|
+
"platforms": { "type": "array", "items": { "type": "object" } },
|
|
20
|
+
"providers": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"required": ["id", "platform", "status", "availableFidelityTier", "execution"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"id": { "type": "string", "minLength": 1 },
|
|
27
|
+
"platform": { "type": "string", "minLength": 1 },
|
|
28
|
+
"status": { "enum": ["configured", "available", "not-configured", "host-required", "not-applicable"] },
|
|
29
|
+
"availableFidelityTier": { "enum": ["native-preview", "device-verified"] },
|
|
30
|
+
"execution": { "const": "explicit-only" }
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"captures": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": ["id", "providerId", "platform", "screenId", "sourceFingerprint", "status", "fidelityTier"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"id": { "type": "string", "minLength": 1 },
|
|
42
|
+
"providerId": { "type": "string", "minLength": 1 },
|
|
43
|
+
"platform": { "type": "string", "minLength": 1 },
|
|
44
|
+
"screenId": { "type": "string", "minLength": 1 },
|
|
45
|
+
"stateId": { "type": "string" },
|
|
46
|
+
"sourceFingerprint": { "type": "string", "minLength": 1 },
|
|
47
|
+
"status": { "enum": ["ready", "blocked", "failed", "stale"] },
|
|
48
|
+
"fidelityTier": { "enum": ["native-preview", "device-verified"] },
|
|
49
|
+
"artifacts": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"properties": {
|
|
52
|
+
"image": { "$ref": "#/$defs/relativePath" },
|
|
53
|
+
"semantics": { "$ref": "#/$defs/relativePath" },
|
|
54
|
+
"geometry": { "$ref": "#/$defs/relativePath" }
|
|
55
|
+
},
|
|
56
|
+
"additionalProperties": false
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"additionalProperties": true
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"$defs": {
|
|
64
|
+
"relativePath": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"minLength": 1,
|
|
67
|
+
"pattern": "^(?!/)(?![A-Za-z]:[/\\\\])(?!.*(?:^|/)\\.\\.(?:/|$)).+$"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"additionalProperties": true
|
|
71
|
+
}
|
ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-agent-job.schema.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/Elgreed/ui-design-workbench/schemas/ui-agent-job.schema.json",
|
|
4
|
+
"title": "UI Design Workbench portable agent job",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["type", "version", "provider", "kind", "artifactDir", "allowedWrites", "sourceChangeAllowed"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"type": { "const": "ui-design-workbench-agent-job" },
|
|
9
|
+
"version": { "enum": [1, 2, 3] },
|
|
10
|
+
"provider": { "type": "string" },
|
|
11
|
+
"kind": { "enum": ["expert", "proposal", "source-plan", "implementation"] },
|
|
12
|
+
"artifactDir": { "type": "string" },
|
|
13
|
+
"uiIrFile": { "type": "string" },
|
|
14
|
+
"contextFile": { "type": "string" },
|
|
15
|
+
"patchFile": { "type": "string" },
|
|
16
|
+
"contextBudget": { "type": "object" },
|
|
17
|
+
"scope": { "enum": ["all", "current"] },
|
|
18
|
+
"screenIds": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
|
|
19
|
+
"acceptedFindingIds": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
|
|
20
|
+
"allowedWrites": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
|
|
21
|
+
"projectRoot": { "type": "string" },
|
|
22
|
+
"sourceTargets": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
|
|
23
|
+
"sourceChangeAllowed": { "type": "boolean" }
|
|
24
|
+
},
|
|
25
|
+
"allOf": [
|
|
26
|
+
{
|
|
27
|
+
"if": { "properties": { "kind": { "const": "implementation" } }, "required": ["kind"] },
|
|
28
|
+
"then": {
|
|
29
|
+
"properties": { "sourceChangeAllowed": { "const": true }, "sourceTargets": { "minItems": 1 } },
|
|
30
|
+
"required": ["projectRoot", "sourceTargets"]
|
|
31
|
+
},
|
|
32
|
+
"else": { "properties": { "sourceChangeAllowed": { "const": false } } }
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"additionalProperties": true
|
|
36
|
+
}
|
ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-graph.schema.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/Elgreed/ui-design-workbench/schemas/ui-graph.schema.json",
|
|
4
|
+
"title": "UI Design Workbench source graph",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["version", "graphType", "repoRoot", "summary", "screenTree", "nodes", "edges"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"version": { "const": 1 },
|
|
9
|
+
"graphType": { "const": "ui-source-map" },
|
|
10
|
+
"repoRoot": { "type": "string" },
|
|
11
|
+
"project": { "type": "object" },
|
|
12
|
+
"detectedPlatforms": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
|
|
13
|
+
"summary": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"required": ["nodes", "edges", "screens", "routes"],
|
|
16
|
+
"additionalProperties": { "type": "integer", "minimum": 0 }
|
|
17
|
+
},
|
|
18
|
+
"screenTree": { "type": "array" },
|
|
19
|
+
"nodes": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": ["id", "kind"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"id": { "type": "string" },
|
|
26
|
+
"kind": { "enum": ["source", "screen", "route", "component", "token-file", "navigation-target"] }
|
|
27
|
+
},
|
|
28
|
+
"additionalProperties": true
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"edges": {
|
|
32
|
+
"type": "array",
|
|
33
|
+
"items": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"required": ["source", "target", "kind"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"source": { "type": "string" },
|
|
38
|
+
"target": { "type": "string" },
|
|
39
|
+
"kind": { "type": "string" }
|
|
40
|
+
},
|
|
41
|
+
"additionalProperties": true
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"additionalProperties": true
|
|
46
|
+
}
|
ui_design_workbench_cli-0.5.0.data/data/share/ui-design-workbench/schemas/ui-ir.patch.schema.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/Elgreed/ui-design-workbench/schemas/ui-ir.patch.schema.json",
|
|
4
|
+
"title": "UI Design Workbench sparse IR patch",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["type", "version", "target", "operations"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"type": { "const": "ui-design-workbench-ir-patch" },
|
|
9
|
+
"version": { "const": 1 },
|
|
10
|
+
"target": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["uiIrFile"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"uiIrFile": { "type": "string", "minLength": 1 },
|
|
15
|
+
"project": { "type": ["string", "null"] },
|
|
16
|
+
"baselineHash": { "type": ["string", "null"] },
|
|
17
|
+
"reviewRevision": { "type": ["string", "null"] }
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
},
|
|
21
|
+
"contextFile": { "type": ["string", "null"] },
|
|
22
|
+
"operations": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"required": ["op", "value"],
|
|
27
|
+
"properties": {
|
|
28
|
+
"op": { "enum": ["upsert-findings", "upsert-versions", "merge-annotations", "record-verifications"] },
|
|
29
|
+
"value": { "type": "array" }
|
|
30
|
+
},
|
|
31
|
+
"additionalProperties": false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"additionalProperties": false
|
|
36
|
+
}
|