# skipper_core v1.0.0 - Table of Contents > Core of Skipper: test-gating via Google Spreadsheet (resolver, Sheets client, sync writer). ## Pages - [skipper-elixir](readme.md) ## Modules - [Skipper](Skipper.md): 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. - [Skipper.Client](Skipper.Client.md): Reads the spreadsheet: primary sheet plus reference sheets, merged. - [Skipper.Config](Skipper.Config.md): Skipper configuration. - [Skipper.Report](Skipper.Report.md): Quarantine-debt summary emitted at the end of a run. - [Skipper.Resolver](Skipper.Resolver.md): Decides whether a test runs. Tests not in the spreadsheet always run (opt-out model); a test with a future `disabledUntil` is skipped. - [Skipper.SheetsApi](Skipper.SheetsApi.md): The four Google Sheets v4 calls Skipper needs. An API handle is `{module, client}`; `Skipper.SheetsApi.HTTP` is the real implementation and tests can pass an in-memory fake. - [Skipper.SheetsApi.HTTP](Skipper.SheetsApi.HTTP.md): Sheets API over HTTPS (`:httpc`), authenticated with a service-account JWT (OAuth 2.0 `jwt-bearer` grant, RS256 signed with `:public_key`). - [Skipper.TestId](Skipper.TestId.md): Test ID helpers: `relative/path > part1 > part2`, matched case-insensitively. - [Skipper.Writer](Skipper.Writer.md): Reconciles the primary sheet with the test IDs discovered in a run: new IDs are appended (empty `disabledUntil`); stale rows of the same files are deleted only with `SKIPPER_SYNC_ALLOW_DELETE=true`. Existing rows are never modified.