# `Skipper`
[🔗](https://github.com/get-skipper/skipper-elixir/blob/main/lib/skipper.ex#L1)

Runtime shared by the framework adapters (`skipper_ex_unit`, `skipper_espec`):
load the spreadsheet once per run, answer "should this test run?", collect
discovered test IDs, then emit the report and sync at the end.

# `check`

```elixir
@spec check(String.t()) :: :run | {:skip, String.t()}
```

Record `test_id` as discovered and tell whether it should run:
`:run` or `{:skip, message}`.

# `finish`

```elixir
@spec finish() :: :ok | {:error, String.t()}
```

Emit the quarantine report and, in sync mode, reconcile the sheet. Returns
`{:error, reason}` (already printed) when the sync fails.

# `put_resolver`

Replace the resolver (e.g. to add fixture entries in tests).

# `resolver`

The loaded resolver, or nil when Skipper is not started/configured.

# `start`

```elixir
@spec start(keyword()) :: :ok
```

Load the spreadsheet. Options:

  * `:config` — a `Skipper.Config` (default: `Skipper.Config.from_env/0`)
  * `:resolver` — use this `Skipper.Resolver` instead of fetching

Without a config every test runs. Raises only when the sheet cannot be loaded
and `SKIPPER_FAIL_OPEN=false`.

# `sync_mode?`

True with `SKIPPER_MODE=sync`.

---

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