# src/core/util — small shared pure utilities

## Scope

Tiny, dependency-free pure helpers linked by both artifacts: whole-file byte
loading and unit-interval clamping.

## Modules

- `file_bytes` (`core/util`) — the ONE whole-file byte loader (Q-W1), linked by both artifacts; blocking I/O, off-audio-thread only.
- `clamp01` (`core/util`, header-only) — the ONE unit-interval clamp (Q-W1), replacing four per-module static copies; NaN passes through unchanged rather than collapsing to a bound.

## Gotchas

- `clamp01` lets NaN pass through unchanged rather than collapsing it to a bound —
  this is deliberate (it replaced four per-module static copies that already
  behaved this way); don't "fix" it to clamp NaN to 0 or 1.
- `file_bytes` does blocking I/O — off-audio-thread only, never call it from
  `process()`.
