# temper v0.4.0 - Table of Contents

> Flaky-test detection for ExUnit: records every test outcome and reports tests with divergent results on the same git SHA.

## Pages

- [Temper](readme.md)
- [CI Recipes](ci-recipes.md)
- [History Schema (v1)](history-schema.md)
- [Push Protocol](push-protocol.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)

## Modules

- [Temper](Temper.md): Flaky-test detection for ExUnit.
- [Temper.Analysis](Temper.Analysis.md): Classifies recorded test outcomes into flaky tests and suspects.
- [Temper.Doctor](Temper.Doctor.md): Preflight checks behind `mix temper.doctor`, diagnosing the setup
mistakes that fail silently: a formatter that never registers, a
`history_path` invisible outside the test env, a suite that records
nothing, records without a usable commit SHA.
- [Temper.Env](Temper.Env.md): Boundary module that gathers run context data from the real world:
git, CI environment variables, the system clock and the runtime.
- [Temper.Formatter](Temper.Formatter.md): ExUnit formatter that records every test outcome to the history file.
- [Temper.History.Codec](Temper.History.Codec.md): Encodes `Temper.Record`s as history lines and decodes them back.
- [Temper.History.Merge](Temper.History.Merge.md): Merges history lines from several sources into one deduplicated
stream — the aggregation step behind `mix temper.merge`.
- [Temper.History.Prune](Temper.History.Prune.md): Selective retention for history files — the pure core behind
`mix temper.clean --older-than` and `--keep-shas`.
- [Temper.History.Reader](Temper.History.Reader.md): Boundary module that reads history files back into records.
- [Temper.History.Template](Temper.History.Template.md): The `{partition}` placeholder in configured history paths.
- [Temper.History.Writer](Temper.History.Writer.md): Boundary module that appends history lines to a `.jsonl` file.
- [Temper.Push.Acknowledgements](Temper.Push.Acknowledgements.md): The runs a push destination has accepted, kept next to the history so
CI caches them with it: one file per destination, `pushed-runs-<id>`,
one run id per line. `<id>` is a short hash of the destination (the
adapter and its `Temper.Push.Adapter.destination_key/2`), so pointing
the task somewhere else starts from nothing instead of skipping runs
the new destination never saw.
- [Temper.Push.Adapter](Temper.Push.Adapter.md): Where `mix temper.push` sends history: a behaviour, so any system can
receive it.
- [Temper.Push.Adapters.HTTP](Temper.Push.Adapters.HTTP.md): Pushes history over the open push protocol (see the Push Protocol
guide): one POST per batch, gzip JSON Lines, a bearer token, and a JSON
answer naming the runs the server now holds.
- [Temper.Push.Destination](Temper.Push.Destination.md): Resolves where `mix temper.push` sends history, from
`config :temper, :push` and the task's flags.
- [Temper.Push.HTTPClient](Temper.Push.HTTPClient.md): The transport under `Temper.Push.Adapters.HTTP`: one POST of a body.
- [Temper.Push.Httpc](Temper.Push.Httpc.md): `Temper.Push.HTTPClient` over OTP's `:httpc`, so Temper needs no HTTP
dependency.
- [Temper.Push.Payload](Temper.Push.Payload.md): Builds what `mix temper.push` sends from history lines: batches for a
`Temper.Push.Adapter`.
- [Temper.Record](Temper.Record.md): One recorded test outcome — the unit Temper's history is made of.
- [Temper.Report](Temper.Report.md): Renders analysis results for humans or machines.
- [Temper.RunContext](Temper.RunContext.md): The run context shared by every test outcome recorded during one
ExUnit suite run.

## Mix Tasks

- [mix temper.clean](Mix.Tasks.Temper.Clean.md): Deletes Temper's recorded history files, or prunes lines from them.
- [mix temper.doctor](Mix.Tasks.Temper.Doctor.md): Preflight check for a working Temper setup.
- [mix temper.merge](Mix.Tasks.Temper.Merge.md): Merges recorded history files into a single deduplicated file.
- [mix temper.push](Mix.Tasks.Temper.Push.md): Pushes recorded history to a system that collects it across CI runs,
such as [Sinter](https://sinterlab.dev).
- [mix temper.report](Mix.Tasks.Temper.Report.md): Reports flaky tests: tests with divergent outcomes on the same git SHA.

