Grounding (F2–F5):
- Each ground_dinner job carries the dinner's new grounding_revision
(migration 0010). Renaming a pending Regular raises the revision, and a
job only grounds and writes a dinner still at its revision, so a queued
original job no longer grounds the new name or decides the outcome.
- Background grounding keeps a method, minutes or difficulty a member saved
while the Regular was pending, and fills only those left empty.
- Grounding by hand clears the pasted recipe_url, and link deduplication
uses the source_url of the attached recipe, else the pending link.
- Archived dinners are not grounded: the job checks before any search,
fetch or model call, and its final update requires an unarchived row.
Onboarding (F6, F7):
- Step 3 shows "Add Regulars" back to step 2 when the server refuses to
finish with fewer than three Regulars.
- Common picks are hidden by a copy of harness Normalize/Similar, checked
against the same shared cases as the Go code.
Docs (F8): ARCHITECTURE.md covers the three-Regular minimum, step-3
recovery, the grounding revision and the dedupe rules.
F1 was fixed in 1304487; its test now also asserts the old link is never
grounded and recipe_url stays cleared.
Maestro task 5037ff86-181d-448e-927b-c2fd2258a25d.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A background grounding result now applies only while the dinner is still
pending under the normalized name the job searched: GroundPendingDinner and
FailPendingDinnerGrounding match normalized_name, so a rename makes the old
job's success or failure a no-op. Renaming a dinner still pending enqueues
a fresh grounding job for the new name; if that cannot be enqueued, the
dinner's grounding is failed so it is not left pending with no job.
Completing onboarding (PATCH /api/v1/settings/household with
onboarding_completed true) is refused with 400 invalid_settings until the
household has at least three Regulars (status regular; archived and Quest
log dinners do not count), and onboarding_completed_at is set only then.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>