feat: add S-52 production pipeline v2
This commit is contained in:
110
docs/CM95_S52_ProductionPipeline_v2.md
Normal file
110
docs/CM95_S52_ProductionPipeline_v2.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# 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
|
||||
```
|
||||
|
||||
该范围用于本轮工程验证,覆盖九州本岛、对马、五岛、种子岛/屋久岛及近海,不作为日本行政区边界定义。
|
||||
57
docs/报告/CM95_S52_ProductionPipelineV2与九州运行报告_v1.md
Normal file
57
docs/报告/CM95_S52_ProductionPipelineV2与九州运行报告_v1.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# CM95 S-52 Production Pipeline v2 与九州运行报告 v1
|
||||
|
||||
日期:2026-09-18
|
||||
|
||||
## Pipeline 升级
|
||||
|
||||
已完成 Production Plan v2、S-52 immutable contract、AOI coverage 裁剪、build 参数接线、Lookup SHA fail-closed、release runtime contract gate,以及旧 style contract 的显式过渡开关。
|
||||
|
||||
## 福冈湾端到端 Smoke
|
||||
|
||||
AOI:`130.3418,33.5780,130.4297,33.6512`,z12。
|
||||
|
||||
Plan 枚举 4 个 Tile,`build-production --workers 4` 结果:
|
||||
|
||||
- PASS:4/4
|
||||
- PBF:4
|
||||
- output features:3235
|
||||
- 主 Tile `12/3531/1641`:3164 features / 22 layers
|
||||
|
||||
`finalize-production --skip-style-contract`:PASS。
|
||||
|
||||
S-52 runtime gate:
|
||||
|
||||
- `mariner_dependent_count = 2261`
|
||||
- `DEPARE01 = 173`
|
||||
- `DEPCNT02 = 188`
|
||||
- `OBSTRN04 = 19`
|
||||
- `SOUNDG02 = 1881`
|
||||
- `dynamic_final_leaks = {}`
|
||||
- `failure_count = 0`
|
||||
|
||||
planned/report/decoded feature count 均为 3235。
|
||||
|
||||
## 九州 Production Plan
|
||||
|
||||
工程 AOI:`128.0,29.5,132.5,34.8`,名称 `kyushu-main-nearby-v1`。
|
||||
|
||||
Plan:
|
||||
|
||||
- schema:`navsea.cm95.production-plan/v2`
|
||||
- pipeline:`cm95pbf-production/2.0-s52-aoi`
|
||||
- release:`cm95-d1-62a85bd40d3a-bbaaeafee1b4`
|
||||
- jobs:1109
|
||||
- S-52 mariner mode:runtime
|
||||
- Lookup SHA256:`f63cbc0d3c9317b1873c0b0c470a5e7371d1b6d8d58393da660f70b837a52eb7`
|
||||
|
||||
各级 job 数:z5=2、z6=4、z7=12、z8=24、z9=70、z10=197、z11=503、z12=297。z0-z4 在该 AOI 内没有对应 1:20M coverage,因此不制造空 job。
|
||||
|
||||
## 当前运行
|
||||
|
||||
九州 `build-production` 已使用 4 workers、最多 3 attempts 启动。
|
||||
|
||||
日志:`build/logs/cm95_s52_kyushu_pipeline_v2.log`
|
||||
|
||||
Release root:`build/releases-s52-v2/cm95-d1-62a85bd40d3a-bbaaeafee1b4`
|
||||
|
||||
初始 ledger:1109 jobs,4 RUNNING,1105 PENDING。后续以 `status-production` 和最终 `finalize-production` 为权威。
|
||||
Reference in New Issue
Block a user