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