super-ux 0.41.3 → 0.41.4
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,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.41.4 — 2026-08-16
|
|
4
|
+
|
|
5
|
+
**This gate can now see an invariant it breaks one repository away.** The family umbrella
|
|
6
|
+
routes work by matching a prompt against a table in `lib/triggers.js`, and every trigger
|
|
7
|
+
there must be a word this skill's own `description` advertises. Nothing here knew that
|
|
8
|
+
table existed. On 2026-08-16 `sheleg-design` 1.37.0 shipped green having dropped a phrase
|
|
9
|
+
that was still a live trigger, the umbrella found out minutes after the tag, and it cost a
|
|
10
|
+
patch release — because the member releases FIRST and the umbrella re-pins after.
|
|
11
|
+
|
|
12
|
+
`test/validate.py` now asks the umbrella's own checker (`test/advertised_check.js`), which
|
|
13
|
+
reads the module the hook itself calls. **No copy of the table lives here**, so there is
|
|
14
|
+
nothing to drift. With no umbrella above this checkout — a standalone clone, and CI — it
|
|
15
|
+
discloses rather than passing, because a check that cannot look must never read as one
|
|
16
|
+
that looked.
|
|
17
|
+
|
|
18
|
+
Watched refusing a real drop before shipping: every one of the seven members carrying
|
|
19
|
+
routed triggers had one of its own advertised phrases removed and every one of them failed
|
|
20
|
+
its own gate.
|
|
21
|
+
|
|
3
22
|
## 0.41.3 — 2026-08-16
|
|
4
23
|
|
|
5
24
|
**`facts.md` is a document, not only a facts table.** `facts()` took any
|
|
@@ -21,6 +40,42 @@ where it would have been overwritten by the next sync — a plugin-owned file
|
|
|
21
40
|
edited in a downstream project serves that project until the day it silently
|
|
22
41
|
does not. Ported up with its fixture, which was watched failing.
|
|
23
42
|
|
|
43
|
+
### Three more changes landed in this version, from a concurrent session
|
|
44
|
+
|
|
45
|
+
They carry the same `0.41.3` in every manifest and sit inside the tag, so the
|
|
46
|
+
entry names them rather than leaving a release whose changelog describes a
|
|
47
|
+
quarter of it. Summarised from their own commit messages, not re-derived.
|
|
48
|
+
|
|
49
|
+
- **`B021` reads the built page** (`6fe309e`). The registry records what a
|
|
50
|
+
reader sees, and the check looked for that string in component *source*, where
|
|
51
|
+
an interpolated value never appears literally and an inline `<strong>` or `<a>`
|
|
52
|
+
splits a sentence the registry stores whole. On `sshlg.me` that was five errors
|
|
53
|
+
with no honest repair — hardcode the number and lose the guarantee it is
|
|
54
|
+
derived, or delete the rows and lose the check. `rendered_text()` now reads
|
|
55
|
+
`dist`, `build`, `out` or `_site`, first that exists, and a project that does
|
|
56
|
+
not build keeps the byte-exact source comparison. The message says which of the
|
|
57
|
+
two it checked. **This closes the last class `sshlg.me` had open**: that
|
|
58
|
+
project went from five errors to zero.
|
|
59
|
+
- **The same fix, applied to the script this package actually ships**
|
|
60
|
+
(`213ae1b`). It had gone into `docs/brand/lint.py`, the dogfood copy, while
|
|
61
|
+
`plugins/super-ux/scripts/brand_lint.py` is what `package.json` ships and what
|
|
62
|
+
`validate.py` reads as the authority — so it reached this repository's own
|
|
63
|
+
linting and no installed project. The pair check was red the whole time and the
|
|
64
|
+
commit went in without running it, which its author recorded rather than
|
|
65
|
+
quietly fixed.
|
|
66
|
+
- **`guardedFiles` covers the linters** (`3e133ab`). The manifests, the evidence
|
|
67
|
+
ledgers and `test/validate.py` were guarded; `docs/brand/lint.py` and
|
|
68
|
+
`plugins/super-ux/scripts/brand_lint.py` were not, and that is exactly where two
|
|
69
|
+
agents collided on 2026-08-16 and lost about twenty minutes. "A config that
|
|
70
|
+
guards what is edited rarely and leaves what is edited hourly open describes a
|
|
71
|
+
project nobody works on."
|
|
72
|
+
|
|
73
|
+
**The tag was placed on the tip rather than on the release commit**, by the run
|
|
74
|
+
that wrote the section above this one: `git tag` was given no target and took
|
|
75
|
+
`HEAD`, which by then carried three commits it had not seen. Left where it is —
|
|
76
|
+
a published tag is not moved — and the entry was widened to match it instead.
|
|
77
|
+
Both are recoveries from the same mistake, and only one of them is safe.
|
|
78
|
+
|
|
24
79
|
## 0.41.2 — 2026-08-16
|
|
25
80
|
|
|
26
81
|
**A source file is not prose, and the prose rules were reading all of it.** On
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "super-ux",
|
|
3
|
-
"version": "0.41.
|
|
3
|
+
"version": "0.41.4",
|
|
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"
|