Agreed - it'd be simple to have a separate component that periodically shovels out completed tasks out of the DB and into S3.  The job queue won't be accessing those rows anymore, so the two components won't interfere.

If that component consumes from `v2/task:completed` and `v2/task:failed` (and of course polls periodically for misses), then this can meet the "eventually consistent" guarantee above with a reasonable median time-to-consistency.