- cafe.py: room 2 now invites the lowest-affection candidate instead of
highest (room 1 unchanged), plus OCR'd invited-student name logging
- exit_game.py: alert (AP_ALERT: log tag, picked up by ba_cron_run.sh's
Discord alerting) if AP is still unspent above threshold when the game
closes
- login.py: re-check window_exists() after the stabilization wait to catch
a startup window-flicker race that could crash a run
- config.py/mapping.md: supporting constants and reference-mapping updates
Also rewrites plan.md: retires the phase-by-phase changelog (now fully
superseded by CLAUDE.md's own documentation) down to forward-looking
backlog items, and adds a performance-improvement plan from a cron-log
time analysis (lesson.py's per-cell screenshot redundancy, event_sweep's
multi-call design).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>