Files
CM95/docs/报告/CM95_S52_OpenCPN渲染流程对照审计报告_v4.md
2026-09-21 09:28:08 +08:00

3.1 KiB
Raw Blame History

CM95 S-52 OpenCPN 渲染流程对照审计报告 v4

日期:2026-09-21。固定 OpenCPN baseline:f7211b4e1874c453e37a7f190aa191c55a25c32e。

1. 结论

RC-039 修复后,206 条 branch 重新判定为:

PASS FAIL NOT_PROVEN 合计
121 0 85 206

Branch 层面的确认 FAIL 已清零。Target Portrayal 仍为 FAIL,原因不是 branch FAIL,而是 Gate A 仍 FAIL,Gate F/G/I 仍为 NOT_PROVEN。

2. RC-039 正确根因

v3 residual 将问题解释为“DEPCNT02 应先把 DRVAL2<=DRVAL1 规范化为 DRVAL1+0.01”,该解释不符合固定 OpenCPN 源码。

固定源码真实控制流是:当 DRVAL1 <= safety_contour 时,只检查 DRVAL2 >= safety_contour;只有 DRVAL1 > safety_contour 时,才进入 outer else 并比较 chart next-safe-contour。

CM95 原实现把这个嵌套 if/else 压平成 if/elif,导致 DRVAL1=2, DRVAL2=2, safety=3, chart_next=2 被错误提升为 safety contour。

修复后 Python 与 Web runtime witness 均 PASS。

3. Release 影响

完整扫描当前九州 v5 的 5064 个 PBF,s52_runtime_csp=DEPCNT02 且 s52_source_object_class=DEPARE 的 feature 数为 0。因此当前 release 没有实际受影响对象,本次无需重建九州 release;代码修复保证未来出现该分支时行为与 OpenCPN 一致。

4. Gate A-I

Gate 状态 结论
A OPENCPN_FLOW_EQUIVALENCE FAIL $AREAS II25→BACKGROUND normalization remains absent; lookup '?' scoring/numeric/fallback semantics are not fully identical to the fixed parser.
B CSP_BRANCH_EQUIVALENCE PASS All 206 branch rows have no remaining confirmed CSP branch mismatch after the RC-039 DEPCNT control-flow fix.
C NESTED_CSP_CALL_GRAPH PASS Phase A/C witnesses prove ordered OBSTRN/WRECKS quality, name and sounding suffix expansion.
D INSTRUCTION_SEQUENCE_EQUIVALENCE PASS Versioned mixed-opcode rule IR preserves lookup+CSP order and structured TX operands.
E RUNTIME_OPCODE_COVERAGE PASS Generic executor and specialized SOUNDG/LIGHTS/CA paths execute the required ordered opcodes; missing DANGER53 does not discard the suffix.
F REAL_DATA_BRANCH_COVERAGE NOT_PROVEN The v5 release is complete, but delivery fields do not uniquely reconstruct every source predicate/association/view state.
G RESOURCE_DEPENDENCY_EQUIVALENCE NOT_PROVEN The local resource contract passes, but the fixed OpenCPN snapshot contains no independent chartsymbols.xml; DANGER53/LOWACC03 equivalence remains unprovable.
H MARINER_DEPENDENCY_EQUIVALENCE PASS Mariner-dependent depth/height/boundary/category/SCAMIN paths are covered by phase witnesses plus the corrected DEPCNT DEPARE safety-contour control flow.
I RENDER_ORDER_EQUIVALENCE NOT_PROVEN OP no-op and multi-LS execution are corrected; cross-object/global pass interleaving is still outside the available snapshot and witnesses.

5. 交付

  • 机器审计:build/audits/cm95_s52_opencpn_code_first_equivalence_v4.json
  • RC-039 证据:build/audits/cm95_s52_rc039_depcnt_control_flow_fix_v1.json
  • 代码 commit:1dbe1fde07ed64b39893de7d7e6ec5ce77cab871