Skip to content

feat(design-system): DS-4 Button 与 Input 标准组件 - #3920

Merged
MagicLizi merged 3 commits into
mainfrom
ds/4-button-input-primitives
Sep 4, 2026
Merged

MagicLizi merged 3 commits into
mainfrom
ds/4-button-input-primitives

Conversation

@kirozeng

@kirozeng kirozeng commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

设计系统改造系列 DS-4,路线图见 docs/design-rules/design-governance.md §12

这次改了什么

摘要

给 Desktop 建立第一批标准控件:Button 与 Input,落进既有 components/ui/,并迁移首批真实调用点。

不是从零造组件——仓库已自发收敛过一轮:SettingsTextInput 是成熟的统一输入(6 个消费者),ProvidersSection 里藏着两个私有按钮原型。DS-4 是把它们升格成公共组件,并实现 DESIGN.md §4 已有的规格(变体名照抄,不发明新语义)。

变更类型

  • feat 新功能

范围

UI 变化

引用的设计规范

  • DESIGN.md §4 Buttons:三变体 primary / secondary / cta 的 fill / text / border / padding 照实现;本 PR 补全原文标着 ⚠ not yet specified 的高度,并补 hover / pressed / 字号字重 / disabled
  • DESIGN.md §4 Inputs & Forms:单行输入 fill / border / placeholder 归属;textarea 一律 8px
  • DESIGN.md §5 Border Radius Scale:按钮一律胶囊;textarea 8px
  • DESIGN.md §10 Token Selection Rules:只消费 CSS 变量,slot 优先于域 alias
  • DESIGN.md §10 双模式交付门槛:Light / Dark 同时实现;状态不可区分视为真实缺陷
  • design-governance.md §3.4:运行期派生值只登记不进 DTCG
  • design-governance.md §6:两级证据 + 设计师批准

四处有意可见变化(均已获设计师逐项批准)

  1. 次级按钮从灰底改白底(G5)。设置页 PillButton--settings-btn-secondary-*(域 alias)改绑 Tier-1 --surface-elevated + --border-default,防设置页私有决定泄漏成全局默认。同值性核查结论为不同值(Light #e5e5e5#ffffff,Dark 同值 #2c2c2a),已停下报告,设计师裁决「接受有意统一」。CINDY Light 下按钮与卡片同色、读成空心描边,设计师看实机后确认可接受。
  2. CTA 悬停从透明度改换色(G2)。hover:opacity-90--button-cta-hover(= --accent-hover)。文字不再跟着变淡。
  3. hover / pressed 状态梯改为派生(比例经设计师 2026-09-04 裁决)。见下方「风险」里的缺陷说明。
  4. 一个数字输入框在禁用时降到 60% 不透明度。全仓 19 个输入调用点只有 1 个会传 disabled(Agent 资源占用的「并发命令上限」,仅预设写盘在途)。该输入框改造前就已传 disabled 却无视觉表现,而同 section 的预设按钮改造前就带 opacity-60 —— 本项是补齐同屏不一致。

截图docs/design-evidence/2026-09-04/(平台 Desktop,隔离沙箱 whoami MATCH 本 worktree)

  • cells/:Level 2 实机逐格。CDP CSS.forcePseudoState 强制伪类 + CSS.getComputedStyleForNode 取值,CINDY Light / Dark 各 rest / hover / pressed / disabled+hover 四格
  • live-settings-providers.pnglive-add-provider-wizard.png:实机全景
  • ds4-g5-secondary-compare.png:G5 同值性对照
  • README.md:证据索引、测量值、缺口如实登记

未采集variant="primary" 无生产消费者(两个迁移点是 secondary 与 cta),cta 需 XD 资产模块处于可购买态,二者无实机逐格,由 Level 1 的 11 主题守卫覆盖。「声明零视觉的迁移逐像素一致」未做且本张不适用——上述四处是真实视觉变化,不声称零视觉。

怎么验证的

自动验证

pnpm test:unit:related
结果:PASS test:runner / PASS apps/desktop unit / PASS packages/design-tokens unit

pnpm --filter desktop run typecheck            结果:PASS
pnpm --filter @cindy/design-tokens run typecheck 结果:PASS
pnpm check:design-inventory                    结果:✅ GENERATED 区块最新(34 个 surface)
node scripts/hardcoded-color-audit.mjs         结果:PASS: unexpected=0
pnpm check:i18n-glossary                       结果:✅ 无新增违规
pnpm check:dco                                 结果:DCO check passed: 1 commit signed off

新增守卫:

  • themes/__tests__/buttonStateContrast.test.ts —— 11 内置主题 × 3 变体,rest → hover → pressed 每档 ΔRGB ≥ 8(36 项),含自证伪(把 hover 换回撞色的 --surface-hover 必然红;不认识的颜色形态 fail closed)
  • ui/__tests__/button.test.tsx —— 变体 token 合同表、胶囊圆角、text-13/500、尺寸只两档、禁用态无裸 hover:,含自证伪
  • ui/__tests__/input.test.tsx —— fill / text / placeholder / focus token、三档高度、ivory variant、error 态、secret 显形,含自证伪
  • packages/design-tokens classification —— 5 个运行期派生状态值必须登记为 runtime-derived-or-protected

手工验证

真实 Desktop 隔离沙箱(--isolated=@worktreedesktop-whoami 报 MATCH,commit 一致),设置 → 模型供应商 → OpenAI 详情,CINDY Light 与 CINDY Dark 各走一遍 rest / hover / pressed / disabled。实测值:

主题 rest hover pressed disabled+hover
CINDY Light #FDFDF8 235,235,230 214,214,210 #FDFDF8(不变)
CINDY Dark #1F1F1F 45,45,45 62,62,62 #1F1F1F(不变)

未执行的验证

  • variant="primary"cta 的实机逐格未采集,原因见「UI 变化」
  • 未跑 pnpm test:all(改动集中在 renderer 组件层 + 设计 token 包,相关门禁已覆盖)

风险

风险分类

  • 无已知风险

影响与回滚

影响范围:Desktop renderer 的设置页按钮与输入框。不触碰 main 进程、数据库、协议、原生层、插件基座、权限流。

修复的一个真实缺陷(本 PR 自审发现):初版按裁决把 hover 记账成既有 slot 的 alias,实测发现暗色下 --surface-hover--surface-chip 同值,default-dark / cindy-dark / one-dark-pro / monokai-pro 四个主题的 primary 悬停零反馈;--surface-hover-softcindy-dark--surface-elevated 仅 2/255,secondary 同样失效;字面量 pressed 不跟主题(monokai-pro 色板 #403E41 按下会跳到无关的 #4a4a48)。改为从本变体 rest 底色朝本变体前景色 color-mix 派生(hover 8%、pressed 自 hover 再 10%),跟随任何主题覆盖。另修一处迁移引入的行为回归:hover / active 加 enabled: 前缀,禁用按钮鼠标悬停不再换色。

已登记未修

  • DESIGN.md §4 单行输入 focus 环的 spec(--focus-ring-soft)与实现(opaque --focus-ring,继承自 SettingsTextInput 收敛期)不一致 —— 按「六项裁决之外遇差异只登记、不擅自统一」登记进 design-governance.md §10 待裁决表
  • ui/input 换绑 Tier-1 后,尚未收口的 --settings-input-* 族消费者(-border 138 处 / -text 108 处 / -border-focus 44 处 / -placeholder 33 处,去重 49 个文件,跨 6 个其它 surface)在「新建本地副本」导出型本地主题下会与标准输入框分裂。导入型 VSCode / Obsidian 主题零影响(导入器不写这批 alias,会向上回落到同一 slot)。该断层线既存非本 PR 新造(全仓直接读 border-default 513 处 vs 读 alias 138 处),本 PR 只是把 6 个调用点挪到人多的一侧。收口已登记为 DS-5 待办(台账 desktop.settings 下一动作),须整族一次做完
  • §12 路线图 DS-4 行的 PR 号留待下一张回填(计划 §3.6 允许二选一)

流程留档:派生梯的方案与 8% / 10% 两个比例在落地时尚未获批、事后补批,该越界已记入 design-decision-log.md 09-04 条,口径是「修缺陷可以自主,定值不可以」,避免被当成「执行方可自行发明设计值」的先例。

回滚方式:revert 本 PR 即回到起点 —— 删两个组件与三份测试、还原 ProvidersSection / AgentResourceSection / CollaborationSection 调用点与 SettingsTextInput、还原 colors.ts 六个 token 与 DS-2b 快照、还原影子包 component 层与文档。组件无外部依赖注入,删除零残留。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名
  • UI 改动已在「UI 变化」注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件(一张实机截图含账号邮箱与组织信息,已剔除不入库,理由记在证据 README;同一变体的可入库证据由 live-settings-providers.pngcells/ 覆盖)
  • 已补充必要文档
  • 已确认测试结果

设计系统改造系列 DS-4:给 Desktop 建立第一批标准控件,落进既有
components/ui/,并迁移首批真实调用点。

组件
- ui/button.tsx:升格 ProvidersSection 的私有 PillButton / CtaPillButton,
  实现 DESIGN.md §4 三变体(primary / secondary / cta)+ rest / hover /
  focus-visible / pressed / disabled 状态矩阵。
- ui/input.tsx:升格 SettingsTextInput(含 secret 眼睛显形、mono、trailing、
  三档高度),新增 Textarea 变体(8px 圆角)。SettingsTextInput 保留为薄封装,
  既有 6 个消费者零改动。

六项规格裁决落地(拍板人 = 用户/设计师 2026-09-03)
- G1 按钮双档 32/36、输入三档 32/36/40,按钮不设 40
- G2 hover 机制统一换色 token,禁用透明度 hover
- G3 pressed 进最低状态矩阵
- G4 text-13 / font-medium
- G5 secondary 绑 Tier-1 不继承域 alias;同值性核查为「不同值」,
  用户裁决接受有意统一成白底
- G6 ivory 保留为显式 variant 并三处标登记债

状态梯改为派生(比例经用户 2026-09-04 裁决)
初版把 hover alias 到既有 slot 后实测发现:暗色下 --surface-hover 与
--surface-chip 同值,default-dark / cindy-dark / one-dark-pro / monokai-pro
四个主题悬停零反馈;--surface-hover-soft 在 cindy-dark 距 --surface-elevated
仅 2/255。改为从本变体 rest 底色朝本变体前景色 color-mix 派生(hover 8%、
pressed 自 hover 再 10%),跟随主题覆盖,11 个内置主题每档 ΔRGB ≥ 8。
派生值按治理合同 §3.4 只登记不进 DTCG 影子层。

迁移
- ProvidersSection 按钮族全部走 ui/button
- SettingsTextInput 六消费者随薄封装自动覆盖
- AgentResourceSection / CollaborationSection 四个数字输入改用 ui/input
- PermissionPrompt 零触碰;confirm-dialog 按钮族只登记不迁

Token
- 新增 button-primary-hover / -pressed、button-secondary-hover / -pressed、
  button-cta-hover / -pressed 六个 component 级 token
- 同 PR 更新 DS-2b 冻结快照 + 影子包 component 层与 classification 登记

守卫
- themes/__tests__/buttonStateContrast.test.ts:11 主题 × 3 变体状态梯
  ΔRGB ≥ 8,含自证伪
- ui/__tests__/button.test.tsx、input.test.tsx:变体 token 合同表、圆角、
  字号字重、尺寸档、禁用态无裸 hover:,含自证伪

文档
- DESIGN.md §4 补全按钮高度 / hover / pressed / 字号字重,去掉
  ⚠ not yet specified;input 补高度与 ivory 登记债
- design-governance.md §10 登记「单行输入 focus 环 spec 与实现不一致」待裁决
- design-decision-log.md 归档六项裁决、派生梯裁决与一次流程越界说明
- design-inventory.md:desktop.settings 标 pilot,登记 --settings-input-*
  四个域 alias 收口为 DS-5 待办
- docs/design-evidence/2026-09-04/:Level 2 实机逐格证据(CDP 强制伪类,
  CINDY Light / Dark 各四格)

Signed-off-by: kirozeng <kirozeng@gmail.com>
@kirozeng
kirozeng requested a review from a team as a code owner September 4, 2026 10:46
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps

greptile-apps Bot commented Sep 4, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 为 Desktop 建立首批标准 ButtonInputTextarea 控件,将设置页的既有输入和按钮原型迁入公共组件,并同步扩展按钮状态令牌、DTCG component 影子层、设计规范、守卫测试与视觉证据。

  • 新增三种 Button 变体及双尺寸、交互态和禁用态合同。
  • SettingsTextInput 保留为新 Input 的兼容导出,并迁移首批数字输入。
  • 新增六个按钮状态 token,以及 component → semantic → reference 生成和校验链路。
  • 补充主题状态对比、组件合同、分类与结构守卫。
  • 发现一处新公共 Input 的原生 style 属性会被静默覆盖的问题。

Confidence Score: 4/5

PR 整体可合并,但建议先修正公共 Input 静默丢弃调用方内联样式的 API 陷阱。

按钮、主题状态令牌、设置页迁移和 component token 生成链路未发现阻断性失败;唯一确认的问题是新 Input 虽在类型上接受原生 style,运行时却会将其覆盖,属于非阻断但应修复的公共组件契约问题。

Files Needing Attention: apps/desktop/src/renderer/components/ui/input.tsx

Important Files Changed

Filename Overview
apps/desktop/src/renderer/components/ui/input.tsx 新增标准 Input/Textarea 与密钥显形、错误态和尺寸能力;Input 会覆盖调用方传入的原生 style
apps/desktop/src/renderer/components/ui/button.tsx 新增 primary、secondary、cta 三变体,统一尺寸、焦点、状态色与禁用行为。
apps/desktop/src/renderer/components/settings/SettingsTextInput.tsx 将旧设置页输入实现改为新 Input 的兼容重导出,保留原组件名和类型别名。
apps/desktop/src/renderer/components/settings/AgentResourceSection.tsx 将并发命令上限迁移到标准 Input,原有草稿与失焦写盘逻辑保持不变。
apps/desktop/src/renderer/components/settings/CollaborationSection.tsx 将三项协作数字设置迁移到标准 Input,保留原有限界与持久化行为。
apps/desktop/src/renderer/components/settings/ProvidersSection.tsx 将私有 secondary/cta 药丸按钮原型迁移到标准 Button。
apps/desktop/src/renderer/themes/colors.ts 注册六个 Button 状态 token,使用随主题变化的派生状态梯。
apps/desktop/src/renderer/themes/tests/buttonStateContrast.test.ts 新增所有内置主题下三种按钮状态梯的颜色差异守卫。
packages/design-tokens/src/build-layers.ts 将设计令牌生成扩展为 reference、semantic、component 三层。
packages/design-tokens/src/guards.ts 为 component 层增加 DTCG 结构、双模式及单向 alias 校验。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  C[设置页调用点] --> UI[Button / Input / Textarea]
  UI --> T[Desktop 运行时 CSS Token]
  T --> TH[内置与本地主题]
  T --> S[冻结颜色快照]
  S --> G[design-tokens 生成器]
  G --> R[reference]
  G --> M[semantic]
  G --> P[component]
  P --> M
  M --> R
  TEST[组件与主题守卫] --> UI
  TEST --> T
  TEST --> G
Loading
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/renderer/components/ui/input.tsx:169
**style 被静默覆盖**

`InputProps` 继承了原生输入框的 `style` 属性,但这里在展开 `...rest` 后又设置了固定的 `style`,所以调用方传入的内联样式会被静默丢弃。例如 `textAlign`、宽度等样式能通过类型检查,却不会在运行时生效。建议合并调用方样式与固定的文本选择样式,或者从公开属性中明确排除 `style`---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "feat(design-system): DS-4 Button 与 Input..." | Re-trigger Greptile

Comment thread apps/desktop/src/renderer/components/ui/input.tsx Outdated
@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) labels Sep 4, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/components/settings/AgentResourceSection.tsx / apps/desktop/src/renderer/components/settings/CollaborationSection.tsx / apps/desktop/src/renderer/components/settings/ProvidersSection.tsx 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范

@MagicLizi

Copy link
Copy Markdown
Contributor

@kirozeng 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/renderer/components/ui/input.tsx),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi

Copy link
Copy Markdown
Contributor

@kirozeng 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

…mitives-fix

# Conflicts:
#	docs/design-rules/design-inventory.md
Greptile P2:InputProps 继承原生 style,但 {...rest} 之后又设固定 style,
调用方内联样式(textAlign、width 等)类型上合法、运行时被丢弃。

- Input:显式解构 style,内置文本选择样式在前、调用方 style 在后展开
- Textarea:同方向问题(固定 style 在 {...rest} 之前,行为与 Input 不一致),
  统一为相同合并次序
- 补 3 条合同测试:caller style 保留、内置 userSelect 不丢、caller 可显式覆盖

Signed-off-by: Kirozeng <kirozeng@gmail.com>
@kirozeng

kirozeng commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

本轮跟进(dispatch:ca4e477e1958ccc3):

1. 修复了 Greptile 指出的 style 静默覆盖(apps/desktop/src/renderer/components/ui/input.tsx:169)——意见成立。InputProps 继承原生 style,但 {...rest} 之后又设固定 style,调用方的内联样式类型上合法、运行时被丢弃。改法是采纳评论里的第一方案(合并)而非排除 style

  • Input:显式解构 style,合并次序为「内置文本选择样式在前、调用方 style 在后」——调用方可以覆盖 userSelect 等任何键,内置样式不再静默吞掉调用方样式。
  • Textarea 顺手统一:它原本是相反方向的同类问题(固定 style 写在 {...rest} 之前,行为与 Input 不一致),现改为同一合并次序。
  • 补了 3 条合同测试:调用方 style 保留(textAlign/width)、内置 userSelect: 'text' 不丢、调用方可显式覆盖内置 userSelect

2. 解除了与 main 的合并冲突。冲突在 docs/design-rules/design-inventory.md(机器生成台账,两侧都改了 desktop.settings 行):按仓库规则用 node scripts/design-inventory.mjs 重新生成了 GENERATED 区块(含 main 上 48 个新 commit 带来的 1 个新文件、计数变化),再保留本 PR 人工区的 desktop.settings 迁移状态行(pilot + DS-5 待办)。pnpm check:design-inventory 通过。

3. 关于 UI 效果证据:PR description 里已有指向 docs/design-evidence/2026-09-04/ 的证据链(Level 2 实机截图 cells/、live-settings-providers.png、live-add-provider-wizard.png,CINDY Light/Dark 双主题,README 索引)。本轮修复是纯逻辑合并次序调整——默认渲染输出与修复前逐字节相同(不传 style{...undefined} 展开为空),不产生新的视觉变化,故不需要新截图;原证据继续有效。

4. Windows unit tests 缺席:这是上一 head 上 required context 没跑(PR 分支曾与 main 冲突)。本轮 push(60b9e2400)已把分支推进到 mergeable,CI 已对新 head 重新排队。

本地验证:pnpm test:unit:related PASS(desktop + design-tokens)、pnpm --filter desktop run typecheck PASS、pnpm --filter @cindy/design-tokens run typecheck PASS、pnpm check:design-inventory ✅、pnpm check:dco PASS(2 commits signed off,merge commit exempt)。hardcoded-color-audit 与 glossary 门禁输出与 main 基线逐字节一致。


🤖 This change was made autonomously by pr-autopilot (dispatch:ca4e477e1958ccc3, worktree: fix-3920). Reply to this comment to provide feedback.

@MagicLizi MagicLizi added the status:conflict 与目标分支有冲突(review-pr 自动维护,仅展示) label Sep 4, 2026
@kirozeng

kirozeng commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

本轮核实(dispatch:adc6cff77028e772):CI 红灯是 Windows runner 上的 flaky,已通过重跑转绿,无需代码改动。

失败的是什么:Windows unit tests (1/2) 里 windowsPackagedInstanceBarrier > holds the packaged startup mutex until release and allows a later retry 一条,报 timed out probing Windows packaged-instance barrier(9.8s)。该测试要在真 Windows 上起 PowerShell helper、锁住 mutex 后现场 Add-Type 编译探测代码,探针预算固定 5s;满载 runner 上冷启动偶发超预算。

为什么判定与本 PR 无关

  • 该测试与本 PR 的改动零交集——本 PR 两笔 commit 只动了 components/ui/input.tsx(renderer 组件)与 docs/design-rules/design-inventory.md(文档台账);windowsPackagedInstanceBarrier 相关文件与 origin/main 逐字节一致,分支上没有任何 main 进程 commit。
  • 同一窗口期 main 自己也红了:12:16Z 的 main client-ci(38b1aada)Windows unit tests (2/2) 因 IOSSimulatorTabBody 20s 超时失败——是另一个不相关的测试。今天 Windows runner 整体不稳。

处置:对 run 33873785699 触发了 failed-jobs 重跑,Windows unit tests (1/2) 与 (2/2) 均 SUCCESS。当前 PR 19 项 check 全绿(DCO / CodeQL / Linux+Windows unit tests / verify 等),head 仍为 60b9e24


🤖 This change was made autonomously by pr-autopilot (dispatch:adc6cff77028e772, worktree: fix-3920). Reply to this comment to provide feedback.

@MagicLizi MagicLizi removed the status:conflict 与目标分支有冲突(review-pr 自动维护,仅展示) label Sep 4, 2026

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

独立审查通过:DS-4 Button / Input 走语义 token,Light/Dark 双模式,调用方 style 后置合并。无 P0/P1。

@MagicLizi
MagicLizi merged commit ede0f77 into main Sep 4, 2026
25 of 27 checks passed
@MagicLizi
MagicLizi deleted the ds/4-button-input-primitives branch September 4, 2026 13:59
@MagicLizi

Copy link
Copy Markdown
Contributor

合了。Button / Input 终于有一套能直接用的标准件,设置页不用再各自捏一版胶囊。

kirozeng added a commit that referenced this pull request Sep 4, 2026
review 反馈两条(P1/P2)都指向同一件事:DS-4 截图移出仓库后,文本索引
没有给出图的入口,也没有记录采集时的代码版本。

1. 采集 commit:`0458af96d`(工作分支 DS-4 实现提交,截图与色值产生于此),
   squash 合入 #3920 后为 `ede0f7739`。两 SHA 间决定色值的 `themes/` 与
   `components/ui/` 一致(仅 `input.tsx` 调用方 style 合并次序在采集后改过,
   与色值无关)。README 里明确基点 `c4033acd` 只是开工坐标、不能用于复核。
2. 附件入口:12 张 PNG 从 #3920 历史恢复到 PR #3931 证据评论
   (issuecomment-5544942109),README 的引言与「当时看过的图」表格改为
   指向该评论;`ds4-button-input-state-matrix.png` 标注为绘制图、不作色值证据。
3. 治理合同 §6 操作说明补一句:上传后把评论链接回写进文本索引即成稳定入口
   (issue comment URL 长期有效,附件 URL 随 CDN 变动)。

12 张图原始字节仍可从 `ede0f7739` 的 Git 历史恢复,本 PR 不入仓。

Signed-off-by: kirozeng <kirozeng@gmail.com>
kirozeng added a commit that referenced this pull request Sep 4, 2026
review(552f3cb2177b58de 前的 request changes)指出:README 写证据评论
「含全部附件链接与逐图说明」,但该评论(issuecomment-5544942109)实际
仍是占位文本——12 张图因 GitHub 附件端点只支持网页会话、CLI/API 均传不了
图,一直没挂上去。陈述超前于事实。

本轮把仓库侧能做的做掉:
1. README 两处改为如实描述:入口已建、评论内附逐图清单,附件本体需人工
   拖拽上传(写明原因)、上传前是清单占位、原始字节始终可从 #3920
   (ede0f7739)历史恢复。不再声称「含全部附件链接」。
2. 占位评论同步更新:12 张图的文件名清单、逐图说明与色值对照、上传
   操作指引(拖拽后按清单替换「待上传」),上传完成后 README 无需再改。

不改图、不改链接结构;纯陈述修正。

Signed-off-by: kirozeng <kirozeng@gmail.com>
MagicLizi pushed a commit that referenced this pull request Sep 4, 2026
* docs(design-system): 栅格证据改走 PR 附件,DS-4 截图移出仓库

治理合同 §6 原文给了「入仓 docs/design-evidence/ 或 PR artifact」两个选项。
DS-4(#3920)是第一张真正跑证据流程的 PR,选了入仓那条,实测代价 = 12 张
PNG / 944KB 永久进 Git 历史。栅格证据的效用是一次性的(供设计师 review 时
看一眼),而 Git 历史是永久的、每次 clone 都要下;后续 DS-5 / DS-6 / DS-9
三张同为「有意可见」,照此累积将达数 MB 量级。

本 PR 三件事:

1. §6 收口:栅格证据(截图 / 录屏)一律走 PR 附件或 artifact、不入仓;
   docs/design-evidence/YYYY-MM-DD/ 只放纯文本索引(SHA、平台、主题、日期、
   逐格实测色值、有意差异清单、缺口登记)。附带记下 GitHub 图片上传端点依赖
   网页会话、gh CLI 与 REST API 都传不了图,需由人拖拽上传。
2. 移除 DS-4 随 #3920 入仓的 12 张 PNG。**只从 tip 移除,不重写历史**——
   为 0.88MB 重写公开主干需让 181 个开着的 PR 重新 rebase、351 个 fork 重新
   clone,代价远大于收益。
3. DS-4 证据 README 改为纯文本索引:computed style 取到的逐格色值就是证据
   本体,同环境重跑探针可复核;原先指向图片的表格改为「当时看过的图,
   不入仓,仅登记存在」。

既有入仓证据不追溯删除:docs/design-previews/**/evidence/ 下另有 19 张同类
历史资产,同样按「不追溯」处理,是否连带收口作为独立议题留待裁决。

风险:纯文档,无产品代码改动。回滚 = revert 本 PR(PNG 仍在 #3920 的历史里,
revert 会把它们恢复到 tip)。

Signed-off-by: kirozeng <kirozeng@gmail.com>

* docs(design-system): 证据索引补附件入口与采集 commit

review 反馈两条(P1/P2)都指向同一件事:DS-4 截图移出仓库后,文本索引
没有给出图的入口,也没有记录采集时的代码版本。

1. 采集 commit:`0458af96d`(工作分支 DS-4 实现提交,截图与色值产生于此),
   squash 合入 #3920 后为 `ede0f7739`。两 SHA 间决定色值的 `themes/` 与
   `components/ui/` 一致(仅 `input.tsx` 调用方 style 合并次序在采集后改过,
   与色值无关)。README 里明确基点 `c4033acd` 只是开工坐标、不能用于复核。
2. 附件入口:12 张 PNG 从 #3920 历史恢复到 PR #3931 证据评论
   (issuecomment-5544942109),README 的引言与「当时看过的图」表格改为
   指向该评论;`ds4-button-input-state-matrix.png` 标注为绘制图、不作色值证据。
3. 治理合同 §6 操作说明补一句:上传后把评论链接回写进文本索引即成稳定入口
   (issue comment URL 长期有效,附件 URL 随 CDN 变动)。

12 张图原始字节仍可从 `ede0f7739` 的 Git 历史恢复,本 PR 不入仓。

Signed-off-by: kirozeng <kirozeng@gmail.com>

* docs(design-system): 证据入口陈述改为如实——附件待人工上传

review(552f3cb2177b58de 前的 request changes)指出:README 写证据评论
「含全部附件链接与逐图说明」,但该评论(issuecomment-5544942109)实际
仍是占位文本——12 张图因 GitHub 附件端点只支持网页会话、CLI/API 均传不了
图,一直没挂上去。陈述超前于事实。

本轮把仓库侧能做的做掉:
1. README 两处改为如实描述:入口已建、评论内附逐图清单,附件本体需人工
   拖拽上传(写明原因)、上传前是清单占位、原始字节始终可从 #3920
   (ede0f7739)历史恢复。不再声称「含全部附件链接」。
2. 占位评论同步更新:12 张图的文件名清单、逐图说明与色值对照、上传
   操作指引(拖拽后按清单替换「待上传」),上传完成后 README 无需再改。

不改图、不改链接结构;纯陈述修正。

Signed-off-by: kirozeng <kirozeng@gmail.com>

---------

Signed-off-by: kirozeng <kirozeng@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants