398a298561
The concurrency test only exercised the single-message append, which allocates its position inside one statement. Replacing the batch allocator's atomic `next_message_position` bump with a read-then-write left every test passing — so the invariant that concurrent writers get disjoint ranges was not actually covered on the path a turn takes. Four concurrent three-message batches now assert twelve distinct positions and that each batch's own messages stayed contiguous and in order. Against the read-then-write version this fails on `chat_messages_chat_position_key`, which is the constraint doing the work rather than the application code.