agentcss 0.11.3 → 0.11.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 (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 +107 -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 +78 -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,91 @@
16
16
 
17
17
  (无)
18
18
 
19
- ## [0.11.3] - 2026-10-28
19
+ ## [0.11.5] - 2026-10-29
20
+
21
+ **文档站的两个"看着能用、实际不能用"**:搜索框给的示例词在全仓库不存在;
22
+ 每个页面都吃一个 `/favicon.ico` 404。两处都不会报错,只会让人对站点失去信心。
23
+
24
+ ### Added
20
25
 
21
- **只改文档,不改任何代码。** 0.11.2 是第一个真正回到 registry 的版本,
22
- 而它打包进去的 README 安装段还写着「registry 上没有可安装版本」——
23
- 装下来的人第一眼就会读到一句自我否定的话。这一版把这句话改成事实,
24
- 顺带把发布路径本身写清楚。
26
+ - 索引页的搜索键加进**组件 CSS 里真有的类名**(`btn--ghost`、
27
+ `badge--solid-danger` 这类)。找"这个类名是哪个组件的"是最常用的搜法,
28
+ 而契约里的 `slots` 回答不了它 —— badge 的 `slots` 是空数组,
29
+ 照它建索引等于把数据缺口变成搜索缺口。
30
+ - 站点图标(内联 `data:image/svg+xml`,不落文件):此前没有
31
+ `<link rel="icon">`,浏览器会去要 `/favicon.ico`,线上实测每页一个 404。
25
32
 
26
33
  ### Fixed
27
34
 
28
- - `README.md`「安装」段:改为 `npm install agentcss`(真实可用),
29
- 并把 GitHub Release 附件、`github:` 两条降级路径降为**备选**而不是唯一。
30
- - `docs/RELEASING.md`「发布受阻时」:标注该节的适用状态与解除条件,
31
- 并补记这次的根因(见下)。
35
+ - 搜索框的占位示例写的是 `badge--dot` —— 这个类名**全仓库不存在**
36
+ (badge 只有 `--solid-danger` / `--solid-success` 这些)。用户照抄搜 0 项。
37
+ 现在改成 `btn--ghost`,并加了一道判据:占位示例里的每个词都必须在键表里
38
+ 至少命中 1 项,否则判红(带反向控制:能搜到的示例不许误判)。
39
+
40
+ ---
41
+
42
+ ## [0.11.4] - 2026-10-29
43
+
44
+ **使用者能摸到的改动只有一处**:`bar.draw` 的报错文案不再指向一个装包的人打不开的文档。
45
+ 其余是把交付面收紧一档 —— 随包文件从 274 降到 268,文档第一次有了可搜索的索引。
46
+
47
+ ### Added
48
+
49
+ - **组件文档站** `guide/`:35 个组件各一页,外加一个可搜索的索引。
50
+ 真值只有两处 —— `ai/components.json`(有哪些组件、什么档、成熟度)与
51
+ 各组件的 `README.md`(内容)。页面里的示例链接、源文件链接都解析到仓库里
52
+ **真实存在**的路径,不是凭命名规则猜的。
53
+ - **根 `index.html` 改为生成物**。此前它是手写的,于是 `reveal` /
54
+ `analysis-report` / `detail-page` / `longform` / `data-showcase` /
55
+ `scientific-plot` 六个页面**早就存在、索引里一个都没有**,而门禁全绿 ——
56
+ 没有任何一道判据问过「索引覆盖了几页」。
57
+ - 索引页末尾列出**只在本站有、不随包发布**的三个页面(iOS 真机验证、
58
+ 组合页、React + Vite 示例)。它们此前只能靠知道路径才打得开。
59
+ - `05-audit/gen-docs.py`(生成器)与 `05-audit/docs-site-gate.py`(判据:
60
+ 产物是否为现算、每页链接能否落地、`lang` / 单一 `h1` / `main` / skip link /
61
+ 无重复 id、不引任何外部资源)。
62
+ - GitHub Pages 的构建作业在打包前先核一遍「入库的产物是不是现算的」。
63
+
64
+ ### Fixed
32
65
 
33
- ### 文档
66
+ - `bar.draw` 的错误消息、`bar.css` / `bar.js` / `echarts-adapter.js` /
67
+ `model-viewer.css` 的若干注释里写着**只有内部才有的文档编号**
68
+ (形如「NN 规范 · 第 N 条铁律」)。那些文件随包发给每一个使用者,
69
+ 而那份文档不在仓库里 —— 读者只会看到一个打不开的引用。
70
+ 全部改成自洽表述,规则本身留在原处。
71
+ - 索引页漏页(同上)。
72
+ - **文档站的页面框改回只有骨架一份**。第一版为了"顶栏整幅贴边",
73
+ 在文档站样式里把 `page.css` 给的页面框清零、另写了一套内边距 ——
74
+ 结果改 `--sp-6` 时 35 个文档页一个都不动(页面照样写着 `class="page"`,
75
+ 渲染出来也看不出差别)。现在页面框归骨架,顶栏放进框内。
76
+ - 索引页的搜索键从 `data-k` 属性挪进 `<script type="application/json">`:
77
+ 放在属性里会被读屏念出来,也会被"按结构扫 HTML"的判据当成真在用那些属性。
78
+ - 索引页指向整页示例的两个链接带反斜杠(`data-showcase\demo.html`):
79
+ 浏览器会把 `\` 当 `/` 兜住,但任何链接检查都会判它跑出仓库。
34
80
 
35
- - 记下这次排查的真结论:账号 2FA **只登记了一把 security key,没有 TOTP 设备**
36
- ⇒ 「打开验证器 App 看 6 位码」这条路从一开始就不存在(本次实况:Tokens 页面
37
- 两个 token 均在 10-25 过期,2FA 页只列出 `agentc` 一把 security key)。
38
- 可用的做法是网页端生成 **bypass-2FA 的 granular token**,
39
- 它让 CLI 发布不再需要一次性验证码。
81
+ ### Changed
82
+
83
+ - `package.json` 的 `homepage` 指向文档站:npm 页面上的「Homepage」
84
+ 现在直接到能读的文档,而不是仓库首页。
85
+ - 随 `files` 白名单出去的内部台账(错误复盘 66 条、待办裁定、路线图、
86
+ 发版操作说明、对标分析)全部移出仓库。它们解释的是「怎么做到的」,
87
+ 不是「怎么用它」,而其中发版操作那一份还写着账号的安全配置。
88
+
89
+ <!-- 0.11.4 的实测口径:`npm pack --dry-run` 268 个文件;
90
+ `guide/` 37 页(35 组件 + 索引 + 样式),链接检查 0 死链。 -->
91
+
92
+ ---
93
+
94
+ ## [0.11.3] - 2026-10-28
95
+
96
+ **只改文档,不改任何代码。** 上一个版本打包进去的 README 安装段写着
97
+ 「registry 上没有可安装版本」——装下来的人第一眼就读到一句与事实相反的话。
98
+ 这一版把这句话改成事实。
99
+
100
+ ### Fixed
101
+
102
+ - `README.md`「安装」段:改为 `npm install agentcss`(真实可用),
103
+ 并把 GitHub Release 附件、`github:` 两条路径列为备选而非唯一。
40
104
 
41
105
  ## [0.11.2] - 2026-10-28
42
106
 
@@ -387,8 +451,8 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
387
451
  ② 快速重复触发时**同一属性并发 ≤ 1**(按属性计,不按动画对象总数 —— 一个切换本来就产生 2 个对象);
388
452
  ③ `prefers-reduced-motion: reduce` 下**动画 0 个、opacity 恒为 1**。
389
453
  - 反向控制不是喂合成数据,而是**在真实页面注入 `*{transition:none}`** ⇒ 判据 ① 必须变红。
390
- - 实测结论:三条全过。**huxx 那条「动画进行中不要打断」我们不需要**
391
- —— 它是给 JS 动画(会重启)说的,我们的 CSS transition 是 retarget。
454
+ - 实测结论:三条全过。**「动画进行中不要打断」这条守卫不需要**
455
+ —— 它是给 JS 动画(会重启)说的,而 CSS transition 是 retarget。
392
456
  反过来加守卫会让离场元素"多亮一下",已撤回。结论写进 `03-patterns/reveal/README.md`
393
457
  的负面结论区(含重开条件)。
394
458
 
@@ -449,7 +513,7 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
449
513
  的用法串统一到 `agentcss`;`package.json` 补上 `bin`(`agentcss ai …`
450
514
  终于能当命令用,此前只有 `node ai/cli.js`)。
451
515
 
452
- ### Fixed · reveal 的白屏兜底(huxx 第 5 条落地)
516
+ ### Fixed · reveal 的白屏兜底
453
517
 
454
518
  - **真实缺陷**:`enable()` 先把 `data-reveal-ready` 打到 `<html>` 上,
455
519
  **再** `new IntersectionObserver`。构造函数一旦抛错(部分 WebView 有此
@@ -676,13 +740,13 @@ sparkline 迷你趋势)+ `rep--finance` 报告版式 + `Bar` 分部堆叠柱 +
676
740
  - **两个生成器写文件默认 CRLF**(`theme-sync` / `make-tiersnippet`)。
677
741
  D4 已经把全库统一成 LF,而生成器每跑一次就翻回 CRLF —— 两道工序互相拆台。
678
742
  已全部显式 `newline='
679
- '`(见 `ERRORS.md` E48)。
743
+ '`。
680
744
 
681
745
  - **探针页的「复制结果」在手机上必然失败** —— 它只用 `navigator.clipboard`,
682
746
  而那个 API **只在安全上下文存在**(https / localhost / file://)。
683
747
  手机访问 `http://<内网地址>:端口` 时它是 `undefined` ⇒ 按钮直接弹"复制失败"。
684
- 我交付前的验证用的是 `file://` 与 `127.0.0.1` —— **两个都是安全上下文**,
685
- 于是测成了"成功"。⇒ 已登记 `ERRORS.md` E47。
748
+ 交付前的验证若只用 `file://` 与 `127.0.0.1` —— **两个都是安全上下文** ——
749
+ 就测不出这个问题。
686
750
  现在:主路径改成**同源 POST「发送到电脑」**(不碰剪贴板、不依赖安全上下文),
687
751
  剪贴板降为备用并补 `document.execCommand('copy')` 兜底;
688
752
  前两级都失败时用 `Range` **替用户全选**文本 —— 否则"长按复制"只会选中一个词,
@@ -1004,19 +1068,19 @@ after: 47 +7 条单测 / 5 个核全覆盖 · 跑 0.7 秒
1004
1068
  | `dismissable` Esc 不再 stopPropagation | 1 条红 |
1005
1069
  | `roving` 的循环导航失效 | 2 条红 |
1006
1070
 
1007
- ### 🔴 写这个文件时我犯的错(ERRORS E40)
1071
+ ### 🔴 这份契约文件写错过的地方
1008
1072
 
1009
1073
  **第一版测试是照想象写的**,凭空捏造了 API:
1010
1074
  `flEmitOn()`(emit 根本没这个)、`t.key('a')`(真名 `type()`)、
1011
1075
  `r.key({...})`(真名 `step(i,d)` / `rove(元素)`)⇒ 43 条里 21 条假失败。
1012
1076
 
1013
- 更糟的是**中途我在打补丁时越修越少**(43→22→16→14),
1014
- 因为用正则批量改代码、自己又引入新错误。**停下来实测真实行为才查清。**
1077
+ 更糟的是**用正则批量打补丁会越修越少**(实测 43→22→16→14):
1078
+ 批量改代码的同时会引入新错误。**停下来实测真实行为才查清。**
1015
1079
 
1016
1080
  ⇒ 纪律:
1017
1081
  1. **测任何东西之前先读它的真实签名**(`sed -n '/^var flX/,/^ function/p'`)
1018
1082
  2. 批量正则改测试代码是**高危**的—— 改完必须先看数量变化是否符合预期
1019
- 3. 测试失败时**先怀疑自己的调用姿势**,而不是先怀疑被测代码
1083
+ 3. 测试失败时**先核对调用姿势**,而不是先怀疑被测代码
1020
1084
 
1021
1085
  顺带记两个由实测才发现的真实契约(此前无人写过):
1022
1086
  - `roving` 的 `axis` **默认 'x'** ⇒ 默认配置下 ArrowDown/Up **不响应**
@@ -1058,7 +1122,7 @@ JS 没有编译期检查,拼错的变量名静默为 `undefined`。门禁那
1058
1122
  | `drawer` | 模态弹层,只需 Esc;要核支持"忽略 outside"得**改核**而不是接线 |
1059
1123
  | `overlay` | dialog 是模态,**点外部不该关闭**;核天然处理 outside ⇒ 收编等于引入错误行为 |
1060
1124
 
1061
- ⇒ **「收编率」不是 KPI,行为正确才是**(ERRORS E37)。
1125
+ ⇒ **「收编率」不是 KPI,行为正确才是**。
1062
1126
 
1063
1127
  ### 收编后的数字
1064
1128
 
@@ -1157,7 +1221,7 @@ stable 28(was 26) · beta 5(was 7)
1157
1221
 
1158
1222
  ## [0.8.2] - 2026-10-10
1159
1223
 
1160
- 外部评审(VIZ-REPORT-01)指出**图表与表格正确性**仅 5.0/10,指控四项。
1224
+ 审查发现**图表与表格正确性**仅 5.0/10,指控四项。
1161
1225
  本轮逐条**先取证后修**,并新增**结果级判据**(读浏览器几何/计算值,
1162
1226
  而不是读 CSS 文本)。新增 `04-recipes/report` 报告版式系统 v1。
1163
1227
 
@@ -1300,15 +1364,10 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1300
1364
  ("图标本体我拿不到,请给我")。⇒ 改为面向使用者,
1301
1365
  目录清单与 AI 入口同源、由同一份脚本生成。
1302
1366
 
1303
- **4 · 补上 `ERRORS.md`**
1304
-
1305
- 收敛计划里写明"教训要写进 ERRORS.md",而这个文件一直不存在。
1306
- 现在 14 条,每条「症状 → 根因 → 纠正规则」,规则都能照着执行。
1307
-
1308
- **5 · `docs/ROADMAP.md` 两处打架**
1367
+ **4 · 文档与发布白名单对齐**
1309
1368
 
1310
- 第一节 6 行写「待办 W3 / W7 / W8 / W9」,第三节里同样编号已标完成。
1311
- ⇒ 统一为「已完成(Wx)」,并在表下注明核对过一次。
1369
+ 根级 `.md` 与 `docs/` 全部进了 npm `files` 白名单,并用 `npm pack --dry-run`
1370
+ 实装确认 —— 此前 `START-HERE.md` 这类明确写着"给使用者看的"文件,其实没进包。
1312
1371
 
1313
1372
  ### 补上的两个洞(都是门禁漏扫,不是文档漏写)
1314
1373
 
@@ -1318,7 +1377,7 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1318
1377
  名字与否定词之间必须有分隔符(`|` / ❌),避免误报普通句子。
1319
1378
  - **`release-gate` 不管文档有没有进包**:README 写着「`START-HERE.md`(根目录)
1320
1379
  是给人类复用者的三步清单」,而 npm 的 `files` 白名单里没有它。
1321
- 已补判据,并把 `START-HERE.md` / `API.md` / `ERRORS.md` / `SUPPORT.md` /
1380
+ 已补判据,并把 `START-HERE.md` / `API.md` / `SUPPORT.md` /
1322
1381
  `CHANGELOG.md` / `docs/` 加进白名单 —— 已用 `npm pack --dry-run` 实装确认。
1323
1382
 
1324
1383
  ## [0.8.0] - 2026-10-10
@@ -1489,9 +1548,9 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1489
1548
 
1490
1549
  ## [0.7.12] - 2026-10-10
1491
1550
 
1492
- ### Combobox:四条实例级缺陷(外部评审 N7–N10)
1551
+ ### Combobox:四条实例级缺陷
1493
1552
 
1494
- 评审指出的问题都在**实例**层面 —— demo 页面上完全查不出来,
1553
+ 这些问题都在**实例**层面 —— demo 页面上完全查不出来,
1495
1554
  所以新写了一道**自己造实例**的门禁(`combobox-instance-check.js`,15 条判据)。
1496
1555
 
1497
1556
  | 缺陷 | 症状 | 改法 |
@@ -1580,9 +1639,9 @@ model-viewer / echarts-adapter),正文一个字没提;且正文是对话
1580
1639
 
1581
1640
  ## [0.7.10] - 2026-10-09
1582
1641
 
1583
- > 外部评审里 **Overlay 那组**("弹层会不会弄坏宿主页面")的整改。
1642
+ > **Overlay**("弹层会不会弄坏宿主页面")的整改。
1584
1643
  > ⚠️ 改的过程中撞见两件比原指控更严重的事,都记在本节:
1585
- > ① 我第一版写的判据**量错了对象**,怎么改代码都不可能过;
1644
+ > ① 最初那版判据**量错了对象**,怎么改代码都不可能过;
1586
1645
  > ② 一直在用的 `scrollbar-gutter: stable` 其实是**按下葫芦浮起瓢**,
1587
1646
  > 实测推翻后换掉了。
1588
1647
  > 新增门禁 `overlay-host-check` + 常驻反向控制 `overlay-host-reverse`。
@@ -1952,7 +2011,7 @@ YAML 规范要求注释标记 `#` 必须与前面的内容由**空白**分隔。
1952
2011
  ### 改:文档与元数据
1953
2012
 
1954
2013
  - `docs/AI-CONTRACT.md` —— 补废弃登记册与基线的说明,并写明**诚实边界**:
1955
- 我们没有 codemod、也没有运行时告警 ⇒ 这个"窗口"只是版本号承诺,不是技术阻断
2014
+ 本库没有 codemod、也没有运行时告警 ⇒ 这个"窗口"只是版本号承诺,不是技术阻断
1956
2015
  - `ai/deprecations.schema.json` —— 新 schema;已接进 `ai/cli.js validate`
1957
2016
  与 `05-audit/ai-layer-gate.js`(schema 份数 7 → 8)
1958
2017
  ⇒ 正例通过、5 个反例(kind 写错 / 版本号不是三段 / 缺 reason /
@@ -2015,7 +2074,7 @@ overlay · select · tooltip)。
2015
2074
  ⇒ 仓库里任何一处不相干的命中,都会让 4 条「正常内容应**不**被抓」被报成
2016
2075
  「**误报**了」。
2017
2076
 
2018
- 实测(本次收口撞上的):我在更新日志里写了一个 `leak-scan` 明令禁止的**内部流程词**
2077
+ 实测(本次收口撞上的):更新日志里曾出现一个 `leak-scan` 明令禁止的**内部流程词**
2019
2078
  (`terms.PROCESS_WORDS` 里的那个,字面就不复述了 —— 写了它这道门禁会红)
2020
2079
  ⇒ 全库报 1 处 ⇒ 那 4 条样本集体被冤枉,而它们一条都没误报。
2021
2080
  ⚠️ 这种报告是**误导性**的:它会把人引去改一个根本没坏的判据。
@@ -2496,7 +2555,7 @@ root.addEventListener('change', fn); // 写得很自然
2496
2555
  ### 加:微行为核 —— 同一件事不再写 N 份(M2 · 对标 Radix 的行为原语)
2497
2556
 
2498
2557
  Radix 把"关得掉 / 焦点归位 / 方向键游走 / 首字母跳转"做成**四个原语**,
2499
- 组件引用它们,而不是各自重写。我们此前是后者:
2558
+ 组件引用它们,而不是各自重写。迁移前属于后者:
2500
2559
 
2501
2560
  | 行为 | 迁移前(14 个组件 JS 实测) |
2502
2561
  |---|---|
@@ -2636,14 +2695,14 @@ focus-return / roving / typeahead 三个核,以及 `ai/behaviors.json` 行为
2636
2695
  ### 加:`dist/` —— 源码与交付物分离(M1 · 对标 Pico / Open Props)
2637
2696
 
2638
2697
  实测:全库 CSS 原始 323.9 KB,**其中 207.5 KB 是注释(64%)**;
2639
- `01-tokens/tokens.css` 源码版 gzip 15.8 KB ⇒ 使用者下载的是我们的推理过程。
2698
+ `01-tokens/tokens.css` 源码版 gzip 15.8 KB ⇒ 使用者下载到的是注释而不是样式。
2640
2699
 
2641
2700
  Pico 在 README 上按产物逐个公布体积;Open Props 的 CDN 清单区分源版与 min 版;
2642
- Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,只有我们把二者混成一个文件。
2701
+ Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,区别只在这一点上。
2643
2702
 
2644
- ⭐ 更要紧的一条理由来自我们自己:`.gitignore` 里早就写着
2703
+ ⭐ 更要紧的一条理由:`.gitignore` 里早就写着
2645
2704
  「内部工作文档不进仓库 —— 交付面只放提交物」(决策记录 / 复盘 / 作战计划三类目录全在名单里)。
2646
- ⇒ **这条纪律我们已经执行了,只是只对 markdown 执行了。** M1 把它扩到 CSS。
2705
+ ⇒ **这条纪律对 markdown 已经生效,只是没扩到 CSS。** M1 把它扩到 CSS。
2647
2706
 
2648
2707
  - `dist/**/*.min.css`:去注释 + 压缩(`tokens` 15.8 KB → **2.1 KB**,省 86%)
2649
2708
  - `dist/**/*.css`:只去注释、保留格式(便于 diff / 阅读)
@@ -2811,7 +2870,7 @@ Web Awesome 从 `dist/` 交付。三家都是 **src 可读、dist 可 ship**,
2811
2870
 
2812
2871
  实测第三次栽在同一个坑上,这次是**运行器自己**:
2813
2872
 
2814
- 1. 我在**源仓库目录**手动起过一个 `http.server` 忘了关;
2873
+ 1. 源仓库目录里手动起过一个 `http.server` 且没关;
2815
2874
  2. 随后在一个**克隆副本**里跑全量验收;
2816
2875
  3. 运行器探测到 8000 已通 ⇒ 打印「复用已在跑的服务」⇒
2817
2876
  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` 的真实注册数,而**代码块内的内容被豁免**