80 lines
3.4 KiB
Markdown
80 lines
3.4 KiB
Markdown
---
|
|
id: "01-queue-send-now-claims"
|
|
title: "Add exact send-now queue claims"
|
|
status: done
|
|
wave: 1
|
|
depends_on: []
|
|
plan: "plan.md"
|
|
spec: "../../specs/ui/requirements/message-queue-send-now.md"
|
|
---
|
|
|
|
# Task 01: Add exact send-now queue claims
|
|
|
|
## Intent
|
|
|
|
Give the orchestrator an atomic, loss-aware way to claim one persisted queue
|
|
entry or an exact ordered snapshot, restore the original entries on failure,
|
|
and acknowledge every durable source after acceptance.
|
|
|
|
## Acceptance
|
|
|
|
1. An exact-ID claim is all-or-none, session-scoped, FIFO-ordered, and treats
|
|
ordinary versus durable lifecycle rows according to the existing delivery
|
|
guarantees.
|
|
2. Bulk aggregation preserves content, attachments, references, execution
|
|
envelope, and source provenance exactly as specified, with pre-mutation
|
|
overflow errors.
|
|
3. Restore and acknowledge operations handle mixed ordinary/durable claims
|
|
without changing unrelated or newly queued rows.
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/backend/internal/orchestrator/messagequeue/types.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository_memory.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository_sqlite.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/service.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/send_now.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository_memory_send_now_test.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository_sqlite_send_now_test.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/repository_postgres_send_now_test.go`
|
|
- `apps/backend/internal/orchestrator/messagequeue/send_now_test.go`
|
|
|
|
## Dependencies
|
|
|
|
None.
|
|
|
|
## Parallelism
|
|
|
|
Sequential. This task freezes the claim and restoration contract consumed by
|
|
Task 02.
|
|
|
|
## Inputs
|
|
|
|
- Spec: API-adjacent aggregation rules, State and Concurrency, Failure Modes.
|
|
- Plan: Backend / Exact queue dispatch claims.
|
|
- Existing patterns: `ReserveHead`, `TakeByID`, `Restore`,
|
|
`AcknowledgeByID`, and `MergeIntoAbove`.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
cd apps/backend && go test -race ./internal/orchestrator/messagequeue -run 'SendNow' -count=1
|
|
```
|
|
|
|
If the PostgreSQL DSN is available, the same command must discover and pass the
|
|
env-gated PostgreSQL send-now cases; otherwise record the explicit skip.
|
|
|
|
## Output contract
|
|
|
|
Report files changed, the exact claim/restore/ack semantics, RED and GREEN test
|
|
commands/results, PostgreSQL execution or skip, blockers/risks, and synchronize
|
|
this task plus `plan.md` status/results.
|
|
|
|
## Results
|
|
|
|
- Added `SendNowClaim`, FIFO envelope aggregation, exact session-scoped claims, restoration, and durable-source acknowledgement to the memory and SQLite/PostgreSQL-compatible repositories.
|
|
- Claims are all-or-none, reject missing/duplicate/reserved or changed click-time snapshots without mutation, retain durable rows with an in-flight reservation, restore ordinary rows at their persisted positions, and acknowledge every durable source only after prompt acceptance.
|
|
- GREEN: `cd apps/backend && go test -race ./internal/orchestrator/messagequeue -count=1 -v` — 116 tests passed across memory and SQLite; env-gated PostgreSQL cases are included and skipped because `KANDEV_TEST_POSTGRES_DSN` is unset.
|
|
- Aggregate envelope coverage proves FIFO content/attachments, oldest execution metadata, canonical reference de-duplication, provenance, attachment-only entries, and pre-mutation attachment/reference overflow errors.
|