Skip to content

0.8.0

Choose a tag to compare

@b10x-bot b10x-bot released this 07 Oct 02:20
· 104 commits to main since this release
de30462

Added

  • Durable capture continuity on SQLite: a capture checkpoint a later process can continue from.
    ConsistentTenantCapture gains durable_checkpoint, restore_checkpoint and
    checkpoint_usage, default methods returning None, so every provider compiles unchanged and
    PostgreSQL, File and Tree keep complete capture. DurableCaptureCheckpoint holds the provider's
    bytes and prints only their length. SqliteEventStore::enable_durable_continuity installs, in
    one transaction, a <prefix>_capture_continuity row (store instance, epoch, random token), a
    <prefix>_capture_journal kept within 128 entries and 16 MiB, a partial index of redacted
    events, and provider triggers on the events, blobs, identity and registered projection tables;
    create_projections gives each table it creates the same triggers. Each acknowledged atomic
    group writes one journal entry in its own transaction, holding each row value as the exact text
    the row held; a group of a tenant with redacted history writes only its link in the chain. A
    restored checkpoint continues as Unchanged or AppendDelta only through an unbroken chain of
    such entries, and only when its stream identity is the stored one, the tenant has no redacted
    history, each requested projection passes the complete capture's admission and the result fits
    the request's caps; otherwise the capture is complete. Any other write, a dropped or altered
    trigger, a pruned entry or an older copy of the file gives Complete. A cap that a restored
    checkpoint's decoded usage crosses gives Complete, never a limit refusal. Standalone append,
    put_blob and delete_blob are not journaled, and redaction and tenant erasure delete every
    entry. The provider's own snapshot writes no longer end in-process continuity. Design:
    docs/design/durable-capture-continuity.md. One-way for older readers: Eventlog 0.7.0 and
    earlier refuse a store carrying the provider triggers; disable_durable_continuity drops them,
    both tables and the index, after which those versions open and attach the store as before.

Fixed

  • SQLite in-process capture deltas carry event bodies and projection row values as a complete
    capture reads them: the stored text, parsed by the capture's own parser, not the value handed
    to the write. A number whose text does not parse back to itself made base plus delta differ
    from a complete capture, and resulting_usage differ from its counts.
  • SQLite's trigger checks at open, open_existing, inline attach, capture admission and strict
    inspection match a trigger's table without regard to case, as SQLite resolves it. A foreign
    trigger that spelled a captured table in another case was admitted.