testsAndMisc/docs/superpowers/evidence/screen-locker-sick-tracker-2026-05-14.json
Krzysztof kuhy Rudnicki 65d25ac46a feat(screen-locker): add sick-day tracker and commitment debt flow
Adds a sick-day exemption flow with debt tracking so workout enforcement
can be skipped on declared sick days while preserving phone-verification
and shutdown invariants.

- New _sick_tracker module persists sick_history.json (days, debt, commitments).
- New _sick_dialog integrates declaration into the lock UI flow.
- _ui_flows.py and screen_lock.py consult tracker before enforcing workouts.
- gitignore sick_history.json (runtime state, like sick_day_state.json).
- 304 tests pass; 100% branch coverage on every screen_locker file.
2026-05-14 19:52:15 +02:00

41 lines
2.4 KiB
JSON

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