@adia-ai/adia-ui-forge 0.8.45 → 0.8.46

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adia-ui-kit-forge",
3
- "version": "0.8.45",
3
+ "version": "0.8.46",
4
4
  "description": "Maintain the adia-ui (@adia-ai) framework itself \u2014 author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-ui-kit-factory (the consumer/app-author plugin).",
5
5
  "author": {
6
6
  "name": "Kim",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog — adia-ui-kit-forge
2
2
 
3
+ ## [0.8.46] — 2026-08-22
4
+
5
+
6
+ ### Maintenance
7
+ - **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
8
+ - **`agents/` touched in this release window** (4 file(s), e.g. `agents/demo-audit-agent.corpus.json`) — carried by the entries above.
9
+ - **`skills/` touched in this release window** (2 file(s), e.g. `references/authoring-cycle.md`) — carried by the entries above.
10
+
3
11
  ## [0.8.45] — 2026-08-20
4
12
 
5
13
  ### Changed
@@ -25,11 +25,11 @@
25
25
  "update the dogfood findings tracker after fixing the leaks"
26
26
  ],
27
27
  "_measured": {
28
- "as_of": "2026-08-20",
28
+ "as_of": "2026-08-21",
29
29
  "scorer": "routing_eval.py (nonoun-plugins/forge)",
30
- "note": "measured-clear vs 0.70 floor (routing_eval.py, lexical-overlap legibility aid); split from framework-reviewer per gh#1733/PR #1747",
31
- "precision": 0.818,
30
+ "note": "measured-clear vs 0.70 floor (routing_eval.py, lexical-overlap legibility aid); NOT-fence tightened gh#1819 — the two 2026-08-20 precision holes (\"fix the native-primitive leaks the sweep found\", \"which npm script runs the visual probe\") no longer stolen; split from framework-reviewer per gh#1733/PR #1747",
31
+ "precision": 1.0,
32
32
  "recall": 0.9,
33
- "f1": 0.857
33
+ "f1": 0.947
34
34
  }
35
35
  }
@@ -9,7 +9,9 @@ description: |
9
9
  Reports findings only — applying a repair is a separate, later dispatch
10
10
  (generator ≠ critic).
11
11
  NOT for A2UI-engine gallery output scoring (gen-ui-review-agent); NOT for
12
- applying a fix (primitive-authoring-agent) this seat only reports.
12
+ applying a fix or patching what a sweep already found
13
+ (primitive-authoring-agent); NOT for looking up which npm script or
14
+ command a probe needs (see the skill docs) — this seat only reports.
13
15
  tools: Read, Grep, Glob, Bash
14
16
  skills:
15
17
  - demo-audit
@@ -20,11 +20,11 @@
20
20
  "visual probe the components in light and dark"
21
21
  ],
22
22
  "_measured": {
23
- "as_of": "2026-08-20",
23
+ "as_of": "2026-08-21",
24
24
  "scorer": "routing_eval.py (nonoun-plugins/forge)",
25
- "note": "measured-clear vs 0.70 floor (routing_eval.py, lexical-overlap legibility aid); split from framework-reviewer per gh#1733/PR #1747",
26
- "precision": 0.714,
25
+ "note": "measured-clear vs 0.70 floor (routing_eval.py, lexical-overlap legibility aid); NOT-fence tightened gh#1819 — the two 2026-08-20 precision holes (\"explain the gen-review exit gate thresholds\", \"apply the corpus fixes for the failing prompts\") no longer stolen; split from framework-reviewer per gh#1733/PR #1747",
26
+ "precision": 1.0,
27
27
  "recall": 1.0,
28
- "f1": 0.833
28
+ "f1": 1.0
29
29
  }
30
30
  }
@@ -7,10 +7,12 @@ description: |
7
7
  score the gallery before a merge or cut, or whenever someone asks "score
8
8
  the gen-ui gallery outputs", "review gen-ui outputs", "is the gallery
9
9
  clean".
10
- Reports findings only — applying a repair (a corpus/pipeline fix) is a
11
- separate, later dispatch (generator ≠ critic).
10
+ Reports findings only — a repair lands as a separate, later dispatch
11
+ (generator ≠ critic).
12
12
  NOT for demo/app-shell dogfood sweeps (demo-audit-agent); NOT for applying
13
- a corpus fix (a2ui-maintenance-agent) this seat only reports.
13
+ a corpus or pipeline fix (a2ui-maintenance-agent); NOT for explaining what
14
+ the exit gate thresholds mean — this seat scores against them, it does
15
+ not explain them.
14
16
  tools: Read, Grep, Glob, Bash
15
17
  skills:
16
18
  - gen-ui-review
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/adia-ui-forge",
3
- "version": "0.8.45",
3
+ "version": "0.8.46",
4
4
  "description": "Maintain the adia-ui (@adia-ai) framework itself \u2014 author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-factory (the consumer/app-author plugin).",
5
5
  "keywords": [
6
6
  "adia-ui",
@@ -210,6 +210,23 @@ not just one — `theme-provider.min.js` (a JS bundle) inlines the co-emitted
210
210
  bundle if only `build:bundle-css` runs (bit the v0.8.13 theme-panel work
211
211
  twice).
212
212
 
213
+ **Rebuild JS bundles from an `npm ci` scratch checkout, never a pnpm-bootstrapped worktree.**
214
+ `node scripts/dev/bootstrap-worktree.mjs`'s pnpm install produces `dist/*.min.js` output
215
+ ~30% larger than CI's npm-ci install (a lockfile/hoisting difference, not a code difference)
216
+ — running `build:bundle-js` in such a worktree commits drift instead of fixing it, and a
217
+ local `check:js-bundles-fresh` run there will falsely pass against its own inflated bundle.
218
+ When a PR built in a pnpm worktree needs a JS-bundle rebuild: commit the CSS-side changes
219
+ first if any (`build:bundle-css` has no install-shape risk — LightningCSS's bundling is
220
+ deterministic from source — so the branch's committed `dist/web-components.sheet.js` is
221
+ trustworthy going into the next step, satisfying the CSS-before-JS ordering above), then
222
+ `git worktree add <scratch-path> <branch>`, `npm ci` there (real npm-shaped install), run
223
+ `build:bundle-js`, copy only the changed `dist/*.min.js` file(s) back into the working
224
+ worktree, commit there with an explicit pathspec, then remove the scratch worktree. This
225
+ is the correction to gh#1825's own PR body, which deferred the rebuild to "CI's
226
+ derived-artifact pipeline" — wrong per ADR-0069 (`dist/` is Class C, committed and
227
+ PR-blocking, never derive-resync'd); the scratch-checkout procedure above is what actually
228
+ landed the fix, 2026-08-21.
229
+
213
230
  **Never `@import` a remote URL from any file `build:bundle-css` bundles.**
214
231
  LightningCSS's `bundleAsync` (the engine behind it) resolves every `@import`
215
232
  as a local filesystem path, remote `http(s)` URLs included — a CSS-level
@@ -81,45 +81,45 @@ clips at `overflow: hidden` with a rounded `border-radius` (`card.css`, top
81
81
  of file), and `[bleed]` zeroes the section's own margin/padding
82
82
  (`card.css:342` onward) — so a chart's axis-label overhang, or gridlines
83
83
  extending to the plot edge, lands flush against that rounded corner and
84
- clips silently. This was gh#1095's real incident (PR #1105): a bar/line
85
- chart's Y-axis labels clipped under a bled card's corner.
86
-
87
- **The fix is the canonical convention** `card.css:400-422` (comment block
88
- + rule):
89
-
90
- ```css
91
- /* Guide/value/legend safety inset (gh#1095) — [bleed]'s zero-inset is
92
- only collision-free for the bare-marks case: a sparkline, or any other
93
- chart-ui type with BOTH [no-grid] and [no-values] set. */
94
- & > section[bleed]:has(> chart-ui:not([type="sparkline"]):not([no-grid])),
95
- & > section[bleed]:has(> chart-ui:not([type="sparkline"]):not([no-values])),
96
- & > section[bleed]:has(> chart-legend-ui) {
97
- margin: var(--card-inset);
98
- padding: 0;
99
- }
100
- ```
101
-
102
- This restores the card's own inset automatically the moment a bled chart
103
- still draws guides/values/a legend a `:has()`-based fail-safe rather than
104
- relying on every author to remember. `#renderSparkline()` is the ONLY
105
- renderer that never emits axis ticks, gridlines, value text, or a legend
106
- (`chart.class.js`'s sparkline branch) — it's the sole type where genuine
107
- edge-to-edge bleed is collision-free with no attribute needed. Every other
108
- type needs BOTH `[no-grid]` and `[no-values]` set to opt into true
109
- bleed; short of that, the safety inset applies and the chart renders inset
110
- like a normal card section — expected, not a bug.
84
+ clips silently. This was gh#1095's original incident (PR #1105): a
85
+ bar/line chart's Y-axis labels clipped under a bled card's corner.
86
+
87
+ **gh#1095's own mechanical fix a `:has()`-based auto-restore of the
88
+ card's inset — was itself unratified and removed (gh#1801, operator ruling
89
+ 2026-08-20)**: it silently defeated an author's own `[bleed]` the moment a
90
+ chart drew any guide/value text or paired a `<chart-legend-ui>`, which
91
+ collided with the card-chart design language's overlay-chip labels
92
+ (rendered INSET within the plot box on purpose, but still enough to trip
93
+ the old guard's `:not([no-grid])`/`:not([no-values])` test). `[bleed]` is
94
+ now unconditionally author-controlled — card.css never re-inserts an inset
95
+ the author explicitly zeroed.
96
+
97
+ **The clipping hazard itself is real and unchanged** — only the mitigation
98
+ moved from mechanical CSS to documented author responsibility. card.yaml's
99
+ `bleed` prop docs and `chart-in-card.examples.html` both carry the
100
+ resulting rule: a full-bleed chart-ui with visible guide/value text, or one
101
+ paired with a `<chart-legend-ui>`, must keep that text clear of the card's
102
+ rounded-corner clip e.g. by rendering it as an overlay chip INSET within
103
+ the plot area (never hanging outside it, and never relying on card margin
104
+ for clearance) or by putting the legend in its own non-bled section.
105
+ `#renderSparkline()` is still the only renderer that never emits axis
106
+ ticks, gridlines, value text, or a legend (`chart.class.js`'s sparkline
107
+ branch), so it's still the one type where a bare `[bleed]` needs no such
108
+ care; every other type is the author's call now, not a stylesheet fail-safe.
111
109
 
112
110
  **The generalized rule for any new SVG primitive placed inside a bleed
113
111
  section**: an SVG whose content can extend past its own nominal box
114
112
  (`overflow: visible`, or geometry computed with negative padding) needs
115
- either a "bare marks" mode (no overhanging content) that's safe to bleed, or
116
- a CSS `:has()` safety net analogous to `card.css:400-422` that restores
117
- inset automatically when the overhanging content is present. Don't assume
113
+ either a "bare marks" mode (no overhanging content) that's safe to bleed,
114
+ or a documented author-responsibility note at the point of use (the
115
+ `bleed`-prop docs, the pattern's own examples) naming the clipping hazard
116
+ and its mitigation — never a mechanical CSS guard that silently overrides
117
+ an author's own explicit attribute (gh#1801's own lesson). Don't assume
118
118
  `overflow: hidden` on the ancestor container will clip cleanly — SVG content
119
119
  drawn PAST an ancestor's padding box (not its own) clips at whatever
120
120
  ancestor in the chain actually sets `overflow: hidden`, which for
121
121
  `card-ui` is the rounded-corner boundary itself, producing the specific
122
- silently-clipped-under-a-curve look #1095 reported.
122
+ silently-clipped-under-a-curve look #1095 originally reported.
123
123
 
124
124
  ## 5. CSS custom properties don't resolve inside raw SVG attribute strings — only inside actual CSS declarations
125
125