# CM95 S-52 Production Pipeline v2 ## 1. 目标 Production Pipeline v2 将已经通过单 Tile 验证的 S-52 runtime PBF 正式接入现有 CM95 生产编排层,并增加可审计 AOI 计划能力。 核心要求是:同一个 release identity 不允许混入不同 S-52 Lookup、不同 mariner mode 或不同 AOI 的 Tile。 ## 2. Production Plan v2 新计划 schema: ```text navsea.cm95.production-plan/v2 ``` Pipeline 版本: ```text cm95pbf-production/2.0-s52-aoi ``` Plan immutable hash 现在除 Dataset、mapping、policy、FID manifest、Builder Contract、jobs 外,还冻结: - S-52 是否启用; - S-52 Lookup SHA256; - Point Table; - Boundary Table; - `runtime/reference` mariner mode; - AOI name; - AOI WGS84 bbox。 S-52 Lookup 路径本身不参与 identity,内容 SHA256 才参与 identity;同内容换路径不会制造新 release。 ## 3. AOI 枚举 `plan-production` 新增: ```text --aoi-name --aoi-bbox west,south,east,north ``` AOI 在 Web Mercator 中与 Dataset coverage 几何相交并裁剪后再枚举 XYZ job。这样不是简单按 Tile 中心筛选,边界 coverage 也不会被漏掉。 Plan `source_stats` 同时记录 AOI 裁剪前后的 coverage piece 数量。 ## 4. S-52 生产参数 `plan-production` 新增: ```text --s52-lookups --s52-point-table Simplified|Paper --s52-boundary-table Plain|Symbolized --s52-mariner-mode runtime|reference ``` `build-production` 不再从命令行临时接收这些值,而是只能读取冻结 plan,随后传给 `Cm95TileBuilder`。 Build 启动前重新校验 Lookup 文件存在且 SHA256 与 plan 一致;文件发生变化时 fail-closed。 ## 5. Runtime release gate `finalize-production` 在 S-52 runtime plan 下增加 release 级 runtime contract gate。 它会解码所有输出 PBF,并检查: - `s52_mariner_dependent` 与 `s52_runtime_csp` 一致; - DEPARE 存在 `depth_min_m`,且没有静态 `s52_area_color` 泄漏; - DEPCNT 存在 `contour_depth_m`; - SOUNDG 存在 `s52_sounding_depth_m`; - OBSTRN/WRECKS 存在 `s52_hazard_depth_m`; - 不允许 `s52_is_safety_contour`、`s52_isolated_danger`、`s52_display_base_promoted` 等动态最终状态泄漏。 失败会把整个 release 标记为 FAIL。 ## 6. Style contract 过渡 当前旧 NavSea semantic style/sprite contract 不是 S-52 runtime Adapter 的最终 contract。 因此 CLI 新增: ```text --skip-style-contract ``` 它只跳过旧 style/sprite 审计,不跳过 PBF 计数、FID、hard gate、encoder、名称冲突和 S-52 runtime contract。待 NavSea `S52RuntimePresentationAdapter` 完成后,再接入正式 S-52 style/runtime contract。 ## 7. 兼容性 Loader 继续接受历史 `production-plan/v1`,但新建 plan 一律生成 v2。 旧 release 若没有与新 plan 完全一致的 S-52 production contract,不允许直接通过 `migrate-production-release` 复用 Tile。 ## 8. 九州首次运行 本次 AOI: ```text name = kyushu-main-nearby-v1 bbox = 128.0,29.5,132.5,34.8 zooms = 0-12 profile = delivery point_table = Paper boundary_table = Plain mariner_mode = runtime ``` 该范围用于本轮工程验证,覆盖九州本岛、对马、五岛、种子岛/屋久岛及近海,不作为日本行政区边界定义。