testsAndMisc/docs/superpowers/evidence/runnerup-always-available-2026-08-12.json
Krzysztof kuhy Rudnicki a97ad66e1f
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run
Whitelist RunnerUp day and night, so it can always sync
RunnerUp needs to stay enabled after a run to export the TCX file
screen-locker verifies against; being disabled by focus mode at home
silently blocked that. It's straightforwardly beneficial, so treat it
like the other always-available apps: present in both WHITELIST and
NIGHT_WHITELIST.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013SH7XBkpEqQX4KghHdgx9T
2026-08-12 19:22:50 +02:00

38 lines
2.9 KiB
JSON

{
"intent": "Whitelist RunnerUp so it stays enabled everywhere (home, away, curfew), since being disabled at home was blocking its TCX auto-export, which screen-locker's workout verification depends on.",
"scope": [
"phone_focus_mode/config.sh",
"focus_owner/assets/policy.json",
"Non-goal: root-DB fallback verification, or changing verification thresholds -- those live in screen-locker, not this repo"
],
"changes": [
"Added org.runnerup and org.runnerup.free to both WHITELIST (day) and NIGHT_WHITELIST (curfew) in config.sh -- both lists are required because model.py enforces night_allowed_packages as a subset of allowed_packages.",
"Regenerated focus_owner/assets/policy.json via `python3 -m python_pkg.focus_policy --config phone_focus_mode/config.sh --output focus_owner/assets/policy.json --redact-home`, keeping home coordinates redacted in the committed asset."
],
"verification": [
{
"command": "python3 -c \"import json; p=json.load(open('focus_owner/assets/policy.json')); print([x for x in p['allowed_packages'] if 'runnerup' in x], [x for x in p['night_allowed_packages'] if 'runnerup' in x], p['home'])\"",
"result": "pass",
"evidence": "org.runnerup and org.runnerup.free present in both lists; home lat/lon still null (redacted)."
},
{
"command": "flutter build apk --release (focus_owner, signed with the existing kuhy-release.jks) then adb install -r on the connected Pixel 6a (23181JEGR08034)",
"result": "pass",
"evidence": "Build succeeded; install succeeded (release signature matched the already-installed app, so no uninstall was needed)."
},
{
"command": "adb shell pm list packages -d | grep -i runnerup",
"result": "pass",
"evidence": "Empty output -- RunnerUp (org.runnerup, the installed variant) is not disabled after reinstalling focus_owner with the updated policy."
}
],
"risks": [
"Curfew-specific enforcement was not directly observed live (would require waiting for 23:00 or forcing a curfew-state transition on the live device-owner policy, which was avoided to not disrupt the running phone). Confidence rests on the policy.json content itself (RunnerUp present in night_allowed_packages) plus the day-state confirmation, not an on-device curfew trigger.",
"org.runnerup.free is not installed on this phone (only org.runnerup is); the .free entry is harmless but unverified since there's nothing to test it against."
],
"rollback": [
"Remove org.runnerup / org.runnerup.free from both WHITELIST and NIGHT_WHITELIST in config.sh, regenerate policy.json with the same --redact-home flag, rebuild focus_owner --release, adb install -r.",
"After rollback, confirm via `adb shell pm list packages -d | grep -i runnerup` that focus mode can disable it again as expected (a positive result there is a no-op-check only when curfew/away actually applies)."
]
}