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 sccache was 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.

Emacs 29.3 (Org mode 9.6.15)