• feat(provider): SQLite affect store + ASGI wiring — #195 parity green

    vh released this 2026-06-14 15:24:00 -07:00 | 228 commits to main since this release

    The first slice of ratatoskr-as-Tier-3-Bifrost-consumer: a SQLite-backed,
    conduit-opaque affect store Worldtree emits Tier-3 persona/affect snapshots
    into, plus the thin build_affect_provider_app wiring. The bifrost library
    owns the wire; this owns only the store + glue.

    • ratatoskr.provider.affect_store: open_affect_store / emit / get /
      build_affect_provider_app. Two-table SQLite schema (snapshots + idempotency).
    • Conduit-opaque (INV-001): reads only the two addressing keys; whole-blob
      hash only. LWW-by-arrival across distinct keys; replay-or-conflict
      idempotency (actor-scoped from ctx), raising bifrost's typed exceptions.
    • Conformance: #195 parity vs InMemoryAffectStore through the real
      dispatch_affect_call engine. 17 provider tests; 395 full suite.
    • Contract v1.1: idempotency model corrected to bifrost's actual semantics
      (caught by real-lib TDD; the artifact-only review structurally could not).
      Heid-panel reviewed (contract + code); idempotency-cache TTL pruning,
      memory.* plane, and the combined two-plane server deferred (see Out of scope).
    Downloads