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>
120 lines
2.1 KiB
JSON
120 lines
2.1 KiB
JSON
{
|
||
"normalize": [
|
||
{
|
||
"name": "Easy Chicken Tikka-Masala!",
|
||
"want": "chicken tikka masala"
|
||
},
|
||
{
|
||
"name": " Homemade Chili ",
|
||
"want": "chili"
|
||
},
|
||
{
|
||
"name": "Grandma's Stew",
|
||
"want": "grandmas stew"
|
||
},
|
||
{
|
||
"name": "Grandma’s Stew",
|
||
"want": "grandmas stew"
|
||
},
|
||
{
|
||
"name": "İskender Kebab",
|
||
"want": "iskender kebab"
|
||
},
|
||
{
|
||
"name": "Paella à la Valenciana",
|
||
"want": "paella la valenciana"
|
||
},
|
||
{
|
||
"name": "Crème Brûlée",
|
||
"want": "creme brulee"
|
||
},
|
||
{
|
||
"name": "Crème Brûlée",
|
||
"want": "creme brulee"
|
||
},
|
||
{
|
||
"name": "Smørrebrød",
|
||
"want": "smorrebrod"
|
||
},
|
||
{
|
||
"name": "Pierogi z Łososiem",
|
||
"want": "pierogi z lososiem"
|
||
},
|
||
{
|
||
"name": "Straße Würstchen",
|
||
"want": "strasse wurstchen"
|
||
},
|
||
{
|
||
"name": "Œufs en Cocotte",
|
||
"want": "oeufs en cocotte"
|
||
},
|
||
{
|
||
"name": "Æbleskiver",
|
||
"want": "aebleskiver"
|
||
},
|
||
{
|
||
"name": "Phở Bò",
|
||
"want": "pho bo"
|
||
},
|
||
{
|
||
"name": "The Best Quick Recipe",
|
||
"want": ""
|
||
},
|
||
{
|
||
"name": "Chicken stir-fry",
|
||
"want": "chicken stir fry"
|
||
},
|
||
{
|
||
"name": "7-layer dip",
|
||
"want": "7 layer dip"
|
||
}
|
||
],
|
||
"similar": [
|
||
{
|
||
"a": "Homemade chili",
|
||
"b": "Chili",
|
||
"want": true
|
||
},
|
||
{
|
||
"a": "Easy Spaghetti Bolognese",
|
||
"b": "spaghetti bolognese",
|
||
"want": true
|
||
},
|
||
{
|
||
"a": "Chicken stir fry",
|
||
"b": "Chicken stir-fry",
|
||
"want": true
|
||
},
|
||
{
|
||
"a": "Crème brûlée",
|
||
"b": "Creme brulee",
|
||
"want": true
|
||
},
|
||
{
|
||
"a": "Smørrebrød",
|
||
"b": "smorrebrod",
|
||
"want": true
|
||
},
|
||
{
|
||
"a": "Beef tacos",
|
||
"b": "Fish tacos",
|
||
"want": false
|
||
},
|
||
{
|
||
"a": "Chili",
|
||
"b": "White chicken chili",
|
||
"want": false
|
||
},
|
||
{
|
||
"a": "Pot roast",
|
||
"b": "Roast",
|
||
"want": false
|
||
},
|
||
{
|
||
"a": "The best",
|
||
"b": "Easy recipe",
|
||
"want": false
|
||
}
|
||
]
|
||
}
|