audioArgs' Drop arm (ffmpeg/FFmpegCommandBuilder.kt:181) was ci == 0:
AudioPlan.Drop->listOf("-an")
The suite's only -an assertion is in "gif generates a palette to avoid banding and drops audio" — and that one comes from the image path (:79/:90), which emits -an directly and never reaches audioArgs. Two sites, one string, one tested.
It is a live path
AdvancedPicker renders all of AudioCodec.entries including NONE, ContainerCapabilities.validate permits audio-off whenever the input has video, and MKV routes the job to FFmpeg. "Convert this and drop the soundtrack" is something a user can do today, and nothing had built the command for it.
Why two assertions
-an alone still passes if the arm falls through to the else and emits an AAC encoder beside the flag — a file that is silent because the flag won, carrying an encoder nobody asked for. So the test also asserts no -c:a.
Acceptance: three mutations, run and restored
mutation
result
Drop -> emptyList()
red
Drop -> the else arm's aac encoder
red (loses -an too)
Drop -> listOf("-an", "-c:a", "aac")
red — -an intact, caught by the assertFalse
The third is the one that justifies the second assertion. The first two break -an as a side effect, so neither can show whether the assertFalse does any work; the third keeps -an valid and fails on the encoder alone.
Verification
testDebugUnitTest (full suite) + ktlintCheck + detekt + lintDebug — green, production tree clean.
Closes #198.
## The gap
`audioArgs`' `Drop` arm (`ffmpeg/FFmpegCommandBuilder.kt:181`) was `ci == 0`:
```kotlin
AudioPlan.Drop -> listOf("-an")
```
The suite's only `-an` assertion is in *"gif generates a palette to avoid banding and drops audio"* — and that one comes from the **image path** (`:79`/`:90`), which emits `-an` directly and never reaches `audioArgs`. Two sites, one string, one tested.
## It is a live path
`AdvancedPicker` renders all of `AudioCodec.entries` including `NONE`, `ContainerCapabilities.validate` permits audio-off whenever the input has video, and MKV routes the job to FFmpeg. "Convert this and drop the soundtrack" is something a user can do today, and nothing had built the command for it.
## Why two assertions
`-an` alone still passes if the arm falls through to the `else` and emits an AAC encoder *beside* the flag — a file that is silent because the flag won, carrying an encoder nobody asked for. So the test also asserts no `-c:a`.
## Acceptance: three mutations, run and restored
| mutation | result |
|---|---|
| `Drop -> emptyList()` | **red** |
| `Drop ->` the `else` arm's aac encoder | **red** (loses `-an` too) |
| `Drop -> listOf("-an", "-c:a", "aac")` | **red** — `-an` intact, caught by the `assertFalse` |
The third is the one that justifies the second assertion. The first two break `-an` as a side effect, so neither can show whether the `assertFalse` does any work; the third keeps `-an` valid and fails on the encoder alone.
## Verification
`testDebugUnitTest` (full suite) + `ktlintCheck` + `detekt` + `lintDebug` — green, production tree clean.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #198.
The gap
audioArgs'Droparm (ffmpeg/FFmpegCommandBuilder.kt:181) wasci == 0:The suite's only
-anassertion is in "gif generates a palette to avoid banding and drops audio" — and that one comes from the image path (:79/:90), which emits-andirectly and never reachesaudioArgs. Two sites, one string, one tested.It is a live path
AdvancedPickerrenders all ofAudioCodec.entriesincludingNONE,ContainerCapabilities.validatepermits audio-off whenever the input has video, and MKV routes the job to FFmpeg. "Convert this and drop the soundtrack" is something a user can do today, and nothing had built the command for it.Why two assertions
-analone still passes if the arm falls through to theelseand emits an AAC encoder beside the flag — a file that is silent because the flag won, carrying an encoder nobody asked for. So the test also asserts no-c:a.Acceptance: three mutations, run and restored
Drop -> emptyList()Drop ->theelsearm's aac encoder-antoo)Drop -> listOf("-an", "-c:a", "aac")-anintact, caught by theassertFalseThe third is the one that justifies the second assertion. The first two break
-anas a side effect, so neither can show whether theassertFalsedoes any work; the third keeps-anvalid and fails on the encoder alone.Verification
testDebugUnitTest(full suite) +ktlintCheck+detekt+lintDebug— green, production tree clean.🤖 Generated with Claude Code