Repository navigation
test(queen): kill the 39 surviving mutants of specs/queen/dispatch.t27 - #9961
Merged
Merged
Conversation
tri mutate spec on master cd8a656 (Railway lab, --jobs 8 --timeout 60 --zig-threads 6): 110 of 150 killed, 39 survived, 1 unviable. All 39 were test gaps; none is a dead line and none is equivalent. 36 asserts are added to existing test blocks, no function body changes: - next_state: every legal transition asserted once (24 survivors) - claim_of: failed, cancelled and stale verdicts; the send-back floor at its edge with a release spent; none and blank verdicts; both edges of the wait floor (8) - column_of: an accepted claim on an open issue is done (1) - chosen_of: e0, e3 and e4 win (3) - counts_against_issue(false) is true (1) - stall_reapable(120) is false: the comparison is strict (1) - followup_rounds(0) is 0 (1) Each of the 39 was planted by hand with tri mutate plant: killed on this spec, survived on the parent. Second pass: 149 of 150 killed, 0 survived. end_reason_constants_are_correct ran 0 runtime asserts (all comptime); two asserts that call the functions reading those constants make it non-vacuous: test-report prints vacuous passes 0 of 13. Seal regenerated with t27c seal --save on a fresh release build. Closes #9886 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
enabled auto-merge
October 17, 2026 14:28
Contributor
This was referenced Oct 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #9886
Result
tri mutate spec --file specs/queen/dispatch.t27 --jobs 8 --timeout 60 --zig-threads 6, Railway lab, fresh release build oft27candtriat mastercd8a65666:a894dc6f)e71997bc)The issue's line numbers were from
05e633d03; #6934 (end reasons) has since moved them by +27 and added 16 mutants. The 39 survivors are the same 39 the issue lists, at the new lines.Classification: 39 test gaps, 0 dead lines, 0 equivalent mutants. No function body changed; 38 asserts are added to existing
testblocks (36 for the mutants, 2 for the vacuous test below).Each survivor was then planted by hand with
tri mutate plant --file <spec> --line N --from ... --to ..., once on this PR's spec and once on the parent: all 39 are KILLED here (by the test named below) and SURVIVED on the parent.next_state(S_NONE, E_REFUSE) == S_REFUSED(the_table_moves_only_along_its_guards)next_state(S_RUNNING, E_REAP_STALL) == S_REAPEDnext_state(S_RUNNING, E_REAP_BOOT) == S_REAPEDnext_state(S_ENDED, E_VERDICT_ACCEPT) == S_ACCEPTnext_state(S_ENDED, E_VERDICT_ACCEPT) == S_ACCEPTnext_state(S_ENDED, E_VERDICT_SENDBACK) == S_SENDBACKnext_state(S_ENDED, E_VERDICT_ESCALATE) == S_ESCALATEnext_state(S_ENDED, E_VERDICT_WAIT) == S_WAITnext_state(S_ENDED, E_VERDICT_EMPTY) == S_EMPTYnext_state(S_ENDED, E_CRITERIA_CHANGED) == S_STALEnext_state(S_ENDED, E_FLOOR_PASSED) == S_RELEASEDnext_state(S_ACCEPT, E_CI_RED_UNDER_CEILING) == S_SENDBACKnext_state(S_SENDBACK, E_CRITERIA_CHANGED) == S_STALEnext_state(S_SENDBACK, E_CRITERIA_CHANGED) == S_STALEnext_state(S_SENDBACK, E_FLOOR_PASSED) == S_RELEASEDnext_state(S_ESCALATE, E_CRITERIA_CHANGED) == S_STALE!= S_REAPED)next_state(S_REAPED, E_REDISPATCH) == S_RUNNING!= S_REFUSED)next_state(S_REFUSED, E_REDISPATCH) == S_RUNNING!= S_RELEASED)next_state(S_RELEASED, E_REDISPATCH) == S_RUNNINGS_REAPED and)S_REFUSED and)claim_of(true, V_FAILED, 0, 0, 0) == C_FAILED(a_claim_follows_the_verdict_and_three_clocks)V_CANCELLEDclaim_of(true, V_STALE, 0, 0, 0) == C_FAILEDclaim_of(true, V_SENDBACK, 3600000, 1, 1) == C_FAILED(SENDBACK_FLOOR_MS == CEILING_RELEASE_MS, so the guard only matters once a release is spent)>)claim_of(true, V_NONE, 21600000, 0, 0) == C_FAILED(andV_BLANK)or)claim_of(true, V_WAIT, 21599999, 0, 0) == C_AWAITING_REVIEW<=)claim_of(true, V_WAIT, 21600000, 2, 0) == C_AWAITING_REVIEWcolumn_of(C_ACCEPTED, true, true) == COL_DONE(a_closed_issue_is_drawn_done_whatever_its_verdict)chosen_of(true, true, false, false, false) == 0(the_first_eligible_wins_in_any_order)chosen_of(false, false, false, true, true) == 3chosen_of(false, false, false, false, true) == 4counts_against_issue(false) == true(review_escalates_without_work_and_after_two_send_backs)>=)stall_reapable(120) == false(one_lease_one_owner_and_age_alone_reaps); the comparison is strict -- f58 measured 119 and 121, not 120 itself, and the comment says so>=)followup_rounds(0) == 0The one unviable mutant (not a survivor)
360 [ret-default]--is_valid_end_reasonemptied toreturn false;. Zig stops withencountered @panic at comptime: assertion failed: that is the comptime invariantall_end_reasons_validfiring, so the mutant is caught, buttri mutatefiles it as UNVIABLE rather than "killed by an invariant at compile time". It is the same before and after. How that error is classified is acli/tri/src/mutate.rsquestion (foreign code, outside this boundary).Vacuous test
end_reason_constants_are_correctran 0 runtime asserts on master (all of them fold at comptime). Two asserts that call the functions reading those constants are added:end_reason_to_name(END_REASON_COUNT - 1) == "unknown"andis_valid_end_reason(END_REASON_COUNT) == false.Acceptance (Railway lab)
t27c parse,typecheck(Typecheck OK (0 errors, 0 warnings)),gen-rust,gen-verilog,gen-c: all exit 0.t27c test-report specs/queen/dispatch.t27: 13/13 pass,vacuous passes 0 of 13(was 1 of 13).tri mutate spec: 0 survivors, so there is no equivalent-mutant list..trinity/seals/queen_QueenDispatch.jsonregenerated witht27c seal --saveon the fresh release build (t27c seal --verify: all hashes MATCH; tests vacuous 0). Only the zig and C gen hashes move (tests are lowered into those); rust and verilog are unchanged.Boundary respected: only
specs/queen/dispatch.t27and its seal.Refs #6971, #7077
🤖 Generated with Claude Code