super-ux 0.52.1 → 0.52.3

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.
Files changed (2) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.52.3 — the front matter gets read by a parser, not by a regex
4
+
5
+ - **`validate_front_matter_is_yaml` parses all 30 shipped front-matter blocks with PyYAML**
6
+ (`B-033`): 7 `SKILL.md`, 15 commands, 8 `.mdc` mirrors. `front_matter()` reads a block line
7
+ by line and never asks what a YAML parser would, so a `: ` inside an unquoted scalar turns
8
+ the whole block into an invalid mapping and ships anyway — green here, refused by every
9
+ installer that parses YAML, and the hub copy freezes on the previous version. The family
10
+ shipped exactly that twice in twelve days (`sheleg-design` 1.37.4 and 1.58.0, both
11
+ `mapping values are not allowed here`), so the remedy is **ported from the sibling that
12
+ paid for it** rather than reinvented.
13
+ - **The two guards are the ones that history says matter.** It fails **closed** when PyYAML
14
+ is missing, because a guard that discloses and passes when its tool is absent is the hole
15
+ the first fix left open; and it refuses an **empty walk**, because globs that all match
16
+ nothing is a moved directory rather than a clean tree. Both watched: `yaml` blocked at
17
+ import, and the three globs renamed.
18
+ - **`YAML_SELF_TEST` is a permanent plant, not a one-off.** This gate's whole claim is that
19
+ it sees what `front_matter()` cannot; a parser that stopped refusing that shape would leave
20
+ it green on a clean tree forever, so the shape is re-checked on every run.
21
+ - PyYAML installed in both workflows: `setup-python` puts a different interpreter on PATH
22
+ than the runner's system one, which is where PyYAML is preinstalled.
23
+
24
+ ## 0.52.2 — the evals stop being a promise, and 0.52.1's stowaways get their record
25
+
26
+ - **The eval suite has dated rows instead of a vacant table** (SUX-04, family audit
27
+ 2026-08-29). 28 blind trigger probes — one fresh subagent per query per model
28
+ (`haiku`, `sonnet`), each shown only the query and the 28 installed family skill
29
+ descriptions — scored 14/14 on both models (train 8/8, validation 6/6), with every
30
+ raw answer recorded. Three scenario runs in fresh scratch workspaces scored 12/12
31
+ expected-behavior lines, each re-verified by running the pack's own linters over
32
+ the agents' outputs (s01 design chain: `ux_lint.py` 0 errors; s03 rewritten copy:
33
+ `brand pack is clean`). `test/evals/RESULTS.md` carries the per-query receipts,
34
+ the scenario evidence, and a Method section that states the limits — single
35
+ repetition per query against a README that asks for three, model aliases rather
36
+ than snapshot ids, and the one non-hermetic call the s02 audit itself disclosed.
37
+ - **Two changes shipped inside v0.52.1 without a line of record, and this is that
38
+ line.** The 0.52.1 commit was cut by a concurrent session from this working tree
39
+ while this run's edits sat uncommitted in it, so they rode along:
40
+ **`compatibility:` front matter in all seven skills** (SUX-02) — per-skill rather
41
+ than one blanket string: the five UX skills name python3 3.9+ (stdlib only) for
42
+ the linter this pack seeds, `ux-flows` names its optional MCPs (Figma for
43
+ mockups, Refero/Mobbin/Lazyweb for reference screens) and what happens when they
44
+ are absent, `ux-audit` states which half of the Figma check survives without the
45
+ MCP, and the two brand skills name `docs/brand/lint.py` — and **`$schema` in both
46
+ manifests** (SUX-05), the two schemastore spellings that resolve (the family also
47
+ carries a `claude-code-plugin.json` variant, which 404s and was not copied);
48
+ `claude plugin validate --strict` passes on both. Every `compatibility` value is
49
+ a one-line YAML plain scalar with no colon-space sequence, parsed with
50
+ `yaml.safe_load` before it ever reached a commit — the family shipped that exact
51
+ defect twice this week (sheleg-design 1.37.4 and 1.58.0), and a planted
52
+ colon-space here was caught by the same `mapping values are not allowed here`.
53
+ Budgets measured: 153–358 chars against the standard's 500; the pinned house
54
+ auditor returns 0 GAP on all seven. The class — a repo gate that parses shipped
55
+ front matter as YAML — is filed as `B-033` rather than claimed, because this
56
+ run's check was manual.
57
+
3
58
  ## 0.52.1 — a ledger row that machine-read as something else
4
59
 
5
60
  - **`B-029`'s board row carried an unescaped `|` inside a backticked span**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-ux",
3
- "version": "0.52.1",
3
+ "version": "0.52.3",
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
  },