Skip to content

Correct the Zig claim: it does not drop the field, and gen-zig is not a subcommand - #3231

Merged
gHashTag merged 1 commit into
masterfrom
correct-the-zig-claim
Sep 5, 2026
Merged

gHashTag merged 1 commit into
masterfrom
correct-the-zig-claim

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 5, 2026

Copy link
Copy Markdown
Owner

I wrote — in #3225, in the docs/now entry of #3226, in skill §566, and in
the module header of cli/tri/src/misread.rs — that for bad : 0, the Zig backend
"drops the field entirely, which is worse because nothing downstream can notice".

That came from t27c gen-zig, which is not a subcommand. The Zig backend is gen.
The empty output of a misspelled command was read as a dropped field. t27c prints
error: unrecognized subcommand 'gen-zig' on stderr and I was piping only stdout.

What is actually true, measured on two four-line probes

pub const Thing = struct {
    ok: u8,
    bad: 0,        // from `bad : 0,`
    empty: void,   // from `empty : ,`
};
shape zig build-obj zig test --test-no-exec
bad: 0, OK OK
empty: void, OK OK

The corrected version is the stronger finding

Rust rejects both shapes and C rejects both. Zig accepts both at both readings, so
the Zig column of the corpus counts these specs as generating and accepting — and no
shape read from Zig output would flag empty: void either, because void is a
legitimate Zig type.

That is the real reason tri misread reads Rust and C, and it is now stated as a
reason rather than left as an accident.

Blast radius, checked rather than assumed

  • The corpus numbers are untouched. bootstrap/src/service.rs:1287 invokes
    ["gen", &sp], so 581 generate / 308 accept / 190 analyse were never produced by
    the misspelling.
  • The fan-out agent that measured the Zig column reproduced 581/308/190 independently,
    so its findings stand.
  • tri misread's detectors and its 22/1/0/1 reading are unaffected — they read Rust
    and C only.

Corrected here: skill §566 and the misread.rs module header, plus a docs/now entry.
#3225 carries a correction comment.

Refs #3225

… a subcommand

I wrote that for `bad : 0,` the Zig backend "drops the field entirely, which is
worse because nothing downstream can notice". That came from `t27c gen-zig`, which
is not a subcommand -- the Zig backend is `gen` -- and the empty output of a
misspelled command was read as a dropped field. `t27c` says so on stderr and I was
piping only stdout.

The real behaviour, measured on two four-line probes: `gen` writes `bad: 0,` and,
for the empty type slot, `empty: void`, and BOTH are accepted by `zig build-obj`
AND by the deeper `zig test --test-no-exec`.

The corrected version is the stronger finding. Rust and C reject both shapes; Zig
accepts both at both readings, so the Zig column counts these specs as generating
and accepting, and no shape read from Zig output would flag `empty: void` either
because `void` is a legitimate Zig type. That is the reason `tri misread` reads
Rust and C, and it is now stated as a reason rather than an accident.

Blast radius checked rather than assumed. service.rs:1287 invokes ["gen", &sp], so
the corpus numbers 581/308/190 were never produced by the misspelling, and the
fan-out agent reproduced them independently. `tri misread`'s detectors and its
22/1/0/1 reading are unaffected. Corrected here: skill §566 and the module header
of cli/tri/src/misread.rs; issue #3225 carries a correction comment.

Refs #3225

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

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit 70b4aae into master Sep 5, 2026
27 of 29 checks passed
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 02:21:24 UTC

Summary

Status Count
Total Open PRs 18
PRs with Failing Checks 12
PRs with All Checks Green 6
READY 1
FAILING 12
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != 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 added a commit that referenced this pull request Sep 5, 2026
…3251)

`Documented t27c subcommands exist` reads backticked `t27c <sub>` mentions in live
documents and fails on any name that does not exist, unless the document says so
in words it recognises: not implemented / not built / does not exist / never
existed / no such subcommand.

#3231 added a paragraph explaining that `t27c gen-zig` is not a subcommand. It
says the right thing and matches none of those patterns, so the gate went red.
#3231 merged at 02:21:25Z and the gate's first master failure is at 02:21:28Z --
the run its own merge triggered. Seven successes before, five failures after.

Worth recording: I then read three red master runs as evidence the gate was
pre-existing and not mine, and `tri pr ready` said "also failing in 4 other
place(s) -- pre-existing", which is true and does not mean what I took it for. A
defect merged to master fails on every later pull request, which is precisely what
pre-existing looks like from a branch-versus-master comparison. The separating
question is one command: when did this gate last pass, and what landed between.

Repair is one phrase. The checker now reports ok.

Refs #3241

Co-authored-by: Claude Opus 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