super-ux 0.30.0 → 0.30.2

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,6 +1,44 @@
1
1
  # Changelog
2
2
 
3
- ## 0.30.0 — 2026-08-05
3
+ ## 0.30.2 — 2026-08-05
4
+
5
+ ### Added
6
+ - **The installer offers the family routing block.** After `npx super-ux
7
+ --cursor`, it delegates to `npx --no-install sshlg-skills routers --member
8
+ super-ux`, which writes the `super-ux` and `copywriting` routers into the
9
+ global agent instructions so both engage by default in every project.
10
+ Delegated rather than reimplemented: the block carries a precedence table
11
+ describing what the machine actually has, and a lone member rendering it
12
+ would list routers nobody installed. When the launcher is absent the
13
+ installer prints the one command instead of failing, and `--no-install`
14
+ keeps it from downloading a package nobody asked for.
15
+
16
+ — 2026-08-05
17
+
18
+ ### Fixed
19
+ - **`templates/brand/voice.md` told projects to write `PER-NN` where the UX
20
+ contract numbers personas `P-NN`.** `B004` traces `Derived-from` against
21
+ `foundation.md`, so a project following our own template earned a false
22
+ blocking error — the failure mode that teaches people to ignore a linter.
23
+ Shipped in 0.30.0; found by the code graph built afterwards.
24
+ - Four check codes (`B005`, `B054`, `B060`, `B072`) shipped with no fixture
25
+ behind them while the suite was green and the count looked right.
26
+
27
+ ### Added
28
+ - **`brand-contract.md` now owns all 33 check codes** with their severities.
29
+ Eighteen were documented only in the linter's source, in a repo whose canon
30
+ is one owner per fact.
31
+ - **`validate_brand_lint_coverage`** — every code the linter can emit must have
32
+ a fixture and a contract row. The audit finding became a gate rather than a
33
+ ledger entry.
34
+ - `system-map.md` names the brand reference shelf. It names rather than links:
35
+ a link would make every skill ship all ten files, and the map's job is
36
+ telling you what exists.
37
+ - The code graph itself (`graphify-out/`), with `.graphifyignore` excluding the
38
+ 115 sync_references copies whose hubs would describe the distribution
39
+ mechanism rather than the design.
40
+
41
+ — 2026-08-05
4
42
 
5
43
  The verbal identity layer. `docs/ux/` decides what the product does; the new
6
44
  `docs/brand/` decides how it speaks — one voice, many registers, and a linter
package/bin/super-ux.js CHANGED
@@ -331,6 +331,31 @@ async function menu() {
331
331
  if (keys.includes('skills')) installSkillsCli();
332
332
  }
333
333
 
334
+ /**
335
+ * Ask the launcher to write the family's routing block.
336
+ *
337
+ * Delegated rather than reimplemented. The block lists several routers and a
338
+ * precedence table describing what this machine actually has, so a lone
339
+ * member rendering it would produce a table for routers nobody installed.
340
+ * `--no-install` keeps this from silently downloading a package the user did
341
+ * not ask for; when the launcher is absent we print the one command instead.
342
+ */
343
+ function offerRouters() {
344
+ const { spawnSync } = require('child_process');
345
+ const r = spawnSync(
346
+ 'npx',
347
+ ['--no-install', 'sshlg-skills', 'routers', '--member', 'super-ux'],
348
+ { stdio: 'inherit', shell: process.platform === 'win32' }
349
+ );
350
+ if (r.status !== 0) {
351
+ console.log(
352
+ '\nЧтобы скилы включались по умолчанию во всех проектах, допиши блок\n' +
353
+ 'роутинга в глобальные инструкции агента:\n\n' +
354
+ ' npx --yes sshlg-skills routers --member super-ux\n'
355
+ );
356
+ }
357
+ }
358
+
334
359
  function main() {
335
360
  const args = process.argv.slice(2);
336
361
  if (args[0] === '--help' || args[0] === '-h') {
@@ -349,6 +374,7 @@ function main() {
349
374
  const force = args.includes('--force');
350
375
  const dirArg = args[1] && args[1] !== '--force' ? args[1] : '.';
351
376
  installCursor(path.resolve(dirArg), force);
377
+ offerRouters();
352
378
  }
353
379
 
354
380
  main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-ux",
3
- "version": "0.30.0",
3
+ "version": "0.30.2",
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"
@@ -2,7 +2,7 @@ Contract: brand-contract v1
2
2
  Voice pack: <pack id from voice-packs.md, or `custom`>
3
3
  Locales: <en (primary)>
4
4
  Locale parity threshold: 80%
5
- Derived-from: <PER-NN, JTBD-NN from docs/ux/foundation.md — or `inferred`>
5
+ Derived-from: <P-NN, JTBD-NN from docs/ux/foundation.md — or `inferred`>
6
6
  Status: draft
7
7
  Last calibrated: <YYYY-MM-DD>
8
8