agemon 0.1.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +732 -28
- package/assets/skills/architecture/agemon-architecture/LICENSE +21 -0
- package/assets/skills/architecture/agemon-architecture/NOTICE.md +9 -0
- package/assets/skills/architecture/agemon-architecture/SKILL.md +275 -0
- package/assets/skills/code-quality/agemon-clean-code/LICENSE +21 -0
- package/assets/skills/code-quality/agemon-clean-code/NOTICE.md +9 -0
- package/assets/skills/code-quality/agemon-clean-code/SKILL.md +78 -0
- package/assets/skills/code-quality/agemon-house-rules/SKILL.md +103 -0
- package/assets/skills/commit/agemon-commit/SKILL.md +87 -0
- package/assets/skills/design/agemon-design/LICENSE +21 -0
- package/assets/skills/design/agemon-design/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design/SKILL.md +391 -0
- package/assets/skills/design/agemon-design/references/accessibility.md +182 -0
- package/assets/skills/design/agemon-design/references/agents.md +63 -0
- package/assets/skills/design/agemon-design/references/ai-chat.md +158 -0
- package/assets/skills/design/agemon-design/references/brief.md +186 -0
- package/assets/skills/design/agemon-design/references/color.md +216 -0
- package/assets/skills/design/agemon-design/references/components.md +91 -0
- package/assets/skills/design/agemon-design/references/copy.md +300 -0
- package/assets/skills/design/agemon-design/references/craft-intent.md +160 -0
- package/assets/skills/design/agemon-design/references/dashboard.md +131 -0
- package/assets/skills/design/agemon-design/references/dataviz.md +197 -0
- package/assets/skills/design/agemon-design/references/finish-bar.md +243 -0
- package/assets/skills/design/agemon-design/references/forms.md +192 -0
- package/assets/skills/design/agemon-design/references/heuristics.md +403 -0
- package/assets/skills/design/agemon-design/references/inspiration.md +287 -0
- package/assets/skills/design/agemon-design/references/layout.md +236 -0
- package/assets/skills/design/agemon-design/references/loops.md +155 -0
- package/assets/skills/design/agemon-design/references/metadata.md +98 -0
- package/assets/skills/design/agemon-design/references/modern-css.md +448 -0
- package/assets/skills/design/agemon-design/references/motion.md +434 -0
- package/assets/skills/design/agemon-design/references/personas.md +206 -0
- package/assets/skills/design/agemon-design/references/principles-catalog.md +299 -0
- package/assets/skills/design/agemon-design/references/recipe-auth.md +88 -0
- package/assets/skills/design/agemon-design/references/recipe-dashboard.md +130 -0
- package/assets/skills/design/agemon-design/references/recipe-landing.md +122 -0
- package/assets/skills/design/agemon-design/references/responsive.md +168 -0
- package/assets/skills/design/agemon-design/references/review.md +340 -0
- package/assets/skills/design/agemon-design/references/sound.md +150 -0
- package/assets/skills/design/agemon-design/references/spec.md +123 -0
- package/assets/skills/design/agemon-design/references/stack.md +522 -0
- package/assets/skills/design/agemon-design/references/state-design.md +188 -0
- package/assets/skills/design/agemon-design/references/themes.md +229 -0
- package/assets/skills/design/agemon-design/references/tokens.md +350 -0
- package/assets/skills/design/agemon-design/references/typography.md +246 -0
- package/assets/skills/design/agemon-design-dashboard/LICENSE +21 -0
- package/assets/skills/design/agemon-design-dashboard/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-dashboard/SKILL.md +113 -0
- package/assets/skills/design/agemon-design-editorial/LICENSE +21 -0
- package/assets/skills/design/agemon-design-editorial/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-editorial/SKILL.md +98 -0
- package/assets/skills/design/agemon-design-minimal/LICENSE +21 -0
- package/assets/skills/design/agemon-design-minimal/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-minimal/SKILL.md +97 -0
- package/assets/skills/geo-seo/geo/LICENSE +21 -0
- package/assets/skills/geo-seo/geo/NOTICE.md +18 -0
- package/assets/skills/geo-seo/geo/SKILL.md +145 -0
- package/assets/skills/geo-seo/geo-audit/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-audit/NOTICE.md +17 -0
- package/assets/skills/geo-seo/geo-audit/SKILL.md +371 -0
- package/assets/skills/geo-seo/geo-audit/references/ai-visibility.md +233 -0
- package/assets/skills/geo-seo/geo-audit/references/content.md +329 -0
- package/assets/skills/geo-seo/geo-audit/references/platform-analysis.md +294 -0
- package/assets/skills/geo-seo/geo-audit/references/schema.md +383 -0
- package/assets/skills/geo-seo/geo-audit/references/technical.md +368 -0
- package/assets/skills/geo-seo/geo-brand-mentions/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-brand-mentions/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-brand-mentions/SKILL.md +459 -0
- package/assets/skills/geo-seo/geo-citability/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-citability/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-citability/SKILL.md +320 -0
- package/assets/skills/geo-seo/geo-content/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-content/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-content/SKILL.md +352 -0
- package/assets/skills/geo-seo/geo-crawlers/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-crawlers/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-crawlers/SKILL.md +388 -0
- package/assets/skills/geo-seo/geo-llmstxt/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-llmstxt/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-llmstxt/SKILL.md +433 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/SKILL.md +282 -0
- package/assets/skills/geo-seo/geo-report/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-report/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-report/SKILL.md +406 -0
- package/assets/skills/geo-seo/geo-report-pdf/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-report-pdf/NOTICE.md +20 -0
- package/assets/skills/geo-seo/geo-report-pdf/SKILL.md +153 -0
- package/assets/skills/geo-seo/geo-report-pdf/templates/geo-report-template.html +548 -0
- package/assets/skills/geo-seo/geo-schema/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-schema/NOTICE.md +16 -0
- package/assets/skills/geo-seo/geo-schema/SKILL.md +396 -0
- package/assets/skills/geo-seo/geo-technical/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-technical/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-technical/SKILL.md +566 -0
- package/assets/skills/performance/agemon-performance/NOTICE.md +1 -0
- package/assets/skills/performance/agemon-performance/SKILL.md +76 -0
- package/assets/skills/security/agemon-security/LICENSE +21 -0
- package/assets/skills/security/agemon-security/NOTICE.md +8 -0
- package/assets/skills/security/agemon-security/SKILL.md +356 -0
- package/assets/skills/self-review/agemon-review-intake/LICENSE +21 -0
- package/assets/skills/self-review/agemon-review-intake/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-review-intake/SKILL.md +205 -0
- package/assets/skills/self-review/agemon-review-request/LICENSE +21 -0
- package/assets/skills/self-review/agemon-review-request/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-review-request/SKILL.md +104 -0
- package/assets/skills/self-review/agemon-review-request/code-reviewer.md +188 -0
- package/assets/skills/self-review/agemon-root-cause/LICENSE +21 -0
- package/assets/skills/self-review/agemon-root-cause/NOTICE.md +10 -0
- package/assets/skills/self-review/agemon-root-cause/SKILL.md +283 -0
- package/assets/skills/self-review/agemon-root-cause/condition-based-waiting-example.ts +158 -0
- package/assets/skills/self-review/agemon-root-cause/condition-based-waiting.md +115 -0
- package/assets/skills/self-review/agemon-root-cause/defense-in-depth.md +122 -0
- package/assets/skills/self-review/agemon-root-cause/find-polluter.sh +72 -0
- package/assets/skills/self-review/agemon-root-cause/root-cause-tracing.md +169 -0
- package/assets/skills/self-review/agemon-root-cause/test-academic.md +14 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-1.md +58 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-2.md +68 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-3.md +69 -0
- package/assets/skills/self-review/agemon-verify-before-done/LICENSE +21 -0
- package/assets/skills/self-review/agemon-verify-before-done/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-verify-before-done/SKILL.md +120 -0
- package/assets/skills/team-lead/agemon-plan-rfc/SKILL.md +317 -0
- package/assets/skills/team-lead/prd-generator/SKILL.md +437 -0
- package/assets/skills/team-lead/skill-headofit-audit/SKILL.md +72 -0
- package/assets/skills/team-lead/skill-incident-rca/SKILL.md +66 -0
- package/assets/skills/team-lead/skill-meeting-lifecycle/SKILL.md +63 -0
- package/assets/skills/team-lead/skill-obsidian-vault-sync/SKILL.md +69 -0
- package/assets/skills/team-lead/skill-prd-decomposer/SKILL.md +71 -0
- package/assets/skills/team-lead/skill-sec-check/SKILL.md +70 -0
- package/assets/skills/team-lead/skill-task-extractor/SKILL.md +79 -0
- package/assets/skills/team-lead/skill-tech-spike/SKILL.md +57 -0
- package/assets/skills/team-lead/skill-techlead-reviewer/SKILL.md +81 -0
- package/assets/tools/code-review-graph-constraints.txt +1418 -0
- package/assets/tools/package-lock.json +111 -0
- package/assets/tools/package.json +6 -0
- package/dist/chunk-5LATHJYU.js +4026 -0
- package/dist/chunk-5LATHJYU.js.map +1 -0
- package/dist/fake-subprocess-2BETWZVZ.js +666 -0
- package/dist/fake-subprocess-2BETWZVZ.js.map +1 -0
- package/dist/index.js +21101 -1956
- package/dist/index.js.map +1 -1
- package/package.json +30 -17
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# Heuristics — Scored Critique Methodology
|
|
2
|
+
|
|
3
|
+
Any skill can list anti-patterns. A scored critique is a defensible artifact a PM can action. Every finding gets a heuristic, a score (1-5), and an impact estimate. This file is the source of truth for the `/ui-craft:heuristic` command — the rubric, the laws, the output shape.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## How to Use
|
|
8
|
+
|
|
9
|
+
Run the full pass: Nielsen's 10 (score 1-5 each) → 6 Design Laws (PASS/FAIL each) → rank findings by impact tag. Output is a machine-parseable scorecard PMs can paste into any issue tracker.
|
|
10
|
+
|
|
11
|
+
Usability is not a knob. `CRAFT_LEVEL` does not relax these scores — a 2 is a 2 at every craft level.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Scoring Rubric (applies to every heuristic)
|
|
16
|
+
|
|
17
|
+
| Score | Meaning |
|
|
18
|
+
|-------|---------|
|
|
19
|
+
| **1** | Blocks users. Core task cannot complete. |
|
|
20
|
+
| **2** | Severe friction. Users abandon or error repeatedly. |
|
|
21
|
+
| **3** | Works but confusing. Users complete with hesitation. |
|
|
22
|
+
| **4** | Works, minor polish left. No user impact. |
|
|
23
|
+
| **5** | Best-in-class. Nothing to add. |
|
|
24
|
+
|
|
25
|
+
Every finding is recorded in a row: `| Heuristic | Score | Finding | Impact |`.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Nielsen's 10 Usability Heuristics
|
|
30
|
+
|
|
31
|
+
Source: Nielsen, J. (1994). "10 Usability Heuristics for User Interface Design." Nielsen Norman Group.
|
|
32
|
+
|
|
33
|
+
### 1. Visibility of System Status
|
|
34
|
+
|
|
35
|
+
The system should always keep users informed about what is going on, through appropriate feedback within reasonable time.
|
|
36
|
+
|
|
37
|
+
**What to look for:**
|
|
38
|
+
- [ ] Every async action has a loading state (spinner, progress, skeleton)
|
|
39
|
+
- [ ] Submit buttons disable + show progress while in flight
|
|
40
|
+
- [ ] Optimistic UI reconciles on server response (no silent failure)
|
|
41
|
+
- [ ] Navigation state is visible (active tab, breadcrumb, selected row)
|
|
42
|
+
- [ ] Long operations (>5s) escalate to progress percentage or estimate
|
|
43
|
+
|
|
44
|
+
**Common failures in AI-generated UIs:**
|
|
45
|
+
- Form submit has no loading state — user clicks 3-4x thinking nothing happened
|
|
46
|
+
- Toast appears then disappears before the user can read it
|
|
47
|
+
- No indication that a save succeeded ("did it work?")
|
|
48
|
+
|
|
49
|
+
### 2. Match Between System and the Real World
|
|
50
|
+
|
|
51
|
+
Speak the user's language — words, phrases, concepts they know. Follow real-world conventions.
|
|
52
|
+
|
|
53
|
+
**What to look for:**
|
|
54
|
+
- [ ] No system jargon in user-facing copy ("exception thrown", "null ref")
|
|
55
|
+
- [ ] Icons match cultural convention (trash = delete, not a cog)
|
|
56
|
+
- [ ] Dates are formatted for the user's locale, not ISO
|
|
57
|
+
- [ ] Error messages speak human, not stack trace
|
|
58
|
+
- [ ] Metaphors are consistent (folder, file, workspace)
|
|
59
|
+
|
|
60
|
+
**Common failures in AI-generated UIs:**
|
|
61
|
+
- "Submit payload" instead of "Save changes"
|
|
62
|
+
- "Entity not found" instead of "We couldn't find that project"
|
|
63
|
+
- Time displayed as `1713369600` (Unix) instead of `2 hours ago`
|
|
64
|
+
|
|
65
|
+
### 3. User Control and Freedom
|
|
66
|
+
|
|
67
|
+
Users often perform actions by mistake. They need a clearly marked emergency exit.
|
|
68
|
+
|
|
69
|
+
**What to look for:**
|
|
70
|
+
- [ ] Every destructive action has Undo (preferred) or a confirm dialog
|
|
71
|
+
- [ ] Modals close on Esc and on backdrop click
|
|
72
|
+
- [ ] Multi-step flows have Back without losing state
|
|
73
|
+
- [ ] Autosave preserves in-progress work on nav away
|
|
74
|
+
- [ ] URL reflects state so the back button works
|
|
75
|
+
|
|
76
|
+
**Common failures in AI-generated UIs:**
|
|
77
|
+
- Delete is instant and irreversible — no undo toast
|
|
78
|
+
- Modal traps the user; no way out without completing the form
|
|
79
|
+
- Browser back loses all form input
|
|
80
|
+
|
|
81
|
+
### 4. Consistency and Standards
|
|
82
|
+
|
|
83
|
+
Users should not have to wonder whether different words, situations, or actions mean the same thing. Follow platform conventions.
|
|
84
|
+
|
|
85
|
+
**What to look for:**
|
|
86
|
+
- [ ] Primary action placement consistent across views (right side, solid fill)
|
|
87
|
+
- [ ] Same verb for same operation throughout ("Delete" always, not "Delete"/"Remove"/"Trash")
|
|
88
|
+
- [ ] Icon meanings stable across screens
|
|
89
|
+
- [ ] Form patterns match platform (e.g., Cmd+Enter submits on macOS)
|
|
90
|
+
|
|
91
|
+
**Common failures in AI-generated UIs:**
|
|
92
|
+
- Buttons swap position between modals (Cancel left here, right there)
|
|
93
|
+
- Three different words for "delete" in the same product
|
|
94
|
+
- Non-standard scroll hijacking on a standard content page
|
|
95
|
+
|
|
96
|
+
### 5. Error Prevention
|
|
97
|
+
|
|
98
|
+
Better than good error messages is a design that prevents the problem from occurring in the first place.
|
|
99
|
+
|
|
100
|
+
**What to look for:**
|
|
101
|
+
- [ ] Destructive actions require confirmation typed with the resource name
|
|
102
|
+
- [ ] Disabled states prevent invalid submissions (with explanation on hover)
|
|
103
|
+
- [ ] Input constraints enforced client-side (date pickers, typed inputs)
|
|
104
|
+
- [ ] Autosave + version history on content-creation surfaces
|
|
105
|
+
- [ ] Warn before leaving unsaved changes
|
|
106
|
+
|
|
107
|
+
**Common failures in AI-generated UIs:**
|
|
108
|
+
- Freeform "Are you sure?" confirms that users mindlessly click
|
|
109
|
+
- No validation until submit; user fills 12 fields then sees 4 errors
|
|
110
|
+
- Paste blocked on fields (password confirm, order IDs)
|
|
111
|
+
|
|
112
|
+
### 6. Recognition Rather Than Recall
|
|
113
|
+
|
|
114
|
+
Minimize the user's memory load by making objects, actions, and options visible.
|
|
115
|
+
|
|
116
|
+
**What to look for:**
|
|
117
|
+
- [ ] Recently used / favorited items surfaced
|
|
118
|
+
- [ ] Autocomplete on any field with a known set of answers
|
|
119
|
+
- [ ] Keyboard shortcuts listed in tooltips (not hidden in a help menu)
|
|
120
|
+
- [ ] Current selection persists visibly
|
|
121
|
+
- [ ] Empty states suggest next actions
|
|
122
|
+
|
|
123
|
+
**Common failures in AI-generated UIs:**
|
|
124
|
+
- Power-user shortcuts (Cmd+K) exist but are undiscoverable
|
|
125
|
+
- User must remember which tab they were on after a refresh
|
|
126
|
+
- Dropdown with 200 options and no search
|
|
127
|
+
|
|
128
|
+
### 7. Flexibility and Efficiency of Use
|
|
129
|
+
|
|
130
|
+
Accelerators — unseen by novice — may speed up the interaction for the expert.
|
|
131
|
+
|
|
132
|
+
**What to look for:**
|
|
133
|
+
- [ ] Keyboard shortcuts for frequent actions (Cmd+K, j/k nav)
|
|
134
|
+
- [ ] Bulk actions on lists (multi-select + batch operate)
|
|
135
|
+
- [ ] Saved views / filters / segments
|
|
136
|
+
- [ ] Customization for heavy users (column config, hotkeys)
|
|
137
|
+
- [ ] Paste-to-action patterns (URL paste auto-parses)
|
|
138
|
+
|
|
139
|
+
**Common failures in AI-generated UIs:**
|
|
140
|
+
- Forces the same flow for novice and expert
|
|
141
|
+
- No way to multi-select in lists of 100+
|
|
142
|
+
- Command palette missing on tools users will spend hours in
|
|
143
|
+
|
|
144
|
+
### 8. Aesthetic and Minimalist Design
|
|
145
|
+
|
|
146
|
+
Dialogues should not contain information that is irrelevant or rarely needed.
|
|
147
|
+
|
|
148
|
+
**What to look for:**
|
|
149
|
+
- [ ] Every section answers one question; no filler
|
|
150
|
+
- [ ] Visual weight proportional to importance
|
|
151
|
+
- [ ] One accent, 3-5 placements per viewport (see SKILL.md anti-slop)
|
|
152
|
+
- [ ] White space is used, not avoided
|
|
153
|
+
- [ ] No decorative graphics competing with content
|
|
154
|
+
|
|
155
|
+
**Common failures in AI-generated UIs:**
|
|
156
|
+
- Hero has 4 CTAs of equal weight
|
|
157
|
+
- Every card has a colored top border
|
|
158
|
+
- Gradient backgrounds on every section
|
|
159
|
+
|
|
160
|
+
### 9. Help Users Recognize, Diagnose, and Recover From Errors
|
|
161
|
+
|
|
162
|
+
Error messages in plain language, precisely indicate the problem, and constructively suggest a solution.
|
|
163
|
+
|
|
164
|
+
**What to look for:**
|
|
165
|
+
- [ ] Errors appear inline, at the field, not as a global banner
|
|
166
|
+
- [ ] Messages specify what went wrong AND how to fix it
|
|
167
|
+
- [ ] Server errors include a copy-to-clipboard ID for support
|
|
168
|
+
- [ ] Recovery is one click (retry, undo, contact support)
|
|
169
|
+
- [ ] Network errors differ from validation errors
|
|
170
|
+
|
|
171
|
+
**Common failures in AI-generated UIs:**
|
|
172
|
+
- "Something went wrong" with no detail, no retry, no support path
|
|
173
|
+
- Red toast that disappears before the user reads it
|
|
174
|
+
- Error blames the user ("Invalid input") instead of explaining
|
|
175
|
+
|
|
176
|
+
### 10. Help and Documentation
|
|
177
|
+
|
|
178
|
+
Even though it is better if the system can be used without documentation, help may be necessary.
|
|
179
|
+
|
|
180
|
+
**What to look for:**
|
|
181
|
+
- [ ] Help is contextual, not a separate site the user must leave to
|
|
182
|
+
- [ ] Empty states double as onboarding ("Create your first project")
|
|
183
|
+
- [ ] Tooltips on non-obvious icons
|
|
184
|
+
- [ ] Inline help links in complex forms
|
|
185
|
+
- [ ] Searchable docs for deep features
|
|
186
|
+
|
|
187
|
+
**Common failures in AI-generated UIs:**
|
|
188
|
+
- No tooltips on icon-only buttons
|
|
189
|
+
- Help buried behind a "?" in the corner with a 404 behind it
|
|
190
|
+
- Onboarding is a 10-slide lightbox the user skips
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## The 6 Design Laws
|
|
195
|
+
|
|
196
|
+
Each is scored PASS / FAIL with a specific detail. These are physics + psychology, not preferences — failing them has measurable UX impact.
|
|
197
|
+
|
|
198
|
+
### Fitts's Law
|
|
199
|
+
|
|
200
|
+
Source: Fitts, P. M. (1954). "The information capacity of the human motor system in controlling the amplitude of movement."
|
|
201
|
+
|
|
202
|
+
**Statement:** Time to acquire a target is a function of its size and distance.
|
|
203
|
+
|
|
204
|
+
**When load-bearing:** Every tappable / clickable surface. Critical on mobile.
|
|
205
|
+
|
|
206
|
+
**How to score:**
|
|
207
|
+
- **PASS** — touch targets ≥ 44px on mobile, ≥ 24px on desktop; primary CTA in the natural eye/thumb path; related actions grouped
|
|
208
|
+
- **FAIL** — touch targets under 44px mobile; destructive actions adjacent to primary actions; CTA placed far from where the user just looked
|
|
209
|
+
|
|
210
|
+
### Hick's Law
|
|
211
|
+
|
|
212
|
+
Source: Hick, W. E. (1952). "On the rate of gain of information."
|
|
213
|
+
|
|
214
|
+
**Statement:** Decision time grows logarithmically with the number of choices.
|
|
215
|
+
|
|
216
|
+
**When load-bearing:** Menus, navigation, plan selectors, form fields, dashboards.
|
|
217
|
+
|
|
218
|
+
**How to score:**
|
|
219
|
+
- **PASS** — nav ≤ 7 items at any level; no field offers 20+ unfiltered options without search
|
|
220
|
+
- **FAIL** — 12+ top-nav items; a single select with 200 entries and no type-ahead; dashboard with 18 metrics at equal weight
|
|
221
|
+
|
|
222
|
+
### Doherty Threshold
|
|
223
|
+
|
|
224
|
+
Source: Doherty, W. J. & Thadani, A. J. (1982). "The Economic Value of Rapid Response Time." IBM.
|
|
225
|
+
|
|
226
|
+
**Statement:** Productivity soars when response time is under 400ms.
|
|
227
|
+
|
|
228
|
+
**When load-bearing:** Every user-initiated action. Critical on data-heavy views and transitions.
|
|
229
|
+
|
|
230
|
+
**How to score:**
|
|
231
|
+
- **PASS** — perceived response < 400ms; optimistic UI for saves, likes, toggles; skeletons within 200ms
|
|
232
|
+
- **FAIL** — form submit shows a spinner for 2s with no optimistic state; nav click waits on full server round-trip before painting anything
|
|
233
|
+
|
|
234
|
+
### Cleveland-McGill Hierarchy
|
|
235
|
+
|
|
236
|
+
Source: Cleveland, W. S. & McGill, R. (1984). "Graphical Perception: Theory, Experimentation, and Application to the Development of Graphical Methods." JASA.
|
|
237
|
+
|
|
238
|
+
**Statement:** Humans decode visual encodings with different accuracy — position > length > angle > area > color-hue.
|
|
239
|
+
|
|
240
|
+
**When load-bearing:** Every chart, metric card, comparative dataviz.
|
|
241
|
+
|
|
242
|
+
**How to score:**
|
|
243
|
+
- **PASS** — quantitative comparisons use position or length (bar, line, dot); color reserved for category; no pie or 3D
|
|
244
|
+
- **FAIL** — pie chart used for comparison; donut with ≥ 5 slices; color-gradient used to encode magnitude where length would work
|
|
245
|
+
|
|
246
|
+
### Miller's Law
|
|
247
|
+
|
|
248
|
+
Source: Miller, G. A. (1956). "The Magical Number Seven, Plus or Minus Two."
|
|
249
|
+
|
|
250
|
+
**Statement:** Humans hold ~7 (±2) items in working memory. Chunking extends this.
|
|
251
|
+
|
|
252
|
+
**When load-bearing:** Nav depth, form section counts, onboarding flows, step counts.
|
|
253
|
+
|
|
254
|
+
**How to score:**
|
|
255
|
+
- **PASS** — navigation ≤ 7 items per level; forms chunked into ≤ 5 sections; multi-step flows ≤ 5 steps or with clear progress. (Wizard ceiling is 5, not 7: each step holds multiple fields, and each field consumes working-memory slots of its own.)
|
|
256
|
+
- **FAIL** — 14-item top nav; a single-page form with 23 ungrouped fields; a checkout with 9 steps and no progress indicator
|
|
257
|
+
|
|
258
|
+
### Tesler's Law
|
|
259
|
+
|
|
260
|
+
Also called the Law of Conservation of Complexity. Attributed to Larry Tesler.
|
|
261
|
+
|
|
262
|
+
**Statement:** Every application has an irreducible amount of complexity. The only question is who deals with it — the user, the UI, or the backend.
|
|
263
|
+
|
|
264
|
+
**When load-bearing:** Feature-rich tools. Configuration-heavy flows. Anywhere you're tempted to "expose a toggle."
|
|
265
|
+
|
|
266
|
+
**How to score:**
|
|
267
|
+
- **PASS** — complexity absorbed by sensible defaults, automation, or backend inference; advanced controls behind progressive disclosure
|
|
268
|
+
- **FAIL** — UI exposes every backend knob; user must configure 8 things before they can accomplish the primary task; no default state, only empty forms
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Impact Tags
|
|
273
|
+
|
|
274
|
+
Every finding carries exactly one impact tag. This is how a PM prioritizes:
|
|
275
|
+
|
|
276
|
+
| Tag | Meaning | Example |
|
|
277
|
+
|-----|---------|---------|
|
|
278
|
+
| `blocks-conversion` | User cannot complete the core journey | Signup form submit silently fails on network error |
|
|
279
|
+
| `adds-friction` | User completes but abandonment rate rises | Submit button has no loading state; users click 3-4x |
|
|
280
|
+
| `reduces-trust` | Quality signal — affects retention | Typos in error messages; inconsistent button styles |
|
|
281
|
+
| `minor-polish` | Craft layer only; no measurable user impact | Missing `tabular-nums` on a metric |
|
|
282
|
+
|
|
283
|
+
Rank findings in the final output by impact tag, not by heuristic order: `blocks-conversion > adds-friction > reduces-trust > minor-polish`.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Scoring Output Format
|
|
288
|
+
|
|
289
|
+
The `/ui-craft:heuristic` command outputs **exactly** this structure. Do not invent new sections. Do not merge tables. Do not drop the ranking at the end.
|
|
290
|
+
|
|
291
|
+
```markdown
|
|
292
|
+
## Heuristic Scorecard
|
|
293
|
+
|
|
294
|
+
| Heuristic | Score | Finding | Impact |
|
|
295
|
+
|-----------|-------|---------|--------|
|
|
296
|
+
| Visibility of system status | 2 | Form submit has no loading state; users click 3-4x thinking nothing happened | adds-friction |
|
|
297
|
+
| Match system and real world | 4 | Dates formatted for locale; one copy says "entity" instead of "project" | minor-polish |
|
|
298
|
+
| User control and freedom | 3 | Delete has confirm but no undo after it lands | reduces-trust |
|
|
299
|
+
| Consistency and standards | 4 | Primary CTA consistent; one modal has Cancel on right, rest on left | minor-polish |
|
|
300
|
+
| Error prevention | 4 | Delete confirms with the resource name — good | minor-polish |
|
|
301
|
+
| Recognition over recall | 3 | Cmd+K exists but not surfaced in tooltips | adds-friction |
|
|
302
|
+
| Flexibility and efficiency | 2 | No bulk-select on list of 200+ items | adds-friction |
|
|
303
|
+
| Aesthetic and minimalist | 3 | Hero has two competing accents | reduces-trust |
|
|
304
|
+
| Error recovery | 1 | "Something went wrong" with no ID, no retry | blocks-conversion |
|
|
305
|
+
| Help and documentation | 3 | Tooltips on most icons; empty state has no CTA | reduces-trust |
|
|
306
|
+
|
|
307
|
+
## Design Law Audit
|
|
308
|
+
|
|
309
|
+
| Law | Pass/Fail | Detail |
|
|
310
|
+
|-----|-----------|--------|
|
|
311
|
+
| Fitts's Law | FAIL | Primary CTA is 32px tall on mobile; expected ≥ 44px |
|
|
312
|
+
| Hick's Law | PASS | 5 top-nav items — within 7±2 |
|
|
313
|
+
| Doherty Threshold | FAIL | Save shows spinner for ~1.8s with no optimistic state |
|
|
314
|
+
| Cleveland-McGill | PASS | Bar charts for comparison, color for category only |
|
|
315
|
+
| Miller's Law | PASS | Form chunked into 4 logical sections |
|
|
316
|
+
| Tesler's Law | FAIL | New user sees 8 required config fields before first action |
|
|
317
|
+
|
|
318
|
+
## Top findings (ranked by impact)
|
|
319
|
+
|
|
320
|
+
1. Error recovery (score 1, blocks-conversion) — "Something went wrong" message strands users; no ID, no retry, no support path
|
|
321
|
+
2. Fitts's Law (FAIL, adds-friction) — primary CTA 32px on mobile; raise to ≥ 44px
|
|
322
|
+
3. Doherty Threshold (FAIL, adds-friction) — save feels broken; add optimistic UI
|
|
323
|
+
4. Flexibility (score 2, adds-friction) — bulk select missing on 200+ item list
|
|
324
|
+
5. Visibility (score 2, adds-friction) — submit has no loading state
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Notes on output:**
|
|
328
|
+
- The first row of each heuristic table is the short-name version (not the verbose Nielsen title). The heuristic is unambiguous from context.
|
|
329
|
+
- The `Top findings` list is a rank, not a re-listing. Include only findings at `reduces-trust` or worse. Cap at 5.
|
|
330
|
+
- Scores of 4-5 don't need a finding row unless the grader wants to surface what's working. Blank findings for 4-5 rows are fine; the Score column carries the signal.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## UsabilityScore (0-100) — the judged companion to UICraftScore
|
|
335
|
+
|
|
336
|
+
The scorecard above is qualitative. **UsabilityScore** rolls it into one 0-100 number + letter grade so it composes with the deterministic **UICraftScore** (`evals/quality/score.mjs`) and so a PM or CI run has a single figure to track.
|
|
337
|
+
|
|
338
|
+
> **Judged, not deterministic.** UsabilityScore is computed by the host agent from this rubric — it reflects judgment and *may vary run to run*. It is **not** reproducible the way UICraftScore is. Never gate CI on UsabilityScore; gate on the deterministic UICraftScore and use UsabilityScore for review depth. Always label it `(judged)` when reporting.
|
|
339
|
+
|
|
340
|
+
### Formula
|
|
341
|
+
|
|
342
|
+
Deterministic *given the scores* — the same scorecard always yields the same number. Only the act of scoring is judgment.
|
|
343
|
+
|
|
344
|
+
```
|
|
345
|
+
heuristic_base = round( ((mean(nielsen_scores) − 1) / 4) × 100 ) # 10 Nielsen scores, each 1–5
|
|
346
|
+
law_penalty = (number of FAILED design laws) × 5 # 6 laws, −5 each (max −30)
|
|
347
|
+
UsabilityScore = clamp( heuristic_base − law_penalty , 0 , 100 )
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Grade bands are **identical to UICraftScore** for cross-comparison: **A ≥ 90 · B ≥ 80 · C ≥ 70 · D ≥ 60 · F < 60**.
|
|
351
|
+
|
|
352
|
+
Properties: all-5s with all laws passing → 100 (A). All-3s, all laws pass → 50 (F). The base maps the 1–5 mean linearly onto 0–100 (1→0, 3→50, 5→100); each failed law is a flat −5 because laws are physics/psychology violations with measurable cost.
|
|
353
|
+
|
|
354
|
+
### Worked example (the scorecard above)
|
|
355
|
+
|
|
356
|
+
Nielsen scores `2,4,3,4,4,3,2,3,1,3` → mean `2.9` → base `round(((2.9−1)/4)×100)` = **48**.
|
|
357
|
+
Failed laws: Fitts, Doherty, Tesler = 3 → penalty `15`.
|
|
358
|
+
`UsabilityScore = clamp(48 − 15, 0, 100)` = **33 / F**. (A genuinely broken UI scores in the F band — as it should.)
|
|
359
|
+
|
|
360
|
+
### Output
|
|
361
|
+
|
|
362
|
+
Append this block to the `/ui-craft:heuristic` output, after Top findings:
|
|
363
|
+
|
|
364
|
+
```markdown
|
|
365
|
+
## UsabilityScore
|
|
366
|
+
|
|
367
|
+
**33 / F** (judged) · heuristic base 48 − law penalty 15
|
|
368
|
+
|
|
369
|
+
| Component | Value |
|
|
370
|
+
|-----------|-------|
|
|
371
|
+
| Nielsen mean (1–5) | 2.9 |
|
|
372
|
+
| Heuristic base (0–100) | 48 |
|
|
373
|
+
| Failed design laws | 3 (Fitts, Doherty, Tesler) |
|
|
374
|
+
| Law penalty | −15 |
|
|
375
|
+
| **UsabilityScore** | **33 / F** |
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Machine-readable form (emit when a caller asks for `--json`, or when invoked by `/sddesign` / an extended report):
|
|
379
|
+
|
|
380
|
+
```json
|
|
381
|
+
{
|
|
382
|
+
"usability": { "score": 33, "grade": "F", "judged": true },
|
|
383
|
+
"components": { "nielsen_mean": 2.9, "heuristic_base": 48, "failed_laws": 3, "law_penalty": 15 },
|
|
384
|
+
"version": "usability-1.0"
|
|
385
|
+
}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Extended quality report (optional combine)
|
|
389
|
+
|
|
390
|
+
When the user wants the full quality picture, place the judged UsabilityScore beside the deterministic UICraftScore. Get the deterministic score with `node scripts/eval.mjs <path> --json` or the `score_ui` MCP tool, then render:
|
|
391
|
+
|
|
392
|
+
```markdown
|
|
393
|
+
## Extended quality report
|
|
394
|
+
|
|
395
|
+
| Score | Value | Reproducible? |
|
|
396
|
+
|-------|-------|---------------|
|
|
397
|
+
| UICraftScore | 82 / B | ✅ deterministic — identical every run |
|
|
398
|
+
| UsabilityScore | 33 / F | ❌ judged — LLM judgment, may vary |
|
|
399
|
+
|
|
400
|
+
Gate CI on UICraftScore. Use UsabilityScore to prioritize review depth — a high deterministic score with a low UsabilityScore means the code is clean but the *experience* has friction the static rules can't see.
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
The two scores are intentionally **not** averaged into one figure: one is reproducible and one is judged, and collapsing them would hide that distinction — the exact property the deterministic score exists to protect.
|