Compare commits
merge into: 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
..
pull from: 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
11
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5a5a680b4c |
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> Recovered onto main after hitting #160's trap for real. #189 was opened against test/concat-engine-seam and, unlike #184-#188, never retargeted to main before merging -- so it merged into a branch that had already been merged and left behind. GitHub reported `merged`, the PR shows MERGED, and none of it was on main: `git merge-base --is-ancestor` is what said so, one line, immediately. That check is the entire reason this was a five-minute recovery rather than a coverage entry that silently stayed three points stale. The failure mode is exactly what CLAUDE.md warns about; what it did not say, and now would, is that the auto-retarget it describes belongs to GitHub's stacking feature, so a stack opened with plain `gh pr create --base` has to be retargeted by hand for every single PR -- and missing one is invisible until you check ancestry. Numbers re-measured on this tree with --rerun-tasks rather than inherited from the branch they were taken on: 584 tests, 0 failures, 2183/2352 line, 1091/1342 branch. Same figures, earned again. |
||
|
|
7f23ea8fd7 |
Merge pull request #188 from JMR-dev/test/concat-engine-seam
C1 (#176): give ConcatWorker the seam ConversionWorker always had, and test what was behind it |
||
|
|
05422a6896 |
Merge pull request #187 from JMR-dev/test/mediaprobe-merge-seam
C2 (#177): cut MediaProbe's two-probe merge into a seam, and ask which probe wins |
||
|
|
fa3a32e5c0 |
Merge pull request #186 from JMR-dev/test/adaptive-shell-wiring
B1 (#173): tell the rail from the bottom bar, and the Convert tab from the Join tab |
||
|
|
e2c9981bbe |
Merge pull request #185 from JMR-dev/test/aac-audio-args
B3 (#175): pin the AAC arm every ordinary conversion takes |
||
|
|
7a5622c896 |
Merge pull request #184 from JMR-dev/test/notification-progress-text
B2 (#174): read what the progress notification actually says |
||
|
|
d4ca6b7b0f |
Merge pull request #183 from JMR-dev/test/media3-muxer-guard
A5 (#171): fire the muxer guard that repairs "MP4 for everything", which had never fired |
||
|
|
bbe40cf8f7 |
Merge pull request #182 from JMR-dev/test/hardware-fallback-and-cancellation
A2 + A3 (#168, #169): the hardware fallback, the cancellation that must not take it, and the name a job may not have |
||
|
|
f81d76e730 |
Merge pull request #181 from JMR-dev/test/unprobeable-join-clip
A4 (#170): join the two halves of an unreadable join clip, and record why the catch arm stays device-only |
||
|
|
8849ae96eb |
Merge pull request #180 from JMR-dev/test/one-branch-outcomes
A6 (#172): six one-branch outcomes nothing produced, and one that cannot be produced |
||
|
|
25e14b26d9 |
Merge pull request #179 from JMR-dev/test/foreground-type-regimes
A1 (#167): pin all three foreground-service regimes, and the boundary between two of them |