Append one log's events, in order, as one step: kept whole or not at
all. Answer "kept", "duplicate" or a refusal. Throwing, rejecting
or not answering in time is no answer (the events are sent again); any
other answer is a refusal. The events are the store's own copies. signal
aborts when the journal stops waiting for this append (its timeout):
stop then if you can; a late answer is not read (the writer sends
again, and a kept event is then a duplicate).
A later writer claims an unfinished log: the next writer number, fencing every earlier one.
Call tree logs kept in files, by the rules every store keeps (streaming.md):
<folder>/<tree>.jsonlholds the kept events,<tree>.writerthe last writer number a claim gave,<tree>.lockis held for each claim and append (the lock Python's takes).