super-ux 0.26.5 → 0.28.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/CHANGELOG.md +121 -0
- package/README.md +4 -3
- package/cursor/rules/ux-audit.mdc +10 -0
- package/package.json +5 -2
- package/templates/audit-report.md +14 -0
- package/templates/foundation.md +1 -0
- package/templates/scenarios.md +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,126 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.28.0 — 2026-08-05
|
|
4
|
+
|
|
5
|
+
Closes the carry-over ledger the 0.27 audit opened. Twenty-three practices,
|
|
6
|
+
five principles, three optional contract fields, a prototype step, and an
|
|
7
|
+
index over a catalog that had grown past the point of being read whole.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Motion craft — BP-157..164.** BP-130 said durations and easings should be
|
|
11
|
+
tokens and stopped there. These make the decisions it does not: whether the
|
|
12
|
+
element animates at all (frequency decides — a hundred times a day means
|
|
13
|
+
never), what the durations actually are, why `ease-in` is wrong on
|
|
14
|
+
interface motion, entering from a visible state rather than `scale(0)`,
|
|
15
|
+
anchored surfaces growing from their trigger, asymmetric enter/exit,
|
|
16
|
+
interruptibility for anything retriggerable, and hover gated behind a
|
|
17
|
+
hover-capable pointer.
|
|
18
|
+
- **Perceived quality — BP-165..168.** Why a technically correct interface
|
|
19
|
+
still reads as unfinished: mixed icon families and stroke weights, emoji
|
|
20
|
+
used as structural icons, pressed states that reflow their neighbours, and
|
|
21
|
+
a scrim too weak to separate the layers it exists to separate. None of
|
|
22
|
+
these fail an automated check, which is why they survive audits that only
|
|
23
|
+
measure.
|
|
24
|
+
- **Generated-default tells — BP-169..172.** super-ux is a tool agents build
|
|
25
|
+
interfaces with, so it should know the signature of its own defaults: fake
|
|
26
|
+
product screenshots built from markup, implausible placeholder data, the
|
|
27
|
+
three-equal-cards row that means nobody decided the hierarchy, and the
|
|
28
|
+
cluster (`#000000`, two accents, `100vh`, no max-width) that marks a
|
|
29
|
+
question never asked.
|
|
30
|
+
- **Interface state, platform surfaces and locale — BP-173..179**, from the
|
|
31
|
+
Web Interface Guidelines: state in the URL, undo for reversible actions
|
|
32
|
+
instead of a confirmation nobody reads, unsaved work that survives,
|
|
33
|
+
dark mode covering the surfaces the browser draws, localization as a
|
|
34
|
+
design constraint rather than a translation step, scroll containment and
|
|
35
|
+
touch defaults in overlays, and lists virtualized before they ship long.
|
|
36
|
+
- **Motivation principles — PRN-17..21.** Goal-gradient, Zeigarnik, IKEA,
|
|
37
|
+
endowment, zero-price. Each carries a fourth column naming where it turns
|
|
38
|
+
coercive, and a rule that any of them recorded as `applied` says which side
|
|
39
|
+
of that line it is on. They are motivation mechanisms; the same levers
|
|
40
|
+
aimed at the product's interest are dark patterns.
|
|
41
|
+
- **`Telemetry` on a scenario (optional).** The bridge the chain was missing:
|
|
42
|
+
BP-139, BP-140 and BP-129 all assume events exist, and nothing tied a named
|
|
43
|
+
event to the behavior it measures — so renaming a step silently re-pointed
|
|
44
|
+
a dashboard. `object_action`, snake_case, verb last.
|
|
45
|
+
- **`Kill criteria` on a story (optional).** `dropped` has been a valid
|
|
46
|
+
status since v1 with nothing defining when it applies, so it was only ever
|
|
47
|
+
reached by someone losing interest.
|
|
48
|
+
- **A verdict on audit reports — REFINE / REDESIGN / NEW.** Findings alone
|
|
49
|
+
read as a to-do list, and a surface that should be rebuilt gets patched
|
|
50
|
+
indefinitely, one true finding at a time.
|
|
51
|
+
- **A prototype step in `ux-flows`** for the question documents cannot
|
|
52
|
+
settle, plus *diverge before converging*: two genuinely different shapes
|
|
53
|
+
before picking one, and a line on why the loser lost.
|
|
54
|
+
- **`best-practices-index.md`**, generated by
|
|
55
|
+
`plugins/super-ux/scripts/bp_index.py` — 274 lines of tag → ids over a
|
|
56
|
+
catalog that is now 1400+. The validator fails when it drifts.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
- Taxonomy gains `i18n`; source keys gain `[EmilK]` and `[WIG]`.
|
|
60
|
+
- `PRN-01..16` becomes `PRN-01..21` everywhere it is referenced.
|
|
61
|
+
|
|
62
|
+
The contract stays **v4**. All three new fields are optional and additive, on
|
|
63
|
+
the same precedent as 0.26.1 — no existing `docs/ux` file changes shape and
|
|
64
|
+
there is nothing to migrate.
|
|
65
|
+
|
|
66
|
+
## 0.27.1 — 2026-08-05
|
|
67
|
+
|
|
68
|
+
Re-cut of 0.27.0 on the correct base. The 0.27.0 tag was pushed from a tree
|
|
69
|
+
that predated 0.26.2–0.26.5, so the GitHub release it produced was missing
|
|
70
|
+
the MIT declarations, the `/ux-audit` front-matter fix, `displayName`, and
|
|
71
|
+
the npm-publish workflow. Nothing was published to npm from it. The content
|
|
72
|
+
of 0.27.0 is unchanged and listed below it; this release only puts it on top
|
|
73
|
+
of the history it belongs to.
|
|
74
|
+
|
|
75
|
+
## 0.27.0 — 2026-08-04
|
|
76
|
+
|
|
77
|
+
An audit of 51 external UX, product and growth skills, kept only where they
|
|
78
|
+
found something this catalog did not already say better. Most of the overlap
|
|
79
|
+
went the other way — on monetization, forms and activation the catalog was
|
|
80
|
+
the stronger of the two, and with sources where the others had none. Four
|
|
81
|
+
gaps survived that test.
|
|
82
|
+
|
|
83
|
+
### Added
|
|
84
|
+
- **Growth loops and referral — BP-147..151.** BP-067 has been telling
|
|
85
|
+
readers since 0.19 that freemium only works when free users feed a growth
|
|
86
|
+
loop, while the catalog described no loop anywhere. BP-147 names the three
|
|
87
|
+
kinds and the reference now resolves. The rest: virality riding the
|
|
88
|
+
product's own output rather than a "refer a friend" page, planning for a
|
|
89
|
+
viral coefficient around 0.2 with the loop's cycle time treated as the
|
|
90
|
+
other multiplier, rewards paid in the product's own unit on the invitee's
|
|
91
|
+
milestone, and abuse designed against before launch.
|
|
92
|
+
- **Empty states — BP-152.** Three layers after NN/g: what happened, what
|
|
93
|
+
this place is for, and a way in — including inspecting the feature on demo
|
|
94
|
+
data. A blank panel is a defect, not a neutral state.
|
|
95
|
+
- **Authentication and form recovery — BP-153..156.** The word "password"
|
|
96
|
+
appeared zero times across 146 practices. NIST SP 800-63B rev 4 (August
|
|
97
|
+
2025) made paste normative and composition rules prohibited; the field must
|
|
98
|
+
not fight the password manager; a passwordless door where the account
|
|
99
|
+
allows one; and a rejected form keeps the work instead of clearing it
|
|
100
|
+
(WCAG 2.2 redundant entry).
|
|
101
|
+
- **Audit reports: a required "Scope and limits" section**
|
|
102
|
+
(`scenario-format.md`, `templates/audit-report.md`, `ux-audit`). A batched
|
|
103
|
+
audit reads a slice of the code, so silence about the rest was being read
|
|
104
|
+
as coverage. Absence from a report never means PASS.
|
|
105
|
+
- **`validate_catalog()` in `test/validate.py`.** The catalog's shape — five
|
|
106
|
+
fields per entry, unbroken ids, tags from the taxonomy, and every practice
|
|
107
|
+
reachable from `practice-selection.md` — was an invariant held by hand
|
|
108
|
+
since the first entry. A practice no skill routes to is a practice that
|
|
109
|
+
does not exist; nothing checked for that until now.
|
|
110
|
+
|
|
111
|
+
### Changed
|
|
112
|
+
- Tag taxonomy gains `virality`, `referral` (mechanism) and `auth` (domain);
|
|
113
|
+
source keys gain `[NIST]` and `[Viral26]`.
|
|
114
|
+
|
|
115
|
+
Two figures from the source material were dropped rather than repeated — a
|
|
116
|
+
15–30% referral conversion norm and a 60% fraud threshold, neither of which
|
|
117
|
+
survived a check. A third was corrected in the opposite direction: a viral
|
|
118
|
+
coefficient of 0.3–0.7 is a strong result, not the practical target the
|
|
119
|
+
source called it.
|
|
120
|
+
|
|
121
|
+
The contract stays **v4**: the report section is additive and no existing
|
|
122
|
+
`docs/ux` file changes shape.
|
|
123
|
+
|
|
3
124
|
## 0.26.5 — 2026-07-30
|
|
4
125
|
|
|
5
126
|
### Added
|
package/README.md
CHANGED
|
@@ -185,8 +185,9 @@ The contracts every skill reads:
|
|
|
185
185
|
|---|---|
|
|
186
186
|
| [scenario-format.md](plugins/super-ux/skills/references/scenario-format.md) | **The contract (ux-contract v4).** File layout, every field name, stable IDs (`P` `JTBD` `JRN` `ST` `FLW` `SCR` `SCN`), completeness checklists, the `draft → validated → implemented` lifecycle, audit verdicts and severities, the UX-plan format |
|
|
187
187
|
| [system-map.md](plugins/super-ux/skills/references/system-map.md) | The whole system on one page — pipeline, files, skills, companions, and the four sync rules; every skill points here |
|
|
188
|
-
| [
|
|
189
|
-
| [
|
|
188
|
+
| [best-practices-index.md](plugins/super-ux/skills/references/best-practices-index.md) | Generated tag index over the catalog — tag → ids, id → title. Read it to decide which entries to open; regenerated by `plugins/super-ux/scripts/bp_index.py` and checked for drift by the validator |
|
|
189
|
+
| [ux-design-principles.md](plugins/super-ux/skills/references/ux-design-principles.md) | How the agent thinks: the design pipeline (forward and backwards), task analysis, flow rules, heuristics PRN-01..21, the improvement procedure, anti-patterns |
|
|
190
|
+
| [best-practices.md](plugins/super-ux/skills/references/best-practices.md) | Living, tag-indexed catalog of 179 proven practices — subscription-app laws, mobile/web/voice guidance (Apple HIG 2025, M3 Expressive, NN/g, Baymard, WCAG 2.2), monetization economics (RevenueCat/PLG 2025 benchmarks, ASO, freemium boundaries), web funnels end to end (landing, pricing, checkout, dunning, cancel) and web2app (paid handoff, deferred deep links, storefront rules), motion and page weight (HTTP Archive field data, W3C sustainability), accessibility as it actually fails (WebAIM Million, EAA/ADA exposure), frustration telemetry, gamification and trend governance, growth loops and referral mechanics, empty states, authentication (NIST SP 800-63B rev 4) and form recovery, motion craft and perceived quality, the defaults that make an interface read as generated, interface state, locale and platform surfaces (Web Interface Guidelines), visual craft, Figma structure |
|
|
190
191
|
| [practice-selection.md](plugins/super-ux/skills/references/practice-selection.md) | The deterministic bridge: product profile → mandatory consideration sets → per-artifact checklists → a compliance table where every pulled practice gets a verdict. No silent skips, no cargo cult |
|
|
191
192
|
| [component-guidelines.md](plugins/super-ux/skills/references/component-guidelines.md) | Which control for which job (radios/select/switch, sheet/alert, modal/disclosure, combobox, nav bar/rail, FAB, dates, toasts) and the platform rules — Apple HIG, Material 3, W3C ARIA APG, GOV.UK |
|
|
192
193
|
| [visual-identity.md](plugins/super-ux/skills/references/visual-identity.md) | The visual layer and its owner: one style pack for the whole product, where it's recorded, how it meets Figma and code, and the division of labor with the craft floors |
|
|
@@ -228,7 +229,7 @@ edits to `plugins/super-ux/skills/references/` need
|
|
|
228
229
|
|
|
229
230
|
Built by ssheleg — [sshlg.me](https://sshlg.me)
|
|
230
231
|
|
|
231
|
-
- X / Twitter — [@
|
|
232
|
+
- X / Twitter — [@sshlg93](https://x.com/sshlg93)
|
|
232
233
|
- Telegram — [@sshlg](https://t.me/sshlg)
|
|
233
234
|
|
|
234
235
|
Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
|
|
@@ -13,6 +13,16 @@ rule) — there is nothing to audit against.
|
|
|
13
13
|
**Evidence discipline:** every verdict cites `file:line`. Cannot verify →
|
|
14
14
|
verdict BLOCKED with the exact reason. Never guess, never a courtesy PASS.
|
|
15
15
|
|
|
16
|
+
**Scope and limits (required section):** the report ends with what was
|
|
17
|
+
covered, what was left out and why, what could not be verified, and what the
|
|
18
|
+
code cannot answer. An audit reads a slice; absence from the report never
|
|
19
|
+
means PASS.
|
|
20
|
+
|
|
21
|
+
**Verdict (required):** REFINE — fix the findings; REDESIGN — they cluster on
|
|
22
|
+
a structure patching will not converge on, name it; NEW — the chain does not
|
|
23
|
+
describe what was built, start upstream. Findings without a verdict read as a
|
|
24
|
+
to-do list, and the surface that needs rebuilding gets patched forever.
|
|
25
|
+
|
|
16
26
|
## Loop
|
|
17
27
|
|
|
18
28
|
1. Read the base (and foundation/flows/screens when they exist); scope =
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "super-ux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Scenario-driven UI development for AI agents (Claude Code, Cursor, 70+ agents): a versioned design chain in docs/ux/, a scenario-first hard rule, a deterministic drift linter, and evidence-backed UX audits. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"super-ux": "bin/super-ux.js"
|
|
@@ -20,7 +20,10 @@
|
|
|
20
20
|
"url": "https://github.com/ssheleg/super-ux/issues"
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
|
-
"author":
|
|
23
|
+
"author": {
|
|
24
|
+
"name": "ssheleg",
|
|
25
|
+
"url": "https://x.com/sshlg93"
|
|
26
|
+
},
|
|
24
27
|
"engines": {
|
|
25
28
|
"node": ">=16"
|
|
26
29
|
},
|
|
@@ -29,6 +29,20 @@ Heuristic findings (deep): [PRN-NN] (severity) node — issue -> fix
|
|
|
29
29
|
| # | Scenario | Severity | Finding | Suggested fix |
|
|
30
30
|
|---|----------|----------|---------|---------------|
|
|
31
31
|
|
|
32
|
+
## Scope and limits
|
|
33
|
+
|
|
34
|
+
<!-- Required. An audit reads a finite slice of the code; absence from this
|
|
35
|
+
report never means PASS. -->
|
|
36
|
+
|
|
37
|
+
- **Covered:**
|
|
38
|
+
- **Not covered:**
|
|
39
|
+
- **Could not verify:**
|
|
40
|
+
- **Open questions:**
|
|
41
|
+
|
|
42
|
+
## Verdict
|
|
43
|
+
|
|
44
|
+
<REFINE | REDESIGN | NEW> — <one line of reasoning, and the scope it covers>
|
|
45
|
+
|
|
32
46
|
## Practice compliance (deep audits)
|
|
33
47
|
|
|
34
48
|
| Practice | Verdict | How / why not |
|
package/templates/foundation.md
CHANGED
|
@@ -65,5 +65,6 @@ this section just records the on/off choice and the file location.
|
|
|
65
65
|
- **Acceptance criteria:**
|
|
66
66
|
- Given <precondition>, when <action>, then <observable result>.
|
|
67
67
|
- **Priority:** must | should | could
|
|
68
|
+
- **Kill criteria:** <metric below threshold by date -> drop | iterate, or omit>
|
|
68
69
|
- **Status:** proposed
|
|
69
70
|
-->
|
package/templates/scenarios.md
CHANGED
|
@@ -32,6 +32,7 @@ action per step paired with the observable system response:
|
|
|
32
32
|
- **UI elements:** <every button, field, link, dialog, toast involved>
|
|
33
33
|
- **States covered:** <loading | empty | error | success>
|
|
34
34
|
- **Errors & recovery:** <each failure: what the user sees, how they recover>
|
|
35
|
+
- **Telemetry:** <`object_action` event + params, or omit if none>
|
|
35
36
|
- **Status:** draft
|
|
36
37
|
- **Coverage:** none yet
|
|
37
38
|
-->
|