把项目从「手写 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.1 KiB
21 — 资源布局迁移(ADR 0008)的漏网之鱼
Status: resolved Type: bug
现象
ADR 0008 把 wallpapers/ 的资源从按类型分(effects/ + images/)改成按骨架分
(spines/<骨架名>/ + scene/)。迁移完成后,四处没跟上:
wallpapers/hsr/kv37/spines/kv37/kv37.json与wallpapers/hsr/xilian/spines/xilian/xilian.json里作者的目录字段还指着旧布局:"images": "../images/"(kv37 另有一处"audio": "../audios")。 ys 的 16 具骨架(下载器promote.py产出)已经是空串 / 没有该键——只有 hsr 这两具手改过的存量。wallpapers/README.md的目录树(第 17-34 行)与第六节是新布局,但第五节的 preset 示例 (单骨架与场景各一处)和第七节「加一档新壁纸」第 4 步还写着./images/、./effects/。 另外「加一个新游戏」还漏了上一轮才变成必填的title。- 代码注释里的旧目录举例:
tools/lib/bundle.ts(4 处)、tools/lib/generate.ts的assetRelIn注释、src/runtime/index.ts的基准说明。 - ADR 0001 第 7 行与 ADR 0005 第 43 行仍断言"三层同名目录不变"——被 ADR 0008 取代后, 没有任何地方声明这次取代。
影响
images / audio 这两个字段今天的运行时并不读:播放器调的是 loadTextureAtlas(config.atlasUrl),
单参 ⇒ pathPrefix 为空,贴图页按 atlas 所在目录解析;skeleton.images 只进 skeletonData.imagesPath。
所以这不是渲染故障,而是数据与规范不一致;真正的危险是以后有人用上共享贴图或事件音,
它会静默指向一个不存在的路径。文档与注释那两半则是纯粹的误导。
改动
| 文件 | 改动 |
|---|---|
wallpapers/hsr/{kv37,xilian}/spines/*/*.json |
images / audio 归一化成空串 |
wallpapers/README.md |
第五、七节示例改新布局;第六节补"骨架 json 作者目录字段留空串"规则;「加新游戏」补 title |
tools/lib/bundle.ts、tools/lib/generate.ts、src/runtime/index.ts |
注释里的旧目录举例更新 |
docs/adr/0001、docs/adr/0005 |
就地标注"已被 ADR 0008 取代"(沿用 ADR 0002 的删除线惯例) |
docs/adr/0008 |
顶部补"取代 ADR 0001 第 7 行 / ADR 0005 第 43 行" |
验证
pnpm build 六个分发全过;pnpm check 全绿(含 check-collection-copy);
dist/releases 里 ../images/ 零命中——旧前缀没有跟着产物上传
(../audios/、../../audios/ 在合集里命中是设计如此:合集 preset.js 在下一层,音频在分发根,见 ADR 0005)。
顺带发现(本次没动)
wallpapers/ys/nico-tea/spines/<骨架名>/meta.json 是下载器写的逐骨架来源记录
(spine 版本 / 动画 / 皮肤 / 贴图页 / 来源 URL,见 tools/downloader/README.md)。
copyWallpaperAssets 按目录整体搬 spines/,所以这些记录会跟着分发一起上传(hsr 的骨架没有)。
来源 URL 留在发布物里是否合适,是产品决定;要清掉就得让搬移跳过 spines/**/meta.json。