Story: Cut the continuous build time
Table of Contents
This page documents a story in Sprint 28. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
The continuous linux-clang jobs finish inside the six-hour limit on a cold runner.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 28 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | None. |
| Last touched | 2026-10-15 |
3. Acceptance
- A measured A/B build shows what a unity build, or precompiled headers, changes in compile work.
- The lever that pays is adopted behind an option, or every lever is measured out and recorded.
- The continuous clang jobs complete inside the six-hour limit.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Scaffold story: Cut the continuous build time | DONE | 2026-10-14 | 2026-10-14 | Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR. |
| Trial a unity build and precompiled headers | DONE | 2026-10-14 | 2026-10-15 | Initial task for: Cut the continuous build time |
5. Decisions
- The build is not the constraint, so no compile-time lever was adopted. The largest gap between build-step completions is 36.9 s and the median is 1.96 s, so the time is spread across all 7187 steps and there is no hotspot to split. Linking is 53 of those steps, so a faster linker cannot pay. A whole-tree unity build stops in 19 s, and precompiled headers were not reached because the measurement already showed there was nothing for them to recover.
- The constraint was the compiler cache. On 2026-10-03 the same job ran at an
85.72 per cent hit rate and finished the whole build in about 49 minutes. A
job that reached the six-hour limit was cancelled, and
Save sccachewas gated on!cancelled(), so the run threw away every object it had compiled. The cache could never warm and the job could never finish. - The fix belongs to the cache, and it landed as its own stories. Keeping the save on a cancelled job, giving the save time to run, pruning older entries, scoping the keys per workflow, and restoring the gcc release job are separate stories in this sprint, because each is a defect in its own right rather than a build-time trial.
6. Out of scope
- Precompiled headers. The hotspot measurement removed the reason to trial them, so this story closes without that trial rather than recording a result it never produced.