iter mq.tidy: close 4 actionable drift items from audit-mq

T1 [high-1]: refine_multi_candidate_residual rigid-var filter now
requires class + type-unification via constraint_type_matches, so
forall a b. prelude.Show a, userlib.Show b => ... shapes discriminate
by which typevar the residual is on. Discharge-time only; synth-time
twin doesn't have a residual type to unify against (fresh metavar
constructed after dispatch).

T2 [high-2]: qualifier_is_class_shape extracted as pub(crate) helper
adjacent to parse_method_qualifier; broadened to accept PascalCase
single-segment qualifiers like Show.show alongside module-qualified
ones. Same-module bare-class call sites now reachable; symmetric to
mq.1 canonical-form rule.

T3 [medium-1]: any_candidate_class_has_instance pub(crate) helper
gates the class-method-shadowed-by-fn warning closure on registry
instance presence (any candidate class, any type). Conservative
tightening of the spec rule per Boss Q2 decision.

T4 [medium-2]: four DESIGN.md Data Model schema fragments
(SuperclassRef, InstanceDef.class, Type::Con.name, Constraint.class)
annotated with canonical-form cross-references.

Two trip-wires fixed inline: parse_method_qualifier docstring
coherence, mq3 in-crate test fixture-repair (registry instance
injection — analogous to mq.3 typeclass_22b3 pattern).

5/5 tasks. 548 tests green (was 545 + 3 new mq_tidy_* unit tests).
bench/compile_check.py + cross_lang.py exit 0; check.py exit 0
both runs with noise-class metric migration on
latency.implicit_at_rc.* max-tail (6th-consecutive observation
since audit-cma). Baseline pristine.
This commit is contained in:
2026-05-13 02:49:26 +02:00
parent 64d3feeb97
commit 1b6cbcb68b
5 changed files with 484 additions and 18 deletions
@@ -0,0 +1,43 @@
{
"iter_id": "mq.tidy",
"date": "2026-05-13",
"mode": "standard",
"outcome": "DONE",
"tasks_total": 5,
"tasks_completed": 5,
"reloops_per_task": {
"1": 0,
"2": 1,
"3": 0,
"4": 0,
"5": 0
},
"review_loops_spec": 0,
"review_loops_quality": 1,
"blocked_reason": null,
"tests_pre_iter": 545,
"tests_post_iter": 548,
"tests_added": 3,
"tests_added_names": [
"mq_tidy_rigid_var_filter_uses_type_unification",
"mq_tidy_bare_class_qualifier_shape_accepted",
"mq_tidy_shadow_warning_suppressed_when_no_instance"
],
"trip_wire_fixtures_repaired": [
"mq3_class_method_shadowed_by_fn_warning_fires"
],
"bench_compile_check_exit": 0,
"bench_cross_lang_exit": 0,
"bench_check_exit": 0,
"bench_check_noise_class_observations_consecutive": 6,
"files_touched": [
"crates/ailang-check/src/lib.rs",
"docs/DESIGN.md"
],
"notes": {
"reloops_per_task.2": "T2 had one quality-phase re-loop: parse_method_qualifier docstring update added to keep helper documentation coherent with the broadened gate (treated as coherence-required edit, not unrequested extra).",
"review_loops_quality": "Single quality-phase re-loop on T2 for the docstring-coherence Minor; T3 trip-wire repair was implementer-phase (not a review-loop).",
"trip_wire_note": "mq3_class_method_shadowed_by_fn_warning_fires used Registry::default() (no instances); post-T3 spec-rule tightening correctly suppresses the warning, so fixture was updated to ship a clsmod.Show Int registry entry. Analogous to mq.3's typeclass_22b3 trip-wire pattern.",
"plan_step_5_inaccuracy": "Plan Task 5 Step 5 expected `cargo run --bin ail -- check examples/prelude.ail.json` to exit 0; actual behaviour is exit 1 (prelude is the loader's auto-injected module). Identical pre-edit; not a regression from this iter."
}
}