Per D-021, plan.MarkTried(date) moves every Quest log dinner planned on
a household-local date (any plan status) to tried and opens a pending
rotation_reviews row; a dinner already checked for the date is left as
it is, so it is idempotent and never re-marks a dinner returned to the
Quest log.
GET /api/v1/rotation-reviews lists the pending checks as
{dinner {id, name, photo}, plan_date}. POST
/api/v1/dinners/{id}/rotation-review {decision} applies keep (Regular,
origin kept), drop ("Not for us", archived) or not_made ("We didn't
make it", back to the Quest log), closing the check with decided_at and
the session's updated_by; a second decision is 409 no_pending_review.
A dropped dinner's name joins the passed names: ListDeclinedSuggestionNames
and ListRecentDeclinedNames become ListPassedNames and
ListRecentPassedNames, which also read Rotation checks decided drop, so
the Side quest dedupe and household context never suggest it again.
A static test guards that keep is the only path to Regular: every query
writing dinners.status and every use of the regular status is reviewed.
Maestro: a1887d1c-c405-478c-ac7d-8cb8b40d280d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
930 B
SQL
27 lines
930 B
SQL
-- Reads for the AI household context block (internal/ai/harness).
|
|
|
|
-- name: ListRecentPassedNames :many
|
|
-- The most recent names the household turned down, newest first, as
|
|
-- ListPassedNames has them.
|
|
SELECT name FROM (
|
|
SELECT name, decided_at, id
|
|
FROM suggestions
|
|
WHERE status = 'declined'
|
|
UNION ALL
|
|
SELECT dinners.name, rotation_reviews.decided_at, rotation_reviews.id
|
|
FROM rotation_reviews
|
|
JOIN dinners ON dinners.id = rotation_reviews.dinner_id
|
|
WHERE rotation_reviews.decision = 'drop'
|
|
)
|
|
ORDER BY decided_at DESC, id DESC
|
|
LIMIT ?;
|
|
|
|
-- name: ListPlannedDinners :many
|
|
-- The planned dinners dated from from_date up to but not including
|
|
-- to_date, oldest first. Days with no dinner are left out.
|
|
SELECT plan_days.date, dinners.name
|
|
FROM plan_days
|
|
JOIN dinners ON dinners.id = plan_days.dinner_id
|
|
WHERE plan_days.date >= sqlc.arg(from_date) AND plan_days.date < sqlc.arg(to_date)
|
|
ORDER BY plan_days.date, plan_days.id;
|