Compare commits
merge into: JMR-dev/LibreMediaConverter:docs/coverage-wave3-recovery
JMR-dev/LibreMediaConverter:main
JMR-dev/LibreMediaConverter:fix/102-picker-back-press-overshoot
JMR-dev/LibreMediaConverter:fix/268-saf-picker-determinism
JMR-dev/LibreMediaConverter:feat/ogg-vorbis-libvorbis
JMR-dev/LibreMediaConverter:feat/expedited-conversion-work
JMR-dev/LibreMediaConverter:fix/gate-cache-in-worktrees
JMR-dev/LibreMediaConverter:chore/gate-runs-shellcheck
JMR-dev/LibreMediaConverter:test/publish-delete-arm-real-provider
JMR-dev/LibreMediaConverter:docs/e8-instrumented-coverage
JMR-dev/LibreMediaConverter:docs/api37-carrier-count-drift
JMR-dev/LibreMediaConverter:docs/e7-second-constraint
JMR-dev/LibreMediaConverter:test/publish-to-a-real-saf-destination
JMR-dev/LibreMediaConverter:fix/api37-report-match-line
JMR-dev/LibreMediaConverter:fix/api37-task-snapshot-crash
JMR-dev/LibreMediaConverter:test/join-failure-message-on-device
JMR-dev/LibreMediaConverter:docs/e2e-read-findings-e7
JMR-dev/LibreMediaConverter:test/cancelling-a-running-export
JMR-dev/LibreMediaConverter:test/reattach-to-a-running-job
JMR-dev/LibreMediaConverter:test/content-uri-reaches-ffmpeg
JMR-dev/LibreMediaConverter:fix/launcher-wiring-waits-for-the-pick
JMR-dev/LibreMediaConverter:fix/cancel-tests-need-a-slower-encode
JMR-dev/LibreMediaConverter:test/cancelling-a-running-join
JMR-dev/LibreMediaConverter:test/cancelling-a-running-session
JMR-dev/LibreMediaConverter:test/notification-cancel-action
JMR-dev/LibreMediaConverter:test/ffmpeg-progress-is-observed
JMR-dev/LibreMediaConverter:test/fallback-asserts-the-path
JMR-dev/LibreMediaConverter:test/flac-and-opus-assert-their-format
JMR-dev/LibreMediaConverter:docs/e2e-read-findings
JMR-dev/LibreMediaConverter:docs/wave4-coverage-numbers
JMR-dev/LibreMediaConverter:fix/injectable-startup-sweep-scope
JMR-dev/LibreMediaConverter:test/session-outcome-seam
JMR-dev/LibreMediaConverter:test/launcher-callback-identity
JMR-dev/LibreMediaConverter:test/theme-follows-system-dark
JMR-dev/LibreMediaConverter:test/audio-drop-arm
JMR-dev/LibreMediaConverter:fix/rotation-waits-for-recreation
JMR-dev/LibreMediaConverter:fix/convert-guards-on-ready
JMR-dev/LibreMediaConverter:test/retry-save-mime
JMR-dev/LibreMediaConverter:test/hardware-progress-reaches-workmanager
JMR-dev/LibreMediaConverter:test/ffprobe-mapping-seam
JMR-dev/LibreMediaConverter:test/device-codec-enumeration-seam
JMR-dev/LibreMediaConverter:test/unknown-container-row
JMR-dev/LibreMediaConverter:test/null-message-fallbacks
JMR-dev/LibreMediaConverter:test/cancel-reaches-workmanager
JMR-dev/LibreMediaConverter:docs/coverage-wave3-recovery
JMR-dev/LibreMediaConverter:test/concat-engine-seam
JMR-dev/LibreMediaConverter:docs/coverage-wave3
JMR-dev/LibreMediaConverter:test/mediaprobe-merge-seam
JMR-dev/LibreMediaConverter:test/adaptive-shell-wiring
JMR-dev/LibreMediaConverter:test/aac-audio-args
JMR-dev/LibreMediaConverter:test/notification-progress-text
JMR-dev/LibreMediaConverter:test/media3-muxer-guard
JMR-dev/LibreMediaConverter:test/hardware-fallback-and-cancellation
JMR-dev/LibreMediaConverter:test/unprobeable-join-clip
JMR-dev/LibreMediaConverter:test/one-branch-outcomes
JMR-dev/LibreMediaConverter:test/foreground-type-regimes
JMR-dev/LibreMediaConverter:fix/bound-wedge-diagnostics
JMR-dev/LibreMediaConverter:docs/coverage-wave2
JMR-dev/LibreMediaConverter:test/screen-wiring
JMR-dev/LibreMediaConverter:test/viewmodel-setters
JMR-dev/LibreMediaConverter:test/join-state-mapping
JMR-dev/LibreMediaConverter:test/conversion-state-mapping
JMR-dev/LibreMediaConverter:test/dedupe-user-messages
JMR-dev/LibreMediaConverter:fix/restore-stack-merges
JMR-dev/LibreMediaConverter:test/refused-jobs
JMR-dev/LibreMediaConverter:test/concatworker-failure-arms
JMR-dev/LibreMediaConverter:test/container-capabilities-audio
JMR-dev/LibreMediaConverter:test/readspec-enum-fallbacks
JMR-dev/LibreMediaConverter:test/outputpublisher-seams
JMR-dev/LibreMediaConverter:test/mediaprobe-track-seam
JMR-dev/LibreMediaConverter:test/outputpublisher-partial-branches
JMR-dev/LibreMediaConverter:test/fake-provider-scaffolding
JMR-dev/LibreMediaConverter:docs/coverage-read-findings
JMR-dev/LibreMediaConverter:chore/gitignore-kotlin
JMR-dev/LibreMediaConverter:test/bound-the-hangs
JMR-dev/LibreMediaConverter:docs/coverage-remeasure
JMR-dev/LibreMediaConverter:ci/baseline-counter-precision
JMR-dev/LibreMediaConverter:fix/invalid-suggestion-chip
JMR-dev/LibreMediaConverter:ci/wedged-leg-report
JMR-dev/LibreMediaConverter:fix/reattachment-overwrites-pick
JMR-dev/LibreMediaConverter:test/theme-live-branches
JMR-dev/LibreMediaConverter:fix/failed-save-retry
JMR-dev/LibreMediaConverter:fix/empty-composition-crash
JMR-dev/LibreMediaConverter:ci/advisory-failure-report
JMR-dev/LibreMediaConverter:docs/seven-run-counts
JMR-dev/LibreMediaConverter:test/release-permission-guard
JMR-dev/LibreMediaConverter:ci/build-workflow-permissions
JMR-dev/LibreMediaConverter:docs/api37-point-release
JMR-dev/LibreMediaConverter:docs/benchmark-populate-path
JMR-dev/LibreMediaConverter:fix/dead-assertion-probe-test
JMR-dev/LibreMediaConverter:ci/actionlint
JMR-dev/LibreMediaConverter:test/device-codecs-encode-consequence
JMR-dev/LibreMediaConverter:fix/sdkmanager-pipefail
JMR-dev/LibreMediaConverter:docs/readme-restart-claim
JMR-dev/LibreMediaConverter:fix/saf-picker-root-discovery
JMR-dev/LibreMediaConverter:fix/probe-dispatcher-seam
JMR-dev/LibreMediaConverter:test/media3engine-mime-tables
JMR-dev/LibreMediaConverter:test/mediaprobe-pure-helpers
JMR-dev/LibreMediaConverter:fix/codec-vocabulary-drift
JMR-dev/LibreMediaConverter:docs/robolectric-rationale-correction
JMR-dev/LibreMediaConverter:docs/api37-advisory-counts
JMR-dev/LibreMediaConverter:test/r38-8-saf-e2e
JMR-dev/LibreMediaConverter:test/r38-7-join-states
JMR-dev/LibreMediaConverter:test/r38-6-conversion-states
JMR-dev/LibreMediaConverter:test/r38-5-state-seam
JMR-dev/LibreMediaConverter:fix/jacoco-robolectric-coverage
JMR-dev/LibreMediaConverter:docs/instrumented-tests-correction
JMR-dev/LibreMediaConverter:test/r38-2-filecard
JMR-dev/LibreMediaConverter:test/r38-4-advanced-picker
JMR-dev/LibreMediaConverter:test/r38-3-pickers
JMR-dev/LibreMediaConverter:tools/file-issue-script
JMR-dev/LibreMediaConverter:tools/api-37-emulator
JMR-dev/LibreMediaConverter:fix/review-app-gaps
JMR-dev/LibreMediaConverter:docs/review-corrections
..
pull from: JMR-dev/LibreMediaConverter:test/concat-engine-seam
JMR-dev/LibreMediaConverter:main
JMR-dev/LibreMediaConverter:fix/102-picker-back-press-overshoot
JMR-dev/LibreMediaConverter:fix/268-saf-picker-determinism
JMR-dev/LibreMediaConverter:feat/ogg-vorbis-libvorbis
JMR-dev/LibreMediaConverter:feat/expedited-conversion-work
JMR-dev/LibreMediaConverter:fix/gate-cache-in-worktrees
JMR-dev/LibreMediaConverter:chore/gate-runs-shellcheck
JMR-dev/LibreMediaConverter:test/publish-delete-arm-real-provider
JMR-dev/LibreMediaConverter:docs/e8-instrumented-coverage
JMR-dev/LibreMediaConverter:docs/api37-carrier-count-drift
JMR-dev/LibreMediaConverter:docs/e7-second-constraint
JMR-dev/LibreMediaConverter:test/publish-to-a-real-saf-destination
JMR-dev/LibreMediaConverter:fix/api37-report-match-line
JMR-dev/LibreMediaConverter:fix/api37-task-snapshot-crash
JMR-dev/LibreMediaConverter:test/join-failure-message-on-device
JMR-dev/LibreMediaConverter:docs/e2e-read-findings-e7
JMR-dev/LibreMediaConverter:test/cancelling-a-running-export
JMR-dev/LibreMediaConverter:test/reattach-to-a-running-job
JMR-dev/LibreMediaConverter:test/content-uri-reaches-ffmpeg
JMR-dev/LibreMediaConverter:fix/launcher-wiring-waits-for-the-pick
JMR-dev/LibreMediaConverter:fix/cancel-tests-need-a-slower-encode
JMR-dev/LibreMediaConverter:test/cancelling-a-running-join
JMR-dev/LibreMediaConverter:test/cancelling-a-running-session
JMR-dev/LibreMediaConverter:test/notification-cancel-action
JMR-dev/LibreMediaConverter:test/ffmpeg-progress-is-observed
JMR-dev/LibreMediaConverter:test/fallback-asserts-the-path
JMR-dev/LibreMediaConverter:test/flac-and-opus-assert-their-format
JMR-dev/LibreMediaConverter:docs/e2e-read-findings
JMR-dev/LibreMediaConverter:docs/wave4-coverage-numbers
JMR-dev/LibreMediaConverter:fix/injectable-startup-sweep-scope
JMR-dev/LibreMediaConverter:test/session-outcome-seam
JMR-dev/LibreMediaConverter:test/launcher-callback-identity
JMR-dev/LibreMediaConverter:test/theme-follows-system-dark
JMR-dev/LibreMediaConverter:test/audio-drop-arm
JMR-dev/LibreMediaConverter:fix/rotation-waits-for-recreation
JMR-dev/LibreMediaConverter:fix/convert-guards-on-ready
JMR-dev/LibreMediaConverter:test/retry-save-mime
JMR-dev/LibreMediaConverter:test/hardware-progress-reaches-workmanager
JMR-dev/LibreMediaConverter:test/ffprobe-mapping-seam
JMR-dev/LibreMediaConverter:test/device-codec-enumeration-seam
JMR-dev/LibreMediaConverter:test/unknown-container-row
JMR-dev/LibreMediaConverter:test/null-message-fallbacks
JMR-dev/LibreMediaConverter:test/cancel-reaches-workmanager
JMR-dev/LibreMediaConverter:docs/coverage-wave3-recovery
JMR-dev/LibreMediaConverter:test/concat-engine-seam
JMR-dev/LibreMediaConverter:docs/coverage-wave3
JMR-dev/LibreMediaConverter:test/mediaprobe-merge-seam
JMR-dev/LibreMediaConverter:test/adaptive-shell-wiring
JMR-dev/LibreMediaConverter:test/aac-audio-args
JMR-dev/LibreMediaConverter:test/notification-progress-text
JMR-dev/LibreMediaConverter:test/media3-muxer-guard
JMR-dev/LibreMediaConverter:test/hardware-fallback-and-cancellation
JMR-dev/LibreMediaConverter:test/unprobeable-join-clip
JMR-dev/LibreMediaConverter:test/one-branch-outcomes
JMR-dev/LibreMediaConverter:test/foreground-type-regimes
JMR-dev/LibreMediaConverter:fix/bound-wedge-diagnostics
JMR-dev/LibreMediaConverter:docs/coverage-wave2
JMR-dev/LibreMediaConverter:test/screen-wiring
JMR-dev/LibreMediaConverter:test/viewmodel-setters
JMR-dev/LibreMediaConverter:test/join-state-mapping
JMR-dev/LibreMediaConverter:test/conversion-state-mapping
JMR-dev/LibreMediaConverter:test/dedupe-user-messages
JMR-dev/LibreMediaConverter:fix/restore-stack-merges
JMR-dev/LibreMediaConverter:test/refused-jobs
JMR-dev/LibreMediaConverter:test/concatworker-failure-arms
JMR-dev/LibreMediaConverter:test/container-capabilities-audio
JMR-dev/LibreMediaConverter:test/readspec-enum-fallbacks
JMR-dev/LibreMediaConverter:test/outputpublisher-seams
JMR-dev/LibreMediaConverter:test/mediaprobe-track-seam
JMR-dev/LibreMediaConverter:test/outputpublisher-partial-branches
JMR-dev/LibreMediaConverter:test/fake-provider-scaffolding
JMR-dev/LibreMediaConverter:docs/coverage-read-findings
JMR-dev/LibreMediaConverter:chore/gitignore-kotlin
JMR-dev/LibreMediaConverter:test/bound-the-hangs
JMR-dev/LibreMediaConverter:docs/coverage-remeasure
JMR-dev/LibreMediaConverter:ci/baseline-counter-precision
JMR-dev/LibreMediaConverter:fix/invalid-suggestion-chip
JMR-dev/LibreMediaConverter:ci/wedged-leg-report
JMR-dev/LibreMediaConverter:fix/reattachment-overwrites-pick
JMR-dev/LibreMediaConverter:test/theme-live-branches
JMR-dev/LibreMediaConverter:fix/failed-save-retry
JMR-dev/LibreMediaConverter:fix/empty-composition-crash
JMR-dev/LibreMediaConverter:ci/advisory-failure-report
JMR-dev/LibreMediaConverter:docs/seven-run-counts
JMR-dev/LibreMediaConverter:test/release-permission-guard
JMR-dev/LibreMediaConverter:ci/build-workflow-permissions
JMR-dev/LibreMediaConverter:docs/api37-point-release
JMR-dev/LibreMediaConverter:docs/benchmark-populate-path
JMR-dev/LibreMediaConverter:fix/dead-assertion-probe-test
JMR-dev/LibreMediaConverter:ci/actionlint
JMR-dev/LibreMediaConverter:test/device-codecs-encode-consequence
JMR-dev/LibreMediaConverter:fix/sdkmanager-pipefail
JMR-dev/LibreMediaConverter:docs/readme-restart-claim
JMR-dev/LibreMediaConverter:fix/saf-picker-root-discovery
JMR-dev/LibreMediaConverter:fix/probe-dispatcher-seam
JMR-dev/LibreMediaConverter:test/media3engine-mime-tables
JMR-dev/LibreMediaConverter:test/mediaprobe-pure-helpers
JMR-dev/LibreMediaConverter:fix/codec-vocabulary-drift
JMR-dev/LibreMediaConverter:docs/robolectric-rationale-correction
JMR-dev/LibreMediaConverter:docs/api37-advisory-counts
JMR-dev/LibreMediaConverter:test/r38-8-saf-e2e
JMR-dev/LibreMediaConverter:test/r38-7-join-states
JMR-dev/LibreMediaConverter:test/r38-6-conversion-states
JMR-dev/LibreMediaConverter:test/r38-5-state-seam
JMR-dev/LibreMediaConverter:fix/jacoco-robolectric-coverage
JMR-dev/LibreMediaConverter:docs/instrumented-tests-correction
JMR-dev/LibreMediaConverter:test/r38-2-filecard
JMR-dev/LibreMediaConverter:test/r38-4-advanced-picker
JMR-dev/LibreMediaConverter:test/r38-3-pickers
JMR-dev/LibreMediaConverter:tools/file-issue-script
JMR-dev/LibreMediaConverter:tools/api-37-emulator
JMR-dev/LibreMediaConverter:fix/review-app-gaps
JMR-dev/LibreMediaConverter:docs/review-corrections
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5461fa9cfa |
Merge pull request #189 from JMR-dev/docs/coverage-wave3
Re-measure after wave 3, and write down the two kinds of gap it had to separate |
||
|
|
da344b0fe4 |
Re-measure after wave 3, and write down the two kinds of gap it had to separate
92.8% line (2183/2352), 81.3% branch (1091/1342), 584 JVM tests in 87 classes, measured 2026-09-02 on the tree this branch creates rather than quoted from a PR body. The shape of the wave is worth more than the number, and it is different from the two before it. Waves 1 and 2 were finding uncovered code; by wave 3 there was little of that left, so the gaps had to be sorted before any test was written. Coverage gaps -- filtered to sites where JaCoCo reports mi > 0, which is what separates a real gap from a partial branch on a compound condition, and which cut the candidate list roughly in half. And assertion gaps, where JaCoCo is green and nothing checks the answer: MainActivity's rail and bottom bar were both executed and transposing them passed the entire suite, as did swapping the two progress-notification strings and swapping Content's two destinations. No coverage number would have found any of the three. Naming the required mutation per ticket earned its keep three times, each recorded with what the weak assertion actually was. Also recorded: a green mutation is only evidence when the mutation is a real change -- one classify reordering was semantically equivalent for every reachable input, and a bad mutation and a weak test look identical in the output. Two entries came back as not gaps, which is a result rather than a shortfall: ContainerCapabilities:282's exclude filter cannot drop anything, and probeForConcat's catch arm is unreachable on this runtime -- Robolectric's MediaExtractor never throws from setDataSource, measured across four input shapes. Both denominators moved, in opposite directions and for different reasons, so they are stated rather than folded into the percentage: 1340 -> 1342 branches from MediaProbe.merge, 2348 -> 2352 lines from the ConcatJoiner interface. Neither is new untested code. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |