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.
- package/CHANGELOG.md +55 -0
- 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.
|
|
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
|
},
|