super-ux 0.36.0 → 0.37.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.
Files changed (2) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,86 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.37.0 — 2026-08-12
4
+
5
+ The last five findings from the R-14 run — the ones that needed a **decision**
6
+ rather than a correction. In every case the fresh-context agent had already
7
+ improvised the right answer, said out loud that it was deviating, and explained
8
+ why. The answer was accepted rather than re-invented.
9
+
10
+ ### Added
11
+
12
+ - **A declared branch for "we know almost nothing".** The Design workflow read
13
+ *per story* and built its practice profile from `foundation.md`, while the
14
+ commonest real brief has neither — and nothing said what to do. Step 0 now
15
+ requires three things instead of silent improvisation: a **provisional
16
+ profile** where every dimension names its provenance (`brief` / `inferred` /
17
+ `assumed`, and an assumed dimension that decides the flow's shape is called
18
+ out), `Traces:` as an **unbacked provisional job** in the user's words, and an
19
+ **open decisions** list saying what each would change. A flow built this way is
20
+ honest input; built without the three blocks it is invented personas with a
21
+ diagram on top.
22
+ - **A granularity rule for the practice pass, because "every practice" does not
23
+ scale.** A mobile subscription product pulls roughly **150 practices for one
24
+ flow**; the worked example has four rows. Per-practice verdicts for the artifact
25
+ row and anything the artifact touches; **one band verdict, with its reason**,
26
+ per remaining set. A band with no reason is a silent skip wearing a table row.
27
+ - **`blocked` joins the screen status enum** — designed, complete, and unsafe to
28
+ build because a decision outside UX would change it. Name the decision and its
29
+ owner on the same line. That state used to live in prose, where no linter and no
30
+ next agent reliably finds it, and `designed` quietly read as ready.
31
+ - **A state is not a screen, with a test.** One `SCR-ID` per place the user can
32
+ be; split only when a variation owns distinct copy, distinct elements **and** its
33
+ own primary action. A confirm dialog with its own words is a screen; a table with
34
+ no rows is a state. Two agents given the same app produced incompatible
35
+ `screens.md` files for exactly this.
36
+ - **The platform-permits rule, generalised out of BP-123.** Where a step belongs
37
+ to the OS or a store — store billing, a permission prompt, a share sheet,
38
+ biometrics — two non-design questions decide the diagram: can the app perform
39
+ the action at all, and does it learn the outcome synchronously. A "no" to the
40
+ second is a **third branch**. Drawing only success and failure there ships a flow
41
+ that cannot be built.
42
+
43
+ ## 0.36.1 — 2026-08-12
44
+
45
+ Four of the R-14 run's findings actioned, and a defect class ported from the
46
+ sibling repository.
47
+
48
+ ### Fixed
49
+
50
+ - **BP-123 described web billing and was applied to "any subscription billed
51
+ self-serve".** On a store-billed subscription the app **cannot cancel**: the
52
+ terminal step hands off to the store's own sheet and the app does not
53
+ synchronously know whether the user went through. A flow designed from the old
54
+ sentence cannot be built on a phone — which is exactly what a fresh-context
55
+ agent produced, correctly, from what the entry said. It now branches on who
56
+ holds the billing and requires the third state, *unverified*, that claims
57
+ neither outcome.
58
+ - **A save offer must name the mechanism that delivers it.** BP-123 listed
59
+ "pause, downgrade, discount" — and **billing pause is not an iOS mechanism**, so
60
+ a product-side pause worded as a billing pause is a lie in copy at the moment
61
+ the user is deciding whether to trust you.
62
+ - **BP-102 and BP-206 collided with no cross-reference.** On a cancellation screen
63
+ the exit is both the destructive action and the thing the user came for. Both
64
+ entries now carry the resolution: destructive *styling* is required, destructive
65
+ *weight* is not — full width, same type size and tap target, reachable without
66
+ scrolling.
67
+ - **"Diverge before converging" had nowhere to land.** `ux-flows` requires two
68
+ structurally different shapes and one line on why the loser lost; the `flows.md`
69
+ contract had no field for it, so the rejected shape evaporated and the next agent
70
+ re-litigated it. The contract gains `Rejected shape:`.
71
+ - **The Figma question said "at the start" from inside step 6.**
72
+ `figma-integration.md` places it at step 0 and is right; the flows skill now says
73
+ so instead of contradicting it.
74
+
75
+ ### Added
76
+
77
+ - **A check-count ratchet, ported from `sheleg-design`.** That repository's
78
+ retrospective recorded the class: a gate whose count can fall silently cannot
79
+ detect a deleted requirement. This one had no ratchet at all, so every
80
+ requirement deletion here was invisible **by construction**. `test/floors.json`
81
+ plus `check_floor()` inside `validate.py`, which CI already runs — watched saying
82
+ no against a planted impossible floor.
83
+
3
84
  ## 0.36.0 — 2026-08-12
4
85
 
5
86
  R-14 was filed `never` this morning and closed the same day, by the only
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-ux",
3
- "version": "0.36.0",
3
+ "version": "0.37.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"