# 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 语义全部完成”;它是生产生成链/失败恢复/安全硬门收口版。