# T-WIN-023:发布包内不得混入开发/验收工具 - **状态**: done - **依赖**: T-WIN-018(发布包级验收) - **文档**: v1.6 §5.3 / §7.5 - **契约**: 不涉及(打包) ## 缺陷(实测) `export_presets.cfg` 用的是 `export_filter="all_resources"` + `exclude_filter="_scratch/*, tests/*, *.md"`。 `build/` 不在排除列表里 —— 于是**每次新增一个构建/验收脚本,它就被编译进产物**: ``` res://build/probe-release.gdc res://build/integration/probe-integration.gdc res://build/integration/probe-ws.gdc res://build/integration/probe-ws-bad.gdc ← **故意不合规**的服务端夹具 res://build/integration/probe-frame-vectors.gdc res://build/integration/frame-vectors.json ``` 体积代价:`OpenDance.pck` **315,464 B → 145,400 B(排除后)**, 即 **54% 的 pck 是测试夹具**。已发布的 v0.2.3 同样带着这些残留(其中包含 那个刻意违反协议的坏服务端),虽然不影响功能,但既不该进产物,也不该被用户拿到。 ## 修复 1. `export_presets.cfg` 的 `exclude_filter` 增加 `build/*`: ```ini exclude_filter="_scratch/*, tests/*, build/*, *.md" ``` 2. **新增产物级防线**(否则下次加一个 `tools/` 目录又会重演): * `build/integration/list-pck.gd`:用 `--main-pack` 遍历 `res://`,列出全部条目并 标出开发残留(`res://build/`、`res://tests/`、`res://_scratch/`、`res://dist-release/`、`*.md`); 有残留即退出码 1,支持 `--json --out `。 * `build/accept-release.sh` 新增步骤:跑该脚本并断言「无开发残留」,同时打印条目总数。 ## 验证 ``` # 修复前 [pck] ✗ 产物里混入了开发残留 12 项:res://build/…(pck 315,464 B) # 修复后(v0.2.4) ✓ pck 共 58 项,无开发残留(build/ tests/ _scratch/ *.md) (pck 145,400 B;zip 26,631,908 B,仍在 30 MB 上传上限内) ``` `accept-release.sh` 其余步骤(PE 版本资源、pck 启动 180 帧、运行时探针、契约表比对) 在排除 `build/*` 后依旧全绿 —— 验收脚本本身是**从仓库路径**加载探针的, 不依赖包内是否有它们的副本。 ## 顺带确认(不是问题) 排查时特意确认了 pck **没有**把上一次导出的 pck 自嵌套进去 (`file_count=112`、条目里没有 `res://build/windows/OpenDance.pck`): Godot 在扫描资源时排除了自己的导出产物目录内容。这条也由 `list-pck.gd` 长期盯着。