src/runtime.c has never had a complete mutation run #24

Open
opened 2026-08-02 19:04:29 -04:00 by tachikoma · 0 comments
Collaborator

Source: TODO.md §6 item 34 (at 9151438)

The one attempted was cut off at 551 of 997 mutants after ninety minutes. What it did cover
included all three regions the value-pool, trap and skipped-block work touched.

Survivors worth naming:

  • report_and_reraise(): closed. Deleting the LOG_ERROR_WITH_MESSAGE survived because
    nothing looked at the log -- and that line is the visible half of the trap fix.
    tests/trap_verbs.c now redirects akerr_log_method into a buffer and drives the path with a
    sink that refuses every write, which kills it.
  • The skipped-block guard: four survivors, three of them equivalent for any program that can be
    written -- loopFirstLine != 0 mutated to != 1 differs only for a loop on line 1,
    waitingForCommand[0] to [1] only for a one-character wait, and flipping strcmp(...) == 0 to
    != 0 moves the release from the FOR to the NEXT that must follow it. A test with a loop on
    line 1 would kill the first.
  • A NULL-argument guard in akbasic_runtime_reserve_globals(), the same survivor class every file
    in this tree has.

The remaining 446 mutants are unexamined. A full run is a release-workflow job, not a
per-commit one -- .gitea/workflows/release.yaml already mutates the whole tree -- and what this
issue is for is that the partial result has been read rather than filed unopened.

Measured alongside: src/variable.c scores 68.2% with every mutant on the inline-storage lines
killed
, and src/runtime_trap.c 82.5% with no survivors in set_error_variables().

Files: src/runtime.c, .gitea/workflows/release.yaml


Filed by Tachikoma (Claude Code, Opus 5, 1M context)

**Source:** TODO.md §6 item 34 (at 9151438) The one attempted was **cut off at 551 of 997 mutants** after ninety minutes. What it did cover included all three regions the value-pool, trap and skipped-block work touched. Survivors worth naming: - `report_and_reraise()`: **closed.** Deleting the `LOG_ERROR_WITH_MESSAGE` survived because nothing looked at the log -- and that line *is* the visible half of the trap fix. `tests/trap_verbs.c` now redirects `akerr_log_method` into a buffer and drives the path with a sink that refuses every write, which kills it. - **The skipped-block guard: four survivors, three of them equivalent** for any program that can be written -- `loopFirstLine != 0` mutated to `!= 1` differs only for a loop on line 1, `waitingForCommand[0]` to `[1]` only for a one-character wait, and flipping `strcmp(...) == 0` to `!= 0` moves the release from the `FOR` to the `NEXT` that must follow it. **A test with a loop on line 1 would kill the first.** - A NULL-argument guard in `akbasic_runtime_reserve_globals()`, the same survivor class every file in this tree has. **The remaining 446 mutants are unexamined.** A full run is a release-workflow job, not a per-commit one -- `.gitea/workflows/release.yaml` already mutates the whole tree -- and what this issue is for is that the *partial* result has been read rather than filed unopened. Measured alongside: `src/variable.c` scores 68.2% with **every mutant on the inline-storage lines killed**, and `src/runtime_trap.c` 82.5% with **no survivors** in `set_error_variables()`. **Files:** `src/runtime.c`, `.gitea/workflows/release.yaml` --- Filed by Tachikoma (Claude Code, Opus 5, 1M context)
tachikoma added this to the 0.1.x milestone 2026-08-02 19:04:29 -04:00
tachikoma added the test-coverageblast-radius:mediumstatus::grooming labels 2026-08-02 19:04:29 -04:00
Sign in to join this conversation.