147 lines
4.5 KiB
Markdown
147 lines
4.5 KiB
Markdown
# CM95 PBF Production v1.4.3:生产收口与失败恢复
|
||
|
||
## 1. 背景
|
||
|
||
v1.4.2 首轮 Dataset-1 / z0–z12 production:
|
||
|
||
- 计划任务:20,115
|
||
- PASS:19,913
|
||
- FAILED:202
|
||
- FAILED 分类:
|
||
- MVT encoder dropped:171 tile
|
||
- hard-gate unmapped:31 tile
|
||
- hard-gate 缺口全部为 `FSHHAV AREA`,共 51 条源 Feature,失败报告中累计命中 73 次 tile-local 记录。
|
||
|
||
Encoder dropped 主要分布:
|
||
|
||
- `depth_contour`:313
|
||
- `baseline_line`:85
|
||
- `seabed_line`:9
|
||
- `baseline_area`:5
|
||
- `navigation_hazard_area`:1
|
||
- `navigation_hazard_outline`:1
|
||
|
||
全 Dataset Mapping Gap 审计还发现:
|
||
|
||
- source variants:191
|
||
- gap variants:141
|
||
- gap object classes:117
|
||
- gap feature rows:81,443
|
||
- no exact rule rows:52,879
|
||
- explicit/status gap rows:28,564
|
||
- inherited hard-gate rows:51(全部 `FSHHAV AREA`)
|
||
|
||
因此 v1.4.3 不允许把 5 万多条未知语义对象粗暴映射到错误 NavSea 图层。
|
||
|
||
## 2. v1.4.3 决策
|
||
|
||
### 2.1 FSHHAV AREA 正式进入 delivery
|
||
|
||
`FSHHAV` Dictionary 含义为 Fish haven。
|
||
|
||
Dataset-1 实际出现 AREA variant,现映射为:
|
||
|
||
- main:`anchor_caution_hazard_area`
|
||
- outline:`anchor_caution_hazard_outline`
|
||
- point-on-surface:`anchor_caution_hazard_point`
|
||
- canonical:`fish_reef`
|
||
- safety:`hard_gate`
|
||
- icon:`reef_fish`
|
||
- fill:`pattern_fill_fish_reef`
|
||
|
||
AREA、outline、point-on-surface 三者都是同一源对象的不同渲染产物;不得把 AREA 静默降为 unmapped。
|
||
|
||
### 2.2 全量 gap 显式分类,但不伪造语义
|
||
|
||
新增:
|
||
|
||
`config/mappings/cm95_gap_disposition_v1.yaml`
|
||
|
||
141 个已观察 gap variant 全部有明确 disposition:
|
||
|
||
- 1 variant / 51 rows:`DELIVERY_MAPPED_V1_4_3`(FSHHAV AREA)
|
||
- 28 variants / 28,564 rows:已有显式非 delivery mapping/status
|
||
- 112 variants / 52,828 rows:`ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW`
|
||
|
||
后者不是“已经完成映射”,而是明确的语义 backlog;正式后续阶段必须按对象类别逐组审查,不得 generic 映射冒充正确航海语义。
|
||
|
||
## 3. MVT 量化策略
|
||
|
||
v1.3 只保护了 `clearance_limit_line` 的单一退化场景。v1.4.3 改为统一编码前预量化:
|
||
|
||
1. 使用当前 tile `quantize_bounds + extent` 计算整数坐标;
|
||
2. Line 必须至少有两个不同量化坐标;
|
||
3. Polygon exterior 必须至少有三个不同量化点且量化面积非零;
|
||
4. 不满足条件的 tile-local 几何,不再送入 encoder。
|
||
|
||
处理分两类:
|
||
|
||
### 3.1 对象存在性必须保留
|
||
|
||
以下图层退化时转换到现有 point layer:
|
||
|
||
- `clearance_limit_line` → `clearance_limit_point`
|
||
- `navigation_hazard_area/outline` → `navigation_hazard_point`
|
||
- `anchor_caution_hazard_area/outline` → `anchor_caution_hazard_point`
|
||
|
||
报告记入 `quantization_fallbacks`。
|
||
|
||
### 3.2 线性参考/普通面片
|
||
|
||
例如:
|
||
|
||
- `depth_contour`
|
||
- `baseline_line`
|
||
- `seabed_line`
|
||
- `baseline_area`
|
||
|
||
若当前 tile 内量化后已经没有可绘制二维/一维形状,则明确记入 `quantization_omissions` 后省略当前 tile-local 片段。
|
||
|
||
这不等于删除源对象;源对象、FID identity 和其它 tile/zoom 中可绘制片段不变。禁止把等深线等线性语义伪造成点。
|
||
|
||
Encoder 后仍做真实二进制 decode 对账;`encoder_dropped_features` 必须继续为 0。
|
||
|
||
## 4. Release 迁移
|
||
|
||
v1.4.3 mapping SHA 与 v1.4.2 不同,因此旧 plan 不得继续运行。
|
||
|
||
新增:
|
||
|
||
`cm95pbf migrate-production-release`
|
||
|
||
流程:
|
||
|
||
1. 用 v1.4.3 mapping 创建新 plan / 新 release_id;
|
||
2. 读取旧 release ledger;
|
||
3. 仅复用旧 `PASS`;
|
||
4. 旧 FAILED/PENDING/RUNNING 一律在新 ledger 中重新 PENDING;
|
||
5. 若旧 PASS report 命中新 mapping 声明的 `delivery_output_changed_object_classes`,也不复用;
|
||
6. 旧 PASS 必须同时满足:
|
||
- hard_gate_unmapped = 0
|
||
- encoder_dropped_features = 0
|
||
- planned == output
|
||
- PBF/report 文件完整
|
||
7. 通过的 PBF/report 默认用 hardlink 复用,失败则自动 copy fallback。
|
||
|
||
v1.4.3 的 delivery output changed class 只有:
|
||
|
||
`FSHHAV`
|
||
|
||
因为旧版所有出现 FSHHAV AREA 的 tile 都已被 hard-gate 阻断,正常预期是复用约 19,913 PASS,只重建约 202 tile。
|
||
|
||
## 5. Release 状态语义
|
||
|
||
`finalize-production` 现在同时输出:
|
||
|
||
- production integrity `status`
|
||
- `semantic_completeness`
|
||
- `semantic_backlog`
|
||
- `quantization_fallbacks`
|
||
- `quantization_omissions`
|
||
|
||
v1.4.3 即使 production integrity PASS,只要 112 个 pending semantic variant 尚未处理:
|
||
|
||
`semantic_completeness = PENDING_REVIEW`
|
||
|
||
因此不得把 v1.4.3 称为“全国 CM95 语义全部完成”;它是生产生成链/失败恢复/安全硬门收口版。
|