Skip to content

t27b: @truncate lowers, utf8 passes; ledger rows for 8 unlisted specs, cap stays 129 (Closes #10837) - #10862

Merged
gHashTag merged 10 commits into
masterfrom
claude/t27b-truncate-10837
Oct 19, 2026
Merged

gHashTag merged 10 commits into
masterfrom
claude/t27b-truncate-10837

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Closes #10837. Refs #10858.

What

@truncate lowers in t27b, so specs/tri/utils/utf8.t27 passes. That frees one ledger slot. Eight specs that master merged with no rows in docs/reports/t27b_expectations.json now have pass rows.

#10853 (bare sqrt, 11 rows flipped) merged first, with max_not_pass 129. This PR keeps that cap, holding 128 not-pass rows (127 blocked + 1 codegen). One slot stays free for #10858.

@truncate

specs/tri/t27b/int_cast_plan.t27 gains truncate_plan:

  • it is plan in wrap mode: it keeps the low bits and never traps;
  • a comptime operand folds with wrap;
  • a result type wider than the operand is refused (REFUSE_WIDER), as Zig refuses it;
  • from_destination now names @truncate, so x = @truncate(e) takes x's type.

cli/t27b/src/lower.rs is glue only, net 0 hand-written lines (9 added, 9 deleted): int_cast takes a trunc flag. t27c gen-rust regenerated gen/rust/tri/t27b/int_cast_plan.rs, and the seal was re-saved (--verify: all MATCH).

Ledger

The native ratchet on 8f043ad reported UNLISTED 2 (sar_logic and secret_gate, now listed) and 0 in every other count. On a merge with master it will also show UNLISTED for eval_hslm and ngram_hslm, as master's own run does today.

Evidence (Railway lab, x86_64 host, t27b cross-built for aarch64 and run under qemu)

  • int_cast_plan.t27:

    • its spec tests pass, including the 20 asserts of truncate_keeps_the_low_bits_in_either_mode_and_never_traps;
    • mutants killed: wider-off-by-one, no-wrap, ct-fold, refuses-wider.
  • t27b corpus, t27b against t27c + zig, compared per test, with 0 disagreements:

    Directory Files compared
    specs/tri/utils 8
    specs/tri/t27b 152
    specs/nn 1
    specs/benchmarks 10
    specs/compiler 40

    utf8.t27: pass, 8 tests, 14 asserts.

  • The crate's own Rust suites (aarch64 under qemu, with the @truncate glue): rc 0, every suite ok.

The t27b-loop skill records the traps hit here, including a cap lowered to the exact count and two sessions on one issue.

🤖 Generated with Claude Code

gHashTag and others added 5 commits October 19, 2026 11:40
…c's Zig backend prints it (Refs #10837)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… on host I/O), 11 sqrt specs flip to pass, cap 139 -> 129 (Closes #10837)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s two unlisted hslm specs (Closes #10837)

#10380 merged specs/nn/hslm_tokenizer.t27 and specs/ml/hslm_corpus.t27
with no ledger rows, so every PR built on master got UNLISTED 2 from
t27b-native-ratchet. hslm_corpus is blocked (cross-module
use-resolution), and the ledger already sat at max_not_pass 139: its row
would have been the 140th not-pass row, which reads as OVER CAP. The cap
stays where it is. This change frees a slot instead.

specs/tri/utils/utf8.t27 was blocked only by ExprCall(@truncate).
@truncate now lowers through int_cast_plan.t27:
- truncate_plan is plan in wrap mode, so it keeps the low bits and never
  traps;
- a comptime operand folds with wrap;
- a result type wider than the operand is refused (REFUSE_WIDER), as Zig
  refuses it;
- from_destination now names @truncate, so `x = @truncate(e)` takes x's
  type.
lower.rs is glue only, net 0 lines: int_cast takes a trunc flag that picks ic::truncate_plan
and the @truncate site texts. gen/rust/tri/t27b/int_cast_plan.rs is
regenerated by t27c gen-rust, and the seal is re-saved.

Ledger: utf8 -> pass, hslm_tokenizer pass, hslm_corpus blocked. That
leaves 138 blocked + 1 codegen = 139, at the cap, which is unchanged.

The t27b-loop skill records four traps: the cap trap, the x86 lab
without a qemu runner, the full /data volume, and old negative tests
that flip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…b (Refs #10837)

mos_psp103, mos_psp103_data, sar_switch (specs/analog), idea_factory,
particle_ds, petal_menu (specs/t27f) landed on master with no rows in
docs/reports/t27b_expectations.json. t27b passes all six on the lab
(qemu-aarch64 corpus on 535334d), so they cost no not-pass slot: the
ledger stays at 139 not-pass rows, the cap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rifted rows)

Both PRs close #10837 and each one alone stays red on t27b-native-ratchet:
#10853 has UNLISTED 8 and MOVED 2, and #10862 cannot list eval_hslm and
ngram_hslm without two free slots. Together they free 12 slots, list
all 10 drifted specs, and move two blockers to what native CI reports:

- specs/ml/pathway/mlp.t27: ExprArrayLiteral(repeat count)
- specs/nn/gla.t27: ConstDecl

eval_hslm and ngram_hslm are listed blocked (ExprCall(undeclared fn)).
Not-pass rows: 129 blocked + 1 codegen = 130, and max_not_pass goes from
master's 139 to 130. That lowers the cap; it never rises above master.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag gHashTag changed the title t27b: @truncate by truncate_plan frees a ledger slot; rows for eight drifted specs (Closes #10837) t27b: @truncate + bare sqrt free 12 ledger slots; all 10 drifted specs listed, cap 139 -> 130 (Closes #10837) Oct 19, 2026
…efs #10837)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efs #10837)

Master added both specs after this branch's last ledger update; the
native ratchet on 7ab095a reported them UNLISTED, with every other
count at 0. Both pass under t27b, so the not-pass count stays 130.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ck to #10858 (Refs #10837)

#10853 merged on its own with max_not_pass 129, the exact count, so
master has no room for eval_hslm and ngram_hslm. With @truncate freeing
utf8, keeping both rows would need 130 and raise master's cap. This
branch drops them and takes master's 129: 128 not-pass rows, one slot
free for #10858. The cap line now matches master's, so the branch
merges without conflict.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag gHashTag changed the title t27b: @truncate + bare sqrt free 12 ledger slots; all 10 drifted specs listed, cap 139 -> 130 (Closes #10837) t27b: @truncate lowers, utf8 passes; ledger rows for 8 unlisted specs, cap stays 129 (Closes #10837) Oct 19, 2026
…ch master and check merge-tree (Refs #10837)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-19 05:32:39 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 43
PRs with All Checks Green 7
READY 2
FAILING 43
PENDING 0
NO CHECKS YET 0

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

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=88b8cb73ceda != 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 c05a288 into master Oct 19, 2026
30 of 37 checks passed
gHashTag added a commit that referenced this pull request Oct 19, 2026
…not-pass 129 at cap 129 (Refs #10887)

#10862 auto-merged at 330dd0a, one push before its sar_adc and reap
rows, so master's native ratchet reports them UNLISTED. ngram_hslm takes
the last free slot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 19, 2026
…s_psp103_50c_data, worktrees/reap pass, ngram_hslm blocked; cap equals reality at 129 (Closes #10887) (#10889)

* analog: rename sar_adc's Range to SarErrRange, a second type named Range broke the types ratchet (Closes #10887)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27b ledger: rows for sar_adc, tri/worktrees/reap and ml/ngram_hslm, not-pass 129 at cap 129 (Refs #10887)

#10862 auto-merged at 330dd0a, one push before its sar_adc and reap
rows, so master's native ratchet reports them UNLISTED. ngram_hslm takes
the last free slot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* analog: take master's ErrRange rename from #10892, keep only the missing ledger rows (Refs #10887)

#10892 renamed sar_adc's Range to ErrRange on master, so this branch's
SarErrRange rename now conflicts. The spec and its seal are set to master's.
The ledger is master's (d0959ff) plus the three rows master still lacks:
sar_adc and worktrees/reap pass, ngram_hslm blocked. Not-pass is 129, which
equals the cap, so loop-tools-tracked's "cap equals reality" holds again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* tri/worktrees/reap: a neutral home path in the plain() test, so the devhome guard passes (Refs #10887)

The scan check's check_devhome_paths.py fails on master for this line: it
named a developer's home directory. The test only needs a plain path, so it
now uses /Users/dev/. The seal is re-saved in the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* tri/worktrees/reap: re-save the seal after the test path change (Refs #10887)

Railway lab, t27c built from master: 13 tests, 0 FAIL, 0 vacuous;
seal --verify all hashes MATCH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ledger: name mos_psp103_50c_data and sar_comparator_psp, both pass on master (Refs #10887)

Master merged both specs without ledger rows, so t27b-native-ratchet
reports them UNLISTED on every open PR. Both pass the reference and t27b;
not-pass stays 129 = cap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

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.

t27b ledger: #10380's hslm_corpus and hslm_tokenizer are unlisted, and the ledger is at its cap -- every PR's t27b-native-ratchet is red

1 participant