• feat(#18): affect.fetch — adopt bifrost 0.10.0 mandatory fetch (D1 prerequisite)

    vh released this 2026-06-19 22:59:59 -07:00 | 195 commits to main since this release

    bifrost 0.10.0's _supports_affect_plane (bifrost/affect.py:75-80) now requires a
    callable fetch for the affect capability to advertise/dispatch at all (INV-012
    strong-or-absent), so an emit-only store 400s on EVERY affect op — repinning past
    the affect.fetch release (#12/#13) breaks our shipped affect plane until fetch
    exists. Implement affect.fetch as a thin async wrapper over the existing get()
    read seam, conformed verbatim to the reference InMemoryAffectStore.fetch:
    {"found": False} or {"found": True, "snapshot": }, AffectInvalidArguments
    on empty ids, opaque (INV-001 — never reads pad/valence).

    This is the forced prerequisite for the #18 D1 composite (build_combined_app),
    and a new Worldtree I/O point consumed (affect read-back over bifrost).

    • Repin bifrost>=0.8.0 -> >=0.10.0 (uv lock: 0.8.0 -> 0.10.0)
    • affect_store.py: add async fetch() over get()
    • contract bifrost_affect_provider v1.2: fetch FN block + INV-010 (cap = supported+emit+fetch)
    • tests: 3 fetch unit + parity_vs_reference_fetch through dispatch_affect_call
    • suite 482 -> 486 green
    Downloads