Skip to content

claw: gates.t27 table checks take their table so a test can show they fail - #10691

Merged
gHashTag merged 1 commit into
masterfrom
claw-gates-table-checks
Oct 18, 2026
Merged

gHashTag merged 1 commit into
masterfrom
claw-gates-table-checks

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

What

This applies the #10686 fix to specs/claw/gates.t27. The three inventory checks read only constant, correct tables, so no test could make them fail.

Change Mutants it kills
rows_filled(names, events); every_row_filled() wraps it. Test: an empty name at row 66, an empty trigger set at row 0 return false to return true on both columns
names_unique_in(names, lens); all_names_unique() wraps it. Test: a repeat at rows 4-5 and at rows 0-66 (i + 1) to (i + 2), and the return false on a match
classes_known(cl); all_classes_known() wraps it. Test: G_UNKNOWN at row 66 fails; each of the three real classes alone passes each != to ==, and the return false

gates.t27 is lowered by t27c gen-c into the committed gen/c/claw/gates.c, and the gate-topology harness compiles that file. A whole-table copy (var n : [67]str = NAMES;) lowered to an invalid C initializer. The fixtures are therefore declared = undefined and filled element by element. gen/c/claw/gates.c in this PR is t27c output.

Verification (Railway lab)

  • t27c test-report: gates 23 tests, 23 pass, 0 vacuous passes. t27b: 23 pass.
  • These use gates and still pass in t27c and t27b: service (8), preview (19), gates_pins (5), verified/gen_file_check (12).
  • I re-ran 8 mutants on the new check lines: 8 caught.
  • gen-c of gates compiles in the gate-topology printf harness. On the real .github/workflows listing it prints claw: matrix is current and exits 0.
  • seal --save for gates, then seal --verify: 32 of 32 match (31 claw specs plus verified/gen_file_check).

Not in this PR (anomaly, compiler-side)

gen-c lowers names[i] == "" to a C pointer comparison (cc -Wall warns: "comparison with string literal results in unspecified behavior"). In the C build, the empty-name check therefore compares addresses, not contents. The emitter is foreign code (Rust), so this PR records the problem and does not fix it.

Closes #10690

🤖 Generated with Claude Code

…y fail

every_row_filled, all_names_unique and all_classes_known read only the constant
inventory, so their return-false branches were dead under test (the #10686 pattern).
Each now takes its columns as fixed-size array parameters; the public names wrap
the constants. New tests hand in a copy with one hole, one repeated name, or one
unknown class.

gates.t27 lowers to the committed gen/c/claw/gates.c, so the fixtures are declared
= undefined and copied element by element: a whole-table initializer is invalid C.
gen/c/claw/gates.c is regenerated by t27c gen-c.

Closes #10690

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) October 18, 2026 22:25
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 22:27:25 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 44
PRs with All Checks Green 6
READY 3
FAILING 44
PENDING 0
NO CHECKS YET 0

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

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fad12492937a != 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).

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.

claw: gates.t27 table checks can never fail under test

1 participant