New task
Fresh UUID → server creates new task. Standard flow.
Advertisement
Same ID + already exists
Server does NOT create a new task. Depending on state:
- Task in terminal state → server returns existing result (idempotent).
- Task in progress + input-required → server appends message + resumes.
- Task in progress + working → server rejects with 'task in progress'.
Advertisement
Design for idempotency
// Good: derive ID from request content
String taskId = UUID.nameUUIDFromBytes(
(userId + ":" + requestHash).getBytes()
).toString();
// same request from same user = same task id