screen-locker/screen_locker
Krzysztof kuhy Rudnicki 3478ee1d2a Sick panel: move keyboard focus into the overlay
Left on the link, Tab and Enter reached the hidden buttons of the screen
under the backdrop. The primary panel's first switch takes focus once laid
out (Tk skips unmapped widgets when traversing), and the kept-workout note
focuses its Back button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAhbNszs5JKdtnD4uBi3xp
2026-10-17 14:11:15 +02:00
..
tests Sick panel: move keyboard focus into the overlay 2026-10-17 14:11:15 +02:00
__init__.py Fix test discovery and coverage for python_pkg modules 2025-12-02 22:33:34 +01:00
_adb_transport.py Split _shutdown, _phone_verification and _status_data 2026-08-15 20:11:28 +02:00
_armed_state.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_auto_upgrade.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_bonus_lock.py earner-bonus: add the new modules, unit and tests missed by 7851d59 2026-10-06 20:44:01 +02:00
_cli.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_compliance_predicates.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_compliance_state.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_compliance_trace.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_constants.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_credential_recovery.py Detect a Firebase credential the server rejects, not just one that fails to build 2026-08-27 21:32:39 +02:00
_credit_notify.py Credit: one reward per workout slot, desktop notification, --help, runnerup-watch ignores re-pulls 2026-10-09 19:05:08 +02:00
_credit_slot.py Credit: one reward per workout slot, desktop notification, --help, runnerup-watch ignores re-pulls 2026-10-09 19:05:08 +02:00
_day.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_decision_log.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_decision_reasons.py Say every reason a lock decision had, not just the first one 2026-08-23 07:02:41 +02:00
_decision_trail.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_degraded_sources.py Detect a Firebase credential the server rejects, not just one that fails to build 2026-08-27 21:32:39 +02:00
_device.py Push under a persisted per-install uuid, not a fixed role id 2026-08-09 17:31:15 +02:00
_early_bird.py The early-bird window is the wake-alarm carrot, not a clock 2026-09-20 08:39:44 +02:00
_earned.py earned_time 0.6.0: maturity-aware penalty start (first_credits); grace floor covers every gate earner 2026-10-09 21:55:21 +02:00
_earner_units.py earned_time 0.6.0: per-day registry consumer, sleep-ladder date-proof tests, pin v0.6.0 2026-10-09 21:36:53 +02:00
_extra_benefits.py drop the weekly shutdown bonus entirely; every bonus stops at the shutdown ceiling 2026-10-10 08:59:50 +02:00
_gate_bonus.py tests: earned_time 0.7.0 tutor policy (confirmed, 15 min per block); hook envs on 0.7.0 2026-10-10 15:15:35 +02:00
_grace_floor.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_heat_skip.py Take gatelock 0.8.1: nested LockConfig 2026-09-12 19:52:38 +02:00
_http_workout_fetch.py Split _shutdown, _phone_verification and _status_data 2026-08-15 20:11:28 +02:00
_instance.py Queue behind stronger lockers, single-instance guard, fix budget-crash in fit check 2026-08-21 13:04:54 +02:00
_lock_invariant.py Refuse to build a lock screen over a workout already logged today 2026-09-18 09:58:13 +02:00
_log_io.py Stop the relaxed-day popup from re-firing every 30 minutes after Skip 2026-08-18 21:55:59 +02:00
_log_mixin.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_manual_cli.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_future.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_pending.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_push.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_schedule.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_sync_draft.py Count the manual budget per workout, keep a synced twin's id, and let a logged workout outrank an expired early bird 2026-09-18 09:44:28 +02:00
_manual_sync.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_workout_date.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_workout_dialog.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_workout_sport_fields.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_workout_types.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_manual_workout_widgets.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_manual_workout.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_mcp.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_morning_session.py Morning-session reader moves to gatelock 0.9.0 2026-10-02 14:05:40 +02:00
_phone_verification.py deps: ruff 0.17.0 (CPY001 ignored: no copyright policy) 2026-10-09 22:05:02 +02:00
_poke_credit.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_poke_server.py workout poke moves to tcp/8774: 8773 is book-guard's desktop wrapper, whose window the poke server had been answering since 2026-10-09 (phone app rebuilt, selftest default, contract doc) 2026-10-10 09:38:21 +02:00
_poke_wire.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_queue_state.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_queue_wait.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_rest_day_cli.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_rest_day.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_rtdb_stream.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_runnerup_backfill.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_runnerup_db.py deps: ruff 0.17.0 (CPY001 ignored: no copyright policy) 2026-10-09 22:05:02 +02:00
_runnerup_tcx.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_runnerup_verification.py deps: ruff 0.17.0 (CPY001 ignored: no copyright policy) 2026-10-09 22:05:02 +02:00
_session_stream.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_session_sync.py Credit StrongLifts sessions from the headless sync, as pc_workout_verified 2026-08-22 11:26:20 +02:00
_shutdown_base.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_shutdown_target.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_shutdown.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_sick_floor.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_sick.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_source_health.py Sync: Firebase only — drop the GitHub transport (kuhyx/syncs stays a frozen archive) 2026-10-09 19:18:56 +02:00
_startup_checks.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_status_data.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_status_projection.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_status_sections.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_status_types.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_status_view_verify.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_status.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_stream_auth.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_stream_cache.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_surface_group.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_sync_client.py Sync: Firebase only — drop the GitHub transport (kuhyx/syncs stays a frozen archive) 2026-10-09 19:18:56 +02:00
_sync_mixin.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00
_sync_records.py workout-poke: instant phone credit over LAN (signed POST :8773) and Firebase stream 2026-10-09 19:05:51 +02:00
_sync_retry.py Grade against 3.14 too, not just run on it 2026-08-29 11:42:47 +02:00
_sync_status.py Sync: Firebase only — drop the GitHub transport (kuhyx/syncs stays a frozen archive) 2026-10-09 19:18:56 +02:00
_sync_tombstones.py Tombstone sync records durably: a ledger the PC re-pushes every tick 2026-09-13 20:20:06 +02:00
_temperature_status_mixin.py Take gatelock 0.8.1: nested LockConfig 2026-09-12 19:52:38 +02:00
_temperature.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_time_check.py Support multiple workouts per day; fix the dead sync; ban silent failures 2026-07-17 09:22:31 +02:00
_ui_flows_lockout.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_ui_flows_relaxed.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_ui_flows_sick_panel.py Sick panel: move keyboard focus into the overlay 2026-10-17 14:11:15 +02:00
_ui_flows_sick.py Lock screen: "choose lockers…" opens sickdays' KeepPanel in the lock 2026-10-17 14:06:22 +02:00
_ui_flows.py Lock screen: "choose lockers…" opens sickdays' KeepPanel in the lock 2026-10-17 14:06:22 +02:00
_ui_form_fields.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_ui_widgets.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_unlock_view.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_walk_tcx.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_web_decisions.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_web_payload.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_web_server.py Close the four gaps that let a decided lock never reach the screen 2026-08-30 15:24:45 +02:00
_weekly_check.py drop the weekly shutdown bonus entirely; every bonus stops at the shutdown ceiling 2026-10-10 08:59:50 +02:00
_window_setup.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_workday_penalty.py Sick days: per-locker keep (sickdays 0.2.0) for the workout lock 2026-10-16 15:18:49 +02:00
_workout_app.py Put the demo's escape hatch inside the app, the only place it can be received 2026-08-22 12:41:07 +02:00
_workout_credit.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
_workout_handoff.py Make the demo escapable, and stop claiming the blocking was deliberate 2026-08-22 12:33:07 +02:00
_workout_ledger_cli.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_workout_ledger.py Shutdown: walks as workout, rest days, grace floor, workout ledger (earned-time 0.4.0) 2026-10-09 10:43:45 +02:00
_workout_ready.py Supervise the workout app as the lock surface, on a deadline that holds 2026-08-22 11:52:02 +02:00
_workout_session.py Put the demo's escape hatch inside the app, the only place it can be received 2026-08-22 12:41:07 +02:00
_workout_sync.py Sync: Firebase only — drop the GitHub transport (kuhyx/syncs stays a frozen archive) 2026-10-09 19:18:56 +02:00
adjust_shutdown_schedule.sh shutdown: minutes end to end (*_MINUTES schedule keys, HH:MM helper args, to_hours removed) 2026-10-04 19:48:24 +02:00
poke_server.py workout poke moves to tcp/8774: 8773 is book-guard's desktop wrapper, whose window the poke server had been answering since 2026-10-09 (phone app rebuilt, selftest default, contract doc) 2026-10-10 09:38:21 +02:00
screen_lock.py sick days: one shared sickdays pool, 20:00 shutdown floor, one-tap lock button 2026-10-16 13:30:39 +02:00
status_view.py manual workout: log for future dates (credited on the day) 2026-10-16 15:34:15 +02:00