agentcss 0.11.3 → 0.11.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.
Files changed (44) hide show
  1. package/01-tokens/README.md +2 -2
  2. package/01-tokens/focus-ring.css +1 -1
  3. package/01-tokens/tokens.css +1 -1
  4. package/03-patterns/nav/README.md +1 -1
  5. package/03-patterns/pagination/pagination.css +2 -2
  6. package/03-patterns/reveal/README.md +3 -3
  7. package/04-recipes/analysis-report/demo.html +2 -2
  8. package/04-recipes/longform/README.md +1 -1
  9. package/04-recipes/longform/longform.html +6 -10
  10. package/04-recipes/report/demo.html +1 -1
  11. package/04-recipes/table/demo.html +1 -1
  12. package/04-recipes/table/table.css +1 -1
  13. package/04-recipes/tierA-tokens.css +1 -1
  14. package/09-assets/README.md +1 -1
  15. package/09-assets/bar/README.md +1 -3
  16. package/09-assets/bar/bar.css +2 -2
  17. package/09-assets/bar/bar.js +6 -6
  18. package/09-assets/bar/demo.html +2 -2
  19. package/09-assets/echarts-adapter/echarts-adapter.js +8 -8
  20. package/09-assets/model-viewer/model-viewer.css +2 -2
  21. package/09-assets/scientific-plot/scientific-plot.js +1 -1
  22. package/CHANGELOG.md +84 -48
  23. package/CONTRIBUTING.md +1 -1
  24. package/README.md +158 -369
  25. package/README.zh-CN.md +508 -0
  26. package/SUPPORT.md +2 -2
  27. package/ai/START-HERE.md +1 -1
  28. package/ai/components.json +2 -2
  29. package/ai/components.meta.json +1 -1
  30. package/ai/tokens.json +1 -1
  31. package/dist/09-assets/bar/bar.js +1 -1
  32. package/dist/09-assets/echarts-adapter/echarts-adapter.js +1 -1
  33. package/dist/09-assets/scientific-plot/scientific-plot.js +1 -1
  34. package/dist/COSTS.md +9 -9
  35. package/docs/INVARIANT.md +1 -1
  36. package/index.html +77 -62
  37. package/package.json +3 -3
  38. package/ERRORS.md +0 -1658
  39. package/docs/BACKLOG.md +0 -127
  40. package/docs/BENCHMARK.md +0 -252
  41. package/docs/GUIDANCE.md +0 -154
  42. package/docs/RELEASING.md +0 -311
  43. package/docs/RFC-THEME-SCOPE.md +0 -141
  44. package/docs/ROADMAP.md +0 -182
package/CHANGELOG.md CHANGED
@@ -16,27 +16,68 @@
16
16
 
17
17
  (无)
18
18
 
19
- ## [0.11.3] - 2026-10-28
19
+ ## [0.11.4] - 2026-10-29
20
+
21
+ **使用者能摸到的改动只有一处**:`bar.draw` 的报错文案不再指向一个装包的人打不开的文档。
22
+ 其余是把交付面收紧一档 —— 随包文件从 274 降到 268,文档第一次有了可搜索的索引。
20
23
 
21
- **只改文档,不改任何代码。** 0.11.2 是第一个真正回到 registry 的版本,
22
- 而它打包进去的 README 安装段还写着「registry 上没有可安装版本」——
23
- 装下来的人第一眼就会读到一句自我否定的话。这一版把这句话改成事实,
24
- 顺带把发布路径本身写清楚。
24
+ ### Added
25
+
26
+ - **组件文档站** `guide/`:35 个组件各一页,外加一个可搜索的索引。
27
+ 真值只有两处 —— `ai/components.json`(有哪些组件、什么档、成熟度)与
28
+ 各组件的 `README.md`(内容)。页面里的示例链接、源文件链接都解析到仓库里
29
+ **真实存在**的路径,不是凭命名规则猜的。
30
+ - **根 `index.html` 改为生成物**。此前它是手写的,于是 `reveal` /
31
+ `analysis-report` / `detail-page` / `longform` / `data-showcase` /
32
+ `scientific-plot` 六个页面**早就存在、索引里一个都没有**,而门禁全绿 ——
33
+ 没有任何一道判据问过「索引覆盖了几页」。
34
+ - 索引页末尾列出**只在本站有、不随包发布**的三个页面(iOS 真机验证、
35
+ 组合页、React + Vite 示例)。它们此前只能靠知道路径才打得开。
36
+ - `05-audit/gen-docs.py`(生成器)与 `05-audit/docs-site-gate.py`(判据:
37
+ 产物是否为现算、每页链接能否落地、`lang` / 单一 `h1` / `main` / skip link /
38
+ 无重复 id、不引任何外部资源)。
39
+ - GitHub Pages 的构建作业在打包前先核一遍「入库的产物是不是现算的」。
25
40
 
26
41
  ### Fixed
27
42
 
28
- - `README.md`「安装」段:改为 `npm install agentcss`(真实可用),
29
- 并把 GitHub Release 附件、`github:` 两条降级路径降为**备选**而不是唯一。
30
- - `docs/RELEASING.md`「发布受阻时」:标注该节的适用状态与解除条件,
31
- 并补记这次的根因(见下)。
43
+ - `bar.draw` 的错误消息、`bar.css` / `bar.js` / `echarts-adapter.js` /
44
+ `model-viewer.css` 的若干注释里写着**只有内部才有的文档编号**
45
+ (形如「NN 规范 · 第 N 条铁律」)。那些文件随包发给每一个使用者,
46
+ 而那份文档不在仓库里 —— 读者只会看到一个打不开的引用。
47
+ 全部改成自洽表述,规则本身留在原处。
48
+ - 索引页漏页(同上)。
49
+ - **文档站的页面框改回只有骨架一份**。第一版为了"顶栏整幅贴边",
50
+ 在文档站样式里把 `page.css` 给的页面框清零、另写了一套内边距 ——
51
+ 结果改 `--sp-6` 时 35 个文档页一个都不动(页面照样写着 `class="page"`,
52
+ 渲染出来也看不出差别)。现在页面框归骨架,顶栏放进框内。
53
+ - 索引页的搜索键从 `data-k` 属性挪进 `<script type="application/json">`:
54
+ 放在属性里会被读屏念出来,也会被"按结构扫 HTML"的判据当成真在用那些属性。
55
+ - 索引页指向整页示例的两个链接带反斜杠(`data-showcase\demo.html`):
56
+ 浏览器会把 `\` 当 `/` 兜住,但任何链接检查都会判它跑出仓库。
57
+
58
+ ### Changed
59
+
60
+ - `package.json` 的 `homepage` 指向文档站:npm 页面上的「Homepage」
61
+ 现在直接到能读的文档,而不是仓库首页。
62
+ - 随 `files` 白名单出去的内部台账(错误复盘 66 条、待办裁定、路线图、
63
+ 发版操作说明、对标分析)全部移出仓库。它们解释的是「怎么做到的」,
64
+ 不是「怎么用它」,而其中发版操作那一份还写着账号的安全配置。
65
+
66
+ <!-- 0.11.4 的实测口径:`npm pack --dry-run` 268 个文件;
67
+ `guide/` 37 页(35 组件 + 索引 + 样式),链接检查 0 死链。 -->
32
68
 
33
- ### 文档
69
+ ---
70
+
71
+ ## [0.11.3] - 2026-10-28
34
72
 
35
- - 记下这次排查的真结论:账号 2FA **只登记了一把 security key,没有 TOTP 设备**
36
- ⇒ 「打开验证器 App 看 6 位码」这条路从一开始就不存在(本次实况:Tokens 页面
37
- 两个 token 均在 10-25 过期,2FA 页只列出 `agentc` 一把 security key)。
38
- 可用的做法是网页端生成 **bypass-2FA 的 granular token**,
39
- 它让 CLI 发布不再需要一次性验证码。
73
+ **只改文档,不改任何代码。** 上一个版本打包进去的 README 安装段写着
74
+ 「registry 上没有可安装版本」——装下来的人第一眼就读到一句与事实相反的话。
75
+ 这一版把这句话改成事实。
76
+
77
+ ### Fixed
78
+
79
+ - `README.md`「安装」段:改为 `npm install agentcss`(真实可用),
80
+ 并把 GitHub Release 附件、`github:` 两条路径列为备选而非唯一。
40
81
 
41
82
  ## [0.11.2] - 2026-10-28
42
83
 
@@ -387,8 +428,8 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
387
428
  ② 快速重复触发时**同一属性并发 ≤ 1**(按属性计,不按动画对象总数 —— 一个切换本来就产生 2 个对象);
388
429
  ③ `prefers-reduced-motion: reduce` 下**动画 0 个、opacity 恒为 1**。
389
430
  - 反向控制不是喂合成数据,而是**在真实页面注入 `*{transition:none}`** ⇒ 判据 ① 必须变红。
390
- - 实测结论:三条全过。**huxx 那条「动画进行中不要打断」我们不需要**
391
- —— 它是给 JS 动画(会重启)说的,我们的 CSS transition 是 retarget。
431
+ - 实测结论:三条全过。**「动画进行中不要打断」这条守卫不需要**
432
+ —— 它是给 JS 动画(会重启)说的,而 CSS transition 是 retarget。
392
433
  反过来加守卫会让离场元素"多亮一下",已撤回。结论写进 `03-patterns/reveal/README.md`
393
434
  的负面结论区(含重开条件)。
394
435
 
@@ -449,7 +490,7 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
449
490
  的用法串统一到 `agentcss`;`package.json` 补上 `bin`(`agentcss ai …`
450
491
  终于能当命令用,此前只有 `node ai/cli.js`)。
451
492
 
452
- ### Fixed · reveal 的白屏兜底(huxx 第 5 条落地)
493
+ ### Fixed · reveal 的白屏兜底
453
494
 
454
495
  - **真实缺陷**:`enable()` 先把 `data-reveal-ready` 打到 `<html>` 上,
455
496
  **再** `new IntersectionObserver`。构造函数一旦抛错(部分 WebView 有此
@@ -676,13 +717,13 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
676
717
  - **两个生成器写文件默认 CRLF**(`theme-sync` / `make-tiersnippet`)。
677
718
  D4 已经把全库统一成 LF,而生成器每跑一次就翻回 CRLF —— 两道工序互相拆台。
678
719
  已全部显式 `newline='
679
- '`(见 `ERRORS.md` E48)。
720
+ '`。
680
721
 
681
722
  - **探针页的「复制结果」在手机上必然失败** —— 它只用 `navigator.clipboard`,
682
723
  而那个 API **只在安全上下文存在**(https / localhost / file://)。
683
724
  手机访问 `http://<内网地址>:端口` 时它是 `undefined` ⇒ 按钮直接弹"复制失败"。
684
- 我交付前的验证用的是 `file://` 与 `127.0.0.1` —— **两个都是安全上下文**,
685
- 于是测成了"成功"。⇒ 已登记 `ERRORS.md` E47。
725
+ 交付前的验证若只用 `file://` 与 `127.0.0.1` —— **两个都是安全上下文** ——
726
+ 就测不出这个问题。
686
727
  现在:主路径改成**同源 POST「发送到电脑」**(不碰剪贴板、不依赖安全上下文),
687
728
  剪贴板降为备用并补 `document.execCommand('copy')` 兜底;
688
729
  前两级都失败时用 `Range` **替用户全选**文本 —— 否则"长按复制"只会选中一个词,
@@ -1004,19 +1045,19 @@ after: 47 +7 条单测 / 5 个核全覆盖 · 跑 0.7 秒
1004
1045
  | `dismissable` Esc 不再 stopPropagation | 1 条红 |
1005
1046
  | `roving` 的循环导航失效 | 2 条红 |
1006
1047
 
1007
- ### 🔴 写这个文件时我犯的错(ERRORS E40)
1048
+ ### 🔴 这份契约文件写错过的地方
1008
1049
 
1009
1050
  **第一版测试是照想象写的**,凭空捏造了 API:
1010
1051
  `flEmitOn()`(emit 根本没这个)、`t.key('a')`(真名 `type()`)、
1011
1052
  `r.key({...})`(真名 `step(i,d)` / `rove(元素)`)⇒ 43 条里 21 条假失败。
1012
1053
 
1013
- 更糟的是**中途我在打补丁时越修越少**(43→22→16→14),
1014
- 因为用正则批量改代码、自己又引入新错误。**停下来实测真实行为才查清。**
1054
+ 更糟的是**用正则批量打补丁会越修越少**(实测 43→22→16→14):
1055
+ 批量改代码的同时会引入新错误。**停下来实测真实行为才查清。**
1015
1056
 
1016
1057
  ⇒ 纪律:
1017
1058
  1. **测任何东西之前先读它的真实签名**(`sed -n '/^var flX/,/^ function/p'`)
1018
1059
  2. 批量正则改测试代码是**高危**的—— 改完必须先看数量变化是否符合预期
1019
- 3. 测试失败时**先怀疑自己的调用姿势**,而不是先怀疑被测代码
1060
+ 3. 测试失败时**先核对调用姿势**,而不是先怀疑被测代码
1020
1061
 
1021
1062
  顺带记两个由实测才发现的真实契约(此前无人写过):
1022
1063
  - `roving` 的 `axis` **默认 'x'** ⇒ 默认配置下 ArrowDown/Up **不响应**
@@ -1058,7 +1099,7 @@ JS 没有编译期检查,拼错的变量名静默为 `undefined`。门禁那
1058
1099
  | `drawer` | 模态弹层,只需 Esc;要核支持"忽略 outside"得**改核**而不是接线 |
1059
1100
  | `overlay` | dialog 是模态,**点外部不该关闭**;核天然处理 outside ⇒ 收编等于引入错误行为 |
1060
1101
 
1061
- ⇒ **「收编率」不是 KPI,行为正确才是**(ERRORS E37)。
1102
+ ⇒ **「收编率」不是 KPI,行为正确才是**。
1062
1103
 
1063
1104
  ### 收编后的数字
1064
1105
 
@@ -1157,7 +1198,7 @@ stable 28(was 26) · beta 5(was 7)
1157
1198
 
1158
1199
  ## [0.8.2] - 2026-10-10
1159
1200
 
1160
- 外部评审(VIZ-REPORT-01)指出**图表与表格正确性**仅 5.0/10,指控四项。
1201
+ 审查发现**图表与表格正确性**仅 5.0/10,指控四项。
1161
1202
  本轮逐条**先取证后修**,并新增**结果级判据**(读浏览器几何/计算值,
1162
1203
  而不是读 CSS 文本)。新增 `04-recipes/report` 报告版式系统 v1。
1163
1204
 
@@ -1300,15 +1341,10 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1300
1341
  ("图标本体我拿不到,请给我")。⇒ 改为面向使用者,
1301
1342
  目录清单与 AI 入口同源、由同一份脚本生成。
1302
1343
 
1303
- **4 · 补上 `ERRORS.md`**
1304
-
1305
- 收敛计划里写明"教训要写进 ERRORS.md",而这个文件一直不存在。
1306
- 现在 14 条,每条「症状 → 根因 → 纠正规则」,规则都能照着执行。
1307
-
1308
- **5 · `docs/ROADMAP.md` 两处打架**
1344
+ **4 · 文档与发布白名单对齐**
1309
1345
 
1310
- 第一节 6 行写「待办 W3 / W7 / W8 / W9」,第三节里同样编号已标完成。
1311
- ⇒ 统一为「已完成(Wx)」,并在表下注明核对过一次。
1346
+ 根级 `.md` 与 `docs/` 全部进了 npm `files` 白名单,并用 `npm pack --dry-run`
1347
+ 实装确认 —— 此前 `START-HERE.md` 这类明确写着"给使用者看的"文件,其实没进包。
1312
1348
 
1313
1349
  ### 补上的两个洞(都是门禁漏扫,不是文档漏写)
1314
1350
 
@@ -1318,7 +1354,7 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1318
1354
  名字与否定词之间必须有分隔符(`|` / ❌),避免误报普通句子。
1319
1355
  - **`release-gate` 不管文档有没有进包**:README 写着「`START-HERE.md`(根目录)
1320
1356
  是给人类复用者的三步清单」,而 npm 的 `files` 白名单里没有它。
1321
- 已补判据,并把 `START-HERE.md` / `API.md` / `ERRORS.md` / `SUPPORT.md` /
1357
+ 已补判据,并把 `START-HERE.md` / `API.md` / `SUPPORT.md` /
1322
1358
  `CHANGELOG.md` / `docs/` 加进白名单 —— 已用 `npm pack --dry-run` 实装确认。
1323
1359
 
1324
1360
  ## [0.8.0] - 2026-10-10
@@ -1489,9 +1525,9 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1489
1525
 
1490
1526
  ## [0.7.12] - 2026-10-10
1491
1527
 
1492
- ### Combobox:四条实例级缺陷(外部评审 N7–N10)
1528
+ ### Combobox:四条实例级缺陷
1493
1529
 
1494
- 评审指出的问题都在**实例**层面 —— demo 页面上完全查不出来,
1530
+ 这些问题都在**实例**层面 —— demo 页面上完全查不出来,
1495
1531
  所以新写了一道**自己造实例**的门禁(`combobox-instance-check.js`,15 条判据)。
1496
1532
 
1497
1533
  | 缺陷 | 症状 | 改法 |
@@ -1580,9 +1616,9 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1580
1616
 
1581
1617
  ## [0.7.10] - 2026-10-09
1582
1618
 
1583
- > 外部评审里 **Overlay 那组**("弹层会不会弄坏宿主页面")的整改。
1619
+ > **Overlay**("弹层会不会弄坏宿主页面")的整改。
1584
1620
  > ⚠️ 改的过程中撞见两件比原指控更严重的事,都记在本节:
1585
- > ① 我第一版写的判据**量错了对象**,怎么改代码都不可能过;
1621
+ > ① 最初那版判据**量错了对象**,怎么改代码都不可能过;
1586
1622
  > ② 一直在用的 `scrollbar-gutter: stable` 其实是**按下葫芦浮起瓢**,
1587
1623
  > 实测推翻后换掉了。
1588
1624
  > 新增门禁 `overlay-host-check` + 常驻反向控制 `overlay-host-reverse`。
@@ -1952,7 +1988,7 @@ YAML 规范要求注释标记 `#` 必须与前面的内容由**空白**分隔。
1952
1988
  ### 改:文档与元数据
1953
1989
 
1954
1990
  - `docs/AI-CONTRACT.md` —— 补废弃登记册与基线的说明,并写明**诚实边界**:
1955
- 我们没有 codemod、也没有运行时告警 ⇒ 这个"窗口"只是版本号承诺,不是技术阻断
1991
+ 本库没有 codemod、也没有运行时告警 ⇒ 这个"窗口"只是版本号承诺,不是技术阻断
1956
1992
  - `ai/deprecations.schema.json` —— 新 schema;已接进 `ai/cli.js validate`
1957
1993
  与 `05-audit/ai-layer-gate.js`(schema 份数 7 → 8)
1958
1994
  ⇒ 正例通过、5 个反例(kind 写错 / 版本号不是三段 / 缺 reason /
@@ -2015,7 +2051,7 @@ overlay · select · tooltip)。
2015
2051
  ⇒ 仓库里任何一处不相干的命中,都会让 4 条「正常内容应**不**被抓」被报成
2016
2052
  「**误报**了」。
2017
2053
 
2018
- 实测(本次收口撞上的):我在更新日志里写了一个 `leak-scan` 明令禁止的**内部流程词**
2054
+ 实测(本次收口撞上的):更新日志里曾出现一个 `leak-scan` 明令禁止的**内部流程词**
2019
2055
  (`terms.PROCESS_WORDS` 里的那个,字面就不复述了 —— 写了它这道门禁会红)
2020
2056
  ⇒ 全库报 1 处 ⇒ 那 4 条样本集体被冤枉,而它们一条都没误报。
2021
2057
  ⚠️ 这种报告是**误导性**的:它会把人引去改一个根本没坏的判据。
@@ -2496,7 +2532,7 @@ root.addEventListener('change', fn); // 写得很自然
2496
2532
  ### 加:微行为核 —— 同一件事不再写 N 份(M2 · 对标 Radix 的行为原语)
2497
2533
 
2498
2534
  Radix 把"关得掉 / 焦点归位 / 方向键游走 / 首字母跳转"做成**四个原语**,
2499
- 组件引用它们,而不是各自重写。我们此前是后者:
2535
+ 组件引用它们,而不是各自重写。迁移前属于后者:
2500
2536
 
2501
2537
  | 行为 | 迁移前(14 个组件 JS 实测) |
2502
2538
  |---|---|
@@ -2636,14 +2672,14 @@ focus-return / roving / typeahead 三个核,以及 `ai/behaviors.json` 行为
2636
2672
  ### 加:`dist/` —— 源码与交付物分离(M1 · 对标 Pico / Open Props)
2637
2673
 
2638
2674
  实测:全库 CSS 原始 323.9 KB,**其中 207.5 KB 是注释(64%)**;
2639
- `01-tokens/tokens.css` 源码版 gzip 15.8 KB ⇒ 使用者下载的是我们的推理过程。
2675
+ `01-tokens/tokens.css` 源码版 gzip 15.8 KB ⇒ 使用者下载到的是注释而不是样式。
2640
2676
 
2641
2677
  Pico 在 README 上按产物逐个公布体积;Open Props 的 CDN 清单区分源版与 min 版;
2642
- Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,只有我们把二者混成一个文件。
2678
+ Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,区别只在这一点上。
2643
2679
 
2644
- ⭐ 更要紧的一条理由来自我们自己:`.gitignore` 里早就写着
2680
+ ⭐ 更要紧的一条理由:`.gitignore` 里早就写着
2645
2681
  「内部工作文档不进仓库 —— 交付面只放提交物」(决策记录 / 复盘 / 作战计划三类目录全在名单里)。
2646
- ⇒ **这条纪律我们已经执行了,只是只对 markdown 执行了。** M1 把它扩到 CSS。
2682
+ ⇒ **这条纪律对 markdown 已经生效,只是没扩到 CSS。** M1 把它扩到 CSS。
2647
2683
 
2648
2684
  - `dist/**/*.min.css`:去注释 + 压缩(`tokens` 15.8 KB → **2.1 KB**,省 86%)
2649
2685
  - `dist/**/*.css`:只去注释、保留格式(便于 diff / 阅读)
@@ -2811,7 +2847,7 @@ Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,
2811
2847
 
2812
2848
  实测第三次栽在同一个坑上,这次是**运行器自己**:
2813
2849
 
2814
- 1. 我在**源仓库目录**手动起过一个 `http.server` 忘了关;
2850
+ 1. 源仓库目录里手动起过一个 `http.server` 且没关;
2815
2851
  2. 随后在一个**克隆副本**里跑全量验收;
2816
2852
  3. 运行器探测到 8000 已通 ⇒ 打印「复用已在跑的服务」⇒
2817
2853
  100 多道浏览器门禁量的全是**源仓库**。
package/CONTRIBUTING.md CHANGED
@@ -8,7 +8,7 @@ npm run gate # 全量:含浏览器类
8
8
  npm run gate:fast # 只跑静态层,不用装浏览器
9
9
  ```
10
10
 
11
- 全量是 **177 道门禁**(本机约 10 分钟)。
11
+ 全量是 **179 道门禁**(本机约 10 分钟)。
12
12
 
13
13
  ⚠️ 上面的数字写在**代码块外**是有意的:`doc-facts-gate` 会核对
14
14
  「文档里的门禁数」与 `check-all.sh` 的真实注册数,而**代码块内的内容被豁免**