2025-10-10 - 2026-10-10
Overview
128 Pull requests merged by 1 user
Merged
#272 Stop the picker dismissal destroying MainActivity, and census what actually turns legs red (#102)
Merged
#269 Synchronise SafPickerRoundTripTest on state, not on timing (#268)
Merged
#261 Rebuild the FFmpeg AAR with libvorbis, and make Ogg Vorbis reachable (#254)
Merged
#267 Read the union's branch tier, and decide 12 of its 22 sites (E9)
Merged
#259 Expedite user-initiated work, and give both getForegroundInfo overrides a caller (#252)
Merged
#260 Resolve the gate's cache dir with --git-common-dir, and say when it cannot (#258)
Merged
#257 Run shellcheck in the local gate, at CI's exact pin
Merged
#256 Delete the document a failed save could not write (#250)
Merged
#255 Record the first instrumented coverage measurement, and classify the 32 it found
Merged
#251 Re-derive the API 37 carrier counts, and correct what #226 left behind
Merged
#249 Record E7's second constraint, and that the premise held
Merged
#248 Save to a document stock DocumentsUI created
Merged
#247 Stop the advisory match line claiming a failure count nobody measured
Merged
#245 Take the picker test off the API 37 gating leg, and stop the SystemUI disable pretending
Merged
#221 Assert the join failure message against a real FFmpeg session
Merged
#244 Record what working the e2e tickets found
Merged
#243 Cancel a running Media3 export, completing the third engine
Merged
#242 Reattach to a conversion that is still running
Merged
#239 Let a join read the files the user actually picked
Merged
#241 Wait for the pick the launcher test is about
Merged
#240 Stop the cancel tests losing their race on a loaded runner
Merged
#237 Cancel a running join session too
Merged
#236 Cancel a running FFmpeg session, which nothing had ever done
Merged
#235 Press the Cancel button in the notification
Merged
#234 Read the progress percentage FFmpeg has always been computing
Merged
#232 Make the fallback test say when it cannot test the fallback
Merged
#233 Check that FLAC and Opus are FLAC and Opus
Merged
#231 Read the instrumented suite, and find the test that proves nothing
Merged
#222 Record wave 4's landed coverage, and that the hang watchdog has fired
Merged
#219 Wait for the rotation to rebuild the Activity, not for the composition to idle
Merged
#218 Finish the startup sweep before onCreate returns, in the JVM suite
Merged
#217 Give both engines one rc-to-outcome function, and unify the failure message
Merged
#216 Stop a permission answer starting a second conversion
Merged
#215 Open the save dialog with the type the job produced
Merged
#214 Pin the launcher layer, where two callbacks share a signature
Merged
#213 Call the theme the way MainActivity calls it
Merged
#212 Report hardware progress to WorkManager, which nothing had checked
Merged
#211 Read FFprobe's answer without spawning FFprobe
Merged
#210 Cut a seam through the codec enumeration, and say what a failed one actually does
Merged
#209 Render the container row for a video nothing could name
Merged
#208 Build a command for the audio the user turned off
Merged
#207 Make a failure that says nothing still say something
Merged
#206 Connect the Cancel button to WorkManager, which nothing did
Merged
#205 Record the wave-4 coverage read, and correct the filter that missed the biggest gap
Merged
#191 Re-measure after wave 3, and write down the two kinds of gap it had to separate
Merged
#189 Re-measure after wave 3, and write down the two kinds of gap it had to separate
Merged
#188 C1 (#176): give ConcatWorker the seam ConversionWorker always had, and test what was behind it
Merged
#187 C2 (#177): cut MediaProbe's two-probe merge into a seam, and ask which probe wins
Merged
#186 B1 (#173): tell the rail from the bottom bar, and the Convert tab from the Join tab
Merged
#185 B3 (#175): pin the AAC arm every ordinary conversion takes
Merged
#184 B2 (#174): read what the progress notification actually says
Merged
#183 A5 (#171): fire the muxer guard that repairs "MP4 for everything", which had never fired
Merged
#182 A2 + A3 (#168, #169): the hardware fallback, the cancellation that must not take it, and the name a job may not have
Merged
#181 A4 (#170): join the two halves of an unreadable join clip, and record why the catch arm stays device-only
Merged
#180 A6 (#172): six one-branch outcomes nothing produced, and one that cannot be produced
Merged
#179 A1 (#167): pin all three foreground-service regimes, and the boundary between two of them
Merged
#166 Re-measure coverage after wave 2, and write down how a stacked PR merges
Merged
#165 W3: the screen wiring, and a narrower hazard than the ticket claimed
Merged
#164 W4: the seven settings edits, and three tests that did not bite until they did
Merged
#163 W2: the join state mapping, and a crash the seam exposed
Merged
#162 W1: cut the conversion state mapping into a seam, and choose all six arms
Merged
#161 W5: one sentence per user-facing condition, not two
Merged
#160 Restore the five stacked PRs that merged into their bases instead of main
Merged
#150 S1: cut MediaProbe's track walk into a pure seam, and test the matrix
Merged
#148 C5: the two jobs ConversionWorker refuses before converting
Merged
#147 C4: ConcatWorker's cancellation and give-up arms
Merged
#146 C2: test the audio half of validate, and the one video refusal missing
Merged
#145 C1: pin readSpec's three enum fallbacks
Merged
#151 S2 + S3: the two OutputPublisher seams, and where the second one actually goes
Merged
#149 C6: OutputPublisher's guarded branches, three of them guarding a delete
Merged
#144 C0 + C3: fake-provider scaffolding, and what InputQuery makes of a metadata row
Merged
#131 Record the code findings from the 2026-08-26 coverage read
Merged
#129 Ignore Gradle's .kotlin/ build-state directory
Merged
#127 Bound the JVM suite's hangs so a deadlock ends in minutes with a stack
Merged
#115 Re-measure coverage, because the figure here predates the test push
Merged
#126 Count the annotation, not the comment saying a test does not carry it
Merged
#117 Offer a fix that works when the file has no video to copy
Merged
#121 Say in the run-shape table when the wedge timeout was what killed the leg
Merged
#124 Let the user's pick keep the screen a reattachment was about to take
Merged
#119 Correct the theme KDoc's switch claim and cover the branches that actually run
Merged
#116 Offer the file again after a failed save, rather than only offering to delete it
Merged
#113 Refuse a spec that would produce an empty file, and guard the Media3 export that used to die building one
Merged
#111 Say what the advisory API 37 job actually found, so a new failure is not invisible
Merged
#110 Stop counting the run this page calls inconclusive
Merged
#109 Notice if the release job loses the permission that lets it publish
Merged
#106 Declare build.yml's token reach in build.yml
Merged
#105 Say 37.0 is the choice, not the only api-level that exists
Merged
#104 Stop telling people to stage the benchmark the one way it cannot be staged
Merged
#103 Delete an assertion that could never fail, and say what guards instead
Merged
#99 Lint the bash inside the workflows, not only the bash in files
Merged
#98 Hold the two codec MIME claims that only existed in prose
Merged
#97 Read sdkmanager's status, not the status of the yes feeding it
Merged
#95 Say which conversions come back, rather than that they all do
Merged
#96 Close the ANR dialog that was hiding every window from UiAutomator
Merged
#94 Give the probe hop an injectable dispatcher, and delete the drain it replaces
Merged
#91 Check the MIME types Media3Engine hands Transformer, and the claim above them
Merged
#92 Test the three pure MediaProbe helpers, and report the arms no test can bite
Merged
#90 Make the two codec tables answer for each other, and stop describeAudio printing a NUL
Merged
#89 Give the Robolectric choice a reason that is still true
Merged
#82 Say three where a third test joined, and stop the name claiming to be exact
Merged
#80 Pick a file through the real system picker, then rotate the phone
Merged
#79 Ask each join state what it lets the user do next
Merged
#78 R38.6 — Every ConversionState renders its own affordances
Merged
#77 Extract the state seam both screens lack
Merged
#76 Count the Robolectric tests, which JaCoCo has never counted
Merged
#73 Say where instrumented tests run, instead of where they used to not run
Merged
#72 Say in tests what the file card says when it does not know
Merged
#71 Hold the Advanced panel's gate, and the error card outside it
Merged
#69 Check the shell, and stop one-off issues falling off the board
Merged
#67 Hold the three pickers to the constant they hand back
Merged
#65 Make the screen leaves nameable from a test, and give tests a tag vocabulary
Merged
#56 Split the API 37 CI leg so the part that works can gate
Merged
#55 Verify the SystemUI disable instead of trusting what pm reported
Merged
#54 Resolve adb by path in the API 37 watchdog
Merged
#53 Add a dispatch-only workflow for the API 37 CI question
Merged
#51 Write down that testable code is not done until it is tested
Merged
#50 Measure the coverage figure instead of carrying it forward
Merged
#47 Re-derive the API 37 emulator failure, and harden the local sweep
Merged
#48 Close eleven review findings in app code
Merged
#45 Correct six documentation claims the overnight review falsified
Merged
#9 Find out why the emulators segfault, and make them run
Merged
#8 Fix twelve defects in the untested framework edge
Merged
#7 Write down what is actually wrong with this app, and how we know
Merged
#6 Keep Claude Code's agent worktrees out of the repository
Merged
#5 Add lint, formatting and static analysis; move the toolchain to Java 25
Merged
#4 feat(media format) - Let the user pick a container and codecs independently and remux without re-encoding
Merged
#2 Make Media3 write the container and codec it was asked for
Merged
#1 Media3 + FFmpeg conversion pipeline
125 Issues closed from 1 user
Closed
#102 CI legs fail on system services, not assertions: three modes today that look like one cause
Closed
#268 SafPickerRoundTripTest races the probe and the window focus: make it deterministic without weakening what it asserts
Closed
#254 Rebuild the FFmpeg AAR with --enable-libvorbis, and implement Ogg Vorbis on it: the shipped binary has no libvorbis
Closed
#252 getForegroundInfo is dead in both workers: nothing in this app enqueues expedited work
Closed
#258 The local gate's sweep cache is never written from a worktree, so every push re-sweeps 33-36
Closed
#250 D4's delete arm has still never run against a real DocumentsProvider: #226 proved the premise, not the fix
Closed
#226 OutputPublisher's model of SAF is asserted only against fakes built to match it
Closed
#108 Gating API 37 leg aborts in system_server TaskSnapshotPersister after every test passes
Closed
#224 Cancelling a running native session is not executed by any test, in any of the three engines
Closed
#230 Spike: find out whether a running conversion's process can be killed under instrumentation
Closed
#225 No content:// input has ever reached a successful conversion, so the ffkitsaf bridge is untested
Closed
#238 Joining files picked through the system picker fails on the stream-copy path
Closed
#220 LauncherWiringTest's file-card assertion flaked once on CI in its first day
Closed
#227 The notification's Cancel action has never been fired by any test
Closed
#229 FFmpeg's progress percentage is computed on every test and asserted by none
Closed
#223 HardwareFallbackTest passes on every emulator leg without ever attempting the hardware path
Closed
#228 encodesFlacLosslessAudio and encodesOpus pass on any non-empty file, unlike their five siblings
Closed
#125 The JVM unit test suite can deadlock in Room/WorkManager and hang forever
Closed
#122 The rotation test hangs on API 33 and 34, wedging the leg for 20 minutes
Closed
#159 Application-scope IO work races every Robolectric test that shares cacheDir
Closed
#203 Two engines answer the same return code differently, and neither answer is tested
Closed
#202 convert() can enqueue a second job over a live one, and currentInput() is over-general
Closed
#201 A retry-save's file type is unpinned, and the exemption saying so is out of date
Closed
#200 The two launcher callbacks have the same signature, so transposing them compiles and passes
Closed
#197 The theme has never been called the way MainActivity calls it
Closed
#196 The hardware path's progress callback has never been invoked
Closed
#195 MediaProbe passes the video codec to containerFrom, and nothing checks that it does
Closed
#194 AndroidDeviceCodecs' enumeration rules have no test, and its failure fallback contradicts its own log line
Closed
#199 A video whose container nothing identified has never been rendered
Closed
#198 Turning audio off has never produced -an through audioArgs
Closed
#193 Three failure messages the app can show have never been produced by anything
Closed
#192 Cancel has only ever been tested on the side where it does nothing
Closed
#176 ConcatWorker's failure path is untested on every source set, because nothing can get past ConcatEngine
Closed
#177 MediaProbe's two-probe merge is untestable for want of one internal, while its sibling carries the argument for it
Closed
#173 Swapping the navigation rail and the bottom bar passes the whole suite, and Medium is in no test at all
Closed
#175 The AAC arm most conversions actually emit is the one audioArgs branch with no test
Closed
#174 The two progress-notification strings can be swapped without failing anything
Closed
#171 The guard against "MP4 for everything" has never fired, so weakening it would restore the bug silently
Closed
#168 A cancelled hardware transcode has no test proving it does not start a second, software one
Closed
#169 The display-name fallback reaches the user's save dialog and has never run
Closed
#170 An unreadable clip in a join: the catch that degrades it, and the guard that makes the audio asymmetry safe
Closed
#172 Seven one-branch outcomes no test produces, each with a sibling that already models it
Closed
#167 ConversionForegroundType's API 33 and 34 arms are cold, and the legs that would cover them are the ones #122 wedges
Closed
#153 Wave 2 test gaps: the ViewModel state machines nothing chooses a branch of
Closed
#133 Three sites need a seam cut before their branches can be tested, and one closed boundary that new evidence revises
Closed
#132 Six JVM test gaps from the 2026-08-26 coverage read, each with a sibling test that already models it
Closed
#141 S1 — MediaProbe's track-walking loop is reachable on the JVM after all, which revises #84's boundary
Closed
#139 C5 — ConversionWorker's missing-input-URI and invalid-spec refusals have no test on any path
Closed
#138 C4 — ConcatWorker's cancellation and foreground-denied arms have no test, though ConversionWorker's twin does
Closed
#136 C2 — The audio half of ContainerCapabilities.validate has no test, while the video half has one per case
Closed
#135 C1 — readSpec's three enum fallbacks are cold, and WorkerEnumFallbackTest exists for exactly this defect
Closed
#156 W3: the screen wiring -- 17 bindings a transposition currently survives
Closed
#157 W4: seven ViewModel methods with no coverage, and two else arms
Closed
#155 W2: the join side's state mapping, and the arity guard that duplicates ConcatWorker's message
Closed
#154 W1: cut ConversionViewModel.observe's state mapping into a seam, and choose all six arms
Closed
#158 W5: three user-facing messages duplicated across layers, against the repo's own convention
Closed
#143 S3 — sweepStaging's re-read race has no seam to provoke it
Closed
#142 S2 — publish()'s null-return branch needs a seam before any test can reach it
Closed
#140 C6 — Four partial branches in OutputPublisher, three of them guarding a delete
Closed
#134 C0 — Extract the fake SAF provider into shared scaffolding and give it a way to answer wrongly
Closed
#137 C3 — InputQuery has never been handed a cursor row by any test
Closed
#128 gitignore does not cover Gradle's .kotlin/ build-state directory
Closed
#120 The advisory baseline check counts a KDoc as a fourth marked test, so it deviates on every PR
Closed
#114 Copy-video-from-a-file-with-no-video suggests a spec that is itself invalid
Closed
#118 The e2e report says a wedged leg completed cleanly
Closed
#49 R37 — A reattachment can overwrite a pick the user has already made (surfaces as ReattachOnLaunchTest flake)
Closed
#30 R21 — After a failed save, the only button the UI offers destroys the file the code deliberately kept
Closed
#14 R5 — Media3Engine builds EditedMediaItem/Composition unguarded on the HandlerThread; a picker-reachable spec throws there
Closed
#83 Report the advisory API 37 job's expected/received/failed counts, so a new failure is not invisible
Closed
#38 R29 — The seven-run discriminator counts a row the same document calls inconclusive
Closed
#107 Nothing catches the release job losing its contents: write until a release fails to publish
Closed
#100 CodeQL: build.yml has no top-level permissions, so its test job inherits the repository default
Closed
#28 R19 — status_check.yml's API-37 comment is falsified by the branch and is not on the branch's correction list
Closed
#101 RealMediaBenchmark documents a populate path its own code explains cannot work
Closed
#35 R26 — ConversionViewModelProbeFailureTest:131 is a dead assertion
Closed
#70 Run actionlint too, so the shell inside workflow run: blocks is checked as well
Closed
#86 AndroidDeviceCodecs' codec-name aliases and its assume-supported fallthrough have no test
Closed
#41 R32 — yes | sdkmanager under pipefail can report a successful install as failure
Closed
#44 R35 — README promises conversions are "restored after a restart"; the measured behaviour is bounded retries then silent failure
Closed
#93 SafPickerRoundTripTest is failing on gating legs 34/35/37: the fixture root never appears in the picker
Closed
#66 Give the probe hop an injectable dispatcher, so an escaped coroutine error fails the test that caused it
Closed
#85 Media3Engine's two MIME tables are untested, and one carries a "never reached" claim nothing checks
Closed
#84 MediaProbe: three pure helpers have no test, while the rest is device-bound and fine
Closed
#74 describeAudio lacks the unparseable arm describeVideo has, and its fallback would print a NUL
Closed
#87 Five codec names resolve in CodecNames but not in AndroidDeviceCodecs, so hardware is attempted blind
Closed
#46 R36 — AppRootRestorationTest's KDoc repeats the claim R14 corrected
Closed
#88 Decide whether the workers getForegroundInfo has a seam worth cutting, or record that it does not
Closed
#81 Three comments still say the advisory API 37 job runs two tests; it runs three
Closed
#52 R38 — The Compose screens have ~0% coverage, and the Robolectric harness for it already exists unused
Closed
#64 R38.8 — E2E: the SAF picker round-trip, and rotation against a real Bundle
Closed
#63 R38.7 — Every JoinState renders its own affordances
Closed
#62 R38.6 — Every ConversionState renders its own affordances
Closed
#61 R38.5 — Extract the state seam both screens lack, with the leaf tests as the net
Closed
#75 JaCoCo counts no Robolectric test in this repo; real line coverage is 69%, not 30%
Closed
#58 R38.2 — FileCard, DetailRow and the four formatters, including the "Size unknown" case that prompted #52
Closed
#60 R38.4 — AdvancedPicker's expand gate, and the suggestion chips that render outside it
Closed
#59 R38.3 — The three simple pickers: selection in, the right enum out
Closed
#57 R38.1 — Make the screen leaves nameable from a test, and give tests a tag vocabulary
Closed
#39 R30 — CLAUDE.md's ~31% coverage figure predates 26 new JVM test files
Closed
#43 R34 — disable_region_sampling's "one blocking wait on the device" does not wait
Closed
#42 R33 — ensure_avd writes CI's RAM/disk pins to a hardcoded path and never checks the write
Closed
#40 R31 — kill -9 "${EMU_PID:-0}" signals the whole process group if EMU_PID is ever empty
Closed
#37 R28 — The "capability negotiated regardless of renderer" claim leans on the wrong half of its evidence
Closed
#36 R27 — The evidence-tightening commit left "region sampling is the sole trigger" standing, contradicted three lines later
Closed
#29 R20 — docs/local-emulator.md states a 49-test local baseline main no longer produces
Closed
#26 R17 — run-e2e.sh installs no trap; an interrupted sweep leaks the emulator, the AVD, and port 5560
Closed
#25 R16 — The branch puts API 37 in the default sweep, so a bare run-e2e.sh exits non-zero by design, and the doc does not say so
Closed
#13 R4 — tools/api-37-emulator tells the pre-release Pixel check to expect 49 tests; main has 57
Closed
#34 R25 — Reattachment's KDoc describes as current a defect fixed in the commit before it
Closed
#33 R24 — A staged file that disappears between reattach and Save surfaces as a raw ENOENT path in the UI
Closed
#32 R23 — hasSpaceFor overflows, and InputQuery.total overflows into a negative that sails through it
Closed
#31 R22 — Three Enum.valueOf reads sit above the try in both workers — D13's exact escape shape, unfixed
Closed
#20 R11 — 7db3200's backup/device-transfer exclusions have no gate of any kind
Closed
#19 R10 — MAX_FOREGROUND_START_ATTEMPTS is referenced only through its own symbol; the value 10 is unpinned
Closed
#18 R9 — The process-start sweep — the reason LibreMediaConverterApp exists — has no test
Closed
#17 R8 — The join half of D8 — the constant name the audit lists first — has no test that ConcatWorker asks for a per-job name
Closed
#15 R6 — publish() leaves the SAF-created empty document at the user's chosen name when openOutputStream fails
Closed
#11 R2 — The FAILED exclusion is only tested with pathless FAILED jobs; a FAILED job carrying a file would be reattached to unnoticed
Closed
#10 R1 — D3's decision core is exhaustively tested; the edge that feeds it is not tested at all
Closed
#27 R18 — README's front-page status says the FFmpeg format tests have not been executed on a device; they have run green five times
Closed
#24 R15 — The audit's "On testing these" section is falsified in four separate statements
Closed
#23 R14 — The audit asserts instrumented tests cannot run locally in two places and records the opposite in a third
Closed
#22 R13 — D11 is marked merged, but one of its four rows was deliberately not done and the audit does not say so
Closed
#21 R12 — The audit's "Where the fixes live" names a branch that no longer exists and a test count 15 short
Closed
#12 R3 — The defect audit reports D5 and D7 as unfixed; both merged to main hours before this review
141 Issues created by 1 user
Opened
#10 R1 — D3's decision core is exhaustively tested; the edge that feeds it is not tested at all
Opened
#12 R3 — The defect audit reports D5 and D7 as unfixed; both merged to main hours before this review
Opened
#11 R2 — The FAILED exclusion is only tested with pathless FAILED jobs; a FAILED job carrying a file would be reattached to unnoticed
Opened
#15 R6 — publish() leaves the SAF-created empty document at the user's chosen name when openOutputStream fails
Opened
#14 R5 — Media3Engine builds EditedMediaItem/Composition unguarded on the HandlerThread; a picker-reachable spec throws there
Opened
#13 R4 — tools/api-37-emulator tells the pre-release Pixel check to expect 49 tests; main has 57
Opened
#17 R8 — The join half of D8 — the constant name the audit lists first — has no test that ConcatWorker asks for a per-job name
Opened
#16 R7 — A present, willing user has no way to make a foreground-denied retry happen now
Opened
#19 R10 — MAX_FOREGROUND_START_ATTEMPTS is referenced only through its own symbol; the value 10 is unpinned
Opened
#18 R9 — The process-start sweep — the reason LibreMediaConverterApp exists — has no test
Opened
#21 R12 — The audit's "Where the fixes live" names a branch that no longer exists and a test count 15 short
Opened
#20 R11 — 7db3200's backup/device-transfer exclusions have no gate of any kind
Opened
#24 R15 — The audit's "On testing these" section is falsified in four separate statements
Opened
#23 R14 — The audit asserts instrumented tests cannot run locally in two places and records the opposite in a third
Opened
#22 R13 — D11 is marked merged, but one of its four rows was deliberately not done and the audit does not say so
Opened
#26 R17 — run-e2e.sh installs no trap; an interrupted sweep leaks the emulator, the AVD, and port 5560
Opened
#25 R16 — The branch puts API 37 in the default sweep, so a bare run-e2e.sh exits non-zero by design, and the doc does not say so
Opened
#29 R20 — docs/local-emulator.md states a 49-test local baseline main no longer produces
Opened
#28 R19 — status_check.yml's API-37 comment is falsified by the branch and is not on the branch's correction list
Opened
#27 R18 — README's front-page status says the FFmpeg format tests have not been executed on a device; they have run green five times
Opened
#31 R22 — Three Enum.valueOf reads sit above the try in both workers — D13's exact escape shape, unfixed
Opened
#30 R21 — After a failed save, the only button the UI offers destroys the file the code deliberately kept
Opened
#34 R25 — Reattachment's KDoc describes as current a defect fixed in the commit before it
Opened
#33 R24 — A staged file that disappears between reattach and Save surfaces as a raw ENOENT path in the UI
Opened
#32 R23 — hasSpaceFor overflows, and InputQuery.total overflows into a negative that sails through it
Opened
#36 R27 — The evidence-tightening commit left "region sampling is the sole trigger" standing, contradicted three lines later
Opened
#35 R26 — ConversionViewModelProbeFailureTest:131 is a dead assertion
Opened
#38 R29 — The seven-run discriminator counts a row the same document calls inconclusive
Opened
#37 R28 — The "capability negotiated regardless of renderer" claim leans on the wrong half of its evidence
Opened
#41 R32 — yes | sdkmanager under pipefail can report a successful install as failure
Opened
#40 R31 — kill -9 "${EMU_PID:-0}" signals the whole process group if EMU_PID is ever empty
Opened
#39 R30 — CLAUDE.md's ~31% coverage figure predates 26 new JVM test files
Opened
#43 R34 — disable_region_sampling's "one blocking wait on the device" does not wait
Opened
#42 R33 — ensure_avd writes CI's RAM/disk pins to a hardcoded path and never checks the write
Opened
#44 R35 — README promises conversions are "restored after a restart"; the measured behaviour is bounded retries then silent failure
Opened
#46 R36 — AppRootRestorationTest's KDoc repeats the claim R14 corrected
Opened
#49 R37 — A reattachment can overwrite a pick the user has already made (surfaces as ReattachOnLaunchTest flake)
Opened
#52 R38 — The Compose screens have ~0% coverage, and the Robolectric harness for it already exists unused
Opened
#57 R38.1 — Make the screen leaves nameable from a test, and give tests a tag vocabulary
Opened
#58 R38.2 — FileCard, DetailRow and the four formatters, including the "Size unknown" case that prompted #52
Opened
#59 R38.3 — The three simple pickers: selection in, the right enum out
Opened
#60 R38.4 — AdvancedPicker's expand gate, and the suggestion chips that render outside it
Opened
#61 R38.5 — Extract the state seam both screens lack, with the leaf tests as the net
Opened
#62 R38.6 — Every ConversionState renders its own affordances
Opened
#63 R38.7 — Every JoinState renders its own affordances
Opened
#64 R38.8 — E2E: the SAF picker round-trip, and rotation against a real Bundle
Opened
#66 Give the probe hop an injectable dispatcher, so an escaped coroutine error fails the test that caused it
Opened
#68 Two of the theme colour-scheme branches are unreachable, and the KDoc promises a switch that does not exist
Opened
#70 Run actionlint too, so the shell inside workflow run: blocks is checked as well
Opened
#74 describeAudio lacks the unparseable arm describeVideo has, and its fallback would print a NUL
Opened
#75 JaCoCo counts no Robolectric test in this repo; real line coverage is 69%, not 30%
Opened
#81 Three comments still say the advisory API 37 job runs two tests; it runs three
Opened
#83 Report the advisory API 37 job's expected/received/failed counts, so a new failure is not invisible
Opened
#84 MediaProbe: three pure helpers have no test, while the rest is device-bound and fine
Opened
#85 Media3Engine's two MIME tables are untested, and one carries a "never reached" claim nothing checks
Opened
#86 AndroidDeviceCodecs' codec-name aliases and its assume-supported fallthrough have no test
Opened
#87 Five codec names resolve in CodecNames but not in AndroidDeviceCodecs, so hardware is attempted blind
Opened
#88 Decide whether the workers getForegroundInfo has a seam worth cutting, or record that it does not
Opened
#93 SafPickerRoundTripTest is failing on gating legs 34/35/37: the fixture root never appears in the picker
Opened
#100 CodeQL: build.yml has no top-level permissions, so its test job inherits the repository default
Opened
#101 RealMediaBenchmark documents a populate path its own code explains cannot work
Opened
#102 CI legs fail on system services, not assertions: three modes today that look like one cause
Opened
#107 Nothing catches the release job losing its contents: write until a release fails to publish
Opened
#108 Gating API 37 leg aborts in system_server TaskSnapshotPersister after every test passes
Opened
#114 Copy-video-from-a-file-with-no-video suggests a spec that is itself invalid
Opened
#118 The e2e report says a wedged leg completed cleanly
Opened
#120 The advisory baseline check counts a KDoc as a fourth marked test, so it deviates on every PR
Opened
#122 The rotation test hangs on API 33 and 34, wedging the leg for 20 minutes
Opened
#123 A save that finishes after Start over puts Saved back on a cleared screen
Opened
#125 The JVM unit test suite can deadlock in Room/WorkManager and hang forever
Opened
#128 gitignore does not cover Gradle's .kotlin/ build-state directory
Opened
#130 Note that the catalog's room version does not control the Room that actually runs
Opened
#132 Six JVM test gaps from the 2026-08-26 coverage read, each with a sibling test that already models it
Opened
#133 Three sites need a seam cut before their branches can be tested, and one closed boundary that new evidence revises
Opened
#134 C0 — Extract the fake SAF provider into shared scaffolding and give it a way to answer wrongly
Opened
#135 C1 — readSpec's three enum fallbacks are cold, and WorkerEnumFallbackTest exists for exactly this defect
Opened
#136 C2 — The audio half of ContainerCapabilities.validate has no test, while the video half has one per case
Opened
#137 C3 — InputQuery has never been handed a cursor row by any test
Opened
#138 C4 — ConcatWorker's cancellation and foreground-denied arms have no test, though ConversionWorker's twin does
Opened
#139 C5 — ConversionWorker's missing-input-URI and invalid-spec refusals have no test on any path
Opened
#140 C6 — Four partial branches in OutputPublisher, three of them guarding a delete
Opened
#141 S1 — MediaProbe's track-walking loop is reachable on the JVM after all, which revises #84's boundary
Opened
#142 S2 — publish()'s null-return branch needs a seam before any test can reach it
Opened
#143 S3 — sweepStaging's re-read race has no seam to provoke it
Opened
#153 Wave 2 test gaps: the ViewModel state machines nothing chooses a branch of
Opened
#154 W1: cut ConversionViewModel.observe's state mapping into a seam, and choose all six arms
Opened
#155 W2: the join side's state mapping, and the arity guard that duplicates ConcatWorker's message
Opened
#156 W3: the screen wiring -- 17 bindings a transposition currently survives
Opened
#157 W4: seven ViewModel methods with no coverage, and two else arms
Opened
#158 W5: three user-facing messages duplicated across layers, against the repo's own convention
Opened
#159 Application-scope IO work races every Robolectric test that shares cacheDir
Opened
#167 ConversionForegroundType's API 33 and 34 arms are cold, and the legs that would cover them are the ones #122 wedges
Opened
#168 A cancelled hardware transcode has no test proving it does not start a second, software one
Opened
#169 The display-name fallback reaches the user's save dialog and has never run
Opened
#170 An unreadable clip in a join: the catch that degrades it, and the guard that makes the audio asymmetry safe
Opened
#171 The guard against "MP4 for everything" has never fired, so weakening it would restore the bug silently
Opened
#172 Seven one-branch outcomes no test produces, each with a sibling that already models it
Opened
#173 Swapping the navigation rail and the bottom bar passes the whole suite, and Medium is in no test at all
Opened
#174 The two progress-notification strings can be swapped without failing anything
Opened
#175 The AAC arm most conversions actually emit is the one audioArgs branch with no test
Opened
#176 ConcatWorker's failure path is untested on every source set, because nothing can get past ConcatEngine
Opened
#177 MediaProbe's two-probe merge is untestable for want of one internal, while its sibling carries the argument for it
Opened
#178 "Prefer hardware" is offered as a distinct choice and routes identically to Automatic
Opened
#190 The gating emulator legs are flaky enough that a ten-PR stack cannot land without repeated retries
Opened
#192 Cancel has only ever been tested on the side where it does nothing
Opened
#193 Three failure messages the app can show have never been produced by anything
Opened
#194 AndroidDeviceCodecs' enumeration rules have no test, and its failure fallback contradicts its own log line
Opened
#195 MediaProbe passes the video codec to containerFrom, and nothing checks that it does
Opened
#196 The hardware path's progress callback has never been invoked
Opened
#197 The theme has never been called the way MainActivity calls it
Opened
#198 Turning audio off has never produced -an through audioArgs
Opened
#199 A video whose container nothing identified has never been rendered
Opened
#200 The two launcher callbacks have the same signature, so transposing them compiles and passes
Opened
#201 A retry-save's file type is unpinned, and the exemption saying so is out of date
Opened
#202 convert() can enqueue a second job over a live one, and currentInput() is over-general
Opened
#203 Two engines answer the same return code differently, and neither answer is tested
Opened
#204 Four wave-4 candidates that are real but may not be worth their cost
Opened
#220 LauncherWiringTest's file-card assertion flaked once on CI in its first day
Opened
#223 HardwareFallbackTest passes on every emulator leg without ever attempting the hardware path
Opened
#224 Cancelling a running native session is not executed by any test, in any of the three engines
Opened
#225 No content:// input has ever reached a successful conversion, so the ffkitsaf bridge is untested
Opened
#226 OutputPublisher's model of SAF is asserted only against fakes built to match it
Opened
#227 The notification's Cancel action has never been fired by any test
Opened
#228 encodesFlacLosslessAudio and encodesOpus pass on any non-empty file, unlike their five siblings
Opened
#229 FFmpeg's progress percentage is computed on every test and asserted by none
Opened
#230 Spike: find out whether a running conversion's process can be killed under instrumentation
Opened
#238 Joining files picked through the system picker fails on the stream-copy path
Opened
#246 E2E_DISABLE_SYSTEM_UI does not disable SystemUI: pm disable-user is set, survives, and is not acted on
Opened
#250 D4's delete arm has still never run against a real DocumentsProvider: #226 proved the premise, not the fix
Opened
#252 getForegroundInfo is dead in both workers: nothing in this app enqueues expedited work
Opened
#253 Three public members have no callers, and F5 is a fourth: decide each rather than test them
Opened
#254 Rebuild the FFmpeg AAR with --enable-libvorbis, and implement Ogg Vorbis on it: the shipped binary has no libvorbis
Opened
#258 The local gate's sweep cache is never written from a worktree, so every push re-sweeps 33-36
Opened
#262 MediaProbe's container-alias arms: read whether each is a fixture gap or dead by construction
Opened
#263 MediaProbe never probes a second audio track, so the guard that makes 'first track wins' true is unasserted
Opened
#264 Three pure decision arms nothing chooses: ConcatStrategy's height check, an image spec carrying a codec, isPureRemux's all-NONE case
Opened
#265 FFmpegEngine reports progress without ever being asked for a job of unknown duration
Opened
#266 The concat command's non-MP4 arm has never been built: decide whether a join can produce one
Opened
#268 SafPickerRoundTripTest races the probe and the window focus: make it deterministic without weakening what it asserts
Opened
#270 SafPickerRoundTripTest's save tests have two failure shapes still unexplained after #269
Opened
#271 dismissASystemErrorDialog can click any AlertDialog: android:id/button1 hit DocumentsUI's own save dialog