super-ux 0.41.3 → 0.41.5

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