archive(provider-pipeline): preserve final B2 audit and mapping evidence

This commit is contained in:
OpenAI Codex
2026-10-13 08:22:44 +08:00
parent d046d7ee0d
commit 7c64299c22
35 changed files with 104658 additions and 7 deletions

View File

@@ -20,6 +20,43 @@ spec.loader.exec_module(pipeline)
class ProviderPipelineContractTests(unittest.TestCase):
def test_mapping_catalog_uses_declared_full_universe_and_fails_closed(self):
sample = {"visual_objects": [{"visual_object_id": "VO-a"}]}
full = {"visual_objects": [{"visual_object_id": "VO-a"}, {"visual_object_id": "VO-b"}]}
self.assertIs(pipeline.select_mapping_catalog(sample, None), sample)
self.assertIs(pipeline.select_mapping_catalog(sample, full), full)
with self.assertRaisesRegex(ValueError, "未覆盖样本"):
pipeline.select_mapping_catalog(sample, {"visual_objects": [{"visual_object_id": "VO-b"}]})
with self.assertRaisesRegex(ValueError, "无效或重复"):
pipeline.select_mapping_catalog(sample, {"visual_objects": [{"visual_object_id": "VO-a"}] * 2})
with self.assertRaisesRegex(ValueError, "缺少 visual_objects"):
pipeline.select_mapping_catalog(sample, {"visual_objects": None})
def test_cm95_full_mapping_covers_all_actual_objects_without_reclassifying_sample(self):
root = ROOT / "tools/visual-object-instantiation/output/cm95-current"
catalog_file = root / "actual-anonymous-catalog.json"
assignment_file = ROOT / "tools/style-visual-object/output/cm95-manual-review/assignment/cm95-layer-assignment-v1.json"
previous_file = ROOT / "dist/cm95/s52-full/1.1.0/mapping-layer-assignment.json"
if not all(path.exists() for path in (catalog_file, assignment_file, previous_file)):
self.skipTest("未提供 CM95 已验证的完整 Catalog / 人工审核 / 原 Package")
full = json.loads(catalog_file.read_text(encoding="utf-8"))
review = json.loads(assignment_file.read_text(encoding="utf-8"))
before = json.loads(previous_file.read_text(encoding="utf-8"))["assignments"]
sample = {"visual_objects": [{"visual_object_id": row["visualObjectId"]} for row in before]}
selected = pipeline.select_mapping_catalog(sample, full)
rows = pipeline.manual_assignment(selected, review)
self.assertEqual(len(rows), len(full["visual_objects"]))
self.assertEqual(len(rows), 475)
self.assertEqual(pipeline.attach_render_evidence(rows, full), [])
by_id = {row["visualObjectId"]: row for row in rows}
self.assertEqual(len(by_id), 475)
for row in before:
current = by_id[row["visualObjectId"]]
self.assertEqual((current["status"], current.get("standardLayer")),
(row["status"], row.get("standardLayer")))
self.assertEqual(sum(row["renderEvidence"]["occurrenceCount"] for row in rows), 976534)
self.assertTrue(any(row["status"] == "UNKNOWN" for row in rows))
def test_v2_full_catalog_evidence_and_fail_closed(self):
style = {"layers": [{"id": "layer-a", "source-layer": "points"}, {"id": "layer-b", "source-layer": "points"}]}
components = [