Four dispatches of one configuration — API 37.0, swiftshader_indirect, SystemUI disabled — came back three green and one not. The odd one out (run 32646029143) had pm disable-user report new state: disabled-user and SystemUI start eight more times anyway (ActivityManager: Start proc N:com.android.systemui … GradientColorWallpaper), with ten more RegionSampling aborts and a surfaceflinger pid that never sat still.
Two bugs, and the second is why the first went unnoticed:
one disable attempt was treated as sufficient;
the wait after adb shell stop was not a wait — it asked service check 0.3 s later and got found from the system_server that was still exiting. Both the good and the bad run printed services back after 5 s, so a broken fix looked identical to a working one.
Now it does up to three rounds: disable → take the framework down and confirm system_server is gone → bring it back → verify the package is in pm list packages -d → require a 45 s window with zero new aborts.
Also adds measure_baseline (default true) so the 45 s pre-measurement can be skipped when the question is reliability rather than rate.
Debug workflow only, same dispatch-only trigger, same admin-merge rationale.
Four dispatches of one configuration — API 37.0, `swiftshader_indirect`, SystemUI disabled — came back three green and one not. The odd one out ([run 32646029143](https://github.com/JMR-dev/LibreMediaConverter/actions/runs/32646029143)) had `pm disable-user` report `new state: disabled-user` and SystemUI start eight more times anyway (`ActivityManager: Start proc N:com.android.systemui … GradientColorWallpaper`), with ten more `RegionSampling` aborts and a surfaceflinger pid that never sat still.
Two bugs, and the second is why the first went unnoticed:
- one disable attempt was treated as sufficient;
- the wait after `adb shell stop` was not a wait — it asked `service check` 0.3 s later and got `found` from the `system_server` that was still exiting. Both the good and the bad run printed `services back after 5 s`, so a broken fix looked identical to a working one.
Now it does up to three rounds: disable → take the framework down and confirm `system_server` is gone → bring it back → verify the package is in `pm list packages -d` → require a 45 s window with zero new aborts.
Also adds `measure_baseline` (default true) so the 45 s pre-measurement can be skipped when the question is reliability rather than rate.
Debug workflow only, same dispatch-only trigger, same admin-merge rationale.
actionlint 1.7.12 exit 0; PyYAML parse OK; embedded helpers pass `bash -n`.
🤖 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.
Four dispatches of one configuration — API 37.0,
swiftshader_indirect, SystemUI disabled — came back three green and one not. The odd one out (run 32646029143) hadpm disable-userreportnew state: disabled-userand SystemUI start eight more times anyway (ActivityManager: Start proc N:com.android.systemui … GradientColorWallpaper), with ten moreRegionSamplingaborts and a surfaceflinger pid that never sat still.Two bugs, and the second is why the first went unnoticed:
adb shell stopwas not a wait — it askedservice check0.3 s later and gotfoundfrom thesystem_serverthat was still exiting. Both the good and the bad run printedservices back after 5 s, so a broken fix looked identical to a working one.Now it does up to three rounds: disable → take the framework down and confirm
system_serveris gone → bring it back → verify the package is inpm list packages -d→ require a 45 s window with zero new aborts.Also adds
measure_baseline(default true) so the 45 s pre-measurement can be skipped when the question is reliability rather than rate.Debug workflow only, same dispatch-only trigger, same admin-merge rationale.
actionlint 1.7.12 exit 0; PyYAML parse OK; embedded helpers pass
bash -n.🤖 Generated with Claude Code