{ "intent": "Allow declaring sick days in screen_locker so workout enforcement is exempted while accumulating commitment debt; preserve existing unlock paths and 100% branch coverage.", "scope": [ "python_pkg/screen_locker/_sick_dialog.py (new)", "python_pkg/screen_locker/_sick_tracker.py (new)", "python_pkg/screen_locker/_constants.py", "python_pkg/screen_locker/_ui_flows.py", "python_pkg/screen_locker/screen_lock.py", "python_pkg/screen_locker/tests/conftest.py", "python_pkg/screen_locker/tests/test_phone_check_unlock.py", "python_pkg/screen_locker/tests/test_ui_and_timers.py", "python_pkg/screen_locker/tests/test_ui_and_timers_part2.py", "python_pkg/screen_locker/tests/test_sick_features.py (new)", "python_pkg/screen_locker/tests/test_sick_tracker.py (new)", ".gitignore (ignore sick_history.json)", "Non-goal: change workout enforcement policy outside sick exemption" ], "changes": [ "Added _sick_tracker module with persisted sick_history.json (days, debt, commitments, justifications).", "Added _sick_dialog module integrating sick-day declaration into the UI flow.", "Updated _ui_flows.py and screen_lock.py to consult the sick tracker before enforcing workout requirements.", "Extended existing tests and added test_sick_features.py + test_sick_tracker.py to cover all new branches.", "Gitignored python_pkg/screen_locker/sick_history.json (runtime state, like sick_day_state.json)." ], "verification": [ { "command": "python -m pytest python_pkg/screen_locker/tests/ --cov=python_pkg.screen_locker --cov-branch --cov-report=term-missing", "result": "pass", "evidence": "304 passed, 0 failed; per-file coverage 100% on every screen_locker source (_sick_dialog 116/20, _sick_tracker 134/34, _ui_flows 156/36, screen_lock 264/68, etc.)." } ], "risks": [ "Sick history file lives under the package directory; if package is reinstalled state is lost — mitigated by gitignore + manual backup if needed.", "Adding the sick flow expands the screen-lock state machine; misconfigured callers could skip workout enforcement unintentionally — mitigated by tests covering all new branches." ], "rollback": [ "Revert this commit; sick_history.json remains on disk but is gitignored and unused.", "Re-run pytest python_pkg/screen_locker/tests to confirm pre-feature coverage holds." ] }