You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
EPIC: t27b runs the whole corpus -- 100% of reference-passing specs, 0 mismatches, experiments on Railway #6063
t27b (the native AArch64 backend, cli/t27b) runs every corpus spec whose reference path (t27c gen + zig test) itself passes, with 0 mismatches against that reference. No skipped tests, no interpreter fallback: an unsupported construct is a counted blocker, not a pass.
Progress is the honest ratio t27b passes / reference passes, measured by t27b corpus, never estimated.
structs, pointers, struct results via hidden pointer, rodata struct consts
70 / 1185
0
Merge order: #5992 -> #6007 (retarget to master) -> #6044 (retarget to master). Open bug PR #5993 (zig signed %, Closes #5973) is CONFLICTING and needs a rebase.
Reference-path baseline: build_verify.t27 fails on the reference path too (33 vs 31), so it is outside the denominator.
Remaining blockers (t27b corpus --blockers, greedy unlock order)
Memory lane: str 389 files, []const u8 71, []const f32 30, fixed arrays [N]T, for over slices.
Scalar lane: EnumDecl 104, f64 53, ExprCast 26.
Unassigned: BenchBlock 48, std.mem.Allocator 30.
Sub-tasks
Railway lab: run the corpus off the Mac (cross-build t27b for aarch64-linux, run it under qemu-user; reference path natively), publish latest.json over HTTP -- no secrets in the service.
t27b JIT on Linux AArch64 (today it is gated to macOS: MAP_JIT / pthread_jit_write_protect_np).
Memory lane: fixed arrays, then strings, str, slices, for (the last PR of this lane carries Closes #5977).
Scalar lane: enums, f64, casts.
BenchBlock and Allocator.
README: coverage number from t27b corpus, not by hand.
Rules for every agent on this epic
One construct family per PR, Refs #<this epic> and its own issue; NOW entry per PR; L1-L7.
A PR states its before/after t27b corpus numbers and its mismatch count; a mismatch is a stop, not a skip.
Heavy builds and corpus runs go to the Railway lab, not the owner's Mac.
Progress reports are posted as comments here; a number in a report links the run that produced it.
Railway lab: there is no lab URL in this epic yet, and on this Mac railway CLI says Unauthorized. So I have no lab totals, mismatch list or top 5 blockers to report this tick.
Local reference-denominator run (t27b corpus specs --blockers --reference ... --list, pid 66006): 900 of 1185 files after 11284 s, still running. Its totals are not out yet.
Load average: 730 / 713 / 715.
Next step / owner decision
To use the lab, someone needs to run railway login on this Mac, or post the lab URL here. Until then, full corpus runs stay local, under the load shown above.
Its reference step failed with can't start new thread, so reference_pass is null and the lab has no denominator yet. A fix ("size reference workers from the cgroup pids limit", 9d87d14) is committed locally in /tmp/t27-lab. That branch is not on GitHub and has no PR.
The lab needs to run master. Either its branch goes up as a PR with the thread fix, or it gets redeployed pointed at master. No lane subagent owns the lab now. I will start one next tick if the unconflict work is done.
Next: merge #6098 and #6065 when they are green, then set T27_REF=master on the lab so the numbers are master's. After that: the shift PR, then the memory-lane PR.
Steward 2026-10-04T16:15Z (the owner asked for everything to be merged and for the Queen to get priority)
Merged:#6098 (Railway lab, corpus --json with reference verdicts) and #6065 (integer casts). Each merged after validate, check-linked-issue and parse-ratchet passed. A sweep is now merging every open t27b PR once those three checks pass and it has no red check that is green on master. No --admin.
Lab is on master: I set T27_REF=master. The first run was latest.json, commit dd3864d. That commit is before#6065; the lab polls master and will re-run on its own.
t27b passes 56 of the 648 specs the reference path passes (8.6%). It also passes 14 specs where the reference does not pass.
Mismatch 0, crash 0, timeout 0.
The single t27b failure is specs/fpga/verification/build_verify.t27, which fails on the reference path too ("1 of 11 tests fail").
All three cards sit in her backlog. Their boundaries overlap in cli/t27b/src/lower.rs, so she will run them one at a time. Strings and slices (str, []T) are with the local memory-lane subagent. std.mem.Allocator needs a heap/runtime design decision first, so it has not been delegated.
Lab at master dd3864d (finished 16:06Z): t27b passes 56 of the 648 specs the reference passes (8.6%), mismatch 0. Another 14 t27b passes are specs the reference itself fails -- not coverage. CORRECTION: an earlier version of this comment said "t27b 70 / reference 648", which divided all 70 t27b passes by the reference denominator. -- https://t27b-lab-production.up.railway.app/latest.json. The branch runs before feat(t27b): compile integer casts natively, checked like @intCast #6065 were 47 of 646, and that figure was honest: all 47 were inside the reference set. Progress: 47 -> 56 in-reference passes.
feat(tri): tri t27b status/doctor -- the t27b steward reads its state before it acts #6114tri t27b status|doctor (Closes tri t27b: the steward's tick card and anomaly doctor in one read-only command #6112). It reads the lab, master tip, t27b PRs with their required checks, the claim, the ledger, each /tmp/t27b-* worktree with the processes inside it, local reference runs and the railway CLI version, and prints one code per anomaly with its fix. Fixture test: 25/25 checks. All 16 codes fire exactly once on the broken fixture, and the healthy fixture (the negative control) gives 0. A mutation control turned 3 checks red. The tool never writes; the test checks that. Merged after the required checks passed. My own slip: the new workflow step moved the shell census (run: steps 269 -> 270) and cli-tri went red. It was re-blessed in the same PR; now rule Q12. duplicate-bodies stays red on master as well.
Skill t27b-queen-steward: each tick starts with the doctor. New rule Q11 replaces Q7, which was wrong: the 13:30Z subagent was alive, and a second one was sent into its worktree. Each subagent now gets a fresh /tmp/t27b-<lane>-<UTC>. Section 6 holds the ranked backlog from the prior-art sweep.
Doctor, live at 15:44Z (5 anomalies; since then the lab is on master)
LAB-NOT-MASTER (lab on claude/t27b-railway-lab), LAB-BEHIND (f59fd76 vs master cedb826), PR-CONFLICTING #6098 (a merge-from-master subagent from the 15:27Z tick is alive, so no second one was sent), WORKTREE-DIRTY /tmp/t27b-pr (1 path, nobody inside, 233 min old; left untouched), RAILWAY-OLD-CLI. Load average 250 then, 42 at 16:17Z.
Bugs in the reference path itself (build_verify.t27) -> the reason reference-bug in the ledger.
Overflow, shift and float-format semantics are not written down -> rules first, then mismatches count.
Results under qemu emulation -> occasionally re-check natively.
The denominator moves with master -> every report names its commit.
Next (ranked, skill section 6)
#6115 ratchet + vacuous -> auto-reduce each mismatch into a regression test (cvise, with "reference passes" in the interestingness test) -> grow tests/differential.rs into a whitelisted, checksum-ending fuzzer on the lab -> written UB rules -> a native re-check -> a per-function fallback as a second metric (the headline number stays strict).
Three ways to work together for the next loop (owner picks)
A. Steward only (the default). The hourly tick keeps two coverage lanes (memory: strings and slices; scalar: shift, enums, f64), merges green PRs, and reports. The owner only answers questions on the epic. The slowest path, and the safest.
C. Lab-first.feat(t27b): JIT on arm64 Linux, corpus --json/--runner, Railway lab #6098 is merged and T27_REF=master; next step is branch runs on the lab (each PR measured there before merge). All corpus runs move off the Mac (load 200-800), and lanes run three at once because only the lab builds. This needs one owner decision: allow a third lane.
Steward report -- t27b tooling moves into t27 (2026-10-05)
Owner's rule, now law
"t27b and the tools that measure it are written in t27." The rule is now an AGENTS.md section, #6200 merged 6569e48 (Closes #6199). The port epic is #6198. Every hand-written line of t27b and its tooling is recorded as debt that only shrinks (counts in that section, wc -l at c532fca).
specs/tri/t27b/steward.t27 holds delta_code, delta_is_red and pct_tenths: 14 tests, 1 invariant.
t27c test-report: 14/14. t27b itself (t27b test --check): 14/14, 19 runtime asserts, the invariant held. t27b compiles a piece of its own tooling.
tri t27b delta and the status percentage now call gen/c/tri/t27b/steward.c (t27c gen-c output, byte-identical, never hand-edited) through ctypes. Python only maps the lab's strings to codes.
Same answers: the old and new delta --json over lab runs dd3864d -> e0f894f give the same 28 findings (identical sha256).
The mutation control caught a weak test: 56/648 and 75/657 come out the same whether you round or truncate. I added pct_rounds_to_nearest; the mutant now fails.
New CI step in loop-tools-gate: scripts/ci/test_the_t27b_steward_decides_in_t27.py.
Also merged this session
#6185 (honest ratio + delta), #6187 (?T; corpus ratchet retires 2 entries, cap 113 -> 111), #6188 (per-spec ledger docs/reports/t27b_expectations.json, tri t27b ratchet, pass_vacuous, lab ratchet step). The ledger was blessed from e0f894f: 75 pass / 582 not pass. With steward.t27 it is 76.
Anomalies
Lab run f033b20: the t27b corpus died with exit -9 after 64.8 s and wrote no JSON, so every t27b verdict reads not run. On the Mac, master c532fca runs the full corpus in 2.16 s, max RSS 14 MB, rc 0 (45 pass, 38 pass_vacuous, 1 test fail build_verify, 0 mismatch, 1194 files). It does not reproduce; most likely the container killed it. The lab is idle and has not run a newer master. Owner: trigger a run or redeploy the lab. The steward may not.
My slip, rule Q12 again: adding a workflow step moved the census. It was re-blessed in the same PR. Skill rule Q15: steward logic is written as a .t27 spec first.
Three ways to work together for the next loop (owner picks)
A. Port first. Each tick moves one more Python decision (ratchet verdict, doctor rules) into specs/tri/t27b/. Coverage lanes pause. The tooling debt shrinks quickly, and every slice is also a t27b test.
C. Lab-first. The owner redeploys the lab, and every PR gets a branch run on Railway before merge. Corpus runs leave the Mac, which allows three lanes. This needs two owner decisions: the redeploy and a third lane.
Owner questions
Should compile-only and pass_vacuous passes count toward 100%?
steward.t27 now holds 38 tests + 1 invariant; t27c test-report and t27b test --check both 38/38. The generated C is byte-identical to the t27c lab's gen-c output (sha256 7ab146aa...).
Differential check, old Python vs the .t27 rules: ratchet 205 cases / 0 differences, bless 410 cases / 0 differences.
/latest.json (updated 17:55Z) is still the failed run at bae81ae. Checkout failed with could not fetch 737282229a... from promisor remote: the redeploy killed the previous run in the middle of a partial-clone fetch. The running container predates #6220, so it does not re-clone. One more redeploy of t27b-lab picks up #6220. After that, steps.checkout.clone should read recloned once and then kept. I am not redeploying: that is your decision.
No lab numbers for master after #6065/#6229 exist yet. The last measured figure is still 56/648 at dd3864d.
Correction to my 18:18Z comment: I said the lab needed one more redeploy to recover. It did not. At 18:26Z the lab polled, saw the new master 88862a9, and its checkout succeeded on the old code (steps.checkout: ok, 4.6 s). The partial-clone failure was tied to the old target commit, not to the clone itself. #6220 is still a guard for the next time, but no redeploy is needed now. Lesson recorded in the skill: do not call the owner for a redeploy before the lab's next poll on a new commit.
The reference passes 708 (it was 648 at dd3864d). t27b passes 84 of them = 11.9%, plus 30 vacuous passes, which are not counted. Mismatch 0, t27b fail 1, outside-reference passes 0.
Bench (judgment call): a bench is compiled and never run, the same as the reference, which emits an uncalled fn. Prose-only bench bodies (22 files) now reject as StmtExpr instead of passing empty.
Next first blockers: f64 110, f32 70, ?T 47, std.mem.Allocator 44, [N]T leftovers 39, shifts 36.
tri t27b ready (feat(t27b): tri t27b ready -- the steward's merge gate decided in steward.t27 #6246): this tool judged a red non-required check against master's older SUCCESS while master's tip run was still going. Now that case reads as master PENDING and the PR WAITs (rule Q29). 81 spec tests pass on t27b and on the t27c lab, and the gen-c sha matches.
Lab: the last lab run is still master 88862a9: t27b 84 / reference 708 (11.9%), mismatch 0. The stack is measured there after it merges. A ledger re-bless follows in its own PR.
t27b passes 162 of the 710 specs the reference passes (22.8%), mismatch 0 (1247 files)
of those 162, all ran a test or invariant; 0 compile-only
not counted: 0 t27b passes where the reference fails, 1 frontend reject where it passes (specs/tri/agent/faculty_board.t27, a t27b parser/typecheck defect still to be filed)
The lab is one commit behind master (82d8795, a spec port, no t27b change), so these numbers belong to 99b465e.
Top 5 first blockers (files): type []T 136, EnumDecl 108, type f64 79, BenchBlock 70, type std.mem.Allocator 39. The open stack below covers the first, second and fourth.
Top blockers (first rejection):type f64 110, type f32 70, type ?T 47, std.mem.Allocator 44, [N]T leftovers 39, << >> 36.
Next: f64 lane started on #6180 (one lower.rs lane). New issue #6268: 8 specs whose bench bodies Zig rejects once referenced (found by the bench lane; lazy analysis hides them).
Slip learned (Q30): a watcher skipped the retarget of #6254 because one ready read failed; watchers now decide the retarget from gh pr view --json baseRefName.
t27b passes 1213 of the 1286 specs the reference passes (94.3%), mismatch 0 (1767 files); of those 1213 ran a test or invariant, 0 compile-only; not counted: 1 t27b pass where the reference fails (#8485); reference reused 1760 of 1767 from the cache.
Also in flight:#8181 (sieve C9 rebuild after master merge), #8217 (bench bodies, master re-merged, checks re-running), #8218 rebuilt clean as bless-by-key-3 (the old branch history swallowed unrelated commits — ~1495-file two-dot diff; will be closed in favor of the new PR), #8216 remains owner-only (gate file).
Next tick: land the batches, re-bless the ledger from the new run, report the family queue.
Lab run on master c494cc5 finished (12:29Z): t27b 1254/1286 = 97.5% of reference-passing specs covered by real t27b passes (up from 1213/1286 = 94.3% this morning), mismatch 0, reference_disagree 0, jit/interp mismatch 0, crash 0.
Gain comes from today's test-block batches (#8539 repairs, #8496, #8507, #8181, #6816, #8498, #8533, #8541) — real runtime asserts, not vacuous: t27b_pass_vacuous_where_reference_passes is down to 5.
Remaining tail at this commit: 21 t27b_fail, 4 timeouts (5 retried), 2 pass-where-reference-does-not (outside the mismatch counter, #8485 class), 5 vacuous. The blocked-spec family map (i128 #7915, anytype #7878, anonymous struct #7886, generic #7890, Allocator #7917, @sizeof#7817, ExprArrayLiteral #7347/#8175 + #7382 in flight) is unchanged.
Ledger re-bless follows once the reseal PR (#8564) merges and the next master run lands — trinet_node's j_go test now passes, so its row moves too.
Ledger (this PR's base, native): pass 1407, pass_vacuous 0, not_pass 28 — t27b-native-ratchet green against it locally, all nine categories 0.
Lanes landed this epic: #8965 (std.mem.trim/indexOf/indexOfScalar, std.math.approxEqAbs, @sqrt comptime fold — PR #9068) on top of the earlier stdlib/optional/cast lanes.
Activity
gHashTag commentedon Oct 4, 2026
Steward tick 2026-10-04T13:30Z
Merged
%->@rem, Closes gen (Zig): signed and float % emits plain %, which Zig refuses to compile #5973), merge commit 2e852cf. Required checksvalidate,check-linked-issueandparse-ratchetpassed. Its redduplicate-bodies,fpga-conformanceandspec-guardsare red on master too, so they were not caused by this PR.Open
corpus --blockers) and feat(t27b): compile integer casts natively, checked like @intCast #6065 (casts): both CONFLICTING with master. A rebase subagent is merging origin/master into both branches (a merge commit, not a force-push). After that they need CI before I can merge them.claude/t27b-shift(2e075a4, untyped1 << n): still an unbuilt WIP stacked on feat(t27b): compile integer casts natively, checked like @intCast #6065, with no PR. It waits for feat(t27b): compile integer casts natively, checked like @intCast #6065.Numbers
railwayCLI saysUnauthorized. So I have no lab totals, mismatch list or top 5 blockers to report this tick.t27b corpus specs --blockers --reference ... --list, pid 66006): 900 of 1185 files after 11284 s, still running. Its totals are not out yet.Next step / owner decision
railway loginon this Mac, or post the lab URL here. Until then, full corpus runs stay local, under the load shown above.gHashTag commentedon Oct 4, 2026
Steward tick 2026-10-04T14:26Z
Merged this tick: none.
Open
corpus --blockers) and feat(t27b): compile integer casts natively, checked like @intCast #6065 (casts) are still CONFLICTING. Last tick's merge-from-master subagent stopped partway:/tmp/t27b-unconflictwas left in a merge with conflicts incli/t27b/src/lower.rsandcli/t27b/src/main.rs, and neither branch was pushed. A new subagent is aborting that stale merge and merging the currentorigin/masterinto both branches (merge commit, plain push). After that, both PRs need CI.claude/t27b-shift(2e075a4) is still waiting for feat(t27b): compile integer casts natively, checked like @intCast #6065.Railway lab
railwayis now logged in. The project ist27b-lab, and the lab is up at https://t27b-lab-production.up.railway.app/latest.json (lab issue t27b lab: run the corpus on Railway (aarch64-linux under qemu-user) #6071).claude/t27b-railway-lab, not master. That branch's base is the feat(t27b): memory primitives -- frame slots, loads/stores, rodata, bounds (Refs #5977) #6007 merge (997dfc9), so it does not include feat(t27b): structs, field access, pointers and struct results #6044 (structs) or fix(gen): signed and float % lowers to @rem (Closes #5973) #5993. Its numbers describe that branch, not master: t27b pass 47 of 1190 files, mismatch 0, fail 0, crash 0, timeout 0, blocked 1123, frontend 20.referencestep failed withcan't start new thread, soreference_passis null and the lab has no denominator yet. A fix ("size reference workers from the cgroup pids limit", 9d87d14) is committed locally in/tmp/t27-lab. That branch is not on GitHub and has no PR.type str31.Local reference run (pid 66006): 1100 of 1185 files after 14555 s, still running. I am not quoting totals until it finishes.
Load average: 430 / 399 / 434.
Next step
master. No lane subagent owns the lab now. I will start one next tick if the unconflict work is done.gHashTag commentedon Oct 4, 2026
t27b lab is live on Railway (#6071, PR #6098).
/status.json,/runs/index.json, and/runs/<sha>.json/.log.t27c test-report(gen + zig test), run natively.specs/, https://t27b-lab-production.up.railway.app/runs/9d87d14062f5dacf370a6a46da41596cbf89c40e.jsoncargo test -p t27bunder qemu-user: 18 passed, 0 failedtype str31T27_REFcurrently points atclaude/t27b-railway-lab. Set it tomasteronce #6098 merges.gHashTag commentedon Oct 4, 2026
Steward tick 2026-10-04T15:27Z
Merged
corpus --blockers,--reference,--reference-cache) -> master a9650c0. Its two red checks,duplicate-bodiesandfpga-conformance, are also red on master (cdc02ad), so they did not block. Required checksvalidate,check-linked-issueandparse-ratchetwere green.Open
corpus --json): CONFLICTING since feat(t27b): corpus --blockers lists every construct and the greedy unlock order #6064 landed. A subagent is merging master into it (merge commit, no force-push) and folding feat(t27b): corpus --blockers lists every construct and the greedy unlock order #6064's reference result into--json.claude/t27b-shiftstays stacked on it and waits.str/[]const u8(branchclaude/t27b-strings; it files its own issue).Lab (latest.json; ref
claude/t27b-railway-labf59fd76, which is the branch, not master)str31. The base predates feat(t27b): structs, field access, pointers and struct results #6044, so StructDecl is overstated.Load 171 / 213 / 225 (1/5/15 min)
Next: merge #6098 and #6065 when they are green, then set
T27_REF=masteron the lab so the numbers are master's. After that: the shift PR, then the memory-lane PR.gHashTag commentedon Oct 4, 2026
Steward 2026-10-04T16:15Z (the owner asked for everything to be merged and for the Queen to get priority)
Merged: #6098 (Railway lab,
corpus --jsonwith reference verdicts) and #6065 (integer casts). Each merged aftervalidate,check-linked-issueandparse-ratchetpassed. A sweep is now merging every open t27b PR once those three checks pass and it has no red check that is green on master. No--admin.Lab is on master: I set
T27_REF=master. The first run was latest.json, commit dd3864d. That commit is before #6065; the lab polls master and will re-run on its own.specs/fpga/verification/build_verify.t27, which fails on the reference path too ("1 of 11 tests fail").str390,[]T181, EnumDecl 104,[N]T60,f6453, BenchBlock 49,std.mem.Allocator30, ExprCast 26 (casts landed in feat(t27b): compile integer casts natively, checked like @intCast #6065 after this run),<< >>24.Handed to the Queen (her bees run on Railway, not on the Mac):
All three cards sit in her backlog. Their boundaries overlap in
cli/t27b/src/lower.rs, so she will run them one at a time. Strings and slices (str,[]T) are with the local memory-lane subagent.std.mem.Allocatorneeds a heap/runtime design decision first, so it has not been delegated.gHashTag commentedon Oct 4, 2026
Steward session report -- weak spots, prior art, tooling (2026-10-04 16:17Z)
Done
tri t27b status|doctor(Closes tri t27b: the steward's tick card and anomaly doctor in one read-only command #6112). It reads the lab, master tip, t27b PRs with their required checks, the claim, the ledger, each/tmp/t27b-*worktree with the processes inside it, local reference runs and the railway CLI version, and prints one code per anomaly with its fix. Fixture test: 25/25 checks. All 16 codes fire exactly once on the broken fixture, and the healthy fixture (the negative control) gives 0. A mutation control turned 3 checks red. The tool never writes; the test checks that. Merged after the required checks passed. My own slip: the new workflow step moved the shell census (run: steps 269 -> 270) andcli-triwent red. It was re-blessed in the same PR; now rule Q12.duplicate-bodiesstays red on master as well.corpus-ratchet.yml/suite_expectations.json) plus apass_vacuouscount.t27b-queen-steward: each tick starts with the doctor. New rule Q11 replaces Q7, which was wrong: the 13:30Z subagent was alive, and a second one was sent into its worktree. Each subagent now gets a fresh/tmp/t27b-<lane>-<UTC>. Section 6 holds the ranked backlog from the prior-art sweep.Doctor, live at 15:44Z (5 anomalies; since then the lab is on master)
LAB-NOT-MASTER (lab on
claude/t27b-railway-lab), LAB-BEHIND (f59fd76 vs master cedb826), PR-CONFLICTING #6098 (a merge-from-master subagent from the 15:27Z tick is alive, so no second one was sent), WORKTREE-DIRTY/tmp/t27b-pr(1 path, nobody inside, 233 min old; left untouched), RAILWAY-OLD-CLI. Load average 250 then, 42 at 16:17Z.Weak spots of the metric (from the sweep)
build_verify.t27) -> the reasonreference-bugin the ledger.Next (ranked, skill section 6)
#6115 ratchet + vacuous -> auto-reduce each mismatch into a regression test (cvise, with "reference passes" in the interestingness test) -> grow
tests/differential.rsinto a whitelisted, checksum-ending fuzzer on the lab -> written UB rules -> a native re-check -> a per-function fallback as a second metric (the headline number stays strict).Three ways to work together for the next loop (owner picks)
Merge origin/master (#6185 delta) into the ratchet; re-bless from e0f…
gHashTag commentedon Oct 4, 2026
Steward report -- t27b tooling moves into t27 (2026-10-05)
Owner's rule, now law
"t27b and the tools that measure it are written in t27." The rule is now an AGENTS.md section, #6200 merged 6569e48 (Closes #6199). The port epic is #6198. Every hand-written line of t27b and its tooling is recorded as debt that only shrinks (counts in that section,
wc -lat c532fca).First port slice: #6204 merged bae81ae (Closes #6202)
specs/tri/t27b/steward.t27holdsdelta_code,delta_is_redandpct_tenths: 14 tests, 1 invariant.test-report: 14/14. t27b itself (t27b test --check): 14/14, 19 runtime asserts, the invariant held. t27b compiles a piece of its own tooling.tri t27b deltaand the status percentage now callgen/c/tri/t27b/steward.c(t27c gen-coutput, byte-identical, never hand-edited) through ctypes. Python only maps the lab's strings to codes.delta --jsonover lab runs dd3864d -> e0f894f give the same 28 findings (identical sha256).pct_rounds_to_nearest; the mutant now fails.scripts/ci/test_the_t27b_steward_decides_in_t27.py.Also merged this session
#6185 (honest ratio +
delta), #6187 (?T; corpus ratchet retires 2 entries, cap 113 -> 111), #6188 (per-spec ledgerdocs/reports/t27b_expectations.json,tri t27b ratchet,pass_vacuous, lab ratchet step). The ledger was blessed from e0f894f: 75 pass / 582 not pass. With steward.t27 it is 76.Anomalies
not run. On the Mac, master c532fca runs the full corpus in 2.16 s, max RSS 14 MB, rc 0 (45 pass, 38 pass_vacuous, 1 test fail build_verify, 0 mismatch, 1194 files). It does not reproduce; most likely the container killed it. The lab is idle and has not run a newer master. Owner: trigger a run or redeploy the lab. The steward may not.Last honest number
Lab e0f894f: t27b passes 75 of the 657 specs the reference passes (11.4%), mismatch 0; 47 of the 75 ran a test or invariant, 28 are compile-only. Run: https://t27b-lab-production.up.railway.app/latest.json
Three ways to work together for the next loop (owner picks)
specs/tri/t27b/. Coverage lanes pause. The tooling debt shrinks quickly, and every slice is also a t27b test.Owner questions
pass_vacuouspasses count toward 100%?gHashTag commentedon Oct 4, 2026
Steward tick -- slice 3 merged, lab stuck at checkout
specs/tri/t27b/steward.t27), fix(t27b-lab): a clone that cannot check out is cloned again #6220 (4b16ae5, lab re-clones once when checkout fails), feat(t27b): ledger bless decides in steward.t27 #6228 (88862a9, Closes t27b steward: bless decides in specs/tri/t27b/steward.t27 #6227: bless decided insteward.t27).steward.t27now holds 38 tests + 1 invariant; t27c test-report andt27b test --checkboth 38/38. The generated C is byte-identical to the t27c lab'sgen-coutput (sha256 7ab146aa...).Lab: needs the owner
/latest.json(updated 17:55Z) is still the failed run at bae81ae. Checkout failed withcould not fetch 737282229a... from promisor remote: the redeploy killed the previous run in the middle of a partial-clone fetch. The running container predates #6220, so it does not re-clone. One more redeploy of t27b-lab picks up #6220. After that,steps.checkout.cloneshould readreclonedonce and thenkept. I am not redeploying: that is your decision.No lab numbers for master after #6065/#6229 exist yet. The last measured figure is still 56/648 at dd3864d.
Remaining #6198 debt
tri t27b doctorand status reading are still Python. Next slice: the anomaly codes go intosteward.t27.gHashTag commentedon Oct 4, 2026
Correction + new lab numbers (18:40Z)
Correction to my 18:18Z comment: I said the lab needed one more redeploy to recover. It did not. At 18:26Z the lab polled, saw the new master 88862a9, and its checkout succeeded on the old code (
steps.checkout: ok, 4.6 s). The partial-clone failure was tied to the old target commit, not to the clone itself. #6220 is still a guard for the next time, but no redeploy is needed now. Lesson recorded in the skill: do not call the owner for a redeploy before the lab's next poll on a new commit.Lab run 88862a9 (finished 18:32:47Z, https://t27b-lab-production.up.railway.app/runs/88862a9499d239074622533ade539852fcba285b.json):
cargo test t27b: 31/31.Open:
tri t27b gen-checkbyte-compares gen C against the t27c lab (Closes tri t27b gen-check: prove gen/c/tri/t27b/steward.c byte-identical to master t27c gen-c on the t27c lab #6231). Live answer: SAME 7ab146aa.gHashTag commentedon Oct 4, 2026
Steward, 2026-10-04 20:15Z
Merged: #6235 (ledger re-bless), #6242 c5406e6 (bless accounts for a cap rise; doctor alarms only when the reference passes).
Coverage stack. Each PR is stacked on the one before. The numbers are local
t27b corpus specsruns on macOS arm64, not the lab:[N]Tfixed arrays[]Tslices[]T136 -> 0server/api.t27(in feat(t27b): plain enums as integer tags (Closes #6146) #6254) is not compiled by the reference: an unused struct names an undeclared type.StmtExprinstead of passing empty.[N]Tleftovers 39, shifts 36.Gates fixed this round:
M gen/line, including byte-exact regenerations. feat(t27b): the ratchet decides in steward.t27 #6218 and feat(t27b): ledger bless decides in steward.t27 #6228 had merged past it (rule Q27). It also diffed with two dots, so a stale branch was charged with master's gen/ change (feat(t27b): fixed-size arrays [N]T -- literals, indexing, .len, for (Closes #6245) #6247; rule Q28). Now: a byte compare againstt27c gen-<backend>, a merge-base diff, and a no-t27c case that fails (not checked != pass). Mutation controls are in the PR.tri t27b ready(feat(t27b): tri t27b ready -- the steward's merge gate decided in steward.t27 #6246): this tool judged a red non-required check against master's older SUCCESS while master's tip run was still going. Now that case reads as master PENDING and the PR WAITs (rule Q29). 81 spec tests pass on t27b and on the t27c lab, and the gen-c sha matches.t27c reference bugs filed: #6250 (
x[i..]->x[i],&[_]T{}->&.{ _ }), #6255 (const D: E = .v;loses its value).Lab: the last lab run is still master 88862a9: t27b 84 / reference 708 (11.9%), mismatch 0. The stack is measured there after it merges. A ledger re-bless follows in its own PR.
Merges run only through
tri t27b ready= READY. Order: #6247 -> #6249 -> #6254 -> #6258; #6253 -> #6246.🤖 Generated with Claude Code
gHashTag commentedon Oct 4, 2026
Steward, 2026-10-04 20:35Z
Merged since the last report: #6247 (fixed arrays
[N]T), #6253 (L2 gate is regen-aware, Closes #6226).Lab (https://t27b-lab-production.up.railway.app/runs/99b465ec2.json), as
tri t27b statusprints it:specs/tri/agent/faculty_board.t27, a t27b parser/typecheck defect still to be filed)tri t27b delta77e5c44 -> 99b465e: in-reference passes 85/710 -> 162/710, checked 85 -> 162; GAINED only, no REGRESSED / NEW-MISMATCH / CHECK-LOST.Top 5 first blockers (files): type
[]T136, EnumDecl 108, type f64 79, BenchBlock 70, type std.mem.Allocator 39. The open stack below covers the first, second and fourth.Open PRs (
tri t27b ready):[]T: WAIT (check-linked-issue queued;coveragered while master's own run is pending)tri t27b ready: WAIT (coverage,spec-guardsred, master pending)Load: 8.02 / 9.40 / 13.66.
Next: merge #6249 -> #6254 -> #6258 in order as each reaches READY; then f64 (79) on the scalar lane and
std.mem.Allocator(39) on the misc lane.gHashTag commentedon Oct 4, 2026
t27b steward -- 2026-10-04 21:40Z
Merged (all through
tri t27b ready,gh pr merge --merge, required checks green):[N]T[]T(Closes t27b: []T slices #6248)gen/file when t27c reproduces it byte for byte (Closes L2 gate: a regenerated gen/ file is read as a hand edit #6226)tri t27b readymerge gate decided inspecs/tri/t27b/steward.t27, incl. Q29: a master run still in progress means WAIT (Closes tri t27b ready: the steward's merge gate decided in steward.t27 #6244)Lab -- https://t27b-lab-production.up.railway.app/runs/cfff5e45309e7803df22a2886ff791285dbed32a.json (master cfff5e4, finished 21:36:24Z):
Top blockers (first rejection):
type f64110,type f3270,type ?T47,std.mem.Allocator44,[N]Tleftovers 39,<< >>36.Next: f64 lane started on #6180 (one lower.rs lane). New issue #6268: 8 specs whose bench bodies Zig rejects once referenced (found by the bench lane; lazy analysis hides them).
Slip learned (Q30): a watcher skipped the retarget of #6254 because one
readyread failed; watchers now decide the retarget fromgh pr view --json baseRefName.148 remaining items
t27b: an untyped list local that the code indexes lowers as a tuple, …
t27b: / and % of two integer constants fold at compile time, as Zig f…
t27b: the node scans of lower.rs move to specs/tri/t27b/ast_scan.t27 (C…
t27b: @intcast as an array index or a slice bound takes Zig's usize, …
t27b: a local bound to an array repeat [v; n] and passed as [N]T is t…
gHashTag commentedon Oct 10, 2026
Steward tick 2026-10-10 ~09:40Z (claim pid 28907; loop skill
t27b-loop, epic #8326)Lab line, run
1830512a2(finished 09:21:37Z):Landed this tick: #6620, #6623 (stale t27b test-block PRs, merged), #8471 (ledger rows for the 9 specs that landed since
a97cb9e5; #8322 closed), #8484 (re-bless from285512a21, pending). Queue cleanup: closed 7 PRs superseded by master with lab evidence (#6721, #6733, #6890, #6901, #6881, #8107, #8168) and their issues (#6470, #6471, #6476, #6479, #6481, #8060, #8061) plus #8359 (fixed by #8375).Remaining gap to 100%: 73 specs.
pass_vacuous— every one is covered by an in-flight test-block batch: t27b checked: test blocks for 7 tiny sibling specs in specs/a*, specs/agents #8488 (a/b_c + a_b/c, in CI), t27b checked: test blocks for 7 specs in specs/tools/trinity/tri (3 of 5) #6486 (7 tools/trinity/tri), t27b checked: test blocks for 8 specs in specs/numeric, specs/tri/math, specs/tri/graph, specs/isa, specs/physics #8473 (8 numeric/math/graph), t27b checked: test blocks for 9 specs in specs/basics, specs/benchmarks, specs/docs, specs/lsp, specs/mesh_routing, specs/multipath_router, specs/sandbox, specs/traffic_animator #8474 (9 misc), t27b checked: test blocks for 9 specs in specs/port/* and specs/tri/{agent,pipeline,utils} #8475 (9 port/tri), t27b checked: test blocks for 4 specs whose tests compare only strings (1 of 1) #8105 (4 functions/matrix), t27b checked: test blocks for 5 specs in specs/agents, specs/skills, specs/automation and specs/system (1 of 1) #8106 (5 agents/skills/automation), t27b checked: test blocks for 7 specs in specs/tools/mcp (1 of 2) #6816 (7 tools/mcp). When all land: 1286 − 23 = 98.2%.blocked— compiler families, one lane active: ExprArrayLiteral family (5 specs:zig_empty_typed_array,queen-lease,base/types,numeric/formatst27b: a typed list local of numeric literals that the reference prints as a tuple (formats.t27:628) #8175,CR-CHAT-03/ratchet_tree_resolution_guard) — lane in flight on t27b: an array length that is a compile-time expression ([N + 1]T) #7347 + t27b: a typed list local of numeric literals that the reference prints as a tuple (formats.t27:628) #8175. The rest by family:type i128×3 (t27b: run-time 128-bit integers (type i128 at run time in phi_f64_literals, eval_arith and source_text) #7915),ExprLiteral×2 (t27b: a Rust width suffix on an array repeat's value is dropped, as gen-zig does (ExprLiteral(literal), zig_field_syntax.t27) #7813 family),anytypet27b: an anytype parameter the body reads under @TypeOf(p) == T (queen-public-agents.t27 heartbeatTime) #7878, anonymous struct t27b: an anonymous struct result type whose fields are anonymous structs (merger_gate_selftest.t27) #7886, generic t27b: a std container field nothing reads (bogatyrs_registry.t27: plugins: std.StringHashMap(PluginEntry)) #7890,std.mem.Allocatort27b: a std.mem.Allocator that is stored but never called (specs/port/trinity/src/tri/gen_regression.t27) #7917,@sizeOft27b: @sizeOf of an integer, bool, float or zero-size struct type, as Zig answers it (sigmoid_activation.t27) #7817, frame-address pair (conformance, no issue yet),15_loops/gen_perceptron/gen_websocket/math/constants/trinity_loss/type_textsingles (tracked in ledger rows with blockers).scale_up.t27+eternal_monitor.t27: reference Zig does not compile (undeclared identifier), t27b passes → t27c gen: two specs build Zig with an undeclared identifier -- reference fails, t27b passes (outside the #6063 denominator) #8485.Also in flight: #8181 (sieve C9 rebuild after master merge), #8217 (bench bodies, master re-merged, checks re-running), #8218 rebuilt clean as bless-by-key-3 (the old branch history swallowed unrelated commits — ~1495-file two-dot diff; will be closed in favor of the new PR), #8216 remains owner-only (gate file).
Next tick: land the batches, re-bless the ledger from the new run, report the family queue.
t27b checked: test blocks for 5 specs in specs/agents, specs/skills, …
gHashTag commentedon Oct 10, 2026
Lab run on master c494cc5 finished (12:29Z): t27b 1254/1286 = 97.5% of reference-passing specs covered by real t27b passes (up from 1213/1286 = 94.3% this morning), mismatch 0, reference_disagree 0, jit/interp mismatch 0, crash 0.
Gain comes from today's test-block batches (#8539 repairs, #8496, #8507, #8181, #6816, #8498, #8533, #8541) — real runtime asserts, not vacuous:
t27b_pass_vacuous_where_reference_passesis down to 5.Remaining tail at this commit: 21 t27b_fail, 4 timeouts (5 retried), 2 pass-where-reference-does-not (outside the mismatch counter, #8485 class), 5 vacuous. The blocked-spec family map (i128 #7915, anytype #7878, anonymous struct #7886, generic #7890, Allocator #7917, @sizeof #7817, ExprArrayLiteral #7347/#8175 + #7382 in flight) is unchanged.
Ledger re-bless follows once the reseal PR (#8564) merges and the next master run lands — trinet_node's j_go test now passes, so its row moves too.
t27b: the node shapes and item scans of lower.rs move to specs/tri/t2…
corpus: repair the five unexpected failures at 760a787 + dupe-bodies …
t27b: std.mem.trim / indexOf / indexOfScalar / approxEqAbs call stdme…
t27b: std.mem.trim / indexOf / indexOfScalar / approxEqAbs call stdme…
gHashTag commentedon Oct 11, 2026
Final tick — t27b reference-parity, measured on master a9ad525 (native arm64 run of #9068's merge tree + targeted lab deltas, fresh reference cache):
specs/ml/**— cross-moduleusenames t27b still reports undeclared after master specs/ml tests run: 40 more specs green (10 -> 50 of 61); use resolution and two Zig emitter fixes (refs #8980) #8993 unlocked them on the reference. Follow-up lane: t27b: resolve cross-module use names - the 28 ml specs #8993 unlocked on the reference #9065.t27b-native-ratchetgreen against it locally, all nine categories 0.Lanes landed this epic: #8965 (std.mem.trim/indexOf/indexOfScalar, std.math.approxEqAbs, @sqrt comptime fold — PR #9068) on top of the earlier stdlib/optional/cast lanes.
🤖 Generated with Claude Code