Files
aurora-admin/AGENTS.md
T
aurora-admin dd1e306c86 docs: AGENTS.md 执行约定 + 补全 ROADMAP 的结构性缺口
补三处规划漏洞(自查发现,非用户指出)

1) 缺「执行模型自动能读到的约束」
- 新建 AGENTS.md(216 行):其他模型不会主动翻 ROADMAP,但大多会自动读
  AGENTS.md。把它做成硬约束入口
- 含六条铁律(零依赖/ASCII-only/改模板/改内嵌层/data.json 是承诺/八次回归)
- 含禁止事项表(6 条)、交付说明模板、失败升级路径、关键文件地图、
  已知陷阱速查(7 条)、当前状态
- 验证过文档里承诺的命令真能跑:铁律 1 的验收命令在 package.json 不存在时
  输出 "n/a" 而非报错(原写法会失败)

2) 缺「显式不做」清单
- 新增第四章:8 项不做什么及理由(不引打包器/不做全量像素回归/不做 SSR/
  不做主题商店/不重写 app.js/不改 frameworks 视觉/不做 Storybook/不做单测)
- 没有这份清单,执行模型会以为"漏了",或在不当时机自作主张

3) 缺「未解问题」
- 新增第五章:6 个我无法单方面决策的问题(是否发布 npm/目标用户/设计团队
  协作/RTL 必要性/性能预算底线/暗色 iframe 策略),每项附影响面与建议

修正验收命令的 3 处踩坑(自查发现)
- P2 的 npm pack 校验:原写法 `npm pack | grep -q site/ && echo FAIL || echo OK`
  在 npm 不可用时 grep 也失败 → 误报 OK。改为显式判断 exit code
- P4 的 sources 文件计数:目录不存在时错误信息不友好 → 加提示与 exit 1
- 铁律 1 的依赖检查:package.json 不存在时报错 → 改为可容错

章节编号顺延(原「五、验收总纲」→「七」,因新增两章)

回归:100%(961 断言 / 0 失败 / 79 页全通过)
2026-09-11 22:47:51 +08:00

217 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md · Aurora Admin 执行约定
> **给在此仓库工作的 AI 模型**:这个文件是硬约束,不是建议。开始任何任务前先读完。
> 人类贡献者请看 [CONTRIBUTING.md](./CONTRIBUTING.md);任务清单看 [ROADMAP.md](./ROADMAP.md)。
---
## 一 · 这个仓库是什么
**Aurora Admin Design System** —— B 端中后台设计系统,**79 组件 × 5 端实现**(H5 / React / Vue 2 / Vue 3 / CSS),含完整文档站、设计契约、回归体系。
| 项 | 值 |
|---|---|
| 组件 | 79 |
| 端实现文件 | 395(`frameworks/`,79 × 5) |
| 契约 JSON | 79(`.design_library/aurora-admin/components/`) |
| 设计令牌 | 75(`colors_and_type.css`) |
| i18n 字典 | 330 条(`site/i18n.js`) |
| 测试断言 | 961(`tests/`,12.2/页) |
| 回归通过率 | **100%**(八次连跑一致) |
---
## 二 · 六条铁律(违反即返工)
### 1. 零运行时依赖
不引入 npm **运行时**依赖。
```bash
# 验收:这条必须在所有改动后通过
# 注意:P2 之前 package.json 不存在,此时应输出 "n/a (no package.json yet)" 而非报错
node -e "
const fs=require('fs');
if(!fs.existsSync('package.json')) { console.log('n/a (no package.json yet)'); process.exit(0) }
const p=require('./package.json');
const deps=Object.keys(p.dependencies||{});
if(deps.length) { console.error('FAIL: 运行时依赖 ' + deps.join(', ')); process.exit(1) }
console.log('zero-dep OK');
"
```
`devDependencies` 可用(构建/测试工具),但要在 README 注明"CI 专用"。
### 2. `build-site.ps1` 必须 ASCII-only
PowerShell 5.1 按 ANSI 读无 BOM 文件 —— 脚本里出现非 ASCII 字面量会被**静默损坏**。
- 中文文案放 UTF-8 模板(`tests/_template.html` 等)
- 输出用 `[System.IO.File]::WriteAllText($path, $content, [System.Text.UTF8Encoding]::new($false))` 写无 BOM
- `build-site.ps1` 只能在 Windows 跑;CI 需要构建时改用 `runs-on: windows-latest`
### 3. 改结构要改模板
`tests/<slug>.html` × 79 是**生成物**。改它们没用 —— 下次重跑会被覆盖。
| 想改 | 改哪里 |
|---|---|
| 测试页结构 | `tests/_template.html` → 重跑 `run-tests.ps1` |
| 测试总览页 | `tests/_index_template.html` |
| 测试断言逻辑 | `tests/_runtime.js`(跨帧断言引擎) |
| 文档站 | `site/app.js` |
### 4. 改样式要改内嵌层
**演示页的内嵌 `<style>` 才是实际生效的样式。**
v1.4.0 的教训:花了几小时令牌化 `frameworks/*.css`(915 处),结果发现演示页不一定 link 它 —— 真正生效的是内嵌的 `<style>` 块(另 287 处)。
```bash
# 诊断:这个页面的样式从哪来
grep -o 'href="[^"]*\.css"' frameworks/Button.html
# 若无 frameworks/Button.css,说明样式在内嵌 <style> 里
```
### 5. `data.json` 是对外承诺
`site/data.json` 是 For Agents 页承诺的「一次请求拿到全部」。可以拆 `data.js`(性能优化),但 **`data.json` 必须保持完整**。
破坏它是 breaking change。
### 6. 单次改动后必须跑回归
```bash
node site/dev-server.js & # 起服务(端口 3311)
# 浏览器打开 http://127.0.0.1:3311/tests/_collect.html
# 或:node tools/run-regression.mjs(需 playwright)
```
**验收标准**:`100% / 0 失败 / 0 超时`,且**连跑八次一致**。
> 为什么是八次:偶发问题(并发超时)在单次运行中可能不出现。项目的超时兜底逻辑已改为「重试一次 + 超时单列」,但连跑仍是最可靠的验证。
---
## 三 · 禁止事项
| 禁止 | 原因 | 正确做法 |
|---|---|---|
| 手工改 `frameworks/` 里的样式让它"更好看" | 那是规范原文的忠实实现 | 改令牌,或走 ROADMAP 任务包 |
| `git reset --hard` / `git checkout .` 清理 | 会丢用户改动 | `git stash` 或定向还原 |
| 改写 `CHANGELOG.md` 的历史条目 | 变更事实记录 | 只追加 `[Unreleased]` 或新版本段 |
| 改 `tests/report.json` 的数值 | 等于伪造证据 | 修实际问题后重跑生成 |
| 为通过验收而放宽断言判据 | v1.3.1 出现过这个诱惑 | 判据修正必须附**理由 + 反例** |
| 在任务范围外顺手重构 | 范围蔓延让验收失焦 | 写成新任务包追加到 ROADMAP |
---
## 四 · 交付形态
每个任务完成时提交**交付说明**:
```markdown
## <任务 ID> 完成说明
**验收输出**(原样粘贴命令输出,不要转述):
(命令 + 输出)
**改动文件**:
- <路径> — <做了什么>
**规划偏差**(若有):
- ROADMAP 写的 <X> → 实际的 <Y>,原因:<...>
**发现的新问题**(若有):
- <描述> → 已追加为 ROADMAP 任务包 <ID>
**回归**:100%(<通过>/<总数>)/ 八次连跑一致 / 0 超时
```
**不要写「已完成」而不给证据。** 这个项目的历史上有 6 次"文档声称完成但代码缺失",全部是靠实测发现的。
---
## 五 · 失败升级路径
按顺序处理,**不要停下来等**:
| 情况 | 处理 |
|---|---|
| 验收命令本身有错 | 修正它使其真实反映目标,在交付说明写明修了什么、为什么 |
| 目标不可达(依赖的服务/网络不可用) | 交付最强替代物 + 写明缺什么 |
| 发现 ROADMAP 有事实错误 | **以实测为准**,修正规划并标注「⚠️ 规划修正」 |
| 发现规划未覆盖的新缺口 | 写成新任务包追加到 ROADMAP,**不在原任务里顺手修** |
| 同一路径连续两次失败 | 换策略而非重试,记录两次失败的原因 |
---
## 六 · 关键文件地图
```
组件规范第一套/
├─ AGENTS.md ← 本文件(硬约束)
├─ ROADMAP.md ← 任务清单(13 个任务包 + 验收命令)
├─ CHANGELOG.md ← 变更记录(build 时注入文档站)
├─ CONTRIBUTING.md ← 人类贡献指南
├─ TESTING.md ← 测试矩阵说明
├─ LICENSE ← MIT
│
├─ build-site.ps1 ← 构建(ASCII-only!生成 data.js/data.json/薄壳/sitemap/令牌导出)
├─ run-tests.ps1 ← 重生成 79 个测试页
│
├─ frameworks/ ← 395 个实现文件(79 × 5 端)—— 只读,除非规格变更
│
├─ .design_library/aurora-admin/
│ ├─ colors_and_type.css ← 75 个设计令牌(改色的唯一入口)
│ ├─ components.css ← 6 核心组件样式聚合
│ ├─ css.json ← 结构化令牌(For Agents 消费)
│ ├─ components/*.json ← 79 份契约(含 unknowns/doNotInvent)
│ └─ specs/组件1~10.txt ← 规范原文(CRLF!读时用 split(/\r?\n/))
│
├─ site/
│ ├─ app.js ← 文档站全部逻辑(2064 行,hash 路由 SPA)
│ ├─ i18n.js ← 330 条中英字典(中文源串作键)
│ ├─ data.js / data.json ← 构建产物(勿手改)
│ ├─ tokens/ ← 令牌导出(CSS / W3C DTCG / Figma)
│ └─ components/*.html ← 79 个静态薄壳(SEO 入口)
│
└─ tests/
├─ _template.html ← 测试页模板(改结构改这里)
├─ _runtime.js ← 跨帧断言引擎(iframe 载真实演示页)
├─ _collect.html ← 零依赖批量回归收集器
├─ report.json ← 回归报告(生成物)
└─ <slug>.html × 79 ← 生成物
```
---
## 七 · 已知陷阱速查
| 陷阱 | 现象 | 解法 |
|---|---|---|
| 规范文件是 CRLF | 正则 `/^#{3}/` 匹配不到行尾,标题解析全失败 | `split(/\r?\n/)` 先归一化 |
| PS5.1 写文件带 BOM | 严格 JSON 解析器(node require)直接失败 | `WriteAllText` + `UTF8Encoding($false)` |
| 演示页 DOM 由内联脚本生成 | 静态抽快照得到空 DOM | 用 iframe 载真实页面跨帧断言 |
| 并发 iframe 抢主线程 | 偶发超时被误记为失败 | 已修:超时重试 + 超时单列(见 `_collect.html`) |
| 改令牌组件不变 | 改的是没被加载的文件 | 改内嵌 `<style>`(铁律 4) |
| `$themes` / `$schema` 在 PS 里 | 被当变量展开成 null,报"Null 键" | 用引号包裹键名 `'$themes'` |
| `Write-Output "...{}..." -f $n` | `{}` 被当格式占位符 | 改写措辞或转义 |
---
## 八 · 当前状态
**版本**:v1.4.1 | **回归**:100%(961 断言 / 0 失败 / N/A 36)| **下一阶段**:ROADMAP 的 S1 可交付
**已完成的里程碑**:
- v1.3.0 验收链路修复(测试页从空 DOM 误报改为 iframe 真实渲染)
- v1.3.1 无障碍与令牌合规(回归 85.1% → 100%)
- v1.3.2 契约全量 79/79 + 令牌导出三格式
- v1.3.3 中英双语 i18n
- v1.4.0 组件层全面令牌化(1202 处)
- v1.4.1 四轮审计 + 回归偶发根治
**当前缺口(详见 ROADMAP 的 G1-G8)**:
无 LICENSE(已补)、无分发机制、CI 无测试、暗色模式是假的、跨端一致性无验证、`data.js` 1MB、RTL 未支持、断言偏结构。