@litfamily/litgrok 1.0.26 → 1.0.28
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/.grok/hooks/lit-mark.mjs +42 -0
- package/.grok/hooks/lit-status-line.mjs +174 -21
- package/.grok/hooks/plan-gate.mjs +13 -3
- package/.grok/hooks/record-passive-event.mjs +40 -6
- package/.grok/hooks/session-end.json +15 -0
- package/.grok/hooks/session-end.mjs +6 -0
- package/.grok/hooks/session-liveness.mjs +102 -0
- package/.grok/hooks/session-rows.mjs +57 -0
- package/.grok/hooks/session-start.mjs +17 -0
- package/.grok/hooks/workflow-stage.mjs +5 -2
- package/.grok/rules/00-litgrok.md +14 -0
- package/.grok/skills/frontend-ui-ux/ATTRIBUTION.md +23 -0
- package/.grok/skills/frontend-ui-ux/SKILL.md +4 -1
- package/.grok/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +9 -0
- package/.grok/skills/frontend-ui-ux/kit/components.css +414 -0
- package/.grok/skills/frontend-ui-ux/kit/fonts.json +22 -0
- package/.grok/skills/frontend-ui-ux/kit/layouts/landing.html +164 -0
- package/.grok/skills/frontend-ui-ux/kit/layouts/settings.html +114 -0
- package/.grok/skills/frontend-ui-ux/kit/layouts/workspace.html +115 -0
- package/.grok/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +227 -0
- package/.grok/skills/frontend-ui-ux/kit/styles/field-notes.json +205 -0
- package/.grok/skills/frontend-ui-ux/kit/styles/graphite.json +200 -0
- package/.grok/skills/frontend-ui-ux/kit/styles/meadow.json +199 -0
- package/.grok/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +222 -0
- package/.grok/skills/frontend-ui-ux/kit/ui.js +226 -0
- package/.grok/skills/frontend-ui-ux/references/adaptive-layout.md +10 -4
- package/.grok/skills/frontend-ui-ux/references/brand-and-imagery.md +11 -7
- package/.grok/skills/frontend-ui-ux/references/complete-contract.md +21 -0
- package/.grok/skills/frontend-ui-ux/references/composition.md +10 -6
- package/.grok/skills/frontend-ui-ux/references/craft-floor.md +256 -93
- package/.grok/skills/frontend-ui-ux/references/creative-directions.md +9 -6
- package/.grok/skills/frontend-ui-ux/references/default-editorial-pixel.json +28 -0
- package/.grok/skills/frontend-ui-ux/references/house-styles.md +234 -0
- package/.grok/skills/frontend-ui-ux/references/implementation-platforms.md +10 -6
- package/.grok/skills/frontend-ui-ux/references/inclusive-interface.md +11 -5
- package/.grok/skills/frontend-ui-ux/references/interaction-motion.md +34 -78
- package/.grok/skills/frontend-ui-ux/references/motion-guide.md +10 -7
- package/.grok/skills/frontend-ui-ux/references/performance-delivery.md +11 -8
- package/.grok/skills/frontend-ui-ux/references/probe-loop.md +1 -1
- package/.grok/skills/frontend-ui-ux/references/product-direction.md +9 -4
- package/.grok/skills/frontend-ui-ux/references/production-interview.md +17 -0
- package/.grok/skills/frontend-ui-ux/references/redesign-playbook.md +10 -6
- package/.grok/skills/frontend-ui-ux/references/slop-register.md +148 -73
- package/.grok/skills/frontend-ui-ux/references/system-foundations.md +10 -4
- package/.grok/skills/frontend-ui-ux/references/visual-language.md +10 -4
- package/.grok/skills/frontend-ui-ux/references/visual-reconstruction.md +39 -72
- package/.grok/skills/frontend-ui-ux/scripts/design-lock.mjs +400 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-driver.mjs +33 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-lock.mjs +196 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-page.mjs +1555 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-rules.mjs +153 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-server.mjs +57 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-static.mjs +139 -0
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe.mjs +363 -0
- package/.grok/skills/frontend-ui-ux/scripts/pixel-art.mjs +60 -0
- package/.grok/skills/lit-adhd/SKILL.md +155 -0
- package/.grok/skills/lit-adhd/references/card-examples.md +131 -0
- package/.grok/skills/lit-adhd/references/status-taxonomy.md +50 -0
- package/.grok/skills/lit-adhd/scripts/lib/brief.mjs +421 -0
- package/.grok/skills/lit-adhd/scripts/lib/collect.mjs +395 -0
- package/.grok/skills/lit-adhd/scripts/lib/gauge.mjs +87 -0
- package/.grok/skills/lit-adhd/scripts/lib/next-step.mjs +22 -0
- package/.grok/skills/lit-adhd/scripts/lib/plan-task-rows.mjs +32 -0
- package/.grok/skills/lit-adhd/scripts/lib/project-state-root.mjs +55 -0
- package/.grok/skills/lit-adhd/scripts/lib/redact.mjs +64 -0
- package/.grok/skills/lit-adhd/scripts/lib/suggest.mjs +140 -0
- package/.grok/skills/lit-adhd/scripts/lib/transcripts.mjs +232 -0
- package/.grok/skills/lit-adhd/scripts/rewind.mjs +6 -0
- package/.grok/skills/lit-diagram-drawer/SKILL.md +17 -5
- package/.grok/skills/lit-diagram-drawer/references/output-spec.md +2 -2
- package/.grok/skills/lit-diagram-drawer/references/style-guide.md +20 -11
- package/.grok/skills/lit-diagram-drawer/references/type-architecture.md +3 -3
- package/.grok/skills/lit-diagram-drawer/references/type-dependency.md +1 -1
- package/.grok/skills/lit-diagram-drawer/references/type-tree.md +3 -3
- package/.grok/skills/lit-diagram-drawer/references/type-wardley.md +1 -1
- package/.grok/skills/lit-diagram-drawer/references/verifier-guide.md +4 -0
- package/.grok/skills/lit-diagram-drawer/scripts/visual-quality.mjs +2 -2
- package/.grok/skills/lit-handoff/SKILL.md +2 -0
- package/.grok/skills/lit-hijack/SKILL.md +459 -0
- package/.grok/skills/lit-hijack/references/capture-and-provenance.md +124 -0
- package/.grok/skills/lit-hijack/references/clean-room-build.md +130 -0
- package/.grok/skills/lit-hijack/references/distil-and-licence.md +128 -0
- package/.grok/skills/lit-hijack/references/gap-and-port-design.md +150 -0
- package/.grok/skills/lit-hijack/references/parity-and-report.md +130 -0
- package/.grok/skills/lit-hijack/scripts/hijack.mjs +890 -0
- package/.grok/skills/lit-hijack/scripts/lib/safe-fetch.mjs +213 -0
- package/.grok/skills/lit-plan/SKILL.md +3 -1
- package/.grok/skills/lit-plan/references/plan-schema.md +4 -0
- package/.grok/skills/lit-plan/scripts/scaffold-plan.mjs +9 -2
- package/.grok/skills/lit-plan/scripts/scope-roots.mjs +83 -0
- package/.grok/skills/lit-pptx/SKILL.md +10 -5
- package/.grok/skills/lit-pptx/examples/13-engineering-review-computational-brutalism-ko.md +173 -0
- package/.grok/skills/lit-pptx/examples/14-launch-pitch-neo-brutalism-ko.md +154 -0
- package/.grok/skills/lit-pptx/examples/15-design-lecture-bauhaus-ko.md +139 -0
- package/.grok/skills/lit-pptx/examples/16-community-programme-riso-ko.md +158 -0
- package/.grok/skills/lit-pptx/examples/17-public-data-briefing-newsroom-ko.md +179 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +93 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/provenance.json +1 -0
- package/.grok/skills/lit-pptx/references/direction-step.md +34 -8
- package/.grok/skills/lit-pptx/references/tonalities/bauhaus.md +140 -0
- package/.grok/skills/lit-pptx/references/tonalities/computational-brutalism.md +150 -0
- package/.grok/skills/lit-pptx/references/tonalities/neo-brutalism.md +161 -0
- package/.grok/skills/lit-pptx/references/tonalities/newsroom.md +144 -0
- package/.grok/skills/lit-pptx/references/tonalities/riso.md +137 -0
- package/.grok/skills/lit-pptx/scripts/compile-deck.js +1 -1
- package/.grok/skills/lit-pptx/scripts/craft_extras.py +61 -3
- package/.grok/skills/lit-pptx/scripts/deck_output.py +76 -62
- package/.grok/skills/lit-pptx/scripts/embed_fonts.py +14 -1
- package/.grok/skills/lit-pptx/scripts/lib/grid-resolver.js +101 -110
- package/.grok/skills/lit-pptx/scripts/lib/layout-resolver.js +9 -15
- package/.grok/skills/lit-pptx/scripts/lib/render-pack.js +389 -582
- package/.grok/skills/lit-pptx/scripts/lib/slide-grid.js +104 -0
- package/.grok/skills/lit-pptx/scripts/lib/template-registry.js +60 -8
- package/.grok/skills/lit-pptx/scripts/qa_deck.py +4 -4
- package/.grok/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +98 -0
- package/.grok/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +99 -0
- package/.grok/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +107 -0
- package/.grok/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +99 -0
- package/.grok/skills/lit-pptx/templates/tonalities/night/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/paper/pack.yaml +2 -0
- package/.grok/skills/lit-pptx/templates/tonalities/riso/pack.yaml +99 -0
- package/.grok/skills/lit-pptx/templates/tonalities/signal/pack.yaml +3 -0
- package/.grok/skills/lit-pptx/templates/tonalities/studio/pack.yaml +2 -0
- package/.grok/skills/lit-recap/SKILL.md +1 -1
- package/.grok/skills/lit-schematic/SKILL.md +140 -0
- package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +38 -0
- package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +133 -0
- package/.grok/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +87 -0
- package/.grok/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +85 -0
- package/.grok/skills/lit-schematic/references/cutaway-outputs.md +70 -0
- package/.grok/skills/lit-schematic/references/isometric-craft.md +101 -0
- package/.grok/skills/lit-schematic/references/journal-figures.md +72 -0
- package/.grok/skills/lit-schematic/references/kit-api.md +134 -0
- package/.grok/skills/lit-schematic/references/pfd-and-layout.md +53 -0
- package/.grok/skills/lit-schematic/references/pid-drafting.md +103 -0
- package/.grok/skills/lit-schematic/references/pid-symbols.md +163 -0
- package/.grok/skills/lit-schematic/references/verification.md +100 -0
- package/.grok/skills/lit-schematic/scripts/doctor.mjs +57 -0
- package/.grok/skills/lit-schematic/scripts/lib/figure.mjs +81 -0
- package/.grok/skills/lit-schematic/scripts/lib/fonts.mjs +27 -0
- package/.grok/skills/lit-schematic/scripts/lib/geom.mjs +113 -0
- package/.grok/skills/lit-schematic/scripts/lib/interactive.mjs +292 -0
- package/.grok/skills/lit-schematic/scripts/lib/isa.mjs +115 -0
- package/.grok/skills/lit-schematic/scripts/lib/iso.mjs +719 -0
- package/.grok/skills/lit-schematic/scripts/lib/legend-sheet.mjs +162 -0
- package/.grok/skills/lit-schematic/scripts/lib/pid.mjs +937 -0
- package/.grok/skills/lit-schematic/scripts/lib/png.mjs +132 -0
- package/.grok/skills/lit-schematic/scripts/lib/qa-core.mjs +658 -0
- package/.grok/skills/lit-schematic/scripts/lib/route.mjs +218 -0
- package/.grok/skills/lit-schematic/scripts/lib/sheet.mjs +890 -0
- package/.grok/skills/lit-schematic/scripts/lib/svg.mjs +82 -0
- package/.grok/skills/lit-schematic/scripts/lib/theme.mjs +115 -0
- package/.grok/skills/lit-schematic/scripts/motion.mjs +129 -0
- package/.grok/skills/lit-schematic/scripts/qa.mjs +92 -0
- package/.grok/skills/lit-schematic/scripts/render.mjs +233 -0
- package/.grok/skills/lit-schematic/scripts/scaffold.mjs +60 -0
- package/.grok/skills/lit-scientific-visualization/SKILL.md +36 -12
- package/.grok/skills/lit-typographic-motion/SKILL.md +7 -4
- package/.grok/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +11 -0
- package/.grok/skills/lit-typographic-motion/recipes/hero-3d/expected.json +62 -0
- package/.grok/skills/lit-typographic-motion/recipes/hero-3d/index.html +82 -0
- package/.grok/skills/lit-typographic-motion/references/choice-first.md +30 -0
- package/.grok/skills/lit-typographic-motion/references/cover.md +10 -1
- package/.grok/skills/lit-typographic-motion/references/depth.md +119 -0
- package/.grok/skills/lit-typographic-motion/references/treatment.md +9 -1
- package/.grok/skills/lit-typographic-motion/scripts/blender/runner.py +218 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/assets.mjs +230 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/blender.mjs +136 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/board.mjs +153 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/chrome.mjs +61 -32
- package/.grok/skills/lit-typographic-motion/scripts/lib/constants.mjs +4 -2
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-capture.mjs +20 -11
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-treatment.mjs +26 -2
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover.mjs +12 -5
- package/.grok/skills/lit-typographic-motion/scripts/lib/frame-pool.mjs +78 -1
- package/.grok/skills/lit-typographic-motion/scripts/lib/gallery.mjs +160 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/house.mjs +43 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/look.mjs +39 -1
- package/.grok/skills/lit-typographic-motion/scripts/lib/scaffold.mjs +174 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/score.mjs +640 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/sound.mjs +143 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/soundtrack.mjs +12 -3
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-gate.mjs +44 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-qa.mjs +132 -3
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-session.mjs +51 -3
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage.mjs +74 -9
- package/.grok/skills/lit-typographic-motion/scripts/lib/styles.mjs +224 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/treatment.mjs +198 -4
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/LICENSE +21 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/environments/RoomEnvironment.js +144 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/geometries/RoundedBoxGeometry.js +155 -0
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/three.module.js +54571 -0
- package/.grok/skills/lit-typographic-motion/scripts/motion.mjs +56 -6
- package/.grok/skills/lit-typographic-motion/scripts/stage/cover-init.js +20 -8
- package/.grok/skills/lit-typographic-motion/scripts/stage/loop-kit.js +2 -2
- package/.grok/skills/lit-typographic-motion/scripts/stage/stage-kit.js +25 -0
- package/.grok/skills/lit-typographic-motion/styles/paper.json +1 -0
- package/.grok/skills/lit-typographic-motion/styles/swiss-signal.json +1 -0
- package/.grok/skills/lit-typographic-motion/styles/terminalcore.json +1 -0
- package/.grok/skills/lit-typographic-motion/styles/tidal.json +1 -0
- package/.grok/skills/litgrok/SKILL.md +1 -1
- package/.grok/skills/litresearch/SKILL.md +2 -0
- package/.grok/skills/readme-studio/SKILL.md +14 -12
- package/.grok/skills/readme-studio/references/choice-first.md +24 -0
- package/.grok/skills/start-work/SKILL.md +8 -1
- package/.grok-plugin/plugin.json +4 -1
- package/CHANGELOG.md +18 -0
- package/README.md +11 -11
- package/README_ko-KR.md +11 -11
- package/TRADEMARK.md +12 -0
- package/bin/litgrok.mjs +2 -0
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/assets/showcase/brief.webp +0 -0
- package/docs/assets/showcase/deck.webp +0 -0
- package/docs/assets/showcase/page.webp +0 -0
- package/docs/assets/showcase/pid.webp +0 -0
- package/docs/assets/skills/lit-adhd.webp +0 -0
- package/docs/assets/skills/lit-hijack.webp +0 -0
- package/docs/assets/skills/lit-schematic.webp +0 -0
- package/docs/reference.md +11 -7
- package/docs/reference_ko-KR.md +11 -7
- package/hooks/hooks.json +11 -0
- package/package.json +6 -1
- package/plugin.json +1 -1
- package/.grok/skills/frontend-ui-ux/scripts/page-probe.mjs +0 -105
- package/.grok/skills/frontend-ui-ux/scripts/probe.mjs +0 -91
- package/.grok/skills/frontend-ui-ux/scripts/rule-data.mjs +0 -56
- package/.grok/skills/frontend-ui-ux/scripts/static-probe.mjs +0 -27
- package/.grok/skills/frontend-ui-ux/scripts/static-server.mjs +0 -19
|
@@ -3,8 +3,6 @@ first; after the first edit nobody can tell a regression from an intended change
|
|
|
3
3
|
|
|
4
4
|
## Baseline capture
|
|
5
5
|
|
|
6
|
-
Capture before touching a file. No baseline means no parity list and no regression guard.
|
|
7
|
-
|
|
8
6
|
- Pin the pre-change revision; its `source_hash` is the baseline identity.
|
|
9
7
|
- Capture every affected route at `compact` and `expanded`.
|
|
10
8
|
- Capture `loading`, `empty`, `error`, `disabled`, and overflow per route.
|
|
@@ -21,8 +19,6 @@ Classify debt before proposing a treatment; the category decides how far the fix
|
|
|
21
19
|
5. Behavioral: no recovery path, destroyed input, missing progress feedback.
|
|
22
20
|
6. Aesthetic: dated treatment with no functional cost.
|
|
23
21
|
|
|
24
|
-
Rank by what a user cannot do. Aesthetic debt alone does not justify opening a surface.
|
|
25
|
-
|
|
26
22
|
## Decision per surface
|
|
27
23
|
|
|
28
24
|
Record exactly one of four decisions per inventory surface, with one line of reasoning.
|
|
@@ -44,8 +40,6 @@ Order the work so the product ships at the end of every stage.
|
|
|
44
40
|
4. Keep behavioral fixes in their own stages, never folded into a visual stage.
|
|
45
41
|
5. Delete the superseded path only after its last consumer moves.
|
|
46
42
|
|
|
47
|
-
A stage that cannot ship alone is too large. Split it.
|
|
48
|
-
|
|
49
43
|
## Parity list
|
|
50
44
|
|
|
51
45
|
These hold at every stage boundary. Check the captured baseline, not memory.
|
|
@@ -85,3 +79,13 @@ Close only when the record is complete.
|
|
|
85
79
|
- The parity list holds, or each break has an owner and an expiry.
|
|
86
80
|
- The final artifact reached the independent review pass bound to the design contract hash.
|
|
87
81
|
- The receipt states `PASS`, `FAIL`, or `BLOCKED` and names unresolved deviations.
|
|
82
|
+
|
|
83
|
+
## Failure patterns
|
|
84
|
+
|
|
85
|
+
Reject:
|
|
86
|
+
|
|
87
|
+
- Editing before the baseline is captured.
|
|
88
|
+
- "Modernize it" accepted as a scope statement.
|
|
89
|
+
- One branch that migrates every route at once.
|
|
90
|
+
- A failing test rewritten to match the new implementation.
|
|
91
|
+
- A redesign called done while one route still renders the superseded system.
|
|
@@ -1,75 +1,150 @@
|
|
|
1
1
|
# Slop register
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
|
33
|
-
|
|
34
|
-
| SLOP-
|
|
35
|
-
| SLOP-
|
|
36
|
-
| SLOP-
|
|
37
|
-
| SLOP-
|
|
38
|
-
| SLOP-
|
|
39
|
-
| SLOP-
|
|
40
|
-
| SLOP-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
|
45
|
-
|
|
46
|
-
| SLOP-
|
|
47
|
-
| SLOP-
|
|
48
|
-
| SLOP-
|
|
49
|
-
| SLOP-
|
|
50
|
-
| SLOP-
|
|
51
|
-
| SLOP-
|
|
52
|
-
| SLOP-
|
|
53
|
-
| SLOP-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
|
58
|
-
|
|
59
|
-
| SLOP-
|
|
60
|
-
| SLOP-
|
|
61
|
-
| SLOP-
|
|
62
|
-
| SLOP-
|
|
63
|
-
| SLOP-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
|
68
|
-
|
|
69
|
-
| SLOP-
|
|
70
|
-
| SLOP-
|
|
71
|
-
| SLOP-
|
|
72
|
-
|
|
73
|
-
##
|
|
74
|
-
|
|
75
|
-
|
|
3
|
+
This register loads with `references/craft-floor.md` whenever `frontend-ui-ux` activates. A row
|
|
4
|
+
earns a `SLOP-*` id when a designer would read it as a reflex default, the "made by a generator"
|
|
5
|
+
tell, rather than a plain bug below a number. A genericness tell is at most `MEDIUM`: it never
|
|
6
|
+
blocks "done" by itself. The only `HIGH` rows are the three functional ones (SLOP-057 broken
|
|
7
|
+
image, SLOP-058 dead text, nav or call-to-action link, SLOP-059 typeless button beside another
|
|
8
|
+
submit), which block "done" like a craft-floor HIGH until fixed or stated as a limitation.
|
|
9
|
+
|
|
10
|
+
How to use it:
|
|
11
|
+
|
|
12
|
+
- **Run the deterministic rows first.** The interface probe measures every row marked
|
|
13
|
+
*probe*; the static fallback reads the rows marked *static* from source when no browser can
|
|
14
|
+
render. Only then form a holistic view (SLOP-055, SLOP-056), and ground it in the rows that
|
|
15
|
+
fired. "Looks generic" with no cited row is not a finding.
|
|
16
|
+
- **Coverage "judgment"** means DET-assist: the probe prints the hit under "Judgment calls", never
|
|
17
|
+
as a finding, and a person decides (a recorded reason for a common font, a real sequence behind
|
|
18
|
+
section numbers, an emoji policy the brief asked for, a real source behind a figure). The
|
|
19
|
+
severity applies only once you confirm it; state the call as Inferred.
|
|
20
|
+
- **Copy rows read authored copy only**: visible text of the top document, outside code, form
|
|
21
|
+
values, `<title>` and attributes. Text inside a frame is never charged to the page.
|
|
22
|
+
- **Fix with the cheapest tool**: delete, then use the platform, then reuse, then correct a
|
|
23
|
+
value, then add.
|
|
24
|
+
- **Page type decides nothing.** Every surface, from a form to a marketing page, gets the same
|
|
25
|
+
register.
|
|
26
|
+
|
|
27
|
+
Coverage column: *probe* (rendered check), *static* (source check without a browser), *both*,
|
|
28
|
+
or *checklist* (review by eye).
|
|
29
|
+
|
|
30
|
+
## Layout and composition
|
|
31
|
+
|
|
32
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
33
|
+
|---|---|---|---|---|---|
|
|
34
|
+
| SLOP-001 | The same text-and-image split stamped section after section | ≥ 3 consecutive sections with the same column shape and image side | MEDIUM | Break the run with a stacked or full-width section | checklist |
|
|
35
|
+
| SLOP-002 | Identical icon-heading-text tiles as the default way to show anything | ≥ 4 tiles of equal size (±4 px) and structure in one grid, each an icon or image, a heading and text; `ul`, `ol` and `table` grids skipped | MEDIUM | Vary tile size or content shape, or present the items as a list | probe |
|
|
36
|
+
| SLOP-003 | Cards inside cards, or bento cells with nothing in them | nesting depth ≥ 3, or cell count ≠ content count | MEDIUM | Remove the extra shell or reshape the grid | checklist |
|
|
37
|
+
| SLOP-004 | A split header whose side column only restates the headline | short side column (< 15 words) with no role of its own | MEDIUM | Stack headline and body | checklist |
|
|
38
|
+
| SLOP-005 | One section shape reused for unrelated topics | the same structure ≥ 3 times | MEDIUM | Give later repeats a different layout | checklist |
|
|
39
|
+
| SLOP-006 | Every gap the same size on a page that needs grouping | ≥ 5 regions and ≥ 10 samples, one 4 px bucket > 85 %, ≤ 3 buckets | MEDIUM | Space by relationship on a real scale | checklist |
|
|
40
|
+
| SLOP-007 | Big empty gaps that separate nothing | a gap much larger than its neighbours with no job | LOW | Remove it or give it a grouping role | checklist |
|
|
41
|
+
|
|
42
|
+
## Decoration
|
|
43
|
+
|
|
44
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
45
|
+
|---|---|---|---|---|---|
|
|
46
|
+
| SLOP-008 | The reflex violet accent | a gradient stop, or heading text (h1 to h3 or ≥ 20 px), with hue 260° to 310° and an RGB channel spread ≥ 50, unless that hue is the brand's own action colour in ≥ 2 regions | MEDIUM | Neutral surface plus one real brand hue | both |
|
|
47
|
+
| SLOP-009 | Reflex gradient-filled text | `background-clip: text` with a gradient that has a violet stop (SLOP-008's band), or on more than one element, or with a stop under 4.5:1 (3:1 at ≥ 24 px) on its surface; one gradient headline in the palette's own hues is craft | MEDIUM | Keep one, in palette hues with every stop readable, or use a solid colour | both (static: the violet or repeated form) |
|
|
48
|
+
| SLOP-010 | The same coloured glow repeated | CF-404's glow test (≤ 2 px offset, ≥ 16 px blur, saturation > 0.4) on ≥ 3 unrelated controls or headings, not a focus state; one or two glows are CF-404, and a glow on a surface (`ui-glow`) is craft | MEDIUM | Keep the glow for the surface it lights | probe |
|
|
49
|
+
| SLOP-011 | Faint floating blobs with no focal job | ≥ 2 absolutely placed radial gradients under 0.3 opacity that paint only themselves (no text, media, control or link inside); one atmosphere layer behind the focal point is craft | MEDIUM | Keep one layer tied to the focal point | probe (judgment) |
|
|
50
|
+
| SLOP-012 | Dot or line grid texture next to other decoration | ≥ 2 gradient layers or a radial dot on a fixed px cell ≤ 48 px, no canvas, table, grid, `role=img` or SVG over 48 px in its section or landmark, beside a SLOP-008 or SLOP-011 signal (so notebook dots under one atmosphere layer pass) | MEDIUM | Remove unless it stands in for real data | probe |
|
|
51
|
+
| SLOP-013 | Grain or noise dense enough to hide the layout | layout reads better with the layer hidden | LOW | Lighten it or remove it | checklist |
|
|
52
|
+
| SLOP-014 | Glass blur as a default surface | no stated reason and no solid fallback for reduced transparency | LOW | Solid surface unless the brief earns it | checklist |
|
|
53
|
+
| SLOP-015 | Coloured side stripes faking emphasis on cards | on rounded elements: a single-side accent (one side ≥ 2 px saturated, the other three 0 or ≤ 1 px neutral; an all-round outline is not a stripe), an absolutely placed 3 to 12 px `::before`/`::after` bar pinned to one edge (tab and nav indicators skipped), ≥ 3 per scope; an inset 3 to 12 px chromatic shadow counts at 2; status regions and callouts excepted | MEDIUM | Carry emphasis with the fill or an icon | probe |
|
|
54
|
+
|
|
55
|
+
## Typography
|
|
56
|
+
|
|
57
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
58
|
+
|---|---|---|---|---|---|
|
|
59
|
+
| SLOP-016 | A reflex default face (Inter, Roboto, Open Sans, Lato, Montserrat, Arial, Helvetica, Space Grotesk and similar; the Geist family is exempt) | the first family in the stack that actually loaded matches the list (a fallback further down never counts; form controls' browser default is skipped) | MEDIUM | Choose a face for the product or record why the common one stays | both (judgment) |
|
|
60
|
+
| SLOP-017 | A display serif with no reason | a shortlisted serif on headings and no recorded rationale | MEDIUM | Sans display, or record the reason | checklist |
|
|
61
|
+
| SLOP-018 | A giant headline over a tiny afterthought subhead | size ratio ≥ 3.5 and subhead < 14 px | MEDIUM | Raise the subhead or shorten the pairing | checklist |
|
|
62
|
+
| SLOP-019 | Too many type moods | > 3 base families (icon fonts excepted) | MEDIUM | Cut to three or fewer | probe |
|
|
63
|
+
| SLOP-020 | Long all-caps text | uppercase leaf text > 40 characters in a cased script | LOW | Uppercase only for short labels | probe |
|
|
64
|
+
|
|
65
|
+
## Colour
|
|
66
|
+
|
|
67
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
68
|
+
|---|---|---|---|---|---|
|
|
69
|
+
| SLOP-021 | Neutral mid-gray text on a coloured surface | text lightness 40 % to 70 % and saturation < 10 % on a surface with saturation ≥ 25 % (see CF-201 for the contrast floor) | MEDIUM | Tint the text from the surface hue | probe |
|
|
70
|
+
| SLOP-022 | Too many accent hues competing | more than four saturated clusters among filled surfaces (more than one in a calm lock); measured as CF-205 | MEDIUM | Fold the extras into a family the page already uses | via CF-205 |
|
|
71
|
+
| SLOP-023 | Pure #000 or #fff as the base | exact black or white body background or ink (a deliberate all-black dark theme excepted) | LOW | Move a few percent toward the brand neutral | probe |
|
|
72
|
+
|
|
73
|
+
## Motion
|
|
74
|
+
|
|
75
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
76
|
+
|---|---|---|---|---|---|
|
|
77
|
+
| SLOP-024 | Bouncy easing on routine feedback | measured as CF-505 | MEDIUM | Ease-out, no overshoot | via CF-505 |
|
|
78
|
+
| SLOP-025 | Entrances growing out of nothing | measured as CF-503 (start ≥ 0.95) | MEDIUM | Start near 0.95 with opacity 0 | via CF-503 |
|
|
79
|
+
| SLOP-026 | Animating layout properties | measured as CF-508 | MEDIUM | Transform and opacity instead | via CF-508 |
|
|
80
|
+
| SLOP-027 | An endless pulse or blink bound to nothing | infinite opacity or shadow animation with no `data-*`, `aria-busy` or loading class | LOW | Remove, or bind it to real live status | probe |
|
|
81
|
+
| SLOP-028 | Full transitions on every hover and re-render | > 150 ms on repeated interactions (CF-506) | LOW | Instant or ≤ 150 ms for routine changes | checklist |
|
|
82
|
+
|
|
83
|
+
## Structural micro-labels
|
|
84
|
+
|
|
85
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
86
|
+
|---|---|---|---|---|---|
|
|
87
|
+
| SLOP-029 | A tracked uppercase eyebrow over most headings | the visible element right before an h1 to h3 with ≤ 4 words, uppercase, letter-spacing ≥ 0.05 em and ≤ 0.75 × the heading's size; more of them than ceil(visible h2 count / 3) | MEDIUM | Drop the eyebrows | probe |
|
|
88
|
+
| SLOP-030 | 01 / 02 / 03 numbering with no real order | ≥ 2 distinct zero-padded labels before headings | MEDIUM | Remove, or name the real steps | probe (judgment) |
|
|
89
|
+
| SLOP-031 | A fake version or beta stamp in marketing copy | a `vN.N`, beta or build-hash token outside real release notes | MEDIUM | Remove unless the brief is about a release | checklist |
|
|
90
|
+
| SLOP-032 | Decorative status dots | a small coloured dot before labels with no bound state | LOW | Remove or bind to real status | checklist |
|
|
91
|
+
| SLOP-033 | Chained middle-dot strips | ≥ 3 `·` on one line, or a city, offset and weather strip | LOW | Lines or columns instead | probe |
|
|
92
|
+
| SLOP-034 | A strip of mood words along the hero's foot | uppercase non-link tokens in the bottom 15 % of the hero (compliance badges excepted) | MEDIUM | Remove | checklist |
|
|
93
|
+
| SLOP-035 | A "scroll" cue in the first viewport | scroll text or a bouncing chevron | LOW | Remove | checklist |
|
|
94
|
+
|
|
95
|
+
## Copy
|
|
96
|
+
|
|
97
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
98
|
+
|---|---|---|---|---|---|
|
|
99
|
+
| SLOP-036 | Stock marketing phrases | ≥ 1 whole-phrase match against the fixed phrase list in the rule table ("seamless experience", "harness the power", "best-in-class", "차세대 플랫폼" and similar), outside quotes; a bare common word such as "seamless" alone never counts | MEDIUM | A specific, product-true claim | both |
|
|
100
|
+
| SLOP-037 | A placeholder brand name | a stock fictional company name in visible copy | MEDIUM | Name the product from the brief | probe (judgment: it may be the real name) |
|
|
101
|
+
| SLOP-038 | A filler person name | "John Doe", "Jane Smith", "홍길동" and the like | MEDIUM | A specific, local name | probe |
|
|
102
|
+
| SLOP-039 | The "Not X. Y." cadence | ≥ 3 sentence pairs of two shapes: "Not a/an" + a short clause then a capitalised sentence, or a sentence then one opening "No" or "Just" (Latin copy only; no Hangul shape is defined) | LOW | Vary the rhythm | probe |
|
|
103
|
+
| SLOP-040 | Em dashes in shipped copy | any U+2014, or a U+2013 with spaces on both sides that is not a number, time or date range; a doubled dash in Han-majority text and a quote with a cross-origin `cite` are LOW | MEDIUM | Period, comma or parentheses | both |
|
|
104
|
+
| SLOP-041 | Suspiciously round or precise numbers with no source | a stat-shaped number (percent, multiplier, 48k, 10,000+, a unit rate) outside money, dates, times, versions, tables and forms, with no source, footnote, example or mock marker in its block | MEDIUM | Cite it, label it as an example, or cut it | probe (judgment) |
|
|
105
|
+
| SLOP-042 | Several labels for one action | > 1 wording for the same intent | LOW | One label per intent | checklist |
|
|
106
|
+
|
|
107
|
+
## Fake assets and data
|
|
108
|
+
|
|
109
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
110
|
+
|---|---|---|---|---|---|
|
|
111
|
+
| SLOP-043 | A product screenshot built from divs | a ≥ 240 × 160 px box with no media and no focusable control inside showing a row of ≥ 3 window-chrome dots in its top 48 px, or tilted by a transform | MEDIUM | Real screenshot or real component | probe (judgment: a real component preview looks the same) |
|
|
112
|
+
| SLOP-044 | A fake build or sync footer | a version or "synced 4s ago" string outside real docs | MEDIUM | Remove | checklist |
|
|
113
|
+
| SLOP-045 | Matching stat blocks with nothing behind them | ≥ 4 same-height siblings whose figure is ≥ 1.5 × its label (≥ 3 beside a call to action) | MEDIUM | Remove, or back each number with a source | probe (judgment: needs the brief) |
|
|
114
|
+
| SLOP-046 | A gauge or sparkline with a hard-coded value | a progress, meter, dash-array ring or single-series sparkline ≤ 64 px tall with no visible value, axis or accessible name | MEDIUM | Remove unless it shows real data | probe (judgment) |
|
|
115
|
+
| SLOP-047 | A looping logo wall too small to read | an infinite sideways loop of ≤ 6 distinct logos with a median height < 20 px at 1440 px | MEDIUM | Static row, larger logos | probe |
|
|
116
|
+
| SLOP-048 | Carousel dots that do nothing | ≥ 2 dot controls beside ≥ 2 slides, declared autoplay, and no focusable named dot, `aria-controls`, `aria-selected`, `aria-disabled` or `aria-current` (without a declared autoplay attribute the timed read is not run: not verified) | LOW | Remove or wire them up | probe |
|
|
117
|
+
| SLOP-049 | Egg or silhouette avatars | a generic avatar asset | LOW | A believable photo or a deliberate style | checklist |
|
|
118
|
+
| SLOP-050 | Category captions under trust logos | a category word under each logo | LOW | Logo only | checklist |
|
|
119
|
+
|
|
120
|
+
## Icons and illustration
|
|
121
|
+
|
|
122
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
123
|
+
|---|---|---|---|---|---|
|
|
124
|
+
| SLOP-051 | An unlabelled illustration stacked from primitives | an inline SVG ≥ 200 × 200 px with ≥ 8 rect, circle, ellipse or polygon shapes, ≥ 3 fills, ≤ 2 text elements, no pattern and no name (`role="img"` with `aria-label`/`aria-labelledby`, or a `<title>`); a named many-shape drawing of the subject is an authored illustration | MEDIUM | Name what it shows, or draw the subject instead of a generic stack | probe (judgment: an honest diagram clears it) |
|
|
125
|
+
| SLOP-052 | A many-vertex mask faking a photo edge | `clip-path: polygon()` with ≥ 10 vertices, at least half its coordinates off the 25 % grid, or `path()` with ≥ 3 curves | LOW | A real crop or a simple shape | probe |
|
|
126
|
+
| SLOP-053 | Emoji in place of an icon set | emoji as the whole content of a small control, or leading a nav item, badge, list item or heading | LOW | The project's icon set | probe (judgment) |
|
|
127
|
+
| SLOP-054 | Hover zoom on the image itself | a `:hover` transform on `img` | LOW | Transform the container | checklist |
|
|
128
|
+
|
|
129
|
+
## Whole-page reads (last)
|
|
130
|
+
|
|
131
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
132
|
+
|---|---|---|---|---|---|
|
|
133
|
+
| SLOP-055 | Several small tells stacked on one component | ≥ 2 deterministic rows on the same component | MEDIUM (else LOW) | Change that component's visual language | checklist |
|
|
134
|
+
| SLOP-056 | "Could be any competitor's product" | only after every row above ran | LOW | Act on the rows that contribute | checklist |
|
|
135
|
+
|
|
136
|
+
## Functional tells
|
|
137
|
+
|
|
138
|
+
| Id | Tell | Signal and threshold | Severity | Fix | Coverage |
|
|
139
|
+
|---|---|---|---|---|---|
|
|
140
|
+
| SLOP-057 | Broken image | empty, `#` or `undefined` `src` or `srcset` with no lazy-loader attribute, or a fetch that finished and failed; an image not yet fetched at capture is not verified | HIGH | Fix the source or remove the element | both |
|
|
141
|
+
| SLOP-058 | Link to nowhere | `href="#"` or `javascript:` (tier derived: a script handler is invisible to the scan) | HIGH for text, nav or call-to-action links; MEDIUM for logo or icon-only links | A real destination, or a real button | both |
|
|
142
|
+
| SLOP-059 | A typeless button beside another submit | `<button>` without `type` whose form owner (`button.form`, so `form="id"` counts) has ≥ 2 submit-capable buttons; a lone typeless button is the form's intended submit | HIGH | `type="button"` unless it really submits | probe |
|
|
143
|
+
| SLOP-060 | Lorem or placeholder copy | lorem ipsum, `[placeholder]`, TODO, TBD in visible text | LOW | Real copy | both |
|
|
144
|
+
| SLOP-061 | Text in an endless marquee | `<marquee>` or a looping sideways keyframe with no pause | LOW | Static row or a pause control | both |
|
|
145
|
+
| SLOP-062 | A modal opened by reflex | the content did not need to block the page | LOW | Inline panel, toast or disclosure | checklist |
|
|
146
|
+
| SLOP-063 | Monospace as a "technical" costume | monospace on prose with no code or aligned data | LOW | The normal text face | checklist |
|
|
147
|
+
|
|
148
|
+
Slides, documents and diagrams share the layout, decoration, typography, colour, copy and
|
|
149
|
+
fake-data rows; motion, scroll, hover and carousel rows do not transfer. The office and diagram
|
|
150
|
+
skills enforce their own subset in their QA scripts.
|
|
@@ -2,8 +2,6 @@ A design system is three token layers, a finite primitive set, and a gate that p
|
|
|
2
2
|
|
|
3
3
|
## Audit before authoring anything
|
|
4
4
|
|
|
5
|
-
Write nothing until the audit shows no existing token or primitive fits.
|
|
6
|
-
|
|
7
5
|
- List tokens, primitives with their variants, and duplicate components.
|
|
8
6
|
- Count raw one-off values per file; that is the migration size.
|
|
9
7
|
- Mark each primitive keep, extend, or replace, with its replacement cost.
|
|
@@ -11,8 +9,6 @@ Write nothing until the audit shows no existing token or primitive fits.
|
|
|
11
9
|
|
|
12
10
|
## Split the three token layers
|
|
13
11
|
|
|
14
|
-
Layers exist so a value change and a meaning change land in different diffs.
|
|
15
|
-
|
|
16
12
|
1. Foundation: raw values with no meaning — `color.slate.700`, `space.16`, `duration.150`.
|
|
17
13
|
2. Semantic roles: meaning per theme — `color.text.muted`, `color.border.strong`, `radius.control`.
|
|
18
14
|
3. Component decisions: `button.primary.bg`, resolving to a semantic role and nothing else.
|
|
@@ -72,3 +68,13 @@ The system lives in the contract, not in tribal knowledge.
|
|
|
72
68
|
- Validate from the installed skill root: `node .grok/skills/frontend-ui-ux/scripts/validate-design-contract.mjs <path>`.
|
|
73
69
|
- Record the contract hash so the independent review pass binds its receipt to those bytes.
|
|
74
70
|
- Shipping this package also requires `npm test` and the canonical-corpus verifier.
|
|
71
|
+
|
|
72
|
+
## Governance reject-list
|
|
73
|
+
|
|
74
|
+
Reject:
|
|
75
|
+
|
|
76
|
+
- A component reaching past the semantic layer to a foundation value.
|
|
77
|
+
- A primitive or variant introduced for exactly one screen.
|
|
78
|
+
- A state surfaced by review rather than declared in the anatomy.
|
|
79
|
+
- A dark theme assembled from per-component overrides.
|
|
80
|
+
- A value change bundled into the same diff as a reference migration.
|
|
@@ -2,8 +2,6 @@ Visual language is a closed set of named roles with fixed values. What a compone
|
|
|
2
2
|
|
|
3
3
|
## Name type by role, not by family
|
|
4
4
|
|
|
5
|
-
Decide the roles the product needs, bind values to each, and choose a family last.
|
|
6
|
-
|
|
7
5
|
- Cap at 7 roles: display, page title, section title, body, body-strong, meta, label. Add mono only for code.
|
|
8
6
|
- Every role fixes size, weight, line height, tracking, and wrapping behavior.
|
|
9
7
|
- Line height 1.5 for body, 1.2-1.3 for headings, 1.6 for CJK body copy.
|
|
@@ -39,8 +37,6 @@ One geometry, one weight, one metaphor vocabulary. An icon sharpens a label; it
|
|
|
39
37
|
|
|
40
38
|
## Treat imagery as tokens
|
|
41
39
|
|
|
42
|
-
Imagery inherits system values. Undecided imagery becomes layout instability at load.
|
|
43
|
-
|
|
44
40
|
- Aspect-ratio tokens, a declared focal point, and a reserved box before the asset lands.
|
|
45
41
|
- Never bake text into an image; it cannot translate, zoom, or be announced.
|
|
46
42
|
- Text over imagery needs a scrim that restores the measured contrast minimum.
|
|
@@ -72,3 +68,13 @@ Drift is mechanically detectable. Run these before the independent review pass.
|
|
|
72
68
|
2. Count type roles, elevation levels, and radius values against the direction card.
|
|
73
69
|
3. Re-measure contrast in light theme, dark theme, and forced colors.
|
|
74
70
|
4. Record every accepted deviation in `accepted_exceptions` with an owner and expiry.
|
|
71
|
+
|
|
72
|
+
## Failure patterns
|
|
73
|
+
|
|
74
|
+
Reject:
|
|
75
|
+
|
|
76
|
+
- A component importing a palette scale directly.
|
|
77
|
+
- Status carried by hue alone.
|
|
78
|
+
- Contrast reported as "looks fine" with no ratio.
|
|
79
|
+
- Two icon families on one surface.
|
|
80
|
+
- A pie chart with seven slices, or a chart where a table answers the question.
|
|
@@ -1,84 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
real markup with real semantics; never close the gap with a screenshot.
|
|
1
|
+
# Visual reconstruction from references
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
A reference image shows one state at one viewport, rendered by a stack you may not know.
|
|
4
|
+
Rebuild semantic, responsive markup and tune it toward the reference. Never use a screenshot
|
|
5
|
+
as the page background or as a substitute for real content.
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
Keep those labels in the design notes; reader-facing copy should state supported
|
|
8
|
-
measurements normally and ask for missing input directly. State a material
|
|
9
|
-
reconstruction gap once in the reply.
|
|
7
|
+
## Measure the frame
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
Record the image dimensions and device scale. Measure the main content width, outer margins,
|
|
10
|
+
columns, type sizes, baseline spacing, and large color regions before coding. Sample flat
|
|
11
|
+
interior pixels, not edges or gradients. Use the smallest spacing scale that explains the
|
|
12
|
+
measured gaps; do not choose values only because they look close.
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
Keep an internal note that separates direct observations from responsive or behavior
|
|
15
|
+
assumptions and states that other states are not shown. A reference does not establish
|
|
16
|
+
hover, focus, error, loading, or narrower layouts. Add those states from the product's
|
|
17
|
+
interaction contract or ask about a material unknown. Do not place observation labels on
|
|
18
|
+
the interface itself.
|
|
16
19
|
|
|
17
|
-
##
|
|
20
|
+
## Rebuild meaning and assets
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
- Use heading elements in outline order, real navigation lists, and selectable text.
|
|
23
|
+
- Do not reproduce contrast failures or suppress visible keyboard focus.
|
|
24
|
+
- Recreate permitted geometry, rules, simple icons, and gradients.
|
|
25
|
+
- Extract only assets the project is allowed to use; preserve their source resolution.
|
|
26
|
+
- Substitute an unavailable permitted asset at the same dimensions, or omit decoration
|
|
27
|
+
that carries no information. Never recreate a logo, wordmark, or licensed photograph.
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
4. Fit every gap, gutter, and outer margin to the smallest plausible scale.
|
|
29
|
+
When the reference font is unavailable or unlicensed, choose a metric-compatible fallback.
|
|
30
|
+
Compare cap height, x-height, and advance width; adjust line-box metrics only when needed;
|
|
31
|
+
then verify that the longest real label still fits.
|
|
25
32
|
|
|
26
|
-
##
|
|
33
|
+
## Infer responsive behavior
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
One frame proves one width. Classify regions as fixed rail, fluid column, or centered max
|
|
36
|
+
width. Set breakpoints where measured content stops fitting. Decide what wraps, stacks,
|
|
37
|
+
collapses, or scrolls, and inspect the narrowest supported width plus one width around each
|
|
38
|
+
breakpoint. Keep these assumptions in the Design Contract until the user or another source
|
|
39
|
+
confirms them.
|
|
29
40
|
|
|
30
|
-
|
|
31
|
-
- A row of links becomes a navigation list, not a flex row of `div`s.
|
|
32
|
-
- Text baked into the image becomes real, selectable, translatable text.
|
|
33
|
-
- Contrast failures and suppressed focus in the reference are not reproduced.
|
|
41
|
+
## Iterate against the capture
|
|
34
42
|
|
|
35
|
-
|
|
43
|
+
Capture the build at the reference dimensions and device scale. Compare structure, spacing,
|
|
44
|
+
type, then color. Fix the largest measured mismatch and recapture. Stop after three passes
|
|
45
|
+
that do not reduce the overall difference. A fidelity review record can retain per-region
|
|
46
|
+
measurements, source and output paths, unconfirmed states, and asset decisions; the normal
|
|
47
|
+
reader reply needs only the result and a material limitation once.
|
|
36
48
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- Extract: only assets you are permitted to use, at source resolution.
|
|
41
|
-
- Substitute: a placeholder at identical dimensions, marked as a placeholder.
|
|
42
|
-
- Omit: decoration carrying no information; record it in `omissions`.
|
|
43
|
-
|
|
44
|
-
Never recreate a logo, wordmark, or licensed photograph. Substitute and raise a hard stop.
|
|
45
|
-
|
|
46
|
-
## Metric-compatible font fallback
|
|
47
|
-
|
|
48
|
-
When the reference face is unavailable or unlicensed, choose the fallback by metrics.
|
|
49
|
-
|
|
50
|
-
1. Match units-per-em, cap height, x-height, and default advance width.
|
|
51
|
-
2. Hold line boxes with `size-adjust`, `ascent-override`, `descent-override`.
|
|
52
|
-
3. Verify the longest real label still fits at the fallback's advance.
|
|
53
|
-
4. Record the substitution and its metric delta as an owned inferred claim.
|
|
54
|
-
|
|
55
|
-
## Responsive inference from one frame
|
|
56
|
-
|
|
57
|
-
One frame proves one width. State every adaptation as an assumption until confirmed.
|
|
58
|
-
|
|
59
|
-
- Classify each region: fixed rail, fluid column, or centered maximum width.
|
|
60
|
-
- Break where your measured content breaks, not at the reference's width.
|
|
61
|
-
- Name what wraps, stacks, collapses, or scrolls below that width.
|
|
62
|
-
- Check the narrowest supported width and one width above each break.
|
|
63
|
-
|
|
64
|
-
## Iteration loop
|
|
65
|
-
|
|
66
|
-
Iterate on measured deltas, never on impressions.
|
|
67
|
-
|
|
68
|
-
1. Capture your build at the reference's exact dimensions and device scale.
|
|
69
|
-
2. Compare region by region in order: structure, spacing, type, then color.
|
|
70
|
-
3. Fix the single largest measured delta and recapture.
|
|
71
|
-
4. Stop after three passes that do not reduce total delta; report the remainder.
|
|
72
|
-
|
|
73
|
-
## Internal comparison record
|
|
74
|
-
|
|
75
|
-
Keep region deltas, capture paths, assumptions, unknown states, asset decisions, and verdict in
|
|
76
|
-
internal task notes or the verification receipt. Bind independent review to the design-contract
|
|
77
|
-
hash. In the reply, state the result plainly and name a material fidelity gap once.
|
|
78
|
-
|
|
79
|
-
## “Pixel perfect” gate
|
|
80
|
-
|
|
81
|
-
Use this phrase only when both captures share dimensions and device scale; measured differences
|
|
82
|
-
are resolved; assumptions and unknown states are closed; fonts and assets are authorized; and
|
|
83
|
-
every declared state was compared. Otherwise keep numeric comparisons internal and describe
|
|
84
|
-
fidelity in ordinary language.
|
|
49
|
+
Use “pixel perfect” only when dimensions and scale match, every visible state is compared,
|
|
50
|
+
no unexplained measured gap remains, and the typeface and assets are approved. Otherwise
|
|
51
|
+
describe the measured result and the remaining mismatch plainly.
|