Feature 23 task 2: Settings → Regular dinners gains a Find missing photos trigger (202 job followed via useJob) and the fix-recipe sheet shows per-dinner backfill failures with typed reasons and retry. Photoless dinners keep the placeholder until a photo arrives. Photoless/failed dinners excluded by the backend (recipe_unusable, pasted-link failures) hide Search again and explain why.
Feature 23 task 2: Settings → Regular dinners gains a Find missing photos trigger (202 job followed via useJob) and the fix-recipe sheet shows per-dinner backfill failures with typed reasons and retry. Photoless dinners keep the placeholder until a photo arrives. Photoless/failed dinners excluded by the backend (recipe_unusable, pasted-link failures) hide Search again and explain why.
Maestro task 7a468d2d-4a9b-45f2-b626-a7bed5f671df.
Settings → Regular dinners gains a "Find missing photos" trigger that
calls POST /api/v1/settings/photo-backfill (202 {id}) and follows the
backfill_dinner_photos job with useJob, showing progress, a summary of
the outcomes, or why it stopped. When the job ends, the dinners, plans
and home queries are read again so found photos show everywhere.
The fix-recipe sheet now shows the dinner's grounding_error as a typed
reason and offers "Search again" (the same backfill), reporting this
dinner's outcome; it is not offered for recipe_unusable, since the
backfill never replaces a pasted link. Regular now parses
grounding_error.
Task: 7a468d2d-4a9b-45f2-b626-a7bed5f671df
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
F1: every dinner response now carries photo_backfill_eligible, computed
by the exported dinners.PhotoBackfillEligible: the condition
ListPhotoBackfillDinners lists by and GroundFailedDinner and
RefailDinnerGrounding write under (unarchived, failed, no photo, no
pasted recipe_url). A test holds the flag to ListPhotoBackfillDinners
for an eligible dinner and for grounded, linked and archived ones. The
fix-recipe sheet shows "Search again" only when the flag is set, so a
dinner with a pasted link is never offered it, whatever its reason.
F2: a dinner absent from the backfill result now reads "This dinner was
not included in that search." instead of claiming a pasted link.
Task: 7a468d2d-4a9b-45f2-b626-a7bed5f671df
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Feature 23 task 2: Settings → Regular dinners gains a Find missing photos trigger (202 job followed via useJob) and the fix-recipe sheet shows per-dinner backfill failures with typed reasons and retry. Photoless dinners keep the placeholder until a photo arrives. Photoless/failed dinners excluded by the backend (recipe_unusable, pasted-link failures) hide Search again and explain why.
Maestro task 7a468d2d-4a9b-45f2-b626-a7bed5f671df.
Settings → Regular dinners gains a "Find missing photos" trigger that calls POST /api/v1/settings/photo-backfill (202 {id}) and follows the backfill_dinner_photos job with useJob, showing progress, a summary of the outcomes, or why it stopped. When the job ends, the dinners, plans and home queries are read again so found photos show everywhere. The fix-recipe sheet now shows the dinner's grounding_error as a typed reason and offers "Search again" (the same backfill), reporting this dinner's outcome; it is not offered for recipe_unusable, since the backfill never replaces a pasted link. Regular now parses grounding_error. Task: 7a468d2d-4a9b-45f2-b626-a7bed5f671df Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Independent Codex gpt-6-sol review: APPROVED for this exact commit.