# `Sidereon.GNSS.Scenario`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/gnss/scenario.ex#L1)

Deterministic synthetic GNSS observable scenarios.

Scenarios may be supplied as core-schema JSON text or as Elixir maps. The
simulator returns deterministic JSON bytes plus the core fingerprint, or a
decoded map with receiver truth, observable arrays, and ground-truth term
arrays.

# `result`

```elixir
@type result() :: %{
  schema_version: integer(),
  engine_version: String.t(),
  seed: integer(),
  receiver_truth: [map()],
  observations: map(),
  truth_terms: map(),
  determinism_fingerprint: non_neg_integer()
}
```

Simulation result decoded from the deterministic core bytes.

# `scenario`

```elixir
@type scenario() :: map() | keyword() | String.t()
```

Synthetic scenario map or JSON text.

# `simulate`

```elixir
@spec simulate(scenario()) :: {:ok, result()} | {:error, term()}
```

Simulate a scenario and return decoded arrays.

The `:observations` and `:truth_terms` entries contain contiguous arrays from
the core scenario engine. For exact byte-for-byte determinism checks, use
`simulate_bytes/1`.

# `simulate_bytes`

```elixir
@spec simulate_bytes(scenario()) ::
  {:ok, binary(), non_neg_integer()} | {:error, term()}
```

Simulate a scenario and return deterministic JSON bytes.

Repeating this call with the same scenario and seed returns identical bytes
from the core engine.

---

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