POST /shopping/{weekStart}/generate now answers with title_job_id, and
Push to Calendar's supply_run carries it too, so a client can follow the
title_supply_run job through GET /jobs/{id}, including a title_failed
failure. It is null when the list already has its title or was not
generated.
Add a regression test that replaces the week's list after archive_title
answers but before the title is stored: the old job fails title_failed
and the replacement stays untitled.
Maestro task a55adc28-4d8b-4517-b1d7-dcff39ea5a09.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>