2.2 KiB
2.2 KiB
ZIP 道路包安全导入与纯消费
Goal
让 osmWorkflow 配置、校验、解压并消费 road-compiler Web 导出的 ZIP 道路包,移除 compiler runtime 耦合。
Requirements
- 区域配置以
nativeRoadPackage指向 ZIP,路径相对于该区域配置文件;native provider 不再 接受 compiler options、overrides 或输出目录作为输入。 - 宿主在任何 Blender / Cesium 副作用前,验证 ZIP 文件、条目数量/大小、root-flat 文件路径、
无重复路径、无符号链接、无绝对路径与
..路径。 - 仅将已验证的文件解压至
<area>/_pipeline/native-road-import/<zip-sha256>/;解压目录是宿主 私有缓存,绝不写回 ZIP 或 road-compiler 导出目录。 - 共享 importer 为 Blender、preview traffic、diagnose/check 和 stage manifest 提供同一包路径与 文件记录;不能让下游自行按字符串拼接另一份 native-road 目录。
- 移除 compiler package、CLI wrapper、compile script、编译器输入配置、以及只覆盖旧调用链的测试。
Acceptance Criteria
- 两个有效区域均从 ZIP 完成
blender,cesium,package,preview,构建日志没有 compiler CLI。 - 缺 ZIP、错误 ZIP、nested root、path traversal、symbolic link、错误 contract、错误 areaId 和 manifest/source 不匹配均在启动 Blender 前失败。
- stage manifest、
diagnose:area与check:area记录 ZIP hash 和已验证的导入目录;ZIP 修改后会被判 stale。 package.json、lockfile、生产脚本与宿主测试不再引用@osm-asset/road-compiler。- Blender digest 对 P3 control 基线一致;legacy
osm2streets路径的单元测试不变。
Out of Scope
- p5a 的 ZIP 生成与 Web 下载实现。
- ZIP 远程下载、解密、签名验证或制品库管理。
- 改道路内容、材质或 legacy QGIS 行为。
Key Decisions
- ZIP 是只读输入;宿主缓存的生命周期和目录 ownership 完全属于
_pipeline/。 - ZIP 解码由明确声明的 Node ZIP 库完成,而不是依赖系统
unzip;这使路径/符号链接校验可控并 可在单元测试中覆盖。 - 只有
native-road-package/v1.1可被导入;契约升级必须另开兼容任务。