Skip to content

v0.3.1

Choose a tag to compare

@seriouslysean seriouslysean released this 12 Sep 17:13
· 319 commits to main since this release
711f3f4

Fixes the four package findings from the 0.3.0 audit, and documents the host-integration order the same audit found an adopter getting wrong. No API change, so this is a patch: a conformance that builds against 0.3.0 builds against this unchanged.

Closes #17.

Delivery

  • A reset no longer loses the drain for a signal recorded during it. The drain slot is given up inside the erase's own lock section, and only the task captured there is cancelled; a record landing immediately after schedules its own.
  • A zero-delay request no longer skips the retry a failure owes. flush() and a full batch both ask for one, and both happen on the consumer's cadence rather than the endpoint's, so the retry deadline is now carried apart from the coalescing delay and a zero-delay request takes the later of the two. A drain halted for want of an identifier owes the same wait.

Queue file

  • A file that cannot be read is told from one that cannot be decoded. Only the second is purged. A read failure leaves the file where it is and suspends the writes over it; a read that succeeds later lifts the suspension; an erase outranks both.
  • Absence is asked of the read rather than of an existence check, which answers "no" for a directory the process cannot reach as readily as for a container that holds no queue.
  • A purge that can neither delete nor overwrite the file leaves a mark beside it, and no later load restores a queue under a standing mark. The mark is settled by the delete that finally lands, and an outstanding one is completed before a fresh queue is written.
  • Reads, writes and erases take the file's own lock. The refusals a store carries are its own, so one store owns its file: two live stores over one path, in one process or two, is not supported and now says so.

Prose

  • ADOPTING.md gains a data-reset phase: keep the collection gate shut across the whole reset rather than only the erase, read the consent answer back at the end rather than capturing it at the start, reopen the counted session after, and serialize the host's own consent check with its own identifier resolution — the package cannot un-mint an identifier a host persisted before anything reached the recorder.
  • SECURITY.md says what erasing guarantees against a filesystem that refuses it, rather than promising deletion no package can make.
  • STABILITY.md states the read-versus-decode split and the mark, and that neither is API.

132 tests, up from 122.