3.1 KiB
3.1 KiB
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