Skip to content

feat(t27b): corpus --blockers lists every construct and the greedy unlock order - #6064

Merged
gHashTag merged 2 commits into
masterfrom
claude/t27b-blockers
Oct 4, 2026
Merged

gHashTag merged 2 commits into
masterfrom
claude/t27b-blockers

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 4, 2026

Copy link
Copy Markdown
Owner

What

t27b corpus <dir> --blockers keeps 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 runs t27c 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)

before after
pass (all tests) 36 36
test fails 0 0
rejected 1129 1129
front-end error 20 20
JIT/interpreter mismatch 0 0

The tree now has 1188 files. Three specs/igla/coder files hit the 10 s timeout under machine load; each takes 0.4 s of CPU when run alone.

Differential: cargo test --release -p t27b passes. 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)

step construct unlocks passing need
1 ExprCast +18 54 187
2 << >> (untyped 1 << n) +27 81 47
3 assert with message +18 99 27
4 StructDecl +17 116 512
5 InvariantBlock +14 130 367
6 FnDecl (> 8 params) +12 142 24
7 BenchBlock +5 147 247
8 StmtAssign(undeclared) +22 169 74
26 ExprArrayLiteral +333 634 558
41 type f64 +59 826 135
42 type f32 +30 856 66

The list of reference-failing specs comes from a full --reference run 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

…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>
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>
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-04 15:12:26 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 40
PRs with All Checks Green 10
READY 8
FAILING 40
PENDING 0
NO CHECKS YET 0

These columns do not partition: 8 + 40 + 0 + 0 = 48, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=32e37152eb23 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit a9650c0 into master Oct 4, 2026
30 of 32 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant