Files
osmWorkflow/.trellis/tasks/08-26-rc-p5b-zip-import/prd.md

2.2 KiB
Raw Blame History

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:areacheck: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 可被导入;契约升级必须另开兼容任务。