docs: close RC-039 and record Code-First v4
This commit is contained in:
31116
build/audits/cm95_s52_opencpn_code_first_equivalence_v4.json
Normal file
31116
build/audits/cm95_s52_opencpn_code_first_equivalence_v4.json
Normal file
File diff suppressed because it is too large
Load Diff
112
build/audits/cm95_s52_rc039_depcnt_control_flow_fix_v1.json
Normal file
112
build/audits/cm95_s52_rc039_depcnt_control_flow_fix_v1.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"schema": "cm95.s52.rc039-depcnt-control-flow-fix/v1",
|
||||
"date": "2026-09-21",
|
||||
"status": "PASS",
|
||||
"branch_id": "DC-DEC-DEP-LOW",
|
||||
"commit": "1dbe1fde07ed64b39893de7d7e6ec5ce77cab871",
|
||||
"opencpn_behavior": "For LINE DEPARE, when DRVAL1<=safety_contour, only DRVAL2>=safety_contour can set safe=true. The chart next-safe-contour fallback belongs exclusively to the outer else branch where DRVAL1>safety_contour.",
|
||||
"previous_incorrect_audit_explanation": "DRVAL2<=DRVAL1 must be normalized to DRVAL1+0.01 before DEPCNT02 safety selection.",
|
||||
"correct_root_cause": "Nested OpenCPN if/else was flattened into CM95 if/elif, making the next-safe fallback reachable in a branch where OpenCPN never evaluates it.",
|
||||
"python_witness": [
|
||||
{
|
||||
"case": "low-no-cross",
|
||||
"instruction": "LS(SOLD,1,DEPCN)",
|
||||
"safe": false
|
||||
},
|
||||
{
|
||||
"case": "cross-safety",
|
||||
"instruction": "LS(SOLD,2,DEPSC)",
|
||||
"safe": true
|
||||
},
|
||||
{
|
||||
"case": "deep-next-safe",
|
||||
"instruction": "LS(SOLD,2,DEPSC)",
|
||||
"safe": true
|
||||
}
|
||||
],
|
||||
"js_runtime_witness": [
|
||||
{
|
||||
"case": "low-no-cross",
|
||||
"operations": [
|
||||
{
|
||||
"opcode": "LS",
|
||||
"args": [
|
||||
"SOLD",
|
||||
"1",
|
||||
"DEPCN"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"case": "cross-safety",
|
||||
"operations": [
|
||||
{
|
||||
"opcode": "SE",
|
||||
"args": []
|
||||
},
|
||||
{
|
||||
"opcode": "LS",
|
||||
"args": [
|
||||
"SOLD",
|
||||
"2",
|
||||
"DEPSC"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"case": "deep-next-safe",
|
||||
"operations": [
|
||||
{
|
||||
"opcode": "SE",
|
||||
"args": []
|
||||
},
|
||||
{
|
||||
"opcode": "LS",
|
||||
"args": [
|
||||
"SOLD",
|
||||
"2",
|
||||
"DEPSC"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"case": "depcnt-mariner-exact",
|
||||
"operations": [
|
||||
{
|
||||
"opcode": "SE",
|
||||
"args": []
|
||||
},
|
||||
{
|
||||
"opcode": "LS",
|
||||
"args": [
|
||||
"SOLD",
|
||||
"2",
|
||||
"DEPSC"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"kyushu_v5_release_affected_feature_count": 0,
|
||||
"rebuild_required": false,
|
||||
"code_first_v4_counts": {
|
||||
"PASS": 121,
|
||||
"FAIL": 0,
|
||||
"NOT_PROVEN": 85
|
||||
},
|
||||
"gates": {
|
||||
"A": "FAIL",
|
||||
"B": "PASS",
|
||||
"C": "PASS",
|
||||
"D": "PASS",
|
||||
"E": "PASS",
|
||||
"F": "NOT_PROVEN",
|
||||
"G": "NOT_PROVEN",
|
||||
"H": "PASS",
|
||||
"I": "NOT_PROVEN"
|
||||
},
|
||||
"target_portrayal": "FAIL"
|
||||
}
|
||||
Reference in New Issue
Block a user