把项目从「手写 dist/」改成「wallpapers/ 是唯一真相来源,dist/ 由 pnpm build 生成」,
并补上配套的类型、门禁与抓取器。一次提交落地整条管线,因为拆开会留下不能构建的中间态。
- src/:运行时与模拟器源码(TS,strict),编译到 build/ 再拷进各分发
- tools/:build / dev / check-{syntax,paths,dist},以及抓取器与回归门禁 tools/checks/
(.scratch/ 下那批一次性脚本移入 tools/checks/ 并入库为长期门禁)
- wallpapers/:七档壁纸的源数据 + README.md(id/音频/预设的完整规范)
- docs/adr/0005-0008:构建管线与分发拓扑、模拟器契约、自包含 sim、每骨架资源布局
- .gitignore:排除 .scratch/ 的参考资料副本(上游 spine 整仓克隆 ~1.2 GB、
抓取侦查数据 ~680 MB)与调试转储;这些是本地调查材料,补偿会让仓库无法克隆
- 归一化 .gitignore/CONTEXT.md 行尾(工作区 CRLF、索引 LF 造成的整文件假 diff)
同时修掉三档卡住构建的未完工壁纸:
- kv45 的 meta.json 里 id 还是抓取期场景名 scene_main,经 downloader promote 正名为 kv45
- shajin / zhigengniao_juheye 的 meta.json 误用了骨架描述文件(name/spine/animations/pages)、
且都缺 preset.template.json;现按规范重建:骨架沉到 spines/<名>/(spine-ts 按 atlas 所在
目录解析贴图页)、补上元数据与单骨架预设,并清掉 zhigengniao 骨架里指向作者机的绝对路径
- 顺带 promote 已在 sources.yml 里的 kv46(月升之前,与兽共舞)
pnpm check 五道门全绿:10 个分发 / 7 档壁纸 / 141 处引用自包含。
3.5 KiB
13 — 下拉框自绘,以及热更新暴露出的两个调试服 bug
Status: resolved Type: task
需求
把下拉选项框的样式同步一下
上一轮我说过:"官方那个深色高亮当前项的下拉,用 color-scheme: dark 让原生 select 的弹出层走深色就够了……如果你觉得弹出层样式还是差得多,我再换成自绘的。" —— 现在换成自绘了。
为什么必须自绘
原生 <select> 的弹出列表由操作系统绘制,CSS 完全够不着。color-scheme: dark 只能把它整体变暗,
做不出官方那种"当前项高亮 + 悬停高亮"的列表——那需要控制每一行。
自绘之后闭合态与展开态都归自己管:
- 闭合态:
#2a2a2e底、#3a3a40边、当前项文字 + 右侧▼ - 展开态:
#232327底、当前项#3c3c46高亮、悬停#34343a - 键盘 Esc 收起、点外面收起、下方放不下就翻到上方
弹层挂在 documentElement 下(同面板与取色器):挂在面板里会被 paintProps 重画时销毁,
挂在 body 里会被翻转/颜色选项的 transform/filter 波及。
顺带修掉的两个调试服 bug
做这一轮验证时撞出来的,都不是新引入的,是一直都在:
① pnpm dev --with-sim 根本起不来
parseArgs 把 --with-sim 当未知参数拒掉,而 main() 里那段
process.argv.includes("--with-sim") 永远走不到——这个开关一直是死代码。
现在显式放行并写进 HELP。
② 热更新重建会丢掉 --with-sim
初始构建带了 --with-sim,重建那一行没带。于是 pnpm dev --with-sim 在第一次保存后
会被悄悄换成干净构建——产物里的模拟器没了,而没人会想到是"保存"干的。
现在两处共用同一份 buildFlags。
一次差点混过去的空验证
第 ② 条我第一次是这么"验证"的:起调试服、改个 CSS、数一下模拟器还在不在 —— 结果是 4,看起来修好了。
其实调试服因为参数不认识根本没起来(就是 bug ①)。没有重建,当然还是 4。
一个不检查前置条件的验证,等于没有验证。
重写成 tools/checks/verify-dev-flags.mts:第一件事就是 fetch("/") 断言服务活着,不活就直接抛;
第二件事用"调试服已经能取到新 CSS"作为重建完成的判据,而不是干等固定秒数。
并且证明它会红:不带 --with-sim 启动、产物里先放好模拟器,跑同一个脚本 →
✗ --with-sim 在热更新重建后仍然生效 → 4 → 0。红了才说明它真的在测这件事。
验证
tools/checks/verify-panel.mts第 ⑨ 组:点开下拉 → 两个预设都在、当前项恰好一个高亮、 弹层在documentElement下、选完收起、值下发给壁纸(preset=kv37)、按钮文字跟着换tools/checks/verify-dev-flags.mts:见上(含变红验证)- 其余回归全绿:
pnpm check、调试服与浏览器冒烟、热更新、四档自包含包file://、 静态托管预览、发布产物差异仅来自use_custom_audio、6 组渲染与重构前逐像素相同
出图:tools/checks/shot-panel.mts 现在出三张——面板、取色器、下拉展开。
一处没查清的抖动
同一批里 verify-panel 曾失败过一次(连续跑两次 smoke 之后),单独跑与再跑两次都通过,
错误输出被 Select-Object -Last 1 截掉了,没留下现场。不确定是测试自身的问题还是环境抖动,
记在这里而不是当作没发生。再出现的话先保留完整输出。