# `Statifier.Validator.Checks.Targets`
[🔗](https://github.com/riddler/statifier-ex/blob/v2.0.0/lib/statifier/validator/checks/targets.ex#L1)

Check 2 (spec 3.5): every `<transition>`'s `target` id resolves to a
state in the document. Walks `Context.transitions` - every owner
(`:plain`, `:initial`, `:history`) in one traversal - and reports
`{:unresolved_target, id}` per unresolved id, at that transition's own
`target` span (falling back to the transition's own span when
unwritten).

This check **owns target existence** for every transition in the
document ("one rule, one owner"): later checks that also
walk transition targets (checks 3 and 5) must not re-report an id this
check already reported unresolved. They do not need anything extra from
`Context` to honor that - "unresolved" and "absent from `Context.states`"
are the same fact, so a plain `Map.has_key?(context.states, id)` lookup
is exactly the skip test those checks need.

# `check`

```elixir
@spec check(
  document :: Statifier.Document.t(),
  context :: Statifier.Validator.Context.t()
) :: [
  Statifier.Validator.Error.t()
]
```

Returns an `:unresolved_target` error for every `<transition>` in the
document (plain, `<initial>`, and `<history>` default alike) whose `target`
id does not resolve to a state in `Context.states`. Owns target existence
for the whole document, so later checks may treat an id this check already
reported as already handled rather than re-reporting it. Returns `[]` when
every transition target resolves.

---

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