feat(t27b): corpus --blockers lists every construct and the greedy unlock order - #6064
Merged
Merged
Conversation
…lock order `t27b test --blockers` lowers in a recovery mode: a rejected item, local or signature becomes a poison value, so every unsupported construct of a file is reported once and its cascade (calls to the rejected fn, uses of the rejected local) is not. `t27b corpus --blockers` collects those sets and prints a greedy set-cover order: the construct that unlocks the most whole files, then the next given that one. `--reference <t27c>` runs `t27c test-report` on every file with per-worker Zig caches, lists the specs the reference path itself fails, and optimises the order over the files it passes. Construct names are sharper: type aliases, tuples, generics and undeclared types; `ExprCall(method|std.*|undeclared fn|rejected fn|assert with message)`; `ExprLiteral(null|negative literal)`; `ExprUnary(try) statement`. The normal lowering path is unchanged apart from those names. Refs #5977 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 4, 2026
Merged
Merged
6 tasks
This was referenced Oct 4, 2026
lower.rs: blockers' recovery mode (Val::Poison, Sig.poisoned, poison_names, type_decls, ret_poison, type_construct, unknown_name) ported onto master's LTy/struct/pointer lowering; lower_src and the new blockers_src share lower_mode. main.rs: --blockers uses blockers_src with the source text; master's invariant reporting, internal_abi note and Jit/macho data arguments kept; Outcome::Pass(..) patterns updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
…e into corpus --json) Resolves the cli/t27b conflicts with #6064 (corpus --blockers, --reference, --reference-cache) keeping both feature sets. `corpus --json` now carries the reference path's verdicts when `--reference` is given: per file `reference` (pass / blocked / fail / timeout) plus `reference_detail`, and `totals.reference` = {ran, pass, blocked, fail, timeout, skip}. lab.py reads `reference_detail` when it takes the verdicts from the corpus JSON. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
t27b corpus <dir> --blockerskeeps lowering past the first rejection and lists every construct each file needs, once per kind. A rejected expression becomes poison, so one missing construct is not reported again at every use. It then prints a greedy set-cover order. Each step picks the construct that lets the most whole files pass. Ties and zero-unlock steps are broken by progress (the sum of 1/|remaining|), then need, then name.--reference <t27c>gives the honest denominator. It runst27c test-report(gen + zig test) on each file, so a file the reference path fails is counted separately rather than as a t27b gap.--reference-cache <file>keeps those results between runs.Corpus numbers (normal mode, master 2ef1ce9)
The tree now has 1188 files. Three
specs/igla/coderfiles hit the 10 s timeout under machine load; each takes 0.4 s of CPU when run alone.Differential:
cargo test --release -p t27bpasses. random_programs, every_operator, compare_unary_widen and the encoder tests all report 0 mismatches.Greedy order (first steps; 1129 blocked files, 169 constructs, median 5 per file)
<< >>(untyped1 << n)type f64type f32The list of reference-failing specs comes from a full
--referencerun that is still in progress (at 725 of 1185 files). It will be added to this PR when the run finishes.Refs #5977
Refs #6063
🤖 Generated with Claude Code