agentcss 0.25.5 → 0.25.6

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 CHANGED
@@ -16,6 +16,64 @@
16
16
 
17
17
  (无)
18
18
 
19
+ ## [0.25.6] - 2026-11-04
20
+
21
+ 这一版**没有改组件、令牌、CSS 或运行时 JS**。改的是「装到手里的包可不可信」:
22
+ 文档链接、依赖来源、包里不该有的临时文件,以及几道"报告通过却什么都没检查"
23
+ 的发布门禁。从 `0.25.5` 升级不需要改代码。
24
+
25
+ ### Security
26
+
27
+ - 依赖锁文件里有一处 `yaml` 仍指向第三方镜像 `registry.npmmirror.com`,
28
+ 而 `npm ci` 按 `resolved` 直取,会绕开仓库钉住的官方源。已改回
29
+ `registry.npmjs.org`,并核对官方 tarball 的 sha512 与锁文件 `integrity` 一致。
30
+ 新增 `lockfile-source-gate`:每个 `resolved` 的 host 都要在白名单里,
31
+ 镜像源、缺 integrity、非 https 都会红。
32
+ - `package.json` 的 `files` 排除项补上临时文件后缀与门禁探针名。
33
+ 之前反向控制留在源码目录里的 `.bak` 备份会被目录级白名单一起收进包;
34
+ 实测加排除前探针进包、加后不进。
35
+ - HTML 注入点的盘点门禁原本只扫五个目录,现在扫描面由 `files` 白名单推导,
36
+ 新增目录自动纳入;已复核 `esm/`、`adapters/` 里没有注入点。
37
+ 两处把 `src` / `value` 拼进 `innerHTML` 的组件改成 DOM 节点组装。
38
+
39
+ ### Fixed
40
+
41
+ - 包内四份文档(README、README.zh-CN、SUPPORT、docs/LAYER-BASELINE)里
42
+ 有八个相对链接指向仓库文件,而这些文件不在发布包里 —— 装了包的人点开就是死链。
43
+ 改为指向公开仓库的同一份文件;新增包视角链接门禁,用
44
+ `npm pack --dry-run --json` 的真实清单逐条验,不再只从仓库视角看。
45
+ - 打印门禁在并发下偶发误报:活标本 iframe 的样式表已挂上、框高却还是初始值,
46
+ 打印版面被裁掉一半,判据把环境抖动报成内容回归。现在要求文档、样式、字体
47
+ 都就绪且**框高装得下内容**,并在切到打印媒体后重新判定。
48
+ - 文档事实门禁抓到 `CONTRIBUTING.md` 写死了门禁条数;改为让条数只由门禁实算。
49
+ `package.json` 里三条 scripts 缩进错乱,以及 README 里几处历史措辞,一并修正。
50
+ - `release-gate` 曾把新加的通配排除判成「指向不存在的东西」;
51
+ 现在字面排除继续查存在,glob 排除只分类、不按当前有没有文件判。
52
+ - 一条写盘的反向控制漏标 `@serial`,与 `dist-fresh` 并发时报出「孤儿产物」。
53
+ 已补标记,并把那个临时探针也挡在包外。
54
+
55
+ ### Changed · 门禁自证(不进 npm 包)
56
+
57
+ 这些是仓库里的门禁与内部台账,装包的人拿不到,但决定了「全绿」值不值得信:
58
+
59
+ - `doc-imports.js` 原来读**仓库**的文档、却在**消费者**侧解析,验错了对象;
60
+ 而且一份文档都没扫到、或抽出来的全是占位符时照样通过。改为读已安装包里的
61
+ 文档,补零视野守卫、显式承诺清单与显式豁免(`CHANGELOG.md` 里记着历史坏路径,
62
+ 不能当成给读者照抄的入口)、未登记文档自动报红,并补了反向控制。
63
+ 实测:往包内 README 注入一条坏路径,旧判据绿、新判据红。
64
+ - `entry-resolve.js` 在 `exports` 不产生任何说明符时打印 `0/0` 却返回通过,
65
+ 还输出「两套条件都能解析到真实文件」这句假结论。现在零输入即红,
66
+ 并补了覆盖传递闭包、import 条件、通配展开的反向控制。
67
+ - `pack-smoke.sh` 把门禁输出用 `tail` 截成两行,扫描规模那行看不见了;
68
+ 现在保留统计行,看到 0 就能怀疑。
69
+ - 内部路线图与待办台账里几处仍写着「尚未发版 / 待远端验证」的活跃状态,
70
+ 按真值更正,历史段落只加注记、不改写。
71
+
72
+ 上述每一项都跑了正向、反向控制与真实发布包验证;发布前全量门禁 0 FAIL。
73
+ 新增的失误与纠正规则登记在内部 `ERRORS.md`(不随包分发)。
74
+
75
+ ---
76
+
19
77
  ## [0.25.5] - 2026-11-04
20
78
 
21
79
  ### 新增:`tokens.core.css`(只有变量)与 `base.reset.css`(只有底座)
package/CONTRIBUTING.md CHANGED
@@ -29,9 +29,10 @@ npm run gate # 全量:含浏览器类
29
29
  npm run gate:fast # 只跑静态层,不用装浏览器
30
30
  ```
31
31
 
32
- 全量是 **239 道门禁**(默认 `min(核数, 6)` 路并发,实测 583 秒 / 退出码 0;
33
- 单道耗时累加 1658 秒,并发效率约 2.8×。组件层要起浏览器,还要逐张比 **109 张**视觉截图 ——
34
- 47 浅色 + 47 暗色 + 15 RTL,按平台分集,只比本平台那套)。
32
+ 全量的门禁条数由 `05-audit/check-all.sh` 实算,**不在文档里写死** —— 新增一道门禁
33
+ 就会变,写下来的第二天就是第二个会漂的真值(I-7)。默认 `min(核数, 6)` 路并发;
34
+ 组件层要起浏览器,还要逐张比浅色 / 暗色 / RTL 三套视觉基线(按平台分集,
35
+ 只比本平台那套)。条数、耗时、并发效率一律以**本轮门禁打印的结果**为准。
35
36
  只想确认没改坏静态契约的话用 `gate:fast`,几秒到几分钟。
36
37
 
37
38
  ### 全量为什么**不**在 CI 上跑(这不是缺口,是结论)
package/README.md CHANGED
@@ -269,7 +269,7 @@ Two builds ship:
269
269
  The source tree keeps every comment — that is documentation, not payload.
270
270
 
271
271
  **One frozen ceiling.** The whole library is held to a single budget recorded in
272
- [`05-audit/budget.json`](05-audit/budget.json): a hard ceiling, a reserve that absorbs
272
+ [`05-audit/budget.json`](https://github.com/owain323/frontend-lib/blob/master/05-audit/budget.json): a hard ceiling, a reserve that absorbs
273
273
  normal additions *without anyone editing a number*, and a ratchet that tightens the
274
274
  budget when the library shrinks. The rules — and what would have to be true to raise
275
275
  the ceiling — are in [`docs/BUDGET.md`](docs/BUDGET.md).
@@ -290,7 +290,7 @@ not — is in [`docs/STABILITY.md`](docs/STABILITY.md).
290
290
  - **Tested once** (`🔍`) means exactly that: one manual run on a real device, with a full UA and a per-capability result, but **no automated check watching it**. A browser update will not turn anything red. It never counts as verified, and the two never add up.
291
291
  - **Not claimed** means exactly that. A row that has not been tested is not written as supported.
292
292
 
293
- Mobile WebView support is where that distinction bites. Seven entry points have been probed by hand — per-capability results in [`10-review/webview/RESULTS.md`](10-review/webview/RESULTS.md) — while Android System WebView still has **no data at all**. None of the seven was checked for soft-keyboard, safe-area, scroll-bounce or 200 % text behaviour: "15/15 capabilities" is not "the page works on a phone".
293
+ Mobile WebView support is where that distinction bites. Seven entry points have been probed by hand — per-capability results in [`10-review/webview/RESULTS.md`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/RESULTS.md) — while Android System WebView still has **no data at all**. None of the seven was checked for soft-keyboard, safe-area, scroll-bounce or 200 % text behaviour: "15/15 capabilities" is not "the page works on a phone".
294
294
 
295
295
  ## Theming
296
296
 
package/README.zh-CN.md CHANGED
@@ -282,7 +282,7 @@ dist/01-tokens/tokens.css ← 拷这个
282
282
  那些注释是写给你看的取舍理由(为什么这么定、踩过什么坑),不是写给你浏览器看的。
283
283
  **注释让你看代码时处处撞墙;从源码目录引入的话,构建工具还会把那部分字节原样打进产物。**
284
284
 
285
- **一个冻结的上限。** 整套库受一份账本约束([`05-audit/budget.json`](05-audit/budget.json)):
285
+ **一个冻结的上限。** 整套库受一份账本约束([`05-audit/budget.json`](https://github.com/owain323/frontend-lib/blob/master/05-audit/budget.json)):
286
286
  硬天花板 + 一份「常规新增组件不用改任何数字」的储备 + 一个只在体积下降时收紧的棘轮。
287
287
  规则、以及「什么情况才允许抬天花板」,在 [`docs/BUDGET.md`](docs/BUDGET.md)。
288
288
 
@@ -456,7 +456,7 @@ bash 05-audit/check-all.sh # 全量门禁约 130 项,本机约 8 分钟
456
456
  `🔍` 是「在真实设备上人工试过一次,之后没人再看」——
457
457
  浏览器升级只会被前者发现。逐项结果、完整 UA 与复核方法见
458
458
  [`docs/LAYER-BASELINE.md`](docs/LAYER-BASELINE.md) 与
459
- [`10-review/webview/RESULTS.md`](10-review/webview/RESULTS.md)。
459
+ [`10-review/webview/RESULTS.md`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/RESULTS.md)。
460
460
 
461
461
  ⚠️ 定位里写「移动 Web」指的是**设计取向**(触控优先、命中区不小于 44px),
462
462
  不代表已被自动化覆盖,更不代表页面在真机上就能用:
package/SUPPORT.md CHANGED
@@ -97,9 +97,9 @@ grep 一条都数不到),还有 `skip "…"`(这台机器跑不了的门
97
97
 
98
98
  ### 试过一次的(🔍 人工实测,无回归保护)
99
99
 
100
- 7 行数据来自在真实设备上打开 [`capability-probe.html`](10-review/webview/capability-probe.html)。
100
+ 7 行数据来自在真实设备上打开 [`capability-probe.html`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/capability-probe.html)。
101
101
  完整 UA 与逐项结论在 [`docs/LAYER-BASELINE.md`](docs/LAYER-BASELINE.md);
102
- 15 项能力分别是什么、怎么自己复跑一遍,在 [`10-review/webview/RESULTS.md`](10-review/webview/RESULTS.md)。
102
+ 15 项能力分别是什么、怎么自己复跑一遍,在 [`10-review/webview/RESULTS.md`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/RESULTS.md)。
103
103
  本节 7 行**全部是 `🔍`** —— 没有一行有自动化守着。
104
104
 
105
105
  | 入口 | UA 自述的环境 | 实测 | 缺什么 |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "generatedBy": "05-audit/gen-ai-contract.py",
4
- "libraryVersion": "0.25.5",
4
+ "libraryVersion": "0.25.6",
5
5
  "$comment": "机器可读的组件契约。slots = BEM 元素名(在本库里元素名就是插槽名),states.enum = 组件会在 DOM 上写出的 data-* 取值,states.legacyClass = 仍未收敛到 data 属性的历史状态类(INVARIANT I-8 未达标)。printPolicy = 这个组件在纸上会发生什么(空数组 = 原样保留);pagination = 内容是否被分页裁过(server 不许与 expand 同时出现,否则展开的只是当前一页)。",
6
6
  "maturityCriteria": {
7
7
  "alpha": "缺 demo.html 或缺 05-audit 下的专属门禁 ⇒ 还没被机器验证过,不要用",
@@ -5,7 +5,7 @@
5
5
 
6
6
  | 项目 | 值 |
7
7
  |---|---|
8
- | 声明适用版本 | agentcss `0.25.5` |
8
+ | 声明适用版本 | agentcss `0.25.6` |
9
9
  | 声明日期 | 2026-11-04 |
10
10
  | 复核节奏 | 每次发版前重跑(`npm run gate` 内含全部证据) |
11
11
  | 范围 | 本库交付的 CSS / JS、全部 `demo.html`(组件页 + 图表页 + 组合页)、以及文档站生成的页面 |
@@ -25,7 +25,7 @@
25
25
  > ⇒ 它支撑的结论是「我们在这 7 个环境里试过,结果如下」,
26
26
  > 不是「我们保证这 7 个环境一直能用」。
27
27
  > 逐项结果(7 行 × 15 项)、15 项全集与复核方法见
28
- > [`10-review/webview/RESULTS.md`](../10-review/webview/RESULTS.md)。
28
+ > [`10-review/webview/RESULTS.md`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/RESULTS.md)。
29
29
 
30
30
  ---
31
31
 
@@ -146,7 +146,7 @@ Android 上 Chrome ≠ 系统 WebView ≠ 各家 App 内置 WebView。**入口
146
146
  |---|---|
147
147
  | 数据怎么来的 | 在真实设备上打开 `10-review/webview/capability-probe.html`,把页面输出的结果贴进上表 |
148
148
  | 有没有原始记录 | 🔴 **没有入库**。当时探针把 JSON POST 回采集端,落的是本机文件,仓库里只留下转录进表格的结论 |
149
- | 逐项结果在哪看 | [`10-review/webview/RESULTS.md`](../10-review/webview/RESULTS.md) —— 7 行 × 15 项矩阵 |
149
+ | 逐项结果在哪看 | [`10-review/webview/RESULTS.md`](https://github.com/owain323/frontend-lib/blob/master/10-review/webview/RESULTS.md) —— 7 行 × 15 项矩阵 |
150
150
  | 别人怎么复核 | 同上文件「怎么自己复核一行」:取 UA → 在目标设备复跑探针 → 比对 `N / 15` 与缺失项 |
151
151
  | 日期锚点 | 表格「测试日期」列写的是「见采集所在提交(git log)」;用 `git blame` + 该行 UA 的唯一片段定位 |
152
152
  | 有没有自动化守着 | **没有**。人工一次性实测,浏览器升级不会触发任何门禁 |
package/index.html CHANGED
@@ -97,7 +97,7 @@ li a:active { background: var(--surface-sunken); }
97
97
  </p>
98
98
  </main>
99
99
  <footer class="wrap">
100
- <p class="note">0.25.5 · 零第三方运行时依赖</p>
100
+ <p class="note">0.25.6 · 零第三方运行时依赖</p>
101
101
  </footer>
102
102
  </body>
103
103
  </html>
package/llms-full.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # agentcss — full reference (one file)
2
2
 
3
- > Generated from `ai/components.json` + `ai/pitfalls*.json` + `ai/behaviors.json` at version **0.25.5**.
3
+ > Generated from `ai/components.json` + `ai/pitfalls*.json` + `ai/behaviors.json` at version **0.25.6**.
4
4
  > Do not edit by hand: run `python 05-audit/gen-llms.py` (freshness is gated).
5
5
  > Short version: `llms.txt`. Machine contract: `ai/*.json`.
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentcss",
3
- "version": "0.25.5",
3
+ "version": "0.25.6",
4
4
  "description": "移动 Web 组件库:CSS + 可选行为脚本,零第三方运行时依赖。样式用 bundler 引入,交互行为用 script 标签引入。",
5
5
  "keywords": [
6
6
  "css",
@@ -73,7 +73,17 @@
73
73
  "CODE_OF_CONDUCT.md",
74
74
  "CHANGELOG.md",
75
75
  "LICENSE",
76
- "index.html"
76
+ "index.html",
77
+ "!**/*.bak",
78
+ "!**/*.tmp",
79
+ "!**/*.orig",
80
+ "!**/*.rej",
81
+ "!**/*.old",
82
+ "!**/*.pyc",
83
+ "!**/*.log",
84
+ "!**/.DS_Store",
85
+ "!**/Thumbs.db",
86
+ "!**/__parity_probe.js"
77
87
  ],
78
88
  "sideEffects": [
79
89
  "**/*.css",
@@ -86,9 +96,9 @@
86
96
  "gate:fast": "bash 05-audit/check-all.sh --fast",
87
97
  "gate:timing": "bash 05-audit/check-all.sh --timing",
88
98
  "ci:observe": "python3 05-audit/nightly-observe.py",
89
- "ci:print-cost": "node 05-audit/print-pagination-cost.js",
90
- "ci:print-audit": "node 05-audit/print-content-audit.js --all",
91
- "ci:merge-exp": "node 05-audit/render-merge-experiment.js",
99
+ "ci:print-cost": "node 05-audit/print-pagination-cost.js",
100
+ "ci:print-audit": "node 05-audit/print-content-audit.js --all",
101
+ "ci:merge-exp": "node 05-audit/render-merge-experiment.js",
92
102
  "ci:zoom-merge": "node 05-audit/zoom-merge-experiment.js --all",
93
103
  "size:record": "python3 05-audit/size-baseline.py --record",
94
104
  "dist": "python3 05-audit/build-dist.py",