Skip to content

[EPIC] t27b for t27o: every spec t27o emits runs natively under t27b and agrees with t27c (100 %) #10879

Open

Description

@gHashTag

Goal

Every spec t27o emits -- from Rust (rust_convert.t27), Zig (zig_convert.t27) and SPICE (spice_convert.t27) -- runs under t27b test (the native JIT) and agrees with the reference (t27c test-report). Then tri t27o --check never falls back to the reference (0.89 s against 94 s on rust_std.t27), and a whole-tree golden check is seconds, not hours. Owner, 2026-10-19 (translated): "study how to strengthen t27b for t27o -- maximally, 100 %". Part of #10522; t27b's own epic is #8326, its full-generation track #6198.

Why this matters

tri t27o --check runs t27b test first and falls back to t27c test-report only when t27b cannot judge (#10525). Tonight a converted file already hit t27b: unsupported construct ExprCall(undeclared fn) ... (call to type_text::same): every converted text comparison goes through that used fn. Each such gap sends a spec to the 100x slower path, and a disagreement between the two would make "golden" depend on which runner ran.

Plan

Done when

t27b accepts 100 % of the t27o corpus that t27c accepts, with 0 disagreements on the full corpus (t27b corpus --reference), or every remaining gap has its own issue with the construct named.

Boundary

  • May touch: specs/tri/t27b/*.t27, their gen files and seals, cli/t27b/src (net <= 0 hand lines), specs/tools/t27o/* only where the converter can emit a form t27b already has with the same meaning.
  • Must not touch: docs/reports/t27b_expectations.json (the steward writes it), spice_convert.t27 (the analog loop).

Links

#10522, #8326, #6198, #10525, #10538, #10819.

Activity

  1. gHashTag commented on Oct 19, 2026

    @gHashTag
    OwnerAuthor

    Step 1 measured (master 57aa3bc; data: the lane's RESULTS.txt)

    Corpus: every t27o output with at least one converted fn or test -- Rust: 492 specs from all 1,388 tracked .rs files of the five roadmap repositories; Zig: 724 specs from trinity src/ + trios crates/ (#10819).

    specs t27b pass (asserts / 0 asserts) fail unsupported front end codegen / JIT mismatch
    Rust 492 387 (146 / 241) 2 97 6 0 / 0
    Zig 724 706 (560 / 146) 9 9 0 0 / 0
    Total 1,216 1,093 (89.9 %) 11 106 6 0 / 0
  2. gHashTag commented on Oct 19, 2026

    @gHashTag
    OwnerAuthor

    Progress 2026-10-19 evening.

    Merged:

    Open, next lane (TB2, running): #10899 and #10903 (unreferenced module constants, the constant variant of the #10897 rule), then #10901 (type mismatch in an unreached fn) and #10900 (array literals).

    Note: these four issues had been closed as "not planned" by the issue-shape gate at 06:38Z and were reopened by the self-heal of #11007; the gate itself is fixed by #11008.

  3. gHashTag commented on Oct 19, 2026

    @gHashTag
    OwnerAuthor

    Progress 2026-10-19, late.

    Merged: #11046 (closes #10899, #10903 and #11053). A module constant nothing analyzed reaches is lazy like an unreached body; the reach (analyzed in ast_shape.t27) now covers constants and subsumes two hand-written exemptions (cli/t27b hand lines +27 -28, net -1). The same PR closes the hole in #10999: a local of a type declared nowhere, in an unreached fn, keeps its refusal.

    Measured (t27b built from the branch against the master build, --jobs 1): Rust 421 -> 434, Zig 710 -> 710, total 1,131 -> 1,144 of 1,216 (94.1%), unsupported 68 -> 55; 13 specs gained, none lost, no per-test verdict changed; --reference t27c over the 13 and over the two newly decided tracked specs: 0 disagreements. cargo test -p t27b green on linux and macos; ledger rows recounted in the PR (specs/lsp/schema.t27 pass, cap 127).

    Left on this epic: #10901 (type mismatch in an unreached fn, +8 specs in the first measurement) and #10900 (array literals, +8); the 55 specs t27c cannot compile were made valid or refused by #10976; the real gap (t27c passes, t27b refuses) was 21 specs after #10999 and has not been re-measured since #11046; the next lane runs t27b corpus --blockers first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions