From b5705c19fb2ac820c90f291724c7598495be2486 Mon Sep 17 00:00:00 2001 From: yuqei Date: Fri, 1 May 2026 07:10:28 -0400 Subject: [PATCH] test: lock bridge diagnostic cluster constant --- tests/unit/test_documentation_consistency.py | 107 +++++++++++++++++-- 1 file changed, 97 insertions(+), 10 deletions(-) diff --git a/tests/unit/test_documentation_consistency.py b/tests/unit/test_documentation_consistency.py index 804894c..5ab1042 100644 --- a/tests/unit/test_documentation_consistency.py +++ b/tests/unit/test_documentation_consistency.py @@ -141,6 +141,7 @@ TRAINING_M41_RELEASE_INDEX_GUARD_TEST_INVENTORY = ( "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", "test_training_m79_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_self_lock", "test_training_m80_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_negative_fixture_self_lock", + "test_training_m81_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape_self_lock", "test_training_m53_release_index_doc_category_coverage_is_exact", "test_training_case_product_doc_reflects_current_m40_maturity", ) @@ -161,6 +162,13 @@ TRAINING_M41_RELEASE_INDEX_SOURCE_SHAPE_FIXTURE_GUARD_METHODS = ( "test_training_m63_release_index_source_shape_fixture_guard_methods_constant_diagnostics_are_locked", "test_training_m64_release_index_source_shape_fixture_guard_methods_accept_valid_literal_sources", ) +TRAINING_M41_RELEASE_INDEX_DIAGNOSTIC_FIXTURE_INVENTORY_GUARD_CLUSTER = ( + "test_training_m74_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_self_lock", + "test_training_m75_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_self_lock", + "test_training_m76_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_rejects_dynamic_sources", + "test_training_m77_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_edge_diagnostics_are_locked", + "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", +) TRAINING_M41_RELEASE_INDEX_REQUIRED_SNIPPET_INVENTORY = ( ( "current_m1_m40_marker", @@ -671,6 +679,9 @@ class DocumentationConsistencyTests(unittest.TestCase): "required_snippet_inventory_source_shape_fixture_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_negative_fixture": ( "test_training_m80_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_negative_fixture_self_lock" ), + "required_snippet_inventory_source_shape_fixture_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape": ( + "test_training_m81_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape_self_lock" + ), "per_doc_helper_exact_category_coverage": ( "test_training_m53_release_index_doc_category_coverage_is_exact" ), @@ -846,6 +857,7 @@ class DocumentationConsistencyTests(unittest.TestCase): "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", "test_training_m79_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_self_lock", "test_training_m80_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_negative_fixture_self_lock", + "test_training_m81_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape_self_lock", "test_training_m53_release_index_doc_category_coverage_is_exact", "test_training_case_product_doc_reflects_current_m40_maturity", ) @@ -2171,11 +2183,7 @@ class DocumentationConsistencyTests(unittest.TestCase): "test_training_m79_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_self_lock" ) diagnostic_fixture_inventory_guard_cluster = ( - "test_training_m74_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_self_lock", - "test_training_m75_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_self_lock", - "test_training_m76_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_rejects_dynamic_sources", - "test_training_m77_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_edge_diagnostics_are_locked", - "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", + TRAINING_M41_RELEASE_INDEX_DIAGNOSTIC_FIXTURE_INVENTORY_GUARD_CLUSTER ) module_source = Path(__file__).read_text(encoding="utf-8") module_tree = ast.parse(module_source) @@ -2265,11 +2273,7 @@ class DocumentationConsistencyTests(unittest.TestCase): "test_training_m80_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_negative_fixture_self_lock" ) diagnostic_fixture_inventory_guard_cluster = ( - "test_training_m74_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_self_lock", - "test_training_m75_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_self_lock", - "test_training_m76_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_rejects_dynamic_sources", - "test_training_m77_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_edge_diagnostics_are_locked", - "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", + TRAINING_M41_RELEASE_INDEX_DIAGNOSTIC_FIXTURE_INVENTORY_GUARD_CLUSTER ) base_inventory = TRAINING_M41_RELEASE_INDEX_GUARD_TEST_INVENTORY cluster_start = base_inventory.index(diagnostic_fixture_inventory_guard_cluster[0]) @@ -2375,6 +2379,89 @@ class DocumentationConsistencyTests(unittest.TestCase): synthetic_inventory ) + def test_training_m81_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape_self_lock( + self, + ) -> None: + guard_name = ( + "test_training_m81_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_guard_cluster_constant_source_shape_self_lock" + ) + constant_name = ( + "TRAINING_M41_RELEASE_INDEX_DIAGNOSTIC_FIXTURE_INVENTORY_GUARD_CLUSTER" + ) + expected_cluster = ( + "test_training_m74_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_self_lock", + "test_training_m75_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_self_lock", + "test_training_m76_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_rejects_dynamic_sources", + "test_training_m77_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_edge_diagnostics_are_locked", + "test_training_m78_release_index_source_shape_fixture_guard_methods_constant_exactness_bridge_triplet_diagnostic_fixture_inventory_source_shape_accepts_ordered_literal_sources", + ) + disallowed_source_node_types = ( + ast.Call, + ast.Dict, + ast.GeneratorExp, + ast.List, + ast.ListComp, + ast.Name, + ast.Set, + ast.Starred, + ) + module_tree = ast.parse(Path(__file__).read_text(encoding="utf-8")) + + def assigns_constant(node: ast.AST) -> bool: + if isinstance(node, ast.Assign): + targets = node.targets + elif isinstance(node, (ast.AnnAssign, ast.AugAssign)): + targets = (node.target,) + else: + return False + return any( + isinstance(target, ast.Name) and target.id == constant_name + for target in targets + ) + + constant_assignments = tuple( + node for node in module_tree.body if assigns_constant(node) + ) + + self.assertIn(guard_name, TRAINING_M41_RELEASE_INDEX_GUARD_TEST_INVENTORY) + self.assertEqual(len(constant_assignments), 1) + constant_assignment = constant_assignments[0] + self.assertIsInstance(constant_assignment, ast.Assign) + self.assertEqual(len(constant_assignment.targets), 1) + self.assertIsInstance(constant_assignment.targets[0], ast.Name) + constant_source = constant_assignment.value + self.assertIsInstance(constant_source, ast.Tuple) + dynamic_source_node = next( + ( + node + for node in ast.walk(constant_source) + if isinstance(node, disallowed_source_node_types) + ), + None, + ) + self.assertIsNone( + dynamic_source_node, + f"dynamic source node {type(dynamic_source_node).__name__}", + ) + self.assertTrue( + all( + isinstance(method_node, ast.Constant) + and isinstance(method_node.value, str) + for method_node in constant_source.elts + ) + ) + constant_cluster = tuple(method_node.value for method_node in constant_source.elts) + + self.assertEqual(constant_cluster, expected_cluster) + self.assertEqual(len(constant_cluster), 5) + self.assertEqual(len(constant_cluster), len(set(constant_cluster))) + for method_name in constant_cluster: + with self.subTest(method_name=method_name): + self.assertIn( + method_name, + TRAINING_M41_RELEASE_INDEX_GUARD_TEST_INVENTORY, + ) + def test_training_m47_release_index_per_doc_helper_inventory_self_lock_is_current(self) -> None: helper_name = "_release_index_missing_required_snippets_by_doc" docs_guard_name = "test_training_readmes_expose_m1_m40_release_index_without_raw_test_modules"