Files
SpineWallpaper/.scratch/build-pipeline/issues/16-directory-cleanup.md
T
Shuery 3f11426964 feat: TS 构建管线、Spine 抓取器与 wallpapers/ 唯一真相来源
把项目从「手写 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 处引用自包含。
2026-10-02 01:27:02 +08:00

72 lines
3.3 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.
# 16 — 项目目录整理
Status: resolved
Type: task
## 需求
> 整理一下当前的项目目录,该删的删,该挪得挪
## 删了什么
| 删掉的 | 大小 | 理由 |
| --- | --- | --- |
| `tools/.cache/` | 471 MB | Edge CDP profile 缓存,每次跑对拍都会重建 |
| `tools/shots/*`(留 `baseline-pre-refactor`) | 457 MB | 历史对拍截图,唯一还在用的是那份重构前基线 |
| `.scratch/dist-baseline/` | 96.9 MB | `.gitignore` 里写明"验证完即删"的临时判据 |
| `.scratch/sim-failed/` | 51.8 MB | `assertParses` 失败时的模块转储 |
| `.scratch/fileproto/` | 38.0 MB | file:// 协议探针产物 |
| `.scratch/sim-scripts/` | 15.2 MB | 从自包含页抽出的内联脚本 |
| `.scratch/timing/`、`.scratch/probe/` | 2.7 MB | 探针产物 |
| `.scratch/tmp.txt` | — | 临时文件 |
| `.scratch/compare-presets.mts` | — | 重构等价性一次性对拍,基线已删 |
| `tools/ascii.mjs`、`frame.mjs`、`subject.mjs` | — | 零引用(且 git 里有,可找回) |
| `wallpapers/audios/` | 空 | 0 条目、无代码引用 |
释放约 **1.11 GB**(1870 MB → 737 MB)。注意 `tools/.cache` 会在下次对拍时重新长出来——
这正说明它是纯缓存。
## 挪了什么
- `wallpaper-source.txt`(根目录)→ `wallpapers/sources.txt`。它是壁纸的**来源 URL 清单**,
放在根目录是散落的,归到它所描述的数据旁边。
- 已发布基线从 `.scratch/dist-baseline/project.json`(96.9 MB 目录里的一个小文件)
→ `.scratch/published-project.json`(3895 字节)。`diff-project.mts` 跟着改。
## 没删什么(以及为什么)
- `masters/`(75 MB):`.gitignore` 写明"无损音频母带:只在本地留存"。
- `tools/shots/baseline-pre-refactor/`(30 MB):**不能重新生成**(是重构前拍的),
而 `verify-visual-equivalence.mts` 靠它判"渲染有没有被改坏"。
- `dist/`(388.8 MB):可再生产物,但调试服正在用它,删了要重建才有得看。
- `tools/{capture,cdp,diff,serve,shot,compare,heatmap,rawdiff,atlas-pages}.mjs`:都有引用。
## 顺手修掉一个"空验证"
清理时发现 `verify-visual-equivalence.mts` 有个真问题:
```js
if (!existsSync(a) || !existsSync(b)) { console.log("缺少文件,跳过"); continue }
...
failed === 0 ? `视觉等价:${checked} 组全部与重构前逐像素相同`
```
我删掉了它的"当前截图"目录之后,它把 **0 组比对报成了"0 组全部逐像素相同"**——一句绿色的空话。
> 一个不检查前置条件的验证等于没有验证。
改成:缺文件就**直接失败**并打印出该跑哪两条命令;结尾再兜一道 `checked !== combos.length`。
**证明它会红**:删掉截图后跑,得到
`✗ 缺少 6 个截图,无法比对:…` 与明确的补救命令;补拍之后再跑,得到真正的
`视觉等价:6 组全部与重构前逐像素相同`。
## 验证
整理后全量回归,全绿:
- `pnpm check`:四个分发、`check:dist` / `check:syntax` / `check:paths` 全过
- 调试服冒烟、浏览器冒烟、面板还原度(10 组)、热更新、开发模式构建开关
- 四档自包含包 `file://`、静态托管预览、sim 门禁、内联守卫、模块改写
- `diff-project`(用精简后的基线)、`verify-visual-equivalence`(6 组逐像素相同)