Skip to content

I3602 — The interaction probe is split, so every control of every page is driven inside its bound

Split the interactions job (scripts/interaction-probe over every page that carries a control) the way I2841 split the site probe: shards of the sorted pages cut by the one stride scripts/site-probe --partition defines, each driving the site job's own build, and a fan-in that proves with scripts/site-probe --verify-report that the shards drove every page once before the gate's receipt. No page and no control is dropped.

BLOCKED wave 1 · p1 · implementation profile · parallel safe

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

Blocked. This issue cannot start until I2841 is done. The status is derived from that, not declared.

Objective

Split the interactions job (scripts/interaction-probe over every page that carries a control) the way I2841 split the site probe: shards of the sorted pages cut by the one stride scripts/site-probe --partition defines, each driving the site job's own build, and a fan-in that proves with scripts/site-probe --verify-report that the shards drove every page once before the gate's receipt. No page and no control is dropped.

Why

The probe drives every control of every page (project.every-link-and-control-is-tested) and grew with the site: it reached page 1850 of 1865 at a 2400 s bound on 2026-10-12 (run 38202851612), and after the Czech copies doubled the pages, run 39317142394 (alpha.1 top aa936b5371b, 2026-10-19) stopped it at its 3300 s bound. alpha.1 raised the bound to 4800 s to ship; a3 asked for the split right after the alpha so that the bound comes back down and the Czech copies are driven in full rather than sampled.

Current state

One interactions job rebuilds the site (rustdoc included) and drives every page in one step under a bound that has had to grow with every route the site adds.

Desired state

Six interaction-probe-shard jobs drive a stride each of the site job's build (shipped without its composed surfaces, about 26 MB), each under a stated bound well inside its timeout; the interactions job verifies their reports and carries the gate.

Scope

  • scripts/interaction-probe
  • scripts/site-probe
  • .github/workflows/validate.yml
  • .ai/repo/ci/gates.yaml
  • test/cases/3603_every_page_is_exercised_by_exactly_one_shard.sh
  • docs/CI.md

Out of scope

  • Sampling pages: every control on every page is the rule's promise, and the Czech copies are pages
  • The ui audit and the cockpit probe, which have bounds and samplers of their own

Dependencies

Acceptance criteria

  • Shard K of N of the interaction probe drives exactly the pages scripts/site-probe --partition K/N gives for the sorted page list, and writes them to MJ_PROBE_REPORT
  • The interactions job refuses reports that drop a page, repeat one or miss a shard, and the gate's receipt requires every shard to have passed
  • A malformed MJ_PROBE_SHARD is refused before a browser is opened
  • A probe finding still fails the shard that found it, naming the page and the spec

Validation

  • bin/majordomus plan validate
  • MJ_TEST_JOBS=4 bash test/run.sh 3603_every_page_is_exercised_by_exactly_one_shard 337_every_control_does_what_it_says 3602_every_route_is_probed_by_exactly_one_shard

Evidence required

  • interaction_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
—
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/I3602.yaml. Read it back with majordomus plan show I3602.

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