Fixes the three review findings on 50399b6 (pull request #102):
- A batch now rereads every declined name inside its storing transaction,
so a Pass committed after the batch read its input but before it stores
can no longer let the passed dish into the deck (SQ-01).
- A decision that leaves the deck under five creates the replenish batch
and its job in the decision's own transaction, so a decision is never
recorded without the replenish it calls for; when they cannot be
written, neither is the decision, and a retry decides again (SQ-02).
StartBatch commits the batch with its job the same way, replacing the
mutex and the fail-on-enqueue cleanup. jobs gains Kind.EnqueueTx and
Kind.Wake for this.
- Migration 0012 gives each suggestion the name its dish was suggested
under; declined names for batches and the household context's passed
list read it instead of the dinner's mutable name, so renaming a passed
dinner no longer erases it from dedupe (SQ-03).
Task: b4f2558c-227f-4627-852b-be5aa190242a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
726 B
SQL
20 lines
726 B
SQL
-- Reads for the AI household context block (internal/ai/harness).
|
|
|
|
-- name: ListRecentDeclinedNames :many
|
|
-- The names the most recently declined suggestions were suggested under,
|
|
-- newest first; renaming their dinners does not change them.
|
|
SELECT name
|
|
FROM suggestions
|
|
WHERE status = 'declined'
|
|
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;
|