super-ux 0.49.1 → 0.50.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 CHANGED
@@ -1,5 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.50.0 — the templates ship where the texts say they are
4
+
5
+ - **`templates/` now travels with everything that names it** (SUX-01, family audit
6
+ 2026-08-29). Six shipped texts pointed at "the plugin's `templates/`" while the
7
+ marketplace ships `./plugins/super-ux` and the directory lived at the repo root only —
8
+ verified absent from all 13 cached installed versions, so `/brand-init`, `/brand`,
9
+ `/ux-rule` step 2 and the three seeding skills dead-ended at a path that resolves in
10
+ the one place users never run from: this repository's own checkout. The repo root stays
11
+ the single source (the hard rules and the installer CLI read it);
12
+ `test/sync_references.py` now mirrors the full tree into `plugins/super-ux/templates/`
13
+ and the named seeds into each seeding skill's own directory — a skill installed by the
14
+ skills CLI has no plugin root to reach up to — and the three skill texts say "this
15
+ skill's own `templates/…`" while the three command texts keep "the plugin's
16
+ `templates/…`", which is now true.
17
+ - **The class is gated, not just the instance.** `validate_shipped_templates` refuses a
18
+ copy that drifts from its source and a copy with no source, in both homes;
19
+ `validate_shipped_paths` requires every backticked `templates/…` or `scripts/…` token
20
+ in a shipped text to resolve inside what actually ships — the plugin root for commands,
21
+ the skill's own directory for skill files. Six defects planted, each caught by its own
22
+ branch with its own message, each reverted; the sync verified idempotent across three
23
+ runs. The validator grows 4111 → 4174 checks and `test/floors.json` ratchets with it.
24
+ - **`/ux-audit` admits its whole scope surface** (SUX-06). `copy` and
25
+ `benchmark:<competitor>` join the `argument-hint` and the step-1 enumeration — the body
26
+ has treated both as legal scopes since they shipped, while the two places an agent
27
+ reads first omitted them.
28
+ - **Trigger hygiene in three descriptions** (SUX-07, SUX-08, SUX-11). `ux-scenarios`
29
+ defers the empty-project start up the chain — vision and ux-foundation own it — instead
30
+ of claiming "ANY new feature or project" unqualified; `copywriting` narrows "build a
31
+ landing page / сделай лендинг" to the copy for it, naming sheleg-design as the visual
32
+ half; `ux-flows` drops the bare "figma"/"фигма" claim and delegates the visual system
33
+ and Figma variables to sheleg-design, mirroring its own body. Every phrase the family
34
+ umbrella routes on remains a literal substring of its description — verified with the
35
+ umbrella's own `advertised_check.js` (43/43, and watched failing against a dropped
36
+ «мокап»).
37
+
3
38
  ## 0.49.1 — the skills handoff refuses the shadow it used to create
4
39
 
5
40
  - **The skills-menu item now consults the target home before delegating.** `npx skills add`
package/README.md CHANGED
@@ -248,7 +248,7 @@ to is a skill nobody runs.
248
248
  | `/vision` `/ux-init` `/ux-foundation` `/ux-flows` `/ux-update` `/ux-audit` `/ux-rule` `/ux-lint` `/ux-doctor` · `/brand` `/brand-init` `/brand-update` `/brand-lint` `/copy` | Direct controls for when you know exactly what you want; `/ux-rule` installs both hard rules and seeds `lint.py` + `doctor.py`; `/brand-init` seeds `docs/brand/` and its linter |
249
249
  | `docs/ux/lint.py` + `/ux-lint` | The deterministic half: missing Figma frames, unresolved SCR/story traces, orphans, built screens without coverage, index desync, ID gaps, broken links. Stdlib-only, exit 1 on problems, so wire it into CI and drift can't merge |
250
250
  | `cursor/rules/*.mdc` | The same methodology for Cursor: one always-on hard rule + seven agent-requested rules (vision, foundation, flows, scenarios, audit, brand voice, copywriting) |
251
- | `templates/` | Seeds for `docs/ux/`: the vision skeleton, foundation, flows, screens, scenario base, the folder README, and the audit-report skeleton. Both hard-rule snippets live here as their single source, `claude-rule.md` (scenario-first) and `vision-rule.md` (vision alignment), and the validator fails if a command's embedded copy drifts from them. Seeds for `docs/brand/`: voice, terminology, facts, channels, the string registry, a locale delta, and its folder README |
251
+ | `templates/` | Seeds for `docs/ux/`: the vision skeleton, foundation, flows, screens, scenario base, the folder README, and the audit-report skeleton. Both hard-rule snippets live here as their single source, `claude-rule.md` (scenario-first) and `vision-rule.md` (vision alignment), and the validator fails if a command's embedded copy drifts from them. Seeds for `docs/brand/`: voice, terminology, facts, channels, the string registry, a locale delta, and its folder README. The tree is mirrored into `plugins/super-ux/templates/` (and the seeds each skill names into that skill's own directory) by `test/sync_references.py`, so installed channels carry the seeds their texts point at; the validator refuses drift between the copies |
252
252
 
253
253
  The contracts every skill reads:
254
254
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-ux",
3
- "version": "0.49.1",
3
+ "version": "0.50.0",
4
4
  "scripts": {
5
5
  "test": "python3 test/validate.py && python3 test/brand_lint_test.py && python3 test/ux_lint_test.py && python3 docs/ux/lint.py && python3 docs/brand/lint.py && node test/installer_test.js"
6
6
  },