Files
CM95/docs/报告/CM95_S52_静态运行时边界与四项物化修复阶段报告_v1.md
2026-09-18 06:21:54 +08:00

4.8 KiB
Raw Blame History

CM95 S-52 静态运行时边界与四项物化修复阶段报告 v1

日期:2026-09-17

本阶段目标

本阶段先解决 NavSea 用户可自定义水深显示与 CM95 固定 S-52 参考参数之间的架构冲突,再继续修复此前发现的四项 PBF Presentation 物化问题。

已完成的架构调整

新增 runtime / reference 两种 S-52 mariner mode。

runtime 为 NavSea Delivery 默认方向。以下依赖船员水深设置的 CSP 不再按固定 S52MarinerSettings 提前物化最终结果:

  • DEPARE01 / DEPARE02
  • DEPCNT02
  • SOUNDG02
  • OBSTRN04
  • WRECKS02

PBF 改为保留运行时所需事实,包括:

  • depth_min_m / depth_max_m
  • contour_depth_m
  • s52_sounding_depth_m
  • s52_hazard_depth_m
  • hazard 周围水深摘要和相关 S-57 code
  • s52_mariner_dependent
  • s52_runtime_csp
  • 未解析的 s52_csp

reference 继续按固定 S52MarinerSettings 解析,专用于 OpenCPN/S-52 对照。

本次 Delivery 字段与语义发生变化,因此 Builder Contract 已提升为 cm95pbf-builder/0.4.8-s52-mariner-runtime-boundary;后续正式 Production Plan 必须重新生成,旧 Plan 不应复用于本版本全国构建。

四项物化问题修复

1. DisplayBase / Priority side effect

reference 模式下,isolated danger 触发后现在会把:

  • s52_display_category 更新为 Displaybase
  • s52_display_priority 更新为 Hazards

runtime 模式不会写入该动态提升结果。

2. OP priority override

OP(6---) 等 priority override 现在按 S-52 priority code 映射到最终 s52_display_priority,同时保留原始 s52_priority_override 供审计。

3. 多 SY / LS 保真

  • 多 SY:保留 s52_symbol_sequence,新增 s52_symbol_count
  • 多 LS:新增 s52_line_sequence 与 s52_line_count

第一条兼容字段继续保留,避免破坏当前消费者。

4. SY ORIENT

通用 SY(symbol,ORIENT) 现在根据对象属性解析角度,并输出:

  • s52_symbol_rotation_deg
  • s52_symbol_rotation_source
  • s52_symbol_rule_sequence

无法解析角度时 fail-closed,不制造默认方向。

验证结果

定向 Python 验证已通过:

  • compileall:PASS
  • runtime DEPARE/DEPCNT/SOUNDG/WRECKS 不再固化 mariner-dependent 最终结果:PASS
  • reference WRECKS isolated danger → Displaybase / Hazards:PASS
  • runtime WRECKS 不产生 s52_display_base_promoted:PASS
  • OP(6---) → Area Symbol:PASS
  • 双 LS sequence 保留:PASS
  • SY(...,ORIENT) 123.5° 解析:PASS
  • Delivery allowlist 对新增深度事实和 structured symbol rule scalarize:PASS

已知边界

Plain / Symbolized Boundaries 本身也是 mariner presentation 设置,但它涉及 Area Lookup Table 选择,不只是 CSP 输出。当前 v1 没有伪装成已完全 runtime 化;后续需由 S-52 Style Compiler / NavSea Runtime 持有两套边界规则后再解除构建时选择。

福冈湾单 Tile PBF 合同回归

已对 z12/3531/1641 分别生成 Delivery runtime/reference PBF。两种模式均:

  • 输出 Feature:3164
  • 输出 Layer:22
  • hard_gate_unmapped:0

runtime 模式中共有 2260 个 s52_mariner_dependent=1 Feature:

  • SOUNDG02:1881
  • DEPCNT02:188
  • DEPARE01:172
  • OBSTRN04:19

这些 Feature 中 s52_area_color、s52_is_safety_contour、s52_sounding_prefix、s52_sounding_is_shallow、s52_isolated_danger、s52_display_base_promoted 均为 0 个,确认固定 mariner 结果没有泄漏进 runtime PBF。

同时实际进入 runtime Delivery PBF 的事实字段包括:

  • depth_min_m:172
  • depth_max_m:168(其余对象源数据无有效 DRVAL2)
  • contour_depth_m:188
  • s52_sounding_depth_m:1881
  • s52_hazard_depth_m:19
  • 周围水深摘要字段:19

reference 模式中:

  • runtime marker:0
  • s52_is_safety_contour=1:91
  • 多 SOUNDG s52_symbol_count:1684 个 Feature
  • ORIENT rotation 字段:60 个 Feature

本 tile 没有触发 isolated danger / OP override / 多 LS,因此这三项仍由定向规则验证覆盖;reference isolated danger、OP(6---) 和双 LS 的定向验证均已 PASS。

已新增可重复执行的合同审计工具 tools/cm95_s52_runtime_contract_check.py。对本次 runtime/reference 两张 PBF 执行结果为 PASS,dynamic_final_leaks={}。

NavSea Runtime 消费契约

已新增 docs/CM95_S52_NavSea运行时呈现契约_v1.md,冻结 DEPARE、DEPCNT、SOUNDG、hazard 的 Runtime Adapter 输入/输出、设置快照、ContourCatalog、fail-closed 和无需重载 PBF 的更新流程。

下一步

CM95/PBF 侧本阶段可以冻结。下一阶段应在 NavSea 当前实际代码基线上调查现有水深颜色设置、MapLibre style 更新入口和图层 Adapter,再按该契约做最小接入;在 NavSea Runtime 接口验证前,不做全国 PBF 重建。