补三处规划漏洞(自查发现,非用户指出) 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 页全通过)
9.0 KiB
AGENTS.md · Aurora Admin 执行约定
给在此仓库工作的 AI 模型:这个文件是硬约束,不是建议。开始任何任务前先读完。 人类贡献者请看 CONTRIBUTING.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 运行时依赖。
# 验收:这条必须在所有改动后通过
# 注意: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 处)。
# 诊断:这个页面的样式从哪来
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. 单次改动后必须跑回归
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 |
四 · 交付形态
每个任务完成时提交交付说明:
## <任务 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 未支持、断言偏结构。