Skip to content

test(claw): kill the real t27f_gate.t27 mutation survivors (#10740) - #10745

Merged
gHashTag merged 1 commit into
masterfrom
claw-mut-t27f-gate
Oct 19, 2026
Merged

gHashTag merged 1 commit into
masterfrom
claw-mut-t27f-gate

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

What

The mutation sweep of specs/claw/t27f_gate.t27 (#10740) left 53 of 180 mutants alive. This PR adds 11 tests and leaves the production code unchanged. Of the 53, 35 are now caught. The 18 still alive are equivalent: no input can tell them apart from the original.

The new tests cover:

  • Ranges: holds never reads past its range, and a spec_hash line that says saved=missing is not recorded.
  • Record shape: a record with an empty path or no URL is unreadable, while a one-character path is fine. A record line with no output lines under it is its own unreadable row, in the conclusion, the counts, the table and the annotations.
  • Repo line: it may come after other lines.
  • Output:
    • put_decimal(10) writes 10.
    • put_query keeps a, z, A, Z, 0, 9 and escapes the bytes just outside those ranges.
    • The digest column shows a whole field when there is no URL, 12 characters of a 13-character digest, and an empty digest as empty. The graph column is - when there is no URL.
    • A neutral row is counted as neutral.
    • A report or annotation text that fits its buffer exactly is kept, not replaced by the overflow text.
  • Scope: a bare .t27, a one-letter line and specs/.t27 are not in scope. A set that is exactly full fails closed on the next seed or importer. An edge line with no tab adds nothing. The edge line after a skipped one is read from its first byte.

The 18 equivalent survivors

Line Mutant Why no input can kill it
193, 220, 316, 341, 620, 628 < to <= on a line or byte loop The extra pass is over an empty range: holds, has_prefix and scope_spec all answer false on it.
286 f + k < t to <= in consumer_index A match still needs f + k == t, which the extra byte breaks.
331, 352 >= to > on a missing tab The code that follows finds no tab in an empty range and returns the same answer.
332 p2 + 1 to p2 + 2 An empty digest is still read from the tab, so it stays invalid.
385 c > worst to >= It reassigns an equal value.
434 p3 > p2 + 1 + DIGEST_SHOWN to >= At equality, both branches show the same bytes.
435 p2 < x to <= It writes an empty range.
465 p > cap to >= in put_overflow Both return cap.
552 p1 + 1 to p1 + 2 in put_annotation Only an empty path reaches it, and its only caller skips empty paths.
632 p > s to >= scope_spec on an empty range is false.
991, 992 < to <= in the invariant The constants 0, 1, 2 satisfy both.

The two survivors at line 632, p < t to <= and and to or, were caught by the edge line with no tab.

Seals

  • Resealed claw_ClawT27fGate.
  • Resealed the four seals that record t27f_gate.t27 as a dependency: claw_ClawT27fGatePins, t27f_t27f_deps_card, t27f_t27f_spec_deps and t27f_t27f_why_card. Without that, their dependency hash would go stale.
  • Regenerated gen/c/claw/t27f_gate.c, because the generated C carries the tests.

Verification (Railway lab, master 2845fee; #10744 since then touches none of these dependencies)

  • t27c test-report: 39 of 39 tests pass with 0 vacuous passes, and the invariant is proved.
  • t27b: 39 passed, 0 failed, and the invariant holds.
  • Re-sweep of the 53 survivors: 35 caught and 16 survived, all of them in the equivalent table. 991 and 992 did not apply, because the invariant moved down by 122 lines.
  • seal --verify: 35 of 35, covering specs/claw/*.t27, specs/verified/gen_file_check.t27 and the three t27f importers.
  • gen-c: the other 6 committed gen/c/claw/*.c files are byte-identical.
  • python3 tools/dupe_scan.py: "no new duplicate body".
  • Stale-dependency scan over .trinity/seals/claw_*.json and t27f_*.json: 3 entries, all already listed in seal --verify never checks dependency hashes; 21 claw seals record stale ones #10727 and none from this PR:
    • t27f_T27fHot cites seal_identity.
    • t27f_frame_cache cites claw/sarif and claw/text.

Closes #10740.

🤖 Generated with Claude Code

Eleven tests against the 53 survivors of the t27f_gate sweep. 35 are now
caught; the 18 left are equivalent (a loop bound one past an empty range,
an equal value reassigned, a field bound that only an empty field reaches).
Production code is unchanged.

Resealed ClawT27fGate and the four seals that record t27f_gate.t27 as a
dependency (ClawT27fGatePins, t27f deps_card, spec_deps, why_card), and
regenerated gen/c/claw/t27f_gate.c, which carries the tests.

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

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-19 01:06:13 UTC

Summary

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

These columns do not partition: 4 + 44 + 0 + 0 = 48, 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).

@gHashTag
gHashTag merged commit be665ac into master Oct 19, 2026
32 of 35 checks passed
gHashTag added a commit that referenced this pull request Oct 19, 2026
The deps_card seal conflicted because its closure holds claw/t27f_gate.t27, changed on
master by #10745; the seal is re-saved on the lab in the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 19, 2026
… in #10745) (Refs #10728)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 19, 2026
…not refused (#10747)

* t27f: deps card draws a long spec name abbreviated by a stated rule, not refused (Refs #10728)

A shown name past 58 bytes keeps its first segment, `/...`, and the
longest run of whole trailing segments that fits; when none fits, `...`
and its last 55 bytes. Only drawn bytes are checked for quotability, and
the text size follows the drawn length.

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

* t27f: deps card -- a 58-byte name is checked whole, the test that kills a `<` bound (Refs #10728)

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

* t27f: re-seal deps_card; skill records the long-name rule, its sweep and four lab traps (Refs #10728)

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

* t27f: re-seal deps_card on the merged closure (claw/t27f_gate changed in #10745) (Refs #10728)

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 19, 2026
…) (#10767)

* t27f: deps card draws a long spec name abbreviated by a stated rule, not refused (Refs #10728)

A shown name past 58 bytes keeps its first segment, `/...`, and the
longest run of whole trailing segments that fits; when none fits, `...`
and its last 55 bytes. Only drawn bytes are checked for quotability, and
the text size follows the drawn length.

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

* t27f: deps card -- a 58-byte name is checked whole, the test that kills a `<` bound (Refs #10728)

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

* t27f: re-seal deps_card; skill records the long-name rule, its sweep and four lab traps (Refs #10728)

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

* t27f: re-seal deps_card on the merged closure (claw/t27f_gate changed in #10745) (Refs #10728)

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

* t27f: deps card bands show the most-imported neighbours first, ties in edge-list order (Closes #10762)

Each band ranks its specs by how many distinct specs import them in the
whole edge list; a repeated line counts once, equal scores keep the
edge-list order, and the subtitle states the order. Counts and +N more
are unchanged. The hidden-name check follows the ranking.

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

* t27f: deps card subtitle without a colon, which ffmpeg split the graph on; test every fixed text (Refs #10762)

The render of the hub card failed: drawtext read the ':' in
'each band: most imported first' as an option separator and refused
the graph. The tests compared the graph text, so they passed.
dcard_text_ok now checks every fixed text the card draws.

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

* t27f: re-seal deps_card for the ranked bands; skill gets the ranking, its sweep and three lab traps (Refs #10762)

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.

test(claw): t27f_gate.t27 mutation sweep, 53 survivors of 180 to classify

1 participant