Architecture Decision Record

ADR-0031: Clients Access Boundary Storage Only Through BSFG Service

Status: Accepted · Date: 2026-03-06

Status: Accepted

Date: 2026-03-06

Context

BSFG is defined as a boundary appliance with a narrow explicit contract:

AppendFact
FetchFacts
ConfirmReceipt
PutObject

Underneath that contract sit the zone-local durable substrates:

A design question follows:

This decision determines whether the boundary contract stays explicit and enforceable, or whether storage internals become the de facto public API.

Options Considered

Option Description Benefits Drawbacks
Direct client access to JetStream and Object Store Clients publish, fetch, ack, and upload directly against storage substrates.

|

| | Mixed mode | Some clients use the BSFG service while others access JetStream or Object Store directly. |

|

| | BSFG service as the only boundary-facing storage contract (Selected) | All application access to fact logs and artifact storage goes through the BSFG service contract. |

|

| | Storage-side policy wrappers only | Expose JetStream and Object Store directly, but rely on ACLs and conventions to approximate BSFG semantics. |

|

|

Decision

Application clients do not access JetStream streams or object buckets directly as part of the boundary contract.

All boundary-facing storage interaction is mediated by the BSFG service:

client
  -> BSFG service
      -> JetStream
      -> Object Store

Therefore:

JetStream and Object Store are implementation substrates, not the public boundary protocol.

Consequences

Benefits:

Tradeoffs: