{ "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)." ] }