diff --git a/docs/PROGRESS_LOG.md b/docs/PROGRESS_LOG.md index 1f036d1..0edde49 100644 --- a/docs/PROGRESS_LOG.md +++ b/docs/PROGRESS_LOG.md @@ -24,6 +24,26 @@ > 新会话读到的第一块。保持准确,只描述"此刻"。 +### 🎨 [x] w6 收尾 · 设计稿逐条对照,补掉 Git 面板的落地偏差(2026-07-29/30,worktree `panel-design-fidelity` + `panel-fidelity-leftovers`) + +- **起因**: 用户截图说"按钮和文字框还是很奇怪"。**先查客户端再查代码,结论是两件事都成立**: + 1. **截图那个客户端根本没拿到改动**。它是 `/Applications/Web Terminal.app`,前端**打包进 bundle**(`extraResources`),那份资源冻结在 **17:59**,早于全部样式提交;内嵌 `style.css` 里 `.proj-wt-branch-input` / `.proj-diff-toggle` **一条规则都没有**,所以退回系统默认白框。提交列表却是新的 —— 数据走 HTTP API 实时,CSS 是静态文件,于是出现"数据新、样式旧"。浏览器 `:3000` 一直是对的。**教训:前端改完必须重打包桌面 App**(签名 + sealed resources,直接替换包内文件会破签名,只能 `npm run dist:mac`)。 + 2. **确实还有真偏差**。跑了一次设计稿对照审计(6 个维度 finder + 对抗性 refute 复核,18 个 agent),得 **59 处**;逐条在真实浏览器的 live DOM 上验证过再改。 +- **改动 · 控件"有类名没规则",渲染成原生控件**(这就是用户说的"奇怪"): `.proj-wt-form` **完全没有布局规则** → 输入框和 Create Worktree 贴在一起、一出校验错误按钮就被挤到下一行;`.proj-wt-error` / `.proj-wt-actions-error` 没规则 → 校验失败以 **16px 近白色正文**渲染,和内容分不开;worktree 的 ✕ 与 Prune 同样零规则;`.proj-fanout-mode` 没有 `appearance:none` → WebKit 保留原生浅色下拉(全panel 唯一一个);**`--danger` 从未定义过**,所有校验文案都在 fallback 到不属于调色板的红。 +- **改动 · 层叠 bug(后面的同权重规则静默覆盖前面的)**: `.proj-wt-row-current` 的琥珀 wash + 边框**完全失效** —— "你在这里"和其它行长得一模一样(`.proj-wt-row` 的 `background`/`border` **简写**在文件更靠后,等权重后写胜);`.proj-wt-branch` 没有 `font-family`/`font-size`,继承 **16px UA 默认无衬线**,是整页最大的字。 +- **改动 · 布局**: `.proj-syncband` **去掉 `flex-wrap`**(设计稿 `.sync` 本来就不换行)—— 换行会在 **721–1000px** 之间排出参差空行,900px 时 Fetch 独占第二行;改为只让"长句那一格"(`proj-sync-cell-flex`)让出宽度,于是一路到 720px 断点前都是单行。提交行从 flex 改**4 列 grid**,且 ↑ 标记**每行都渲染**(空占位)—— 原来只有未推送行有标记,导致**没有两行的列位置相同**,未推送那组读不出是一组。已推送的 subject 降到 `--text-dim`,分界线才有意义。 +- **改动 · 面板的"诚实性"(设计稿两条硬规矩)**: ① `?? 0` 把 `undefined` 折成 0,导致**计数未知时也能显示绿色 `✓ in sync`** —— 设计稿唯一明令禁止的事;改为未知渲染 `↑ —` / `↓ —` 并标 `unverified`,绿色要求真零 + 新鲜 fetch。② 陈旧的 `behind` 会把**数字本身**染成警告红;而"没 fetch 过"是默认状态,等于整条面板长期在喊"这仓库坏了"。疑虑改为只挂在 `unverified` 芯片和脚注上,**永不碰数字**(落后是信息,不是错误)。 +- **改动 · 收尾四条(第二个 worktree)**: detached HEAD 补短 sha(`SyncState.head`,从 `readSyncState` **已经读过**的 `.git/HEAD` 文本里取,零额外 I/O、零额外 git 调用);ghost 按钮**统一为一套几何**(此前漂成三种尺寸,且都用满强度 `--text`),四个 outline 按钮集中声明一处并**删掉靠后的重复块** —— 等权重的第二个块正是当初漂移的成因;`.proj-branch` 补 border + 等宽(它是全 panel 唯一没边框的芯片);View Diff 上方补 `Changes` 分区标题(此前贴在同步条下沿,读起来像同步条的一部分)。 +- **改动 · 语义 token**: 新增 `--sunk` / `--warn` / `--ok` / `--dirty` / `--mono-font`,替掉散落的 hex 字面量;全 panel 统一一套芯片语言;分区标题改成设计稿的"低字重 + 宽字距大写",计数拆成独立的浅色元素。 +- **新增 `.gitattributes`** —— `public/projects.ts diff`。该文件**故意含真实 NUL 字节**(命名空间哨兵 `'\0active'` / `'\0other'`,为的是绝不可能和真实 `First.Second` 键碰撞),git 因此判定为二进制,任何 diff 都只打印 `Binary files differ`、`--stat` 报 `Bin 66815 -> 68701 bytes`,**整个文件无法 review**。`diff` 属性让 git 按文本 diff,且**不设 `text`**,所以不做行尾归一化、磁盘字节不变。同一个坑在 shell 里也有:`grep` 只打印 `Binary file … matches`,**看起来像没匹配到** —— 用 `grep -a`。(另:macOS 是 BSD grep,`\|` 不支持,要 `-aE`。) +- **验证**: `tsc` 两个 project 全干净。单测 **2167 全过**(78 文件),新增 **7 个**回归测试:未知计数不给绿色、疑虑不落在数字上、零不用 accent、detached 有/无 sha(前端 2 + 后端 2)。集成 **27/27**。 + - **真实浏览器逐宽度验证**(不是靠读 CSS 推):1280/1000/900/780/721/600/420px —— 同步条 721px 以上恒单行、以下堆叠成列;提交行每行列位完全对齐(实测 x = 198/230/314/380);任何宽度都不产生横向滚动。ghost 按钮实测 `.proj-diff-toggle` 与 `.proj-wt-open` 几何完全一致(同为 h=31)。 + - **自己也踩了一次同类层叠 bug 并修掉**:第一版把"≤720px 丢掉 age 列"的规则写在了 `.proj-commit-row` 基础规则**之前** —— **media query 不增加特异性**,等权重下后写者胜,于是 3 轨声明失效、subject 掉进 56px 的 age 轨被压成一条。已挪到基础规则之后,420px 实测 subject 264px。 +- **决策 / 偏离**: 审计给的 59 条里,**token 名映射差异**(设计稿自带 token 名 vs 本项目真实主题 token)一律不算偏差;设计稿的**文档外壳**(`.wrap`/`.note`/表格等)不是产品 UI,不动。`.proj-commitlog-count` 按设计稿改成 `--text-dim`(此前是 accent)—— 设计稿把 accent 留给同步条里的数字。 +- **遗留 / 待办**: 无。59 条已全部处理(高/中/低全收)。**桌面 App 已用 `npm run dist:mac` 重新打包并签名校验通过**(Team ID `C738Z66SRW`,与原装一致),产物 `desktop/dist-app/*.dmg` + `*.zip`;**安装与重启 App 需用户自己做**(旧 App 仍在跑旧资源)。 +- **注意**: 集成测试 `test/integration/server.test.ts` 在**并发负载下**(我同时开了第二个 server + 无头浏览器)6 次里挂过 2 次,失败点是 WebSocket 关闭时序(约 862 行),**与本次改动无关**;单独重跑 5/5 通过。这与上一条日志里"真实 PTY 的 E2E 不能和整套共用机器"是同一个已知抖动。 +- **commit**: `950d229`(合并 `a25fe30`)+ `dba8355`(合并 `e506d0d`)。 + ### 🌿 [x] w6 项目详情 Git 面板 — G1–G7 全部完成(2026-07-29,worktree `project-detail-git-mockup`) - **动机**: 详情页只有一个光秃秃的 `●`,回答不了"有没有 commit 没 push / 现在在哪个 worktree"。设计稿 `docs/mockups/project-detail-git.html`,计划 `docs/plans/w6-project-git-panel.md`。 @@ -51,7 +71,7 @@ - 另外给 H1 的 `finally` 里那个 `await srv.close()` 加了上限。它原本无上限,会把函数体里的真实错误吞掉、只报一个光秃秃的超时 —— 上面这个诊断是先把失败变得可读之后才做得出来的。 - **更正**:上一条日志把这 3 个失败写成"沙箱环境限制,与代码无关",**那是错的**。`PTY_AVAILABLE` 在本机是 `true`,这些用例根本没跳过,是真的在跑并且卡在时间预算上。 - **遗留 / 待办**: 无(G1–G7 全部完成)。设计稿里画的每样东西都落地了。 -- **commit**: (未提交,停在 worktree `project-detail-git-mockup` / 分支 `worktree-project-detail-git-mockup`) +- **commit**: 已合入 develop(`8fe1f52` / `cc811dd`,合并 `e81c426`)。后续的设计稿对照收尾见上一条。 ### 🧹 [x] 补完上一条留下的三个遗留(2026-07-29,紧接死锁修复之后)