super-ux 0.67.0 → 0.67.1

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,3 +1,48 @@
1
+ ## 0.67.1 (2026-11-11): delegated mode, task-pipeline handoff, seeds without the em dash
2
+
3
+ From the family audit of 2026-11-11.
4
+
5
+ - **Delegated mode.** `system-map.md` gains *Delegated mode: who takes a
6
+ decision*: when the host's instructions delegate decisions, a stop that is
7
+ not a gate takes the recorded decision or the documented default, has the
8
+ pick judged by a second, different model where the host provides one,
9
+ records it (`Approved-by: agent (delegated)`) and continues; trial or first
10
+ versions show the variants and wait; without delegation every stop asks as
11
+ before. brand-voice (pack pick, humanization pass, section approval),
12
+ ux-foundation (layer approval), ux-flows (2-up pick, web surfaces question),
13
+ copywriting (headline options), `/ux-init` (vision question) and
14
+ `/ux-flows` (Figma question) point to it in one clause.
15
+ - **Plans go to task-pipeline.** ux-audit step 9, `/ux` option 14,
16
+ `flow-improve.md` and the plan template hand the fix plan to
17
+ `/task-pipeline` when it is installed; the superpowers `writing-plans`
18
+ branch is gone.
19
+ - **One install block.** The sheleg-design and task-pipeline install commands
20
+ live in `system-map.md` → Companions; `/ux`, `visual-identity.md` and
21
+ ux-flows point to it.
22
+ - **ux-scenarios reads less.** Editing a scenario reads the contract's
23
+ Contents and the touched section; a full read only for a new scenarios
24
+ file. The body names its non-goal (implementation is task-pipeline's).
25
+ - **Seeds without the em dash.** `templates/brand/` (22), `templates/foundation.md`
26
+ (6, the journey example in `scenario-format.md` with it) and the manifest
27
+ description. `validate_seed_no_em_dash` scans all of `templates/` and the
28
+ manifests; eight templates that mirror contract formats or hard-rule keys
29
+ are listed as pending (board B-034).
30
+ - **copywriting** reads `facts.md` beside voice, terminology and channels; with
31
+ no pack it runs brand-voice Init and continues; a copy-check MCP tool such
32
+ as Copylot's `copylot_check` runs on every string in every shipped locale,
33
+ with its report id recorded (`/copy` step 6).
34
+ - **Commands that share a skill's name** (`/ux-audit`, `/ux-flows`,
35
+ `/ux-foundation`, `/vision`) carry `disable-model-invocation: true`: people
36
+ type them, and the model now sees the skill's own description instead of
37
+ the command's (checked with `claude -p --plugin-dir` on Claude Code
38
+ 2.1.299, 2026-11-11).
39
+ - **Smaller fixes.** ux-flows no longer names the retired Lazyweb MCP and says
40
+ a missing reference server means the sweep did not run; `seo-aeo-safety.md`
41
+ drops the "until 0.28 is installed" sentence; `.cursor/rules` is mirrored
42
+ from the shipped `cursor/rules` by `sync_references.py` and checked by
43
+ `validate_cursor_self_install`; `SKILL-CARD.md` and `test/evals/RESULTS.md`
44
+ say the 2026-08-31 eval rates predate the current descriptions.
45
+
1
46
  ## 0.67.0 (2026-11-09): contract v5, agents and capabilities (opt-in)
2
47
 
3
48
  Packet P-SU of the family run `2026-11-09-ai-native` (hub plan and design:
@@ -11,10 +11,10 @@ finish a button is how a product ends up with six voices.
11
11
 
12
12
  ## First action, every time
13
13
 
14
- Read the pack: `docs/brand/voice.md`, `terminology.md`, and the
15
- `channels.md` record for the surface being written. **No pack? Stop and run
16
- `/brand-init`.** Guessing the voice and being wrong costs more than the
17
- pause.
14
+ Read the pack: `docs/brand/voice.md`, `terminology.md`, `facts.md`, and
15
+ the `channels.md` record for the surface being written. **No pack? Run
16
+ `/brand-init`, then continue.** Guessing the voice and being wrong costs
17
+ more than the pause.
18
18
 
19
19
  Ownership is by file: `brand-voice` owns voice, terms, facts, channels and
20
20
  locale policy. Missing terms or facts are reported, never invented. This pass
@@ -53,9 +53,9 @@ to-do list, and the surface that needs rebuilding gets patched forever.
53
53
  CREATE/MODIFY/DELETE change table, every row traced to
54
54
  scenario/flow/finding IDs, prioritized Frequency × Severity ×
55
55
  Solvability. Then tell the user what they have in hand (plan, audit
56
- report, docs/ux chain, Figma) and recommend — don't force — implementing
57
- it by best practices with the ssheleg task-pipeline plugin
58
- (`/plugin marketplace add ssheleg/task-pipeline` +
59
- `/plugin install task-pipeline@task-pipeline`, then `/task-pipeline
60
- <plan file>`), or superpowers writing-plans, or by hand. The plan is
61
- executable without the conversation, so any path works.
56
+ report, docs/ux chain, Figma) and hand the plan to the ssheleg
57
+ task-pipeline plugin when it is installed (`/task-pipeline <plan
58
+ file>`); otherwise its optional install is
59
+ `/plugin marketplace add ssheleg/task-pipeline` +
60
+ `/plugin install task-pipeline@task-pipeline`, or implement by hand. The
61
+ plan is executable without the conversation.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-ux",
3
- "version": "0.67.0",
3
+ "version": "0.67.1",
4
4
  "scripts": {
5
5
  "test": "python3 test/validate.py && python3 test/family_gate.py && python3 test/family_gate.py --self-test && python3 test/brand_lint_test.py && python3 test/display_copy_test.py && python3 test/ux_lint_test.py && python3 docs/ux/lint.py && python3 docs/brand/lint.py && node test/installer_test.js && npm run test:audit",
6
6
  "test:audit": "for t in test/audit_regressions/*.py; do python3 \"$t\" || exit 1; done"
@@ -1,9 +1,9 @@
1
1
  Contract: brand-contract v1
2
2
 
3
- # docs/brand/ — how this product speaks
3
+ # docs/brand/: how this product speaks
4
4
 
5
5
  `docs/ux/` decides **what the product does**. This folder decides **how it
6
- speaks** — in the interface, on the landing page, in the store listing, in a
6
+ speaks**: in the interface, on the landing page, in the store listing, in a
7
7
  post. One voice, many registers.
8
8
 
9
9
  Owned by the `brand-voice` skill. Written by `copywriting`. Checked by
@@ -13,7 +13,7 @@ Owned by the `brand-voice` skill. Written by `copywriting`. Checked by
13
13
  |---|---|
14
14
  | `voice.md` | the identity: pack, five axes, narrative, invariants |
15
15
  | `terminology.md` | our words, banned words, entity and tier names |
16
- | `facts.md` | canonical numbers and proof — the only source of a figure |
16
+ | `facts.md` | canonical numbers and proof, the only source of a figure |
17
17
  | `channels.md` | one record per surface: register, limits, bans |
18
18
  | `copy-brief.md` | current marketing task inputs; unknowns stay explicit |
19
19
  | `strings.md` | interface string registry → `file:line` → scenario |
@@ -23,7 +23,7 @@ Owned by the `brand-voice` skill. Written by `copywriting`. Checked by
23
23
 
24
24
  **Fill this in before anything else.** The linter scans nothing outside these
25
25
  paths, and refuses to report a clean run over a surface it never read
26
- (`B006` for no block, `B009` for an unmatched glob). Delete the keys this project does not have — a declared-but-absent
26
+ (`B006` for no block, `B009` for an unmatched glob). Delete the keys this project does not have: a declared-but-absent
27
27
  source is worse than an omitted one.
28
28
 
29
29
  ```
@@ -41,7 +41,7 @@ no-title-period rule a required gate, run the resolved brand linter with
41
41
  `--fail-on B063`; default warnings remain advisory. The placeholder source
42
42
  patterns above must be replaced before the first real lint run.
43
43
 
44
- `ui` and `marketing` also classify findings — several checks apply to only
44
+ `ui` and `marketing` also classify findings: several checks apply to only
45
45
  one of the two.
46
46
 
47
47
  ## The hard rule
@@ -3,7 +3,7 @@ Contract: brand-contract v1
3
3
  # Channels
4
4
 
5
5
  One record per surface. `Register` is deltas against the five axes in
6
- `voice.md` — a register moves the axes, never the invariants.
6
+ `voice.md`: a register moves the axes, never the invariants.
7
7
 
8
8
  `Forbidden` always carries both halves, even when one is `none`. Platform
9
9
  physics and brand choice written on one line become indistinguishable within
@@ -13,7 +13,7 @@ A missing fact is reported, never invented to close a gap.
13
13
  | <what the number counts> | <448> | <api/catalog.json> | <2026-08-05> | <2026-11-05> | <yes> |
14
14
  | <internal figure> | <$3.10> | <billing export> | <2026-08-05> | <2026-11-05> | <no> |
15
15
 
16
- `Public: no` marks figures that exist and must never be quoted — internal
16
+ `Public: no` marks figures that exist and must never be quoted: internal
17
17
  margins, unreleased counts, anything under embargo. The linter treats
18
18
  quoting one as the same failure as quoting a number that does not exist.
19
19
 
@@ -28,7 +28,7 @@ dated, and re-checked.
28
28
 
29
29
  ## Required disclaimers
30
30
 
31
- Text that must appear alongside specific claims — regulatory, contractual, or
31
+ Text that must appear alongside specific claims: regulatory, contractual, or
32
32
  promised. Locale differences live in `locales/<code>.md`.
33
33
 
34
34
  | Claim it attaches to | Required text |
@@ -5,13 +5,13 @@ Address form: <Sie>
5
5
  Length coefficient: <1.30>
6
6
  Humor: <-1 from base>
7
7
  Never translated: <product name, entity names, tier names>
8
- Keywords: <own research — see below>
8
+ Keywords: <own research, see below>
9
9
  Reviewed by: <name of someone who reads this language daily, or `unreviewed`>
10
10
 
11
11
  # Locale delta
12
12
 
13
13
  Copy this file to `locales/<code>.md`, one per declared locale. The invariant
14
- half of the voice does not appear here — it is in `voice.md` and holds in
14
+ half of the voice does not appear here: it is in `voice.md` and holds in
15
15
  every language. This file carries only what is decided again.
16
16
 
17
17
  ## Address form
@@ -51,7 +51,7 @@ a missing one is a defect even when parity is otherwise complete.
51
51
 
52
52
  ## Length notes
53
53
 
54
- Surfaces where the coefficient bites hardest in this locale — usually
54
+ Surfaces where the coefficient bites hardest in this locale, usually
55
55
  buttons, tab labels, store title and subtitle. Recorded here so the
56
56
  constraint reaches the primary-locale original, where it can still be
57
57
  designed around.
@@ -7,7 +7,7 @@ does not replace i18n keys. It records which strings have been reconciled
7
7
  with the voice, which scenario each serves, and where each one lives.
8
8
 
9
9
  This is what makes "one action, two names" (`B020`) checkable at all. Without
10
- it, that defect is only findable by reading the entire interface — which is
10
+ it, that defect is only findable by reading the entire interface, which is
11
11
  why it survives in every product that has not written one down.
12
12
 
13
13
  Populated by an inventory sweep at init, not by hand.
@@ -18,14 +18,14 @@ Populated by an inventory sweep at init, not by hand.
18
18
 
19
19
  ## Columns
20
20
 
21
- - **Key** — dot-separated, stable, names the action rather than the screen.
21
+ - **Key:** dot-separated, stable, names the action rather than the screen.
22
22
  Two rows sharing a `Key` with different `Text` is `B020`.
23
- - **Text (primary)** — the string in the primary locale. Other locales live
23
+ - **Text (primary):** the string in the primary locale. Other locales live
24
24
  in the project's own i18n files; parity is computed against this column.
25
- - **Location** — `file:line`. A location that no longer resolves is `B023`.
26
- - **Scenario** — the `SCN-NNN` this string serves. A string serving no
25
+ - **Location:** `file:line`. A location that no longer resolves is `B023`.
26
+ - **Scenario:** the `SCN-NNN` this string serves. A string serving no
27
27
  scenario is a question for `ux-scenarios`, not a copy problem.
28
- - **Status** — `agreed` · `proposed` · `drifted` · `orphan`.
28
+ - **Status:** `agreed` · `proposed` · `drifted` · `orphan`.
29
29
 
30
30
  ## Statuses
31
31
 
@@ -36,6 +36,6 @@ Populated by an inventory sweep at init, not by hand.
36
36
  | `drifted` | the code no longer matches this row (`B021`) |
37
37
  | `orphan` | in the registry, no longer in the code |
38
38
 
39
- A string found in code with no row here is `B022` — a warning, not an error,
39
+ A string found in code with no row here is `B022`: a warning, not an error,
40
40
  so adopting this registry on an existing product does not block from day one.
41
41
  It becomes an error only once someone agrees the row.
@@ -5,7 +5,7 @@ Contract: brand-contract v1
5
5
  The dictionary the linter reads. Column one of **Product terms** and
6
6
  **Banned** drives `B010` and `B011`; **Entity and tier names** drives `B012`.
7
7
 
8
- ## Product terms — always
8
+ ## Product terms: always
9
9
 
10
10
  Where the product has its own word, the generic one is a defect, not a
11
11
  synonym.
@@ -14,7 +14,7 @@ synonym.
14
14
  |---|---|---|
15
15
  | <Run> | <Execution, Job> | <what the product performs> |
16
16
 
17
- ## Entity and tier names — exact spelling
17
+ ## Entity and tier names: exact spelling
18
18
 
19
19
  One spelling, everywhere: interface, marketing, billing, support, docs.
20
20
 
@@ -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: <P-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
  Humanization: on # on | off; on is the default, off needs a reason below
@@ -30,7 +30,7 @@ against exactly these five.
30
30
 
31
31
  ```
32
32
  Hero: <who the reader is, in the role this product meets them in>
33
- Enemy: <the state of the world that costs them — not a competitor>
33
+ Enemy: <the state of the world that costs them, not a competitor>
34
34
  Product role: <instrument | guide | weapon>
35
35
  Promise: <one line, checkable against a row in facts.md>
36
36
  ```
@@ -35,7 +35,7 @@ outside systems. People stay in Personas.
35
35
 
36
36
  ## Customer journeys
37
37
 
38
- <!-- ### JRN-01: <persona> — <job> (JTBD-01)
38
+ <!-- ### JRN-01: <persona>, <job> (JTBD-01)
39
39
  - **Owner:** unknown
40
40
  | # | Stage | User action | Performed by | Touchpoint | Emotion (1-5) | Pain | Opportunity |
41
41
  |---|-------|------------|--------------|------------|---------------|------|-------------|
@@ -45,10 +45,10 @@ Performed by: the P- and A- ids that do this stage.
45
45
  ## Monetization
46
46
 
47
47
  <!-- When the product earns money (choose with data, BP-067..070):
48
- - **Model:** hard paywall | freemium | hybrid | trial (type, length) — and why
48
+ - **Model:** hard paywall | freemium | hybrid | trial (type, length), and why
49
49
  - **Value metric:** <what the paid tier meters>
50
50
  - **Free boundary:** <what stays free, where the visible limit sits>
51
- - **Purchase surface:** in-app (IAP) | web checkout | web2app (web funnel -> app) — BP-030/BP-078/BP-127, and which storefronts
51
+ - **Purchase surface:** in-app (IAP) | web checkout | web2app (web funnel -> app); BP-030/BP-078/BP-127, and which storefronts
52
52
  - **Money moments:** <paywall placement, upgrade triggers, checkout, failed payment, cancel, rating prompts, winback>
53
53
  - **Acquisition coherence:** <the one story ad -> landing/listing -> onboarding tells>
54
54
  -->
@@ -57,9 +57,9 @@ Performed by: the P- and A- ids that do this stage.
57
57
 
58
58
  <!-- Two dimensions the practice-selection profile reads; record them once,
59
59
  even when the answer is "none":
60
- - **Personalization:** none | rule-based | inferred/model-driven — BP-143/BP-144 (what gets asked when, and how a wrong inference is corrected)
61
- - **Engagement mechanics:** none | streaks/tiers | points/badges/leaderboards — BP-141/BP-142 (which traced job each mechanic reinforces, and the recovery path when progress is lost)
62
- - **Accessibility regime:** none stated | EAA (EU) | ADA (US) | both — BP-138, with the owner
60
+ - **Personalization:** none | rule-based | inferred/model-driven; BP-143/BP-144 (what gets asked when, and how a wrong inference is corrected)
61
+ - **Engagement mechanics:** none | streaks/tiers | points/badges/leaderboards; BP-141/BP-142 (which traced job each mechanic reinforces, and the recovery path when progress is lost)
62
+ - **Accessibility regime:** none stated | EAA (EU) | ADA (US) | both; BP-138, with the owner
63
63
  -->
64
64
 
65
65
  ## Design tooling