Files
cc-web/.planning/gilded-wasteland-theme/findings.md
2026-07-18 10:14:38 +08:00

71 lines
12 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.

# 调研发现
## 2026-07-17 初始事实
- 用户要求直接新建主题用于和现有 Warframe 对比,并授权自行切分图标。
- 参考图的核心是右侧暗黑骑士主视觉、黑铁底色、低饱和旧金描边、余烬点缀和尖角/切角装饰。
- 附件实际像素高度为 941px(参考、背景、图标板均为 1672×941);人物位于背景右半区,左半区天然适合作为侧栏与聊天内容的低干扰背景。
- 图标板为 1672×941,按 6 列网格提供 16/24/32px 三档图标;应优先切出 32px 版本并在 CSS 中缩放,以保留清晰纹理。
- codebase-memory 项目 `home-cc-web` 索引状态为 ready(3429 节点、7841 边)。
- 工作区已有 17 项未提交改动,包含 `public/app.js`、`public/style.css`、`public/index.html` 和回归脚本;本任务必须保留这些改动。
- 当前 Trellis 指针属于无关任务 `07-11-subagent-card-metadata`;本次已创建独立任务 `07-17-gilded-wasteland-theme`。
- 主题入口集中在 `public/app.js`:`normalizeTheme`、`applyTheme`、`buildThemePickerHtml` 和 `mountThemePicker`;选择值写入 `document.documentElement.dataset.theme` 与 `localStorage['cc-web-theme']`。
- 当前 Warframe 主题 ID 为 `gilded`,注册项带 `hidden: true`;选择器过滤隐藏主题,`public/index.html` 还会在首屏前把已存 `gilded` 迁移到 `washi`。
- 现有回归函数 `assertFrontendGildedThemeContract` 明确断言 Warframe 隐藏和启动迁移,新增主题时需要改成“保留并展示 gilded + 独立 wasteland”的新契约。
- 计划审查第一次未通过,原因是主题 ID/迁移边界、附件精确路径和相关脏改动审计没有写清;计划已补齐并将重新审查。
- 第二次计划审查已通过;审查建议为资产 manifest 记录裁剪框,并在收口执行 `git diff --check`、主题专项回归和全量回归。
- 现有 Warframe 实现全部位于未提交改动中:`app.js` 新增 `gilded` 注册和四图欢迎区;`index.html` 新增启动迁移;`style.css` 新增约 1400 行 Warframe 样式;`regression.js` 新增资产哈希与主题契约断言。
- `public/app.js` 同时存在与本主题无关的子代理卡片改动;本任务只能修改 `THEME_OPTIONS`/主题逻辑附近,避免触碰后半文件。
- 相关文件审计基线 SHA-256:`app.js`=`8b320e88…`、`index.html`=`126c353c…`、`style.css`=`89e5f4a0…`、`regression.js`=`3d2c2db…`。本任务结束时以精确 diff 区块复核,而不是按整文件还原。
- 已有 Warframe 资产位于 `public/assets/themes/` 根目录,包含 `gilded-wasteland.png` 和三张 `warframe-*.jpg`;新主题资产将隔离到 `public/assets/themes/wasteland/` 子目录,避免同名覆盖。
- 主题系统是纯前端单源:`THEME_OPTIONS` 驱动设置候选,`applyTheme()` 同步 `html[data-theme]` 与 `localStorage['cc-web-theme']`,因此不需要新增后端接口。
- 新主题使用 body 全画布背景而不复用 `gilded` 的四图 welcome 舞台;桌面背景居中,移动端定位到 `70% 50%` 并加深遮罩。
- 图标板已得到 6 列×6 行卡片边界和 17 个常用 32px 图标 bbox;输出 64×64 透明 PNG,并使用 manifest 记录坐标与用途。
- 具体技术设计已写入 Trellis `info.md`,实现/检查上下文已用两份研究文档和前端规范完成配置。
- 背景已原样落到 `public/assets/themes/wasteland/background.webp`,SHA-256 为 `ee52b136294a7a31181b67e209253fefe7ace8c2b76885e45621484fecb802cb`。
- 17 枚图标均为 64×64 RGBA,具有透明区和非空金色像素;`status.png` 额外保留 714 个绿色有效像素。人工抽检 new-chat/status/send/settings 边缘干净、尖角完整。
- 环境没有 ImageMagick;资产代理使用已存在的 Pillow 10.2.0 完成裁剪、连通域去噪与 0.6px 羽化,未新增依赖。
- UI 已实现:`gilded` 恢复可见、`wasteland` 独立注册,首屏迁移移除,cache bust 更新为 `20260717-wasteland-theme`。
- `style.css` 新增 Wasteland 变量层、230 处共享暗色 selector 纳入和独立组件层;背景直接挂在 body,`.app/.chat-main/.messages` 透明,侧栏与消息使用分层半透明黑铁面板,因此主视觉不会被页面底色完全遮住。
- 六个高频控件已引用真实切图:new chat/search/attachment/send/stop/settings;设置 select 额外使用 dropdown 图标。
- 主线程 diff 审核发现 new chat 会同时显示切图与原生 `+`,已退回 UI 代理做最小 span 隔离修复。
- 实施期间现有未提交 Warframe welcome 从“四图舞台”变化为单图 `.warframe-hero`,说明相关并行任务仍在写共享文件;本任务不回退该变化,回归代理必须以当前 DOM 为准并避免恢复旧四图断言。
- new chat 原生 `+` 已包装成仅在 wasteland 隐藏的装饰 span,其他主题仍显示原符号,新主题只显示切图图标。
- 用户反馈文字偏暗后,Wasteland 主/次/弱文字分别提亮为 `#fff7e6`、`#eadfc9`、`#c9bda6`,链接为 `#e2c58d`,行内代码为 `#f6ead2`;在助手/用户/通用面板上的最低对比度仍为 9.49:1。
- 一次 `rg` 因模式以 `--target` 开头被当作选项而失败;后续同类命令必须用 `rg --` 结束参数解析。
- 外部并行会话一度回写 `gilded.hidden`、启动迁移和旧 cache bust;主线程通过运行会话列表定位到另一个 `定制暗金荒野主题` 会话,并在其写入后精确恢复三处契约,没有覆盖其 Warframe 配色/文案/hero。
- `assertFrontendGildedThemeContract` 已按当前单图 `.warframe-hero` 实现收敛;新 `assertFrontendWastelandThemeContract` 覆盖 17 项 manifest/PNG、背景 hash、双主题可见、无迁移、共享暗色 selector、六个真实控件图标、响应式、reduced-motion、cache bust 和纯白主文字对比度。
- `gilded-theme` 与 `wasteland-theme` 两个专项回归均已通过;下一阶段由主线程执行全量回归和静态复核。
- 外部会话在 17:35:19 第三次回写 `app.js`/`index.html`:恢复 `gilded hidden`、`gilded -> washi` 和旧 cache bust;`style.css` 的 `--text-primary: #fff` 与完整 Wasteland 样式仍完好。
- 为避免继续互相覆盖,回归代理按约定停止;当前需要用户先停止另一个运行中的 `定制暗金荒野主题` 会话,之后再补回三处小改动并重新执行专项/全量回归。
- 用户明确否定当前视觉:边框、图标和整体质感均不像参考图;此前“阶段 4 完成”的结论失效,必须以截图对照为准返工。
- 失败根因不是缺少更多装饰,而是层级方向错了:当前给过多普通控件统一金边/切角/渐变,背景遮罩过重,64×64 彩色图标直接缩小后显得糊且杂。
- 当前环境无 Playwright/Chromium,但有 `/usr/bin/firefox`;可创建仅用于规划验收的本地 mock HTML,用 headless Firefox 生成 1672×941 截图,不需要安装依赖或重启 ccweb。
- 新准则:面板卡片化减少、边框 1px 暗铜、切角只用于三类核心框架、图标使用用户切图 alpha mask 统一旧金材质,人物右侧清晰完整。
- 已建立 `.planning/gilded-wasteland-theme/visual-preview.html` 作为可复用的桌面结构 mock;但 Firefox headless 两种 profile 均无法生成截图,第二次明确报 `RenderCompositorSWGL failed mapping default framebuffer`,且系统无 Xvfb。
- 不为截图安装浏览器/驱动;后续视觉判断使用用户参考图的几何比例、现有 CSS 静态审计、图标原图抽检和用户在实时页面的反馈闭环。
- 用户补充了当前页与设计稿的五张一对一局部对比图,确认具体错误:新会话误用十字星、附件误加方框、输入区外框断裂且缺少中心徽记、侧栏框线不连续、所有图标误用统一 32px 来源。
- 已改为直接从完整设计稿提取透明蚀刻框:`frames/new-chat.png`、`search.png`、`project.png`、`active-session.png`、`composer.png`、`tool-call.png`;其中 composer 保留设计稿底部中心徽记。
- 已从图标板重新按 16/24px 逻辑档提取 `icons/ui/`:search/dropdown/theme/ai/status/attachment/send/stop/settings/user/terminal,不再复用统一 64px 大图缩小。
- Wasteland 尾部新增高保真覆盖层:新会话恢复简单 `+`,附件无按钮框,右侧操作按钮保留独立切角框;侧栏宽 316px、顶栏 57px、输入框 806×74px;消息回到 8px 轻圆角薄线框,背景遮罩显著减轻。
- CSS cache bust 已更新为 `20260717-wasteland-hifi`;本地服务已验证 stylesheet、composer frame、attachment icon 均返回 HTTP 200。
- 用户刷新后指出输入框存在明显错位与虚边;实际根因是旧 `.input-wrapper:focus-within` 高优先级 3px 光圈仍生效,同时 composer 素材保留了设计稿外/内两层顶线。
- 已对 focus/drag/note 三种输入状态强制清除 border/outline/box-shadow,并把 composer 素材左右对称收紧 5px、上移保留主蚀刻线;中心徽记量测仍为资产几何中心 `x=403/807`,未做错误偏移。
- CSS cache bust 已推进为 `20260717-wasteland-hifi-2`,新 CSS 与 composer 资产均通过本地 HTTP 200 校验。
- 新会话 `+` 消失是选择器错配:DOM 使用 `.new-chat-glyph`,高保真覆盖却写成不存在的 `.new-chat-native-icon`,同时旧高优先级规则仍将真实 span 隐藏。
- 顶部下拉图标切图在小尺寸下近乎透明,改用框内 CSS 三角形更稳定;会话 `…` 偏移与菜单不显示分别来自普通 flex 挤压和 `.session-item { overflow: hidden; }` 裁切,现已固定右侧定位并仅在菜单打开时解除裁切。
- 消息头像重叠不是重复消息节点:`createMsgElement()` 内联渲染了 `/codex.png`,高保真 Wasteland 又给同一 `.msg-avatar` 设置了 `ui/ai.png` 背景;主题层必须显式隐藏内部 `img/svg`。
- 输入框错层来自非等比缩放:真实内容框高度 74px,但 `::after` 固定显示 807×101 整框;主内容宽缩到约 650px 时只有横向被压缩,底部徽记仍按 101px 高度绘制。现已拆为固定框壳和独立徽记两层,分别响应宽高。
- 最新截图底部贯穿整宽的“虚线”不属于 composer 框,而是透明 `.input-area` 继续透出了背景素材底部的暖色横线;输入区需要独立黑铁遮罩,不能完全透明。
- 输入区原生铅笔/队列 SVG 与主题切图混用,材质必然不统一;现统一使用图标板的 chat/loading/send/stop,并复用从设计稿实际按钮裁出的 46px 蚀刻框。
- 框壳、人工底线、独立徽记的三层方案虽然规避非等比拉伸,但引入新的边线叠加和视觉中心误差;最终改为完整 807×101 资产单层等比缩放。源裁区中心徽记原本向右约 8px,已只平移下半部装饰层,中心主体 alpha 重心为 403.7、画布中心为 403.0。
- 右侧停止按钮的“色块”来自 Wasteland 专用棕色渐变叠加 24px stop 图标;现取消实心渐变并回退到透明黑铁底和 20px 细节图标。
- 用户最后圈出的独立边框来自 `.note-mode-btn/.send-btn/.abort-btn::after` 继续加载 `composer-action.png`,不是输入框主框;已彻底禁用该伪元素。图标几何居中仍不等于视觉居中,发送图标原 alpha 重心向右约 1.6px,因此资产生成器新增 composer 图标 alpha 重心校正。
- 24/30px 输出画布不等于有效图形尺寸:30px note 的实际可见区只有 22×20px。最终 note 使用 36px 画布得到 28×24 可见区,send 为 26×24,AI/用户分别达到 31×32 和 32×32,避免小图标在透明画布中显得缩了一圈。
## 待确认
- `THEME_OPTIONS` 完整注册内容及当前未提交差异归属。
- Warframe 主题样式的隔离方式与可共享的暗色完成选择器。
- 当前测试命令与可用的浏览器视觉验收入口。