ci(design-system): DS-7 启用成熟范围的设计检查 - #4215
Conversation
Signed-off-by: kirozeng <kirozeng@gmail.com>
Signed-off-by: kirozeng <kirozeng@gmail.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
| Filename | Overview |
|---|---|
| scripts/hardcoded-color-audit.mjs | 重写新增行审计、候选读取和窄例外逻辑;例外仍未绑定获批对象或具体角色,允许同文件复用批准颜色。 |
| scripts/shared/hardcoded-color-match.mjs | 统一语义包装、注释、PR 编号和字面 fallback 的匹配;数值颜色函数缺少样式上下文限制,会阻断普通文本。 |
| scripts/shared/design-inventory.mjs | 增加 Mobile 路由目录、静态依赖闭包和双端台账渲染;当前生产路由覆盖完整。 |
| .github/workflows/ci.yml | 将颜色审计和台账 freshness 接入现有 verify-checks,失败可传播到 verify 汇总。 |
| scripts/tests/hardcoded-color-audit.test.mjs | 覆盖 matcher、例外、工作区候选、错误引用和 CI 汇总,但缺少普通字符串函数色及同文件跨对象例外的反例。 |
| scripts/tests/design-inventory.test.mjs | 覆盖当前 Mobile 路由映射、入口变化、平台组件闭包和人工区保全。 |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
Event[PR / main push] --> Refs[解析 base 与 head]
Refs --> Audit[新增行颜色审计]
Audit --> Scope{文件范围}
Scope -->|Desktop renderer| Block[违规时阻断]
Scope -->|来源 / 测试 / 窄例外| Allow[允许并记账]
Scope -->|Mobile / 文档 / 其他| Report[仅报告]
Event --> Inventory[生成设计台账事实]
Inventory --> Fresh{与已提交台账一致}
Fresh -->|否| Fail[verify-checks 失败]
Fresh -->|是| Pass[进入现有 verify 汇总]
Block --> Pass
Allow --> Pass
Report --> Pass
Prompt To Fix All With AI
### Issue 1
scripts/hardcoded-color-audit.mjs:54
**颜色例外范围过宽**
`approvedColor` 只校验文件 glob、相邻属性名和颜色值,没有确认颜色是否位于获批对象或具体角色中。例如,在 `Toast.tsx` 的任意新对象里加入 `color: '#417CDD'`,也会复用本来只属于 `VARIANT_MAP` 信息色的例外并通过检查。这样会让未批准的语义用色绕过新增门禁;请将例外绑定到获批对象、变体或其他可验证的上下文。
### Issue 2
scripts/shared/hardcoded-color-match.mjs:42-56
**普通字符串触发颜色门禁**
这里会在任何字符串中匹配完整的数值颜色函数,并不要求它位于样式属性、CSS 声明或任意值语境中。成熟 Desktop renderer 若新增普通帮助文案或诊断文本,例如 `const label = 'RGB(1, 2, 3)'`,它会被当成裸色并使 `verify` 失败,尽管没有设计变化。请像 HEX 分支一样检查颜色上下文,或排除普通文本字符串。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "Merge latest main and record DS-7 submis..." | Re-trigger Greptile
- 窄 matches 规则新增 object 绑定(对象字面量键路径,结构校验):Toast 四色 绑定 VARIANT_MAP.<变体>,AgentIsland mascot 配色绑定 MASCOT_PREVIEW_CONFIGS.<皮肤>;同文件其它对象/变体复用批准色即违规 - 数值颜色函数(rgb()/hsl()/oklch 等)补齐 HEX 分支同款上下文检查,且 不把裸引号字面量当语境:需位于样式属性、CSS 声明/函数或任意值语境, 普通文案/诊断字符串里的颜色函数文本(如 const label = 'RGB(1, 2, 3)') 不再计入裸颜色、不再阻断 verify - 台账口径同步:matcher 说明、DS-7 治理表更新,design-inventory.md 重算 Signed-off-by: Kirozeng <kirozeng@gmail.com>
|
两条 P1 都已修复,提交 1. 例外范围过宽 → 绑定获批对象窄
所以评审里的反例——在 绑定是 fail-closed 的:对象改名或挪位后例外失效、重新报 block,需要更新例外条目。globals.css 的 2. 普通字符串里的函数色 → 补上下文检查
评审给的例子 一个明说的取舍:属性名不含颜色词的函数色(如 验证
🤖 pr-autopilot 修复跟进 · dispatch:bab218785a994f91 |
main 前进后本 PR 与之冲突(design-inventory.md 生成区块),GitHub 无法构建 merge ref,pull_request workflow(client-ci)不创建 run,required context Windows unit tests 缺席。合入 origin/main 并以 pnpm design:inventory 在合并 结果上重新生成台账;两个脚本测试 12/12、51/51,check:design-colors 对 origin/main 意外命中 0,test:unit:related 全绿。 Signed-off-by: Kirozeng <kirozeng@gmail.com>
|
这轮信号是「required context 在当前 head 上缺席: Windows unit tests」,已修复,提交 根因:不是 Windows 测试挂了,是 PR 与 main 冲突main 前进后( 证据:push 前对 head 修法合入 证据
🤖 pr-autopilot 修复跟进 · dispatch:8477c6d6c49d7f66 |
merge commit 0728e0c 只带进了冲突解决版台账,pnpm design:inventory 的 重新生成结果停留在工作树未暂存,CI checkout 到旧台账导致 check:design-inventory / test:runner 的 CLI --check 在 verify-checks、 Windows unit tests (1/2)、Desktop Git integration 三处同因失败。本提交 补上生成结果(desktop.bots 等 surface 的 files/tokens/radii 对齐 main 合入后的闭包)。 Signed-off-by: Kirozeng <kirozeng@gmail.com>
|
这轮信号还是「Windows unit tests 缺席」,实际查下来是 head 实际失败与根因client-ci 在 根因是我上一轮合 main 时的流程失误:merge commit 修复与验证(这次验证跑在提交后的树上,工作树与 HEAD 一致)
🤖 pr-autopilot 修复跟进 · dispatch:a4d66aa14145c48e |
这次改了什么
摘要
修复设计颜色审计把语义主题颜色和 PR 编号误报为裸色的问题,并将成熟范围的新增颜色检查接入现有
verify。同时在同一界面台账登记 Mobile 的实际入口。界面外观和产品行为不变。变更类型
fix缺陷修复docs/test/chore文档、测试或工程维护ci设计检查增量接线范围
UI 变化
不涉及:仅门禁与台账,不改 UI 实现。
docs/design-rules/DESIGN.md§5;docs/design-rules/design-governance.md§8/§13。怎么验证的
自动验证
固定版本复现 DS-6 raw13/allowed2/unexpected11,候选消除全部11项误报。20张历史 PR 按冻结 base/head、脚本 SHA256 及逐项预期重新回放通过;真实违规另有反向注入。
E2E 使用隔离临时 Git 仓的真实 base/head,执行本次 workflow 的实际 pnpm 命令及 verify 汇总 shell。7个场景:语义色/原批准Toast色通过;HEX/fallback/新未批准Toast色使脚本及汇总失败;Mobile布局颜色仅报告;错误引用非零退出。新接线之外整个 workflow 对象与主干一致,保留全部既有检查。
手工验证
执行者按用户明确要求完成完整 diff review,未发现未修复 P0/P1。核对颜色分类/窄例外、可见层边界、Mobile真实入口与人工区、CI失败传播及声明范围。用户明确跳过独立双审,本次不声称双审完成。
文本证据:
docs/design-evidence/2026-09-10/ds7-guards.md,同目录 JSON 保存完整历史 ref、预期和脚本 hash。未执行的验证
未运行产品 UI 实机 E2E或新增截图,本批没有 UI 实现变化;上述 E2E为设计检查链路验证。Windows 本机未运行,保留现有 Windows CI 全量分片。G2独立贡献者试用、历史69张图片公开交接与 DS-6 平台待项继续登记,由 kirozeng 安排、Codex核对修复,2026-09-17复查。
风险
风险分类
影响与回滚
提交前检查