Add protocol-certification M9 L3 channel certifier (2.71.0).

L3 CHANNEL structure for timing budget, insertion loss, return loss,
crosstalk, and complete channel. Numeric PASS/FAIL only from existing
channel FACT; otherwise a visible skip. No OpenEMS, no invented S-parameters,
no M6 packs.
This commit is contained in:
2026-09-22 12:58:18 +02:00
parent 14272d7446
commit 866c2e9242
14 changed files with 987 additions and 26 deletions
+3 -3
View File
@@ -204,8 +204,8 @@ def test_axi_internal_l2_not_applicable():
assert rows
assert all(r.result == "NOT_APPLICABLE" for r in rows)
sec, findings = protocol_exam(_axi_graph())
assert sec.max_level_reached == "L2"
assert sec.macrophase == "M8"
assert sec.max_level_reached == "L3"
assert sec.macrophase == "M9"
assert all(f.status != "ERROR" for f in findings)
blob = json.dumps([r.model_dump() for r in rows])
assert "L0/L1 are not electrical" in blob
@@ -253,7 +253,7 @@ def test_l2_does_not_run_l3_or_geometry():
def test_protocol_exam_attaches_l2_checks():
sec, _ = protocol_exam(_usb_connected())
assert sec.max_level_reached == "L2"
assert sec.max_level_reached == "L3"
row = sec.recognized_instances[0]
assert row.get("l2_checks")
assert all(c.get("level") == "L2" for c in row["l2_checks"])