Architecture Decision Record

ADR-0039: Referenced Artifacts Become Immutable Once Fact-Addressed

Status: Accepted · Date: 2026-03-06

Status: Accepted

Date: 2026-03-06

Context

BSFG already stores large artifacts out-of-band and references them from facts. NATS Object Store supports put, get, and del, and client APIs also describe create/update behavior for objects. :contentReference[oaicite:0]{index=0}

That leaves a boundary-integrity question:

Because BSFG treats fact history as authoritative, artifact references must not silently drift underneath retained facts.

Options Considered

Option Description Benefits Drawbacks
Mutable referenced artifacts Allow objects to be overwritten in place even after facts reference them.

|

| | Delete-and-replace semantics | Allow referenced objects to be deleted and re-uploaded under the same logical key. |

|

| | Immutable once referenced (Selected) | Once a fact references an artifact, that artifact content is treated as immutable. Any correction or replacement uses a new object key and a new fact. |

|

| | Immutable by convention only | Recommend immutability but rely on operators and clients not to overwrite referenced objects. |

|

|

Decision

BSFG treats any artifact that has been referenced by a retained fact as immutable.

referenced object
  -> immutable content
replacement
  -> new object key + new fact

Therefore:

Deletion and garbage collection remain lifecycle concerns, but they must respect retention and evidence policy. A referenced artifact is not treated as casually mutable storage.

Consequences

Benefits:

Tradeoffs: