Adds ServerLogTask (tasks/server_log.py) which records temp/power samples from startup to shutdown regardless of Sud state, in the same Name/Samples JSON format as SudLogTask so analyze_log.py and replay_sim.py can consume it directly. The file is written on graceful exit (Ctrl-C) from brewpi.py's finally block, just before the heater is closed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>