Story: Make the local checks faster

Table of Contents

This page documents a story in Sprint 27. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

The local gate stops spending most of its time on work the branch did not touch, so it is cheap enough to run per change. The measurements and the four proposed changes are in the captures filed with this story: the two drift checks at 436s of the 785s non-heavy total, the site page check at 115-900s, the corpus that fifteen checks each re-parse, and the serial heavy tier.

2. Status

Field Value
State DONE
Parent sprint Sprint 27
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-13

3. Acceptance

  • A one-component branch runs the non-heavy checks well under half the present time.

4. Tasks

Task State Start End Description
Scaffold story: Make the local checks faster DONE 2026-10-13 2026-10-13 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Publish only the changed site pages DONE   2026-10-13 Initial task for: Make the local checks faster
Scope the drift check to the models a branch changed DONE   2026-10-13 component-drift regenerates all 21 registry components on every branch, 239.9s of the 785s non-heavy total, even when the branch changed one component's models.
Scope the drift sweep to the components a branch changed DONE   2026-10-13 drift-sweep renders all 23 catalogue components into a temporary root on every branch, 195.9s of the 785s non-heavy total, though only the components whose models changed can produce the files the sweep judges.

5. Decisions

  • Render only what the branch changed, in both drift checks. The gate measures a branch's own changes; pre-existing drift in an untouched component belongs to that component's clean-up, which the hourly validation covers. Both checks select on the modeling directory and render the whole corpus when the change reaches the generator, a template or the registry, or changes no model at all.
  • Publish only the pages the branch changed. The mtime rule republished the corpus on a fresh checkout, because a checkout gives every source a new mtime. The org-id map is still rebuilt every run: skipping it behind --no-index turned a stale map into a false failure on the first link to a page added since the last scan.
  • The non-heavy total falls from 785s to roughly 255s on a one-component branch: component-drift 239.9s to ~11s, drift-sweep 195.9s to ~1s and site-page 114.9s to ~8s. A cold site cache no longer times out at 900s.

6. Out of scope

7. Result

The acceptance holds: the three biggest checks now measure the branch instead of the tree, so a one-component branch runs the non-heavy checks in about a third of the former time.

Emacs 29.3 (Org mode 9.6.15)