# `ImagePipe.Source.CacheSemantics`
[🔗](https://github.com/hlindset/image_pipe/blob/v0.2.0/image_pipe/lib/image_pipe/source/cache_semantics.ex#L1)

Source-owned cache facts used by internal and HTTP cache decisions.

`byte_identity` seeds must be deterministic, non-secret, and stable across
nodes for the same source bytes. The core validates the tagged shape but does
not validate seed contents structurally.

A strong byte identity is only valid when `stable?` is `true`. A source whose
bytes can change uses `byte_identity: :content` and `stable?: false`: its
identity is the SHA-256 of the original bytes, taken when they're fetched.

`copy?` asks ImagePipe to keep a local copy of the original, in the input
pool when `internal_cache` allows, so other variants of it don't read it from
its origin again. Remote adapters set it. A source that returns a local path
without it is read where it is, and hashed in place when it has a content
identity.

# `byte_identity`

```elixir
@type byte_identity() :: {:strong, term()} | :content
```

# `t`

```elixir
@type t() :: %ImagePipe.Source.CacheSemantics{
  byte_identity: byte_identity(),
  copy?: boolean(),
  policy: ImagePipe.Source.CachePolicy.t(),
  stable?: boolean()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
