• feat(#17): create_session Bifrost-bind primitive (slice 1)

    vh released this 2026-06-18 00:21:36 -07:00

    Slice 1 of issue #17 (Bifrost-binding the chat client) — the client-side
    BIND primitive, TDD'd against docs/contracts/issues/17.contract.md.

    • BifrostBinding{endpoint_url, scope=None} frozen dataclass (#160 shape)
    • create_session(..., bifrost=, consumer_key=): carries the bifrost body
      field and OVERRIDES the bearer to the consumer key per-request (INV-001 —
      never falls back to the canary key)
    • BifrostConsumerKeyMissing: raised BEFORE any HTTP when a binding lacks a
      non-empty key (PRE-001)
    • BifrostHandshakeFailed: 502 on a BOUND create -> carries detail.bifrost_error
      (both-shape unwrap per the persona_state wire lesson); gated on bifrost!=None
      so an unbound 502 stays SessionApiFailed (INV-002)
    • endpoint_for_plane: memory->:8391 / affect->:8390, invalid->ValueError

    7 new tests; full suite 442 green; ruff clean.

    Downloads