Skip to content

control.t27: whole-file mutation pass (sections 1-7) #7074

Closed

Description

@gHashTag

Problem

specs/queen/control.t27 has never had a whole-file mutation pass.

A function whose asserts pass but whose guard can be flipped unseen is a false claim of coverage, as the gaps closed in #7001, #7003 and #7006 showed.

Expected

  • tri mutate spec --file specs/queen/control.t27 --jobs 8 --timeout 60 is run on the lab against the head of claude/queen-actors-next2.
  • Every survivor is either:
    • killed by a new assert (a test gap), or removed (a dead line), or
    • named as one of the three equivalence shapes in the queen-actors-loop skill, one line per survivor.
  • Constants are nudged by hand, since the tool does not mutate them.
  • The counts are printed by the run, not typed.

Boundary

specs/queen/control.t27 only. No change to its contract except where a survivor shows a dead line.

Done when

The survivor list is in this issue and in the commit body, and every non-equivalent survivor has a killing assert.

Refs #6971, #6657

Activity

  1. gHashTag commented on Oct 6, 2026

    @gHashTag
    OwnerAuthor

    Whole-file pass done (lab, a master build of tri after #7043, --jobs 8 --timeout 60, one locked foreground run per spec sha).

    Before (spec sha 2c92fe84): 173 mutants, 161 killed, 12 survived.

    8 test gaps, closed in local commit 44501d567 on claude/queen-actors-next2 (asserts added to existing tests; no new test, no new function):

    Line Mutant Assert that kills it
    68 drop kind == EV_TASK_CREATED reaction_of(EV_TASK_CREATED) == R_DISPATCH
    72 drop kind == EV_EVIDENCE reaction_of(EV_EVIDENCE) == R_REVIEW
    73 drop kind == EV_REVIEW reaction_of(EV_REVIEW) == R_DISPATCH
    141 drop holder != me in renew_lands renew_lands(9, 7, false, fence, 2) == false
    198 fence_after_cancel returns 0 fence == 5 after fence_after_cancel(4)
    199 fence + 1 -> fence - 1 same, plus write_lands(fence, 5) == true
    237 fits >= -> > fits(1, 1, 1024, 1024) == true
    276 drop AE_RETIRE from AG_IDLE agent_next(AG_IDLE, AE_RETIRE) == AG_RETIRED

    Each one was applied by hand: killed on the new commit, and all 8 SURVIVED on the parent (negative control). An earlier version of this comment said three; only two had been run at that point, and the other six were run after.

    After (spec sha 19c9ae4b): 173 mutants, 169 killed (all by zig test), 4 survived. All four are equivalent, because both sides give the same value at equality:

    • 214 capacity max_workers < cap -> <=: assigns cap its own value
    • 217 capacity by_memory < cap -> <=: same
    • 223 free_slots running >= cap -> >: at equality cap - running = 0
    • 230 offers_per_wake eligible < slots -> <=: returns the equal value

    The commit lands with #7059's commit (f8119a488) as one PR after #7060 merges.

    Process note: the first launch was wrapped in a retry loop. An empty ssh answer was read as "not started", so up to three passes ran at once and reported 163/173 with 2 false kills. The numbers above come from a single run that held flock -n after a ps busy-check, with no retry.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions