Mutation runs write CRC bin test fixtures into the real plugin tree #1671

Open
opened 2026-11-10 16:51:37 +00:00 by jared · 0 comments
Owner

Problem

A mutation run writes CRC fixture files into the real plugin tree. The files make the tree dirty, and worktree finish then cannot remove the worktree. A test that writes outside its temporary project under a mutant can also overwrite a real file.

Observed

During the #1666 group 2 matrix run (2026-11-10, 11:33 to 11:39), the worktree got an untracked directory plugins/os-sdlc/docs/crc/run/. Its files date from 11:37:34: ledger.tsv, baseline.json, wave0/cycle-edges.tsv, wave0/holders.tsv, wave0/reach-through.tsv, wave0/error-lineage.tsv, wave0/score.tsv, wave0/structure-rulings.tsv, wave0/structure-governs.tsv, wave0/revisit-files.txt. The run mutated the 97 lib/ files that the test/crc/{tickets,sweep,records,census}_bin_test.rb candidates kill in. The main checkout also holds an untracked plugins/os-sdlc/docs/crc/ from earlier mutation passes.

worktree finish ticket-1666
fatal: '/home/jared/dev/cc-os/.claude/worktrees/ticket-1666' contains modified or untracked files, use --force to delete it
exit 4

The CRC bin tests name the run directory with a relative path, for example RUN_DIR = "docs/crc/run" in test/crc/sweep_bin_test.rb. Unverified: a mutant that drops the project root in the code that joins the run directory makes the path resolve against the process working directory, which is plugins/os-sdlc. The mutant is not identified.

Reproduce

From plugins/os-sdlc, run a matrix run on the lib/ files listed in docs/research/mutation-testing/2026-11-10-redundant-test-review/README.md (run g2) with every test file as --test, then git status --short plugins/os-sdlc/docs/crc.

Origin

  • Trigger: #1666 group 2 matrix run, bundle exec mutineer run <97 lib files> --test <every test file> --matrix --strategy redefine --jobs 8
  • Improvised this session: deleted the worktree copy of plugins/os-sdlc/docs/crc/ (my own run made it) and ran worktree finish again
  • Chain: dirty tree after a mutation run (git status) ← CRC fixture files written under the plugin directory (file dates during the run) ← relative run-directory path resolved against the process working directory (unverified) ← IMPROVISATION (the hypothesis has no source)
  • Root candidate: none found; searched mutation, mutineer, docs/crc, untracked, dirty, working directory, worktree finish
  • Where: plugins/os-sdlc/test/crc/*_bin_test.rb, InProcessBin, and the lib/os_sdlc/crc code that joins the run directory to the root
  • Session: c2e6868b-f4fd-4728-baf0-9f28d44f19c4
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/c2e6868b-f4fd-4728-baf0-9f28d44f19c4.jsonl

VERDICT: CREATE (ticket-skeptic, 2026-11-10): no open ticket covers a mutation run that writes CRC fixtures outside the temporary project.

## Problem A mutation run writes CRC fixture files into the real plugin tree. The files make the tree dirty, and `worktree finish` then cannot remove the worktree. A test that writes outside its temporary project under a mutant can also overwrite a real file. ## Observed During the #1666 group 2 matrix run (2026-11-10, 11:33 to 11:39), the worktree got an untracked directory `plugins/os-sdlc/docs/crc/run/`. Its files date from 11:37:34: `ledger.tsv`, `baseline.json`, `wave0/cycle-edges.tsv`, `wave0/holders.tsv`, `wave0/reach-through.tsv`, `wave0/error-lineage.tsv`, `wave0/score.tsv`, `wave0/structure-rulings.tsv`, `wave0/structure-governs.tsv`, `wave0/revisit-files.txt`. The run mutated the 97 `lib/` files that the `test/crc/{tickets,sweep,records,census}_bin_test.rb` candidates kill in. The main checkout also holds an untracked `plugins/os-sdlc/docs/crc/` from earlier mutation passes. ``` worktree finish ticket-1666 ``` ``` fatal: '/home/jared/dev/cc-os/.claude/worktrees/ticket-1666' contains modified or untracked files, use --force to delete it exit 4 ``` The CRC bin tests name the run directory with a relative path, for example `RUN_DIR = "docs/crc/run"` in `test/crc/sweep_bin_test.rb`. Unverified: a mutant that drops the project root in the code that joins the run directory makes the path resolve against the process working directory, which is `plugins/os-sdlc`. The mutant is not identified. ## Reproduce From `plugins/os-sdlc`, run a matrix run on the `lib/` files listed in `docs/research/mutation-testing/2026-11-10-redundant-test-review/README.md` (run g2) with every test file as `--test`, then `git status --short plugins/os-sdlc/docs/crc`. ## Origin - Trigger: #1666 group 2 matrix run, `bundle exec mutineer run <97 lib files> --test <every test file> --matrix --strategy redefine --jobs 8` - Improvised this session: deleted the worktree copy of `plugins/os-sdlc/docs/crc/` (my own run made it) and ran `worktree finish` again - Chain: dirty tree after a mutation run (`git status`) ← CRC fixture files written under the plugin directory (file dates during the run) ← relative run-directory path resolved against the process working directory (unverified) ← IMPROVISATION (the hypothesis has no source) - Root candidate: none found; searched mutation, mutineer, docs/crc, untracked, dirty, working directory, worktree finish - Where: `plugins/os-sdlc/test/crc/*_bin_test.rb`, `InProcessBin`, and the `lib/os_sdlc/crc` code that joins the run directory to the root - Session: c2e6868b-f4fd-4728-baf0-9f28d44f19c4 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/c2e6868b-f4fd-4728-baf0-9f28d44f19c4.jsonl VERDICT: CREATE (ticket-skeptic, 2026-11-10): no open ticket covers a mutation run that writes CRC fixtures outside the temporary project.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1671
No description provided.