Files
osmWorkflow/.trellis/tasks/08-26-rc-p5-artifact-consumption/prd.md

5.0 KiB
Raw Blame History

道路包导入与纯消费管线

父任务:.trellis/tasks/08-25-road-compiler-extraction/

本任务是集成 parent导出与导入分别在 road-compiler 和宿主仓库实现,只有两个子任务的 端到端 ZIP 契约都通过后才完成。

Goal

让 road-compiler Web 导出的 native-road-package/v1.1 成为 Blender 管线的唯一 native-road 输入。宿主只校验并消费完整道路包,不再安装、调用或理解道路编译器。

用户价值:人工在 road-compiler Web 编辑后,导出道路包即可稳定交给 Blender / Cesium 构建;编辑成果不再通过发布新的编译器代码版本传播。

Confirmed Facts

  • P3 已使 Blender 通过 manifest.json 消费 layers/*.geojson,并拒绝无效 manifest、 source/file 不一致和未知宿主材质槽。
  • 宿主当前仍通过 scripts/build-area.js 调用 scripts/lib/road-compiler-cli.js;后者安装并 运行 @osm-asset/road-compiler,将 RoadCompilerInput 写入 _pipeline/
  • native Blender 构建当前强制使用 outputs/<area>/native-road/,并在每次构建前重新编译; 宿主还持有 nativeRoad.edgeLinesjunctionTemplates、overrides 和 compiler runtime 路径等编译器内部概念。
  • osm2streets 是显式 legacy/debug provider应保持现有行为。
  • 有效验证区域只有 fengshu-er-roadnantaizi-lake-innovation-valley hanyang-block 不参与。

Requirements

R1 纯产物边界

  • native provider 只接收一个完整 native-road-package/v1.1 目录。
  • 宿主不得依赖 @osm-asset/road-compiler,不得调用 compiler CLI不得写 RoadCompilerInput,不得读取或解释 compiler overrides / junction templates。
  • 宿主以 manifest 作为道路图层事实源Blender 不增加 compiler 专用图层表。

R2 ZIP 导入配置和校验

  • 每个 native 区域配置一个道路包 ZIP 路径;路径相对于区域配置文件解析并可指向工作区外的 road-compiler Web 导出文件。
  • ZIP 根目录必须直接包含 manifest.json 和契约定义的文件;不得接受多余顶层目录、绝对路径、 .. 路径或符号链接。
  • 在启动 Blender 前,宿主将 ZIP 安全解压到其私有 pipeline staging 目录,校验 manifest 契约版本、areaId 和当前区域一致,并记录 ZIP hash 和展开文件记录到 stage manifest。
  • ZIP 永远只读:宿主不复制、覆盖或修改 road-compiler Web 的导出文件;成功或失败后仅清理 自己的临时解压目录。
  • Blender 继续校验 manifest 的图层、source、semantic 角色、材质槽和 splitBy 规则。

R3 后续阶段

  • Cesium、package、preview 和区域诊断从导入道路包读取原生车道中心线、signals 和 其他既有 native-road 输入;不重新编译或复制道路包。
  • build stage manifest 将道路包作为外部输入记录,而非宿主输出。

R4 清理和迁移

  • 删除宿主对 compiler npm 包、CLI 封装和编译脚本的生产依赖。
  • 删除或替换只测试宿主编译行为的测试;保留 package-contract、Blender 和下游消费测试。
  • 更新示例配置、README、pipeline spec 和道路包契约,明确 Web export -> host consume 的单向关系。

Acceptance Criteria

  • AC1 package.json / lockfile 和生产脚本不再引用 @osm-asset/road-compiler 或其 CLI。
  • AC2 两个有效区域均可从配置指定的已导出 ZIP 道路包运行 Blender、Cesium、package 和 preview 构建期间没有 compiler 子进程。
  • AC3 宿主在 Blender 前拒绝缺失包、错误 contract、错误 areaId 和无效 manifest错误说明 指向导入包和契约,而非 compiler 内部。
  • AC4 Blender scene digest 与 P3 control 基线一致native semantic 层仍不生成几何。
  • AC5 stage manifest / diagnose / check area 将导入道路包记录为输入并能识别缺失或变更。
  • AC6 osm2streets legacy provider 行为未变。
  • AC7 文档和配置将人工编辑传播路径表述为 road-compiler Web export -> host consume。

Out of Scope

  • road-compiler Web 的编辑器功能、认证、部署或 UI 改造。
  • 修改道路几何、材质、Blender 建筑/植被/水体渲染。
  • 新的 manifest 破坏性版本或 lane graph IR。
  • 将道路包上传到远程制品库或实现同步服务。

Key Decision

  • Web 导出的是标准 ZIP宿主配置直接指向 ZIP 而不是目录。ZIP 是跨仓库的不可变交付物, 宿主只在私有 staging 目录中解压和消费,因而没有导出目录 ownership 或覆盖歧义。

Subtask Map

子任务 仓库 交付物 依赖
rc-p5a-zip-export road-compiler Web / CLI 可导出的 root-flat native-road-package/v1.1 ZIP
rc-p5b-zip-import osmWorkflow 配置、受控解压、校验和纯消费管线 p5a 的 ZIP fixture

跨任务验收:同一个 ZIP fixture 必须被 p5b 的两个有效区域构建消费;宿主不得保留 compiler npm 或 CLI 耦合。