diff --git a/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag b/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag new file mode 100644 index 00000000000..dfc0c693942 --- /dev/null +++ b/src/v2/test/claim/long/symbol_index_scaling_receipt_test.dag @@ -0,0 +1,32 @@ +module v2.test.long.symbol_index_scaling_receipt + +import v2.lens.complexity_accumulator_copy.roster_gate { file_gate, file_suspect_count } +import v2.std.logic { Bool } +import v2.std.text { String } +import v2.std.live_tree { LiveTreeDisposition, SubstrateInputsOnly } + +data live_tree_disposition: LiveTreeDisposition = SubstrateInputsOnly + +data symbol_index_fill_invocation_frequency_note: String = "INVOCATION FREQUENCY (traced 2026-07-13): namespace_for_subject is the sole callsite of symbol_index_fill_module_roots (03_name_resolve.dag:534). namespace_for_subject is called only from resolve_with_admission_policy (:569). That is called only from resolve_with_admission / resolve_with_admission_grounded, each forwarding default_name_resolution_policy(). Upstream: assemble_program_from_ingest / assemble_program_from_module_roots (ONE resolve per ingest assembly over all validated_roots), compile_ingest_with_admission / compile_source_root_ingest_with_admission (ONE resolve per compile entry), plus isolated claim tests. No per-module loop re-fills all roots: cost is O(N_total) per top-level resolve, NOT O(M·N_total). v1 CI floor (whole_tree_resolved_ctx) does NOT exercise this v2 fill path yet." + +data symbol_index_fill_scaffold_note: String = "SCAFFOLD MARKERS (symbol_index_fill.dag:35-50): Scaffold→SingleAuthority dissolution rows on qualified_name_from_node / symbol_index_fill_containment_node. Flag authority-home debt, not a fill cost-shape defect." + +data loyal_heron_empirical_receipt_note: String = "EMPIRICAL (v1 import-chain proxy, 2026-07-13 release): floor_scaling_curve_import_chain_sub_quadratic_receipt — ratio_100/50=2.79 ratio_200/100=2.82 ratio_400/200=3.09 ratio_800/400=3.68 (budget <4.0). Proxy for type-env ancestry on synthetic chains; v2 SymbolIndex fill not yet on the v1 floor path." + +data complexity_lens_receipt_note: String = "COMPLEXITY LENS (2026-07-13): Poly2Suspect count is the discriminating gate (copied-accumulator / quadratic-fold). file_suspect_count==0 on symbol_index_fill.dag and 03_name_resolve.dag. Honest Unclassifiable refusals may remain (combiner_unregistered_carrier_reaches on fold_list/cons threading) — counted via file_refusal_count ratchets below, not Poly2." + +test fn symbol_index_fill_zero_poly2_suspects_holds() -> Bool { + file_suspect_count(path: "src/v2/compiler/symbol_index_fill.dag") == 0 +} + +test fn name_resolve_fill_path_zero_poly2_suspects_holds() -> Bool { + file_suspect_count(path: "src/v2/compiler/03_name_resolve.dag") == 0 +} + +test fn symbol_index_fill_refusal_count_within_ratchet_holds() -> Bool { + file_gate(path: "src/v2/compiler/symbol_index_fill.dag", refusal_ceiling: 6) +} + +test fn name_resolve_fill_path_refusal_count_within_ratchet_holds() -> Bool { + file_gate(path: "src/v2/compiler/03_name_resolve.dag", refusal_ceiling: 8) +}