tasker is a durable http task queue service

Add task enqueue deduplication with Idempotency-Key #13

Open kenneth.nym.sh
targeting main from t3/task-queue-idempotency
Open opened by and assigned to kenneth.nym.sh
targeting main from t3/task-queue-idempotency

Allow callers to retry POST /tasks with an optional Idempotency-Key header without enqueueing duplicate work. New tasks return 201; matching keys return the existing task with 200, including succeeded and failed tasks, without changing its payload, schedule, or status.

Add a SQLite migration with a nullable unique key. Deduplication is atomic across concurrent database handles, survives restarts, and ends when retention cleanup deletes the task. Only new tasks increment enqueue metrics. The Go SDK sends CreateTaskRequest.IdempotencyKey as a header and accepts both success responses.

Include v0.4.0 documentation and coverage for concurrency, migrations, task states, restart persistence, cleanup reuse, and header transport.

Validation: server and E2E short suite, Go SDK suite, Astro check, documentation build and link checks passed.

Commits 0