> ## Documentation Index
> Fetch the complete documentation index at: https://docs.decktalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Measured numbers

> How far each reveal lands from its word, how long a build takes and how much of the code the suites reach, from real runs.

Every number on this page was measured by `scripts/measure.py` on the machine named at the end, and
written to `docs/data/measured.json`. The page is rendered from that file, so it states only what a
run reported.

## Landing error

`decktalk verify` decodes the finished film, finds the frame where each reveal starts to change, and
measures how far that frame sits from the word its cue names. A reveal passes when it lands within
`verify.cue_offset_max_ms` of its word plus half a frame, early or late, and the table counts a reveal
past the limit by that same rule, so it names the reveals verify reported.

| Takes | Reveals | Median | Worst | Limit | Past the limit |
| - | - | - | - | - | - |
| placeholder | 36 | 43 ms | 59 ms | 80 ms | 0 |

A placeholder plays a click on every word of real word times, so its row measures the cue,
the recording and the film it is assembled into. It has no voice of its own to misplace a word, so a voiced take's timing
is not part of it.

### Every reveal, placeholder takes

Each offset is one build, in milliseconds. A positive offset is late and a negative one is early.

| Cue | Offsets |
| - | - |
| `1.1:title` | 56, 56, 16 |
| `1.1:files` | 35, 35, -5 |
| `1.2:script` | 43, 43, 43 |
| `1.2:deck` | 48, 48, 8 |
| `1.2:word` | 37, 37, -3 |
| `2.1:average` | 49, 49, 49 |
| `2.1:formula` | 59, 59, 59 |
| `2.1:code` | 19, 19, 19 |
| `2.1:waited` | 59, 59, 59 |
| `3.1:idea` | 30, 30, -10 |
| `3.1:again` | 46, 46, 6 |
| `3.1:make` | 54, 54, 14 |

## Build times

The project is the starter `decktalk init` writes, a film of 50.4
seconds in 3 sections. Each of 3 fresh copies was
built 3 times in a row with `decktalk build --no-spend`, and each time is the
wall time of the whole command, Python's start included.

| Build | Median | Range | Sections recorded |
| - | - | - | - |
| Cold | 27.1 s | 27.1 s to 27.3 s | 3 of 3 |
| Unchanged | 0.62 s | 0.51 s to 1.2 s | 0 of 3 |
| One section changed | 19.1 s | 18.9 s to 19.1 s | 1 of 3 |

The cold build starts from an empty `build/` directory, with Chromium and ffmpeg already installed.
The unchanged build runs the same command again with nothing edited. The last build follows a
one-word change in section 3, from "Change a word" to
"Change one word". The last column counts the sections each build recorded rather than kept.

## Coverage

The suites reach 98.1 percent of the package's statements, 11,943
of 12,177. This is the total `coverage report` prints after the check table runs
every suite the coverage floor measures:

```console theme={null}
uv run python scripts/check.py --group unit,browser,media,e2e,coverage
```

The suites measured are browser, e2e, media, unit.

## How these were measured

| The starter `decktalk init` writes, built with placeholders | |
| - | - |
| Machine | macOS 26.6.2 arm64, Apple M5 Pro, 18 cores, with a load average of 6.6 when the builds began |
| Versions | DeckTalk 0.5.0, Python 3.13.1, Chromium 153.0.8010.12, ffmpeg 8.1.2 |
| Commit | `b649b8089e5e` |
| Command | `uv run python scripts/measure.py` |

To measure your own machine, run the command from a checkout of the repository, then
`uv run scripts/build_measured.py --write` to render this page from what it wrote.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.