super-ux 0.3.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 ADDED
@@ -0,0 +1,41 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file. The format
4
+ follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions
5
+ follow [SemVer](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.3.0] - 2026-07-19
8
+
9
+ ### Added
10
+
11
+ - npx installer: `npx github:ssheleg/super-ux --cursor [project-dir]`
12
+ (`bin/super-ux.js`, cross-platform Node CLI, no dependencies) — same
13
+ behavior as `install.sh`, plus `package.json` for npm/npx distribution.
14
+ - Validator now checks `package.json` (name, bin shebang, files whitelist)
15
+ and includes its version in the version-sync check.
16
+
17
+ ## [0.2.0] - 2026-07-19
18
+
19
+ ### Added
20
+
21
+ - `/ux` — one-command entry point: inspects the project, installs the hard
22
+ rule and seeds/initializes the scenario base if anything is missing,
23
+ otherwise prints a status report and suggests exactly one next action.
24
+ Idempotent; `/ux-init`, `/ux-update`, `/ux-audit`, `/ux-rule` remain as
25
+ direct controls.
26
+
27
+ ## [0.1.0] - 2026-07-19
28
+
29
+ ### Added
30
+
31
+ - Claude Code plugin `super-ux`: skills `ux-scenarios` (maintain the scenario
32
+ base) and `ux-audit` (scenario audit loop); commands `/ux-init`,
33
+ `/ux-update`, `/ux-audit`, `/ux-rule`.
34
+ - Scenario format contract v1
35
+ (`plugins/super-ux/skills/references/scenario-format.md`).
36
+ - Cursor rules: `cursor/rules/super-ux.mdc` (always-on hard rule),
37
+ `ux-scenarios.mdc`, `ux-audit.mdc`.
38
+ - Templates: scenario base skeleton, audit report skeleton, CLAUDE.md hard
39
+ rule snippet.
40
+ - `install.sh --cursor <project-dir>` installer for Cursor projects.
41
+ - Repo validator (`test/validate.py`) and GitHub Actions CI.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ssheleg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # super-ux
2
+
3
+ Scenario-driven UI development for AI agents (Claude Code + Cursor).
4
+
5
+ AI agents generate poor interfaces because they build UI without a model of
6
+ user behavior: screens appear feature by feature, while error states, empty
7
+ states, and cross-feature flows get invented ad hoc or skipped. **super-ux**
8
+ fixes the process, not the symptom — a versioned base of UX scenarios becomes
9
+ the source of truth for all user-facing behavior. Scenarios are written and
10
+ validated *before* UI is built, updated in the same change as any behavior
11
+ change, and used as the checklist for recurring, evidence-backed audits of
12
+ the codebase.
13
+
14
+ ```mermaid
15
+ flowchart LR
16
+ A[Feature idea] --> B[Draft scenarios]
17
+ B --> C{Validate vs existing base:\nconflicts, overlaps, gaps}
18
+ C -->|approved| D[Design & build UI]
19
+ D --> E[Update scenarios\nin the same change]
20
+ E --> F[/ux-audit: batched check\nof code vs every scenario/]
21
+ F --> G[Audit report + findings]
22
+ G --> H[Plan fixes] --> D
23
+ ```
24
+
25
+ ## What's inside
26
+
27
+ | Piece | Purpose |
28
+ |---|---|
29
+ | skill `ux-scenarios` | Maintain `docs/ux/scenarios.md`: init (greenfield interview or existing-code inventory sweep), update on every change, validate for conflicts and coverage |
30
+ | skill `ux-audit` | Batched audit loop: trace every scenario through the code, verdicts PASS/PARTIAL/FAIL/BLOCKED with `file:line` evidence, report into `docs/ux/audits/` |
31
+ | `/ux` | **The one command**: sets everything up if missing (rule, `docs/ux/`, initial base), otherwise status report + one suggested next action. Idempotent |
32
+ | `/ux-init` `/ux-update` `/ux-audit` `/ux-rule` | Direct controls over the skills; `/ux-rule` installs the hard rule into the project's CLAUDE.md |
33
+ | `cursor/rules/*.mdc` | The same methodology for Cursor (always-on hard rule + two agent-requested rules) |
34
+ | `templates/` | Skeletons for the scenario base, the audit report, and the CLAUDE.md rule snippet |
35
+
36
+ The format all of them share is locked in
37
+ [scenario-format.md](plugins/super-ux/skills/references/scenario-format.md):
38
+ scenario entries with stable `SCN-NNN` IDs, personas, per-feature and
39
+ per-product completeness checklists, the `draft → validated → implemented`
40
+ lifecycle, audit verdicts and severities.
41
+
42
+ ## The hard rule
43
+
44
+ - `docs/ux/scenarios.md` is the source of truth for all user-facing behavior.
45
+ - Any change touching user-facing behavior updates the scenario base **in the
46
+ same change**.
47
+ - Any new feature or project **starts** with scenarios: draft, validate
48
+ against the existing base, approve — only then design and build UI.
49
+
50
+ ## Install
51
+
52
+ ### Claude Code
53
+
54
+ ```
55
+ /plugin marketplace add ssheleg/super-ux
56
+ /plugin install super-ux@super-ux
57
+ ```
58
+
59
+ Then in your project: `/ux`. That's it — it installs the hard rule, seeds
60
+ `docs/ux/`, builds the scenario base if empty, and on every later run just
61
+ reports status and the next action.
62
+
63
+ ### Cursor
64
+
65
+ ```sh
66
+ npx github:ssheleg/super-ux --cursor /path/to/your/project
67
+ ```
68
+
69
+ (or clone and run `./install.sh --cursor <dir>` — same behavior.) Copies the
70
+ three rules into `.cursor/rules/` and seeds `docs/ux/scenarios.md`. An
71
+ existing scenario base is never overwritten; re-run with `--force` to update
72
+ rules after a new release.
73
+
74
+ ## Typical cycle
75
+
76
+ 1. `/ux` — first run sets everything up and builds the base (greenfield:
77
+ interview first, UI later; existing code: inventory sweep, scenarios for
78
+ everything found, gaps flagged in both directions).
79
+ 2. Work normally; every user-facing change updates the base in the same
80
+ change (the always-on rule catches it; `/ux-update` for manual control).
81
+ 3. `/ux` any time — status + the one next action; `/ux-audit` — batched
82
+ verification of code vs scenarios; report lands in
83
+ `docs/ux/audits/YYYY-MM-DD.md`, statuses update in the base.
84
+ 4. Turn FAIL/PARTIAL findings into a plan with your planning workflow; build;
85
+ repeat.
86
+
87
+ ## Development
88
+
89
+ `python3 test/validate.py` checks repo consistency (manifests, versions,
90
+ front-matter, templates, links); CI runs it on every push and PR. Versioning
91
+ is semver; bump `marketplace.json` + `plugin.json` + `CHANGELOG.md` together
92
+ — the validator enforces the sync.
93
+
94
+ ## По-русски (коротко)
95
+
96
+ Проблема: агенты генерируют плохие интерфейсы, потому что строят UI без
97
+ модели поведения пользователя. super-ux делает базу UX-сценариев
98
+ (`docs/ux/scenarios.md`) источником правды: сценарии пишутся и валидируются
99
+ **до** интерфейса, обновляются тем же изменением, что и поведение, и служат
100
+ чек-листом для регулярных аудитов кода (`/ux-audit`) с вердиктами
101
+ PASS/PARTIAL/FAIL/BLOCKED и доказательствами `file:line`. Установка: в
102
+ Claude Code — `/plugin marketplace add ssheleg/super-ux`, в Cursor —
103
+ `npx github:ssheleg/super-ux --cursor <проект>`. Дальше одна команда — `/ux`: сама ставит
104
+ правило и базу, а при повторных запусках показывает статус и следующий шаг.
105
+
106
+ ## License
107
+
108
+ MIT © ssheleg
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * super-ux installer CLI.
4
+ * Cross-platform equivalent of install.sh: copies Cursor rules into a target
5
+ * project and seeds the docs/ux skeleton. Claude Code needs no installer —
6
+ * see usage.
7
+ */
8
+ 'use strict';
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ const ROOT = path.resolve(__dirname, '..');
14
+
15
+ function usage() {
16
+ console.log(`super-ux installer
17
+
18
+ Usage:
19
+ npx github:ssheleg/super-ux --cursor [project-dir] [--force]
20
+ npx super-ux --cursor [project-dir] [--force] (once published to npm)
21
+
22
+ Copies cursor/rules/*.mdc into <project-dir>/.cursor/rules/ (default:
23
+ current directory) and seeds docs/ux/scenarios.md from templates/ if absent.
24
+ An existing scenario base is NEVER overwritten. Existing rule files are
25
+ skipped unless --force is given.
26
+
27
+ Claude Code (no installer needed):
28
+ /plugin marketplace add ssheleg/super-ux
29
+ /plugin install super-ux@super-ux
30
+ Then in your project: /ux`);
31
+ }
32
+
33
+ function fail(message) {
34
+ console.error(`error: ${message}`);
35
+ process.exit(1);
36
+ }
37
+
38
+ function installCursor(target, force) {
39
+ if (!fs.existsSync(target) || !fs.statSync(target).isDirectory()) {
40
+ fail(`'${target}' is not a directory`);
41
+ }
42
+
43
+ const rulesSrc = path.join(ROOT, 'cursor', 'rules');
44
+ const rulesDst = path.join(target, '.cursor', 'rules');
45
+ fs.mkdirSync(rulesDst, { recursive: true });
46
+
47
+ let installed = 0;
48
+ let skipped = 0;
49
+ const rules = fs.readdirSync(rulesSrc).filter((f) => f.endsWith('.mdc')).sort();
50
+ if (rules.length === 0) fail(`no .mdc rules found in ${rulesSrc}`);
51
+
52
+ for (const name of rules) {
53
+ const dst = path.join(rulesDst, name);
54
+ if (fs.existsSync(dst) && !force) {
55
+ console.log(`skip: ${dst} exists (use --force to overwrite)`);
56
+ skipped += 1;
57
+ } else {
58
+ fs.copyFileSync(path.join(rulesSrc, name), dst);
59
+ console.log(`install: ${dst}`);
60
+ installed += 1;
61
+ }
62
+ }
63
+
64
+ const base = path.join(target, 'docs', 'ux', 'scenarios.md');
65
+ if (fs.existsSync(base)) {
66
+ console.log(`keep: ${base} exists (never overwritten)`);
67
+ } else {
68
+ fs.mkdirSync(path.join(target, 'docs', 'ux', 'audits'), { recursive: true });
69
+ fs.copyFileSync(path.join(ROOT, 'templates', 'scenarios.md'), base);
70
+ console.log(`seed: ${base}`);
71
+ }
72
+
73
+ console.log(`done: ${installed} installed, ${skipped} skipped`);
74
+ }
75
+
76
+ function main() {
77
+ const args = process.argv.slice(2);
78
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
79
+ usage();
80
+ return;
81
+ }
82
+ if (args[0] !== '--cursor') {
83
+ console.error(`error: unknown mode '${args[0]}'`);
84
+ usage();
85
+ process.exit(1);
86
+ }
87
+ const force = args.includes('--force');
88
+ const dirArg = args[1] && args[1] !== '--force' ? args[1] : '.';
89
+ installCursor(path.resolve(dirArg), force);
90
+ }
91
+
92
+ main();
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: "super-ux hard rule: scenario-driven UI development"
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # UX scenarios — hard rule (super-ux)
7
+
8
+ - `docs/ux/scenarios.md` is the source of truth for all user-facing behavior.
9
+ - Any change that touches user-facing behavior MUST update
10
+ `docs/ux/scenarios.md` in the same change (add/adjust scenarios, statuses,
11
+ coverage). New user-facing behavior with no scenario is a blocker, not a
12
+ warning.
13
+ - Any new feature or project STARTS with scenarios: draft them, validate
14
+ against existing scenarios (conflicts, overlaps, gaps), get them approved —
15
+ only then design and build UI.
16
+ - Scenario maintenance workflows: see the `ux-scenarios` rule. Codebase
17
+ audits against the base: see the `ux-audit` rule.
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: "Audit the codebase against docs/ux/scenarios.md: apply for UX audits, scenario compliance checks, pre-release UX verification, or when asked to verify that all buttons/states/errors exist"
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # ux-audit — Scenario Audit Loop
7
+
8
+ Verify the code delivers every scenario in `docs/ux/scenarios.md`. Output: a
9
+ report in `docs/ux/audits/YYYY-MM-DD[-scope].md` + updated `Last audit`
10
+ column in the base. If the base is missing, create it first (ux-scenarios
11
+ rule) — there is nothing to audit against.
12
+
13
+ **Evidence discipline:** every verdict cites `file:line`. Cannot verify →
14
+ verdict BLOCKED with the exact reason. Never guess, never a courtesy PASS.
15
+
16
+ ## Loop
17
+
18
+ 1. Read the base; scope = all | feature:<name> | ID range; note the git SHA
19
+ of scenarios.md for the report header; skip retired scenarios.
20
+ 2. Batch by feature, ~5–8 scenarios per batch; list batches up front.
21
+ 3. Per scenario check against the code: entry point reachable; every step
22
+ implemented; every listed UI element present and wired; every listed
23
+ state (loading/empty/error/success) has a rendering branch; every error
24
+ surfaced honestly (no silent catch, no fake success) with the described
25
+ recovery; expected result observably occurs. Gaps → findings
26
+ `[AUD-YYYY-MM-DD-NN] (critical|major|minor) description -> suggested fix`.
27
+ 4. Verdicts: PASS (complete), PARTIAL (flow exists, gaps), FAIL (missing or
28
+ broken), BLOCKED (cannot verify — say why).
29
+ 5. Write the report batch by batch: header (scope, method, base SHA),
30
+ Summary (totals, top issues, prioritized next actions), per-batch
31
+ verdicts with evidence, findings-register table.
32
+ 6. Update the base: `Last audit` = `YYYY-MM-DD VERDICT`; validated →
33
+ implemented where PASSed. Do not edit scenario content during an audit.
34
+ 7. Offer (don't auto-run) to turn FAIL/PARTIAL findings into a work plan.
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: "Maintain docs/ux/scenarios.md (the UX scenario base): apply when creating or updating UX scenarios, starting any new feature or project, changing user-facing behavior, or onboarding a codebase into scenario-driven development"
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # ux-scenarios — Maintain the Scenario Base
7
+
8
+ `docs/ux/scenarios.md` describes everything the user can do, see, and hit —
9
+ every feature, button, state, error, result. Keep it true.
10
+
11
+ ## File structure (scenario-format v1)
12
+
13
+ Title, then header comment, then: **Index** table
14
+ (`| ID | Title | Feature | Persona | Status | Last audit |`), **Personas**
15
+ (1–3 sentences each), **Scenarios** grouped by feature.
16
+
17
+ Scenario entry fields (exact names): `Persona`, `Feature`, `Entry point`,
18
+ `Preconditions`, `Steps` (numbered, one user action each), `Expected result`
19
+ (observable), `UI elements` (every button/field/link/dialog/toast involved —
20
+ this is what audits check), `States covered` (loading|empty|error|success),
21
+ `Errors & recovery` (each failure: what the user sees, how they recover),
22
+ `Status` (draft|validated|implemented|retired), `Coverage` (file:line or
23
+ `none yet`).
24
+
25
+ Rules: IDs `SCN-NNN`, sequential, never reused; retired entries are kept,
26
+ never deleted. Lifecycle: draft → validated (human approval) → implemented
27
+ (audit-confirmed); changed scenarios drop back to draft.
28
+
29
+ Per-feature completeness: happy path, every error path, empty state, visible
30
+ loading, destructive-action confirmation, returning-user variant.
31
+ Per-product: first-run onboarding, every core flow, settings, multi-entity
32
+ flows (e.g. second project), account/data lifecycle.
33
+
34
+ ## Workflows
35
+
36
+ - **Init (greenfield):** no code yet — interview the user (personas, jobs,
37
+ features), draft the full base, get approval. UI only after validation.
38
+ - **Init (existing code):** inventory sweep (routes/screens, interactive
39
+ elements, state branches, error paths, onboarding, settings) → scenarios
40
+ covering everything found, `Coverage` filled with evidence; report both
41
+ gap directions (code without scenario, checklist item without code).
42
+ - **Update:** for any behavior change — adjust affected scenarios in the
43
+ SAME change; add scenarios for new behavior; retire untrue ones; keep the
44
+ Index in sync. Behavior fitting no scenario → stop and escalate.
45
+ - **Validate:** integrity (IDs, index sync, personas, statuses), coverage
46
+ vs checklists, conflicts between scenarios; for a new feature idea —
47
+ which existing scenarios it touches/contradicts/duplicates, reconcile
48
+ before any UI work.
package/package.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "super-ux",
3
+ "version": "0.3.0",
4
+ "description": "Scenario-driven UI development for AI agents (Claude Code + Cursor): scenario base, scenario-first hard rule, evidence-backed UX audits. This package is the installer CLI.",
5
+ "bin": { "super-ux": "bin/super-ux.js" },
6
+ "files": ["bin", "cursor", "templates", "README.md", "LICENSE", "CHANGELOG.md"],
7
+ "repository": "github:ssheleg/super-ux",
8
+ "homepage": "https://github.com/ssheleg/super-ux",
9
+ "license": "MIT",
10
+ "author": "ssheleg",
11
+ "engines": { "node": ">=16" },
12
+ "keywords": ["ux", "scenarios", "audit", "ui", "user-flows", "scenario-driven", "claude-code", "cursor"]
13
+ }
@@ -0,0 +1,26 @@
1
+ # UX Audit — YYYY-MM-DD
2
+
3
+ - **Scope:** all
4
+ - **Method:** static code trace
5
+ - **Base version:** <git SHA of scenarios.md at audit time>
6
+
7
+ ## Summary
8
+
9
+ - Totals: PASS 0 / PARTIAL 0 / FAIL 0 / BLOCKED 0
10
+ - Top issues:
11
+ - Recommended next actions (prioritized):
12
+
13
+ <!-- One "## Batch N" section per scenario batch:
14
+
15
+ ## Batch 1: <feature> (SCN-001..SCN-005)
16
+
17
+ ### SCN-001 — PASS|PARTIAL|FAIL|BLOCKED
18
+ - **Evidence:** file:line, file:line
19
+ - **Findings:**
20
+ - [AUD-YYYY-MM-DD-01] (critical|major|minor) <finding> -> <suggested fix>
21
+ -->
22
+
23
+ ## Findings register
24
+
25
+ | # | Scenario | Severity | Finding | Suggested fix |
26
+ |---|----------|----------|---------|---------------|
@@ -0,0 +1,11 @@
1
+ ## UX scenarios — hard rule (super-ux)
2
+
3
+ - `docs/ux/scenarios.md` is the source of truth for all user-facing behavior.
4
+ - Any change that touches user-facing behavior MUST update
5
+ `docs/ux/scenarios.md` in the same change (add/adjust scenarios, statuses,
6
+ coverage).
7
+ - Any new feature or project STARTS with scenarios: draft them, validate
8
+ against existing scenarios (conflicts, overlaps, gaps), get them approved —
9
+ only then design and build UI.
10
+ - Use the `ux-scenarios` skill to maintain the base and `ux-audit` to verify
11
+ the codebase against it.
@@ -0,0 +1,38 @@
1
+ # UX Scenarios
2
+
3
+ <!-- Managed with super-ux (scenario-format v1). Update in the same change as any user-facing behavior change. -->
4
+
5
+ ## Index
6
+
7
+ | ID | Title | Feature | Persona | Status | Last audit |
8
+ |----|-------|---------|---------|--------|------------|
9
+
10
+ ## Personas
11
+
12
+ <!-- Every persona referenced below, 1-3 sentences each: who they are, what
13
+ they know, what they want. Example:
14
+
15
+ ### new-user
16
+ Opens the product for the first time. Knows nothing about it; wants to reach
17
+ first value with zero reading.
18
+ -->
19
+
20
+ ## Scenarios
21
+
22
+ <!-- Group scenarios by feature under "## <feature>" headings. Entry shape
23
+ (see scenario-format v1 for field rules):
24
+
25
+ ### SCN-001: <Title>
26
+ - **Persona:** <persona-id>
27
+ - **Feature:** <feature>
28
+ - **Entry point:** <where the user starts>
29
+ - **Preconditions:** <state required, or "none">
30
+ - **Steps:**
31
+ 1. <one user action per step>
32
+ - **Expected result:** <what the user observes on success>
33
+ - **UI elements:** <every button, field, link, dialog, toast involved>
34
+ - **States covered:** <loading | empty | error | success>
35
+ - **Errors & recovery:** <each failure: what the user sees, how they recover>
36
+ - **Status:** draft
37
+ - **Coverage:** none yet
38
+ -->