Skip to content

The four-pillar roadmap: library, templates, experience metrics, versions, walkthroughs, studio, and the experiment - #5

Merged
junixlabs merged 6 commits into
mainfrom
claude/focused-carson-mj2px4
Oct 3, 2026
Merged

junixlabs merged 6 commits into
mainfrom
claude/focused-carson-mj2px4

Conversation

@junixlabs

@junixlabs junixlabs commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Eleven commits on top of main (5fffe80). They get the gate passing again and implement the roadmap set on 2026-10-03: knowledge, process, evidence and versions, and experience validation at the centre. The last part is an experiment that scores agents on the walk.

Stabilise

  • Map contrast fixed. The map page's muted ink was 4.22:1 against its background, which failed the gate's own-pages check on main.
  • English output. Every sentence the instrument prints is now English, and the example data matches the code.

Knowledge

  • Six topic pools, 64 viewpoints, from the source repositories of GOV.UK, USWDS, Carbon, Primer, Polaris, Mailchimp and the W3C. Every quote was fetched and checked verbatim.
    • The pools: colour (10), writing (10), data display (12), forms (12), navigation and IA (10), motion and feedback (10).
    • The lenses now carry 187 viewpoints.
  • uxcli template for workspace, shop, landing, content and mobile-app. Every actor line and research line is a question. apply only ever creates files and records which template was used.
  • context show now names the template, the lens for each kind of screen, and which lens each screen was reviewed against. It also shows, per screen, whether it has been drawn and picked yet.
  • references/research.md: how to research a product's field before designing for it.

Experience validation

uxcli experience [--page] reports, per workflow:

  • steps, clicks, characters typed and scrolls;
  • response time, as the first visible change after the action;
  • a keystroke-level estimate;
  • a wait with no progress signal;
  • a control the step needs that is below the fold;
  • an answer asked for twice;
  • a step that did not reach its state;
  • recovery after an error (typed answers kept, error announced);
  • navigation consistency between steps.

Every item is a finding with the source of its threshold, pinned on the step's screenshot.

Observer change: the observer now measures the first visible change after an action. If nothing has changed, it waits up to 2.5 s for one instead of calling the page settled at 0 ms. During a wait longer than 1 s it records whether a progress signal was shown.

Privacy: a typed value is stored only as its length and hash. Schemas trace and experience enforce this.

Evidence and versions

  • uxcli version save <journey> <name> names one walk. It creates a file and never rewrites one, and the walk is pinned so pruning keeps it.
  • uxcli experience --from=<a> --to=<b> compares two versions step by step.
  • Proposals accept a new kind, redesign, citing the walk as evidence.

Walkthrough

uxcli walkthrough <journey> [--as=<actor>] | check runs the four questions of Wharton, Rieman, Lewis & Polson (1994) at every step:

  • Each answer is given from the step's screenshot, optionally as an actor the project wrote.
  • check refuses a yes that the walk contradicts.
  • Every no and unsure is a finding.

Studio

uxcli studio [--serve] [--shot] shows the project as a board laid out like a design file:

  • Each step's screen as drawn, as built (with findings pinned) and in each named version.
  • Pan and zoom, an inspector, and Context and Library tabs.
  • In serve mode, a person can pick a variant, ask for a redraw, or leave a note that is written as a redesign proposal. The page refreshes as files change and serves nothing outside .uxcli/.
  • Two versions can be compared on the board.

The experiment

Ten fresh Sonnet sessions per arm, scored with one instrument:

Arm Passed Median findings
ticket alone 0/10 2
with the skill 8/10 1
  • The two failing skill sessions never read the journey's card. uxcli run <url> now names the journey a screen belongs to and points to context show.
  • The draw arm removes the lead screens' drawings, so the agent should design first:
    • Of 20 sessions, 0 drew a variant and 20 built the page anyway; 19 said they had skipped the design step.
    • This held before and after context show started printing BEFORE YOU BUILD.
    • The library's exit criterion is measured and not met. The owner needs to decide whether the instrument should hold the work to a pick and a review.

Validation

  • uxcli gate passes locally.
  • New suites: template, experience, version, walkthrough, studio (this one also runs the page probes on the board), plus additions to brief.
  • CI was green on every earlier commit in this PR; the run for the last commit was still pending when this description was written.

Known limits

  • Unloaded URLs. The public URLs in the pools were derived from each repository's routing, not loaded, because the design-system sites were not reachable from the sandbox.
  • Unvalidated metrics. The experience metrics have not been validated on unseen journeys, so they report findings only.
  • Small experiment. One model and one ticket.

🤖 Generated with Claude Code

https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx

claude added 6 commits October 3, 2026 15:27
…at read them

The level projection's path-to-next-level sentences, the plan's blocked
reasons, the measurement outcome, the packet's blocked note and the
retained-fixture reasons were Vietnamese while every other card line is
English. Translated, with the four pair suites that match on them
updated to the same words. Test inputs (alert texts, a prose
mustNotMatch, the context quote pair) translated so each pair still
tests what it named.

Left as is: "Tiếng Việt" in the focus-visible fixtures and the run clip,
which is a language picker naming the language in its own words.
Not touched: uxcli.context.json and test/fixtures/crm/ — signed quotes
and a fixture product, a decision for the owner.

level, model, report and run pairs still cannot run here: they read
.claude/specs/design/uxcli-data-v0.1/, which is gitignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
… the code now says

The gate's own-pages check failed on main: the map's `na` flag set
--dim #6b7380 on --well #eef1f5, 4.22:1. --dim is now #5f6774, which
keeps the hue and holds 4.8:1 or better on every light surface the page
paints (white, well, bg, canvas, accent-soft). Dark theme untouched.

The computed sentences in examples/crm/ and test/fixtures/runs/ (blocked
notes, plan reasons, level path, measurement outcomes, retained-fixture
reasons) are rewritten with the same English the code prints since the
previous commit, so run and level pairs reproduce the example again.
Authored text (journeys, insights, actors) is untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
…searches the field

uxcli template [show <id> | apply <id> [dir]] with three templates —
workspace (CRMs, admin, back-offices), shop, landing. Each carries the
screens such products usually have and the lens each is read against,
the journeys worth walking first with what to watch on them, the
questions research must answer about the people and the field, and the
sources research starts from. A template states no fact about anyone's
users: every actor line and research line must end in a question mark,
and `apply` writes the questions into an actor's unknowns[] and nothing
else, creating only.

references/research.md is the protocol: start from the template, look in
the order the evidence can carry (the project's own data, regulations,
published research, design systems, products people already use,
community practice as folklore), come back with the field's words, its
rules, the work, the conventions and the open questions, and write each
down as an insight with its source.

Gate: template-pairs — every template parses, fits its schema and its
brief; a fact for a question, a journey through a missing screen or
actor, an unknown lens and an unknown key are refused; apply creates one
schema-valid actor per actor, a second apply and an actor somebody wrote
are left byte for byte.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
…uxcli is now

Four viewpoint pools researched from the source repositories of public
design systems and the W3C, every quote fetched in the session and
checked verbatim against the raw file: colour (10 — WCAG 1.4.1 and
1.4.11, GOV.UK, USWDS, Carbon, Primer, Polaris), writing and microcopy
(10 — GOV.UK, Carbon, Primer, Polaris, Mailchimp), data display (12 —
Primer, GOV.UK, USWDS, Carbon, Polaris, W3C WAI tables) and forms (12 —
GOV.UK, USWDS, Primer, WCAG 1.3.5). Where sources disagree the pool
records both and the check tests only what they agree on; numbers a
source does not give are labelled in exceptions as uxcli's starting
point. build-lenses.mjs folds them into the six lenses: 167 viewpoints,
lenses from 39 to 63 picks. docs/lenses/README.md says how they were
made.

VISION, PRODUCT, the README's opening and ROADMAP are rewritten around
the owner's direction of 2026-10-03: an agent that designs like a
designer who did the research — knowledge, process, evidence and
versions, and experience validation at the centre — keeping the line
between what is measured (may block) and what is believed (may only
inform). The repository's own installed skill is refreshed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
…a walk

`uxcli experience [dir|run] [--page] [--json]` reads each journey's
last run packet and reports, per workflow (a journey's workflows are
alternatives, so each is totalled on its own): steps, clicks, fields
and characters typed, scrolls, each step's settle time in Nielsen's
bands (100 ms / 1 s / 10 s), and a keystroke-level estimate of the time
a practised user needs (Card, Moran & Newell; each scroll counted as
one pointing operator, said so). It reports a wait past one second, a
control the step needs that is below the fold, an answer typed twice in
one workflow, and a step that did not reach its state — each a finding
with the source of its threshold, never a fail. With an older walk on
disk it names what moved and which findings came and went.

--page writes .uxcli/experience/index.html: one card per step with the
screenshot it was taken at and each finding pinned where the browser
found the element, a dashed bar at the bottom edge when it was below
the fold.

The runner records a typed value as { chars, value: sha1_8 } — enough
to estimate typing and to see an answer asked for twice, never the
value itself.

On the CRM fixture, walked live, it reports the call button two
scrolls away at 390x844 (the defect C-001 is signed against) and the
server-error path that clears the email the person typed.

Gate: experience-pairs — a clean walk is silent; a 2.4 s and a 12 s
wait, a button two scrolls down, an email asked for again, a step that
does not arrive and an extra step each speak; a second workflow is not
added to the first; the comparison names what moved both ways; the
example project's walk reports C-001's button; the page pins the
finding on its step's screenshot. Skill, README and CHANGELOG updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
…two, propose a redesign

Recovery. After a step the server answers with an error (4xx, 5xx or an
intercepted failure), `uxcli experience` reports a typed answer the page
no longer holds — a password excepted, the security convention — and an
error nothing on the page announced in text. Consistency: within a
workflow, a navigation landmark whose shared items change order (3.2.3).
The runner records, per typed field, whether it still held the value
afterwards and whether it is a password (never the value), the visible
announcement roles after each action, and each navigation landmark's
items; the observer reads input type and landmarks.

Walked live on the CRM fixture it now reports exactly the planted
defect on the server-error path (the email is cleared) and nothing on
the wrong-password path.

Versions. `uxcli version save <journey> <name> [--note --run
--proposal]` names one walk: .uxcli/versions/<journey>/<name>.json, one
file per version, created and never rewritten, schema
version.schema.json; the run it names is pinned against pruning.
`uxcli experience --journey=<id> --from=<a> --to=<b> [--page]` compares
two versions step by step, with both pictures of each step side by side.
Proposals take `kind: redesign`, citing the walk in evidence[];
references/versions.md is the loop. The CRM example carries v1 and v2.

Gate: experience-pairs (30 checks) gains recovery and consistency pairs;
version-pairs (22) — refused shapes, create-only save, a walk of another
journey or of none refused, pruning keeps only what a version names, the
example's v1→v2 comparison and its side-by-side page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TUCUpbzmTpBE6ND7eHfzx
@junixlabs
junixlabs merged commit aff4dca into main Oct 3, 2026
1 check passed
@junixlabs junixlabs changed the title Gate green again; library, templates and experience metrics for an agent that designs like a researched designer Gate green again; library, templates, experience metrics and versions for an agent that designs like a researched designer Oct 3, 2026
@junixlabs junixlabs changed the title Gate green again; library, templates, experience metrics and versions for an agent that designs like a researched designer The four-pillar roadmap: library, templates, experience metrics, versions, walkthroughs, studio, and the experiment Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants