Repository navigation
Census path is not laxer than compile: the probe keyed the wrong class; fix the qualified-Nat spellings that made the census stricter - #12395
Conversation
… + product-inhabitance class witness
….std.integer entered the floor subject)
… rows as ImportsFixed
….std.report directly (drops the now-unused AdvisoryLens import)
|
Addressing review 71752: confirmed. After the main merge, — sent from still-hawk-901 |
…rect v2.std.report import
|
Correction to my reply on review 71752: — sent from still-hawk-901 |
Lane adhoc-561ab822-50b. The brief's premise does not hold. The census fixture path (
compile_dag_diagnostic_census) refuses every mismatch thatgunbc compile --entryrefuses. The "0 TypeMismatch" reported in #12375 was a class-key miss: the probe counted the wrong diagnostic class for its shape. The census was not reaching less than compile. One real census/compile divergence did turn up, and it is fixed here at its source.Reproduction (8-probe matrix, srv1 via neat-boar-16)
Two shapes (return position, call argument) × two type origins (imported
v2.compiler.inferred_treeInferredFacts/InferredTree, and localA/B) × red/green, each through both paths.#12375's census pair was argument-shaped but counted only
TypeMismatch. Its String-at-Int control does emitTypeMismatch. So one inhabitance defect lands in two classes, depending on its position and on whether the value is primitive or a Product.The imported pair substitutes
InferredFacts/InferredTreebecauseObligatedInferredTreeis not on main yet. The class rule does not depend on the particular types, so #12375's fixture is enrollable on the census path: key it onDeclaredTypeNotInhabitedfor the argument form, orTypeMismatchfor the return form.The real divergence, fixed
Before this PR, the imported greens carried 7 blocking
UnresolvedType v2.std.nat.Natrows on the census path only.v2.std.cardinality(2 rows) andv2.std.integer(5 rows) both importv2.std.nat { Nat }but spelled their type positionsv2.std.nat.Nat.UnlistedImportUse. The census-only N1a arm (v1.compiler.infer_resolveresolve_node_boundedundertype_ref_hit_ne_bind_measure_active) makes the same finding blocking, by design.Evidence: srv1 census runs at 5eed55a (pre-fix: n=7), afcf820 (cardinality only: n=5) and e832377 (both modules: no rows). The two partial runs double as the mutation baseline.
Probe audit (
gunbc.guarantee_probe_corpus)There are four
ExpectBlockingRefusal { TypeMismatch }rows:conformance_scalar_reddirect_call_arg_type_ordinary_module_reddirect_call_arg_type_v2_module_redfloor_generic_instantiation_monomorphic_controlAll four use primitive String-at-Int sources, which do emit
TypeMismatch. No expected verdict changes, and none was passing vacuously. The Product-argument shape was not enrolled anywhere, and this PR adds it.Changes
src/v2/std/cardinality.dagandsrc/v2/std/integer.dag: spellNat(plusZero/Succin cardinality) by the imported name.test.claim.product_inhabitance_class_by_shapewitness:probe_keys_a_diagnostic_class_its_fixture_shape_does_not_emit, recording the actual finding. Its ceiling is one class authority for one inhabitance defect (DESIGN §3), and its trigger is consolidating the two refusals inv1.compiler.infer. That consolidation is a proposal and is not done here.Not verified locally: the witness file itself first executes in CI, because there is no single-module claim runner.
🤖 Generated with Claude Code