Skip to content

feat(claw): lab_receipt, lab_disk, red_origin and mut_known -- four gates for lab checks, red checks and mutation sweeps - #10885

Merged
gHashTag merged 6 commits into
masterfrom
claw-lab-receipt
Oct 19, 2026
Merged

gHashTag merged 6 commits into
masterfrom
claw-lab-receipt

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

What

Four new claw gates in one PR, so they cost the queue one run set. Two of them are for hand-run Railway lab checks, the third triages a failing PR check, and the fourth reads a mutation sweep against the argued-equivalent list. None of them changes production code.

lab_receipt (#10810): is a lab check evidence about the patch?

specs/claw/lab_receipt.t27 (module ClawLabReceipt) judges one hand-run lab check and returns pass or hold, with a reason: not applied, silent, empty, red or vacuous. The case is the 2026-10-19 lab apply that changed nothing, while the checks after it still printed green on master's files.

  • t27c test-report: 18 of 18 tests pass, 0 vacuous.
  • t27b: 18 of 18.
  • Mutation sweep: 28 of 28 mutants caught.

lab_disk (#10813): does the lab volume have room?

specs/claw/lab_disk.t27 (module ClawLabDisk) reads df -Pk text for one mount and returns go, warn or hold:

  • Under 1 GiB free holds.
  • Under 5 GiB, or under 10% free, warns. The 10% line is the kubelet's nodefs.available<10%.
  • A mount that df does not list, or a line with no readable size, holds.

The case is the t27c lab's /data, with 0 KB free of 47.7 GB.

red_origin (#10821): whose red is it?

specs/claw/red_origin.t27 (module ClawRedOrigin) reads four inputs: the PR's changed paths, the paths a failing log names, the paths master changed since the PR's base, and master's state on the same check. It returns own, inherited or unknown, with a reason:

  • A named file that the PR changes makes the red own.
  • A green master makes it own: the merge fails it.
  • A red master makes it inherited.
  • With no finished master run, a named file that changed on master makes it inherited.

The cases are #10797's four reds, none of them its own.

mut_known (#10835): is a surviving mutant one we already argued?

specs/claw/mut_known.t27 (module ClawMutKnown) keys an argued-equivalent survivor by its sweep line minus the line number, so the key still matches after lines above it move. It reads a sweep and returns pass or hold, with a reason: silent, unreadable, harness (NOAPPLY), new, prune or pass. The case is red_origin's two survivors: first reported at lines 76 and 97, then at 79 and 100 after a header edit.

The sweep mutates trailing // comment text as well as code. A survivor that can only have edited a comment is classed comment and passes without a list entry (#10846). A line is a comment edit when all of these hold:

  • its <from> text appears in the source text;
  • every match starts after the //;
  • no quote byte comes before the //.

When in doubt, the line stays new. Negative controls keep it new for:

  • code before the //;
  • a quote or a string;
  • a <from> that the cut hid;
  • an edit of, or across, the //;
  • an empty <from>, no separator, or no bracket.

KNOWN_CLAW holds 25 keys:

A test passes those two sweeps' 18 lines with no new survivor: 13 known, 2 comment edits and 3 TIMEOUT.

Measured:

Wiring the verdict into the sweep script itself needs foreign code, so it is parked in #10838.

Seals and rows

  • New seals claw_ClawLabReceipt, claw_ClawLabDisk, claw_ClawRedOrigin and claw_ClawMutKnown, each with closure text.t27.
  • Four new rows each in docs/reports/t27b_expectations.json and docs/claw/README.md.

Verification (Railway lab, one tree with #10797's changes and all four specs)

  • seal --verify: 38 of 38 over specs/claw/*.t27.
  • t27c gen-c: exit 0 for all four.
  • The duplicate-body scan: "no new duplicate body, and none of the known groups grew".

Closes #10810.
Closes #10813.
Closes #10821.
Closes #10835.
Closes #10846.

🤖 Generated with Claude Code

gHashTag and others added 6 commits October 19, 2026 12:36
…h applied and the report ran

specs/claw/lab_receipt.t27 (ClawLabReceipt) judges one hand-run lab check:
applied files must equal the diff's file count, and the t27c test-report
must carry tests, FAIL and vacuous counts with tests > 0 and both others 0.
Anything else holds, with one reason. The case is tick 38, where a failed
git apply still printed seals 33 of 33 on master's files.

t27c 18/18, 0 vacuous; t27b 18/18; 28/28 mutants caught; sealed.

Refs #10810

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
specs/claw/lab_disk.t27 (ClawLabDisk) reads df -Pk text for one mount:
under 1 GiB free holds, under 5 GiB or under 10% free warns, a mount df
does not list or a line with no readable size holds. The case is the t27c
lab's /data at 0 KB free of 47.7 GB on 2026-10-19.

t27c 18/18, 0 vacuous; t27b 18/18; 49/50 mutants caught (the survivor is
equivalent); sealed.

Refs #10813

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aster's

When Auto-fix reports a failing check, red_origin reads the PR's changed
paths, the paths the failing log names, the paths master changed since the
PR's base, and master's state on the same check, and says own, inherited or
unknown. PR #10797 had four reds and none was its own; each took a log read
and a git log by hand, and a literal "fix and push" would have put other
lanes' files into the PR.

t27c 18/18 with 0 vacuous, t27b 18/18, mutants 28/30 caught (two loop
bounds are equivalent), gen-c ok, sealed. Lines are tagged O, apart from
required_red.t27's R.

Closes #10821

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, not line number

A survivor argued equivalent in an issue was named by its line number,
and the first edit above it moved the number (red_origin: 76/97, then
79/100). mut_known keys a known survivor by its sweep line minus the
line number, reads a sweep against the list and returns pass or hold:
silent, unreadable, harness (NOAPPLY), new, prune or pass.

KNOWN_CLAW carries red_origin's two, lab_disk's one and this module's
own five keys. Its own sweep passes on its own list, and the drift case
held live: a header line moved all seven survivors down one line and
every one still matched.

Lab: t27c 24/24 (0 vacuous), t27b 24/24, gen-c rc=0, sweep 104 of 111
caught (7 equivalent, all known), seal --verify 38/38, dupe scan clean.

Closes #10835

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…alents to the known list

KNOWN_CLAW grows from 8 to 22 keys: ten ledger_union keys (eleven
survivors, #10787) and four social_visuals keys (#10773), taken from
their sweeps on the Railway lab on 2026-10-19. A new test reads the
eighteen lines of those two sweeps (fifteen SURVIVED, three TIMEOUT)
and passes them with no new survivor; a negative control shows a key
cut at 90 characters keeps its trailing space.

sweep_line now takes the counts, not a reason, so it is no longer a
byte copy of lab_disk's disk_line (the duplicate-body scan caught it).

Lab: t27c 26/26 (0 vacuous), t27b 26/26, gen-c rc=0, sweep 104/111 with
the seven survivors all on the list, seal --verify 38/38, dupe scan ok.

Refs #10835, #10787, #10773.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s no known entry

The lab sweep mutates trailing // comment text as well as code, and
two of social_visuals' four survivors (#10773) changed only a comment.
A new class C_COMMENT passes such a survivor without a list entry.
A line is a comment edit when its <from> text appears after the
first " :: ", every match starts after the //, and no quote byte
comes before the //. When in doubt the line stays new.

The two social_visuals comment keys leave KNOWN_CLAW; five in_comment
loop-guard keys join it, each argued in the doc comment, for 25 keys.
Negative controls keep new: code before the //, a quote, a string, a
<from> the cut hid, an edit of or across the //, an empty <from>, no
separator, no bracket. A CAUGHT line in a comment stays CAUGHT.

Lab: t27c 28/28 (0 vacuous), t27b 28/28, gen-c rc=0, sweep 140/152
with all twelve survivors on the list, seal --verify 38/38, dupe
scan ok.

Refs #10846, #10835, #10773.

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:47:27 UTC

Summary

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

These columns do not partition: 2 + 36 + 0 + 0 = 38, 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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment