Skip to content

I2841 — The site's browser probe is split, so the site job runs well inside its timeout

Split `probe the site in a browser` (scripts/site-probe over every route at 320, 390 and 1280 px) so the site job no longer runs at its timeout, and keep the full sweep: no route and no width is dropped.

ACTIVE wave 0 · p2 · implementation profile · parallel safe

Part of architecture-is-enforced — A violated invariant fails a gate, and green means every required check ran.

Objective

Split `probe the site in a browser` (scripts/site-probe over every route at 320, 390 and 1280 px) so the site job no longer runs at its timeout, and keep the full sweep: no route and no width is dropped.

Why

Measured on 2026-10-17: the site job of validate took 46.3 min (master 39034132446), 47.5 min (39039860066) and was cancelled at 50.4 min by its own timeout-minutes 50 (39049547899, batch 71a with the 0.29.0 bump), in the browser probe, which alone ran 35-37 min. A job at 95% of its bound turns runner variance into a cancelled release run: the v0.29.0 tag slipped about 50 minutes for a rerun. Batch 71b2 raises the timeout to 65 min, which buys headroom for v1.0.0-alpha.1 but leaves the probe growing with every route the site adds (5330 routes on 25b5fce).

Current state

One step in the site job runs scripts/site-probe with SITE_PROBE_JOBS=4 under `scripts/ci/timed --bound 2700`; the job's timeout-minutes is 65 after 71b2 (50 before).

Desired state

The probe runs as a matrix of shards (by route partition) in parallel jobs, or in a job of its own beside the build, each with a stated bound and its measured duration beside it; together they cover every route at every width the single step covers today, proved by a case that the union of the shards' route lists equals the built site's; the site job finishes in well under half its timeout.

Scope

  • .github/workflows/validate.yml
  • scripts/site-probe
  • scripts/ci
  • .ai/repo/ci/gates.yaml

Out of scope

  • Sampling routes instead of probing all of them: every overflow the site has had came from canonical data in a shared template, which no sample sees (the comment above the step).
  • Anything before v1.0.0-alpha.1: owner's Operation Convergence, 2026-10-17; the 65-minute timeout in 71b2 is the alpha's headroom.

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • Every route at every width the current probe visits is visited by exactly one shard, and a case refuses a partition that drops or duplicates one
  • The site job, or each probe job, records its duration and stays under half its timeout on the measured runner
  • A probe finding still fails the job that found it, naming the route and the width

Validation

  • bin/majordomus plan validate
  • MJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>

Evidence required

  • probe_partition_case

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
2026-10-19T20:38:09Z
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I2841.yaml. Read it back with majordomus plan show I2841.

Searches the titles and descriptions of every page this site publishes.