You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's new
Added
Preferred time-of-day window: a dual-handle time slider in Settings (and earliest_slot_hour / latest_slot_hour in config.json) so only slots within your chosen hours count as matches. A slot outside the window is ignored entirely — no push, no dashboard entry.
Experimental reschedule automation (opt-in, off by default, under Settings → Automation) — extends the existing reschedule assist past the date picker:
Auto-select the matching slot (auto_select_slot): after opening the reschedule date picker for your booking, selects the exact matching slot (right exam type + time) and advances to the summary/review screen.
Auto-confirm the reservation change (auto_confirm_reschedule): goes one step further and clicks the final confirm — actually submitting the reservation change — but only after re-verifying the summary screen matches the intended slot. Requires auto-select, is gated behind a browser confirm dialog, and is UNVERIFIED against the live site (written from screenshots). Read docs/ADVANCED.md and confirm auto-select works reliably before ever enabling it.
Supporting safety around the above: automation output is logged to reschedule.log, critical outcomes send a phone push, a 15-minute cooldown blocks repeat confirm attempts, and current_slot_date is auto-updated after a verified reschedule.
Changed
Urgency is now exclusive: a found slot only counts as urgent (red dashboard / phone push / auto-open browser) if it's on a strictly earlier date than your booked slot — a different time on the same day no longer triggers.
The WORD exam-center dropdown now closes after each selection instead of staying open.
Internal cleanup: split app.py's HTML/JS into templates.py; deduplicated repeated plumbing (browser poll loops, the empty-status shape, browser-trigger outcome constants, the session-expired handler); cached the static exam-center list; the dashboard page is assembled once at startup.
Documentation
Documented the session-expiry countdown and three previously-undocumented config keys (poll_interval_seconds, earliest_slot_hour / latest_slot_hour); fixed the stale "checks every 60 seconds" note now that the interval is user-configurable (15–1800s).
Trimmed changelog-style narration from code comments and CLAUDE.md, keeping rationale and live-verification notes.