0063 โ€” Five repos merge through GitHub's merge queue, on one shared sharded CI

Context

agent-smith moved to a "slim" merge-queue setup on 2026-10-16: a reusable workflow that lints once, splits the tests over N shards by file, and reports ONE aggregate check, ci / result; branch protection requires that check; a ruleset ("main merge queue") squashes up to 5 PRs per group with no bypass. Four more repos had the problems it fixes: factory (main broke 12x since 10-03, no protection), local-bin (3x, no protection, ~10 min suite), agentflow-relay (strict up-to-date rule forcing a rebase per PR), appfolio-browser-agent (~15 min single job that ran the suite twice).

Decision

  1. One template, hosted in agent-smith. agent-smith/.github/workflows/sharded-ci.yml is called by factory, agentflow-relay, local-bin and appfolio-browser-agent (agent-smith's Actions access is organization). Not a new shared-workflows repo: agent-smith's own tests read the workflow from disk to prove every pytest the CI lane runs is bounded, so a copy elsewhere would be a second source of truth.
  2. Callers pin a tag, and a tag is never moved. sharded-ci-v1 โ†’ agent-smith e0deb28. Any change, additive or not, is the next tag; callers move one at a time. agent-smith runs its local copy, which exercises only python-uv, so a change to node/pnpm/none is proven by a caller run pinned to the branch sha before the tag is cut.
  3. Every repo requires ci / result, strict off (the queue re-tests on top of main instead). agentflow-relay also keeps review; its review is a commit status posted on pull_request only, so .github/workflows/review-merge-group.yml carries it onto the queue commit as success. That green is safe only while review stays required for queue entry.
  4. In-repo landers queue, they do not merge. factory's and local-bin's land-on-green call gh pr merge --match-head-commit <sha> with no strategy flag (local-bin's REST PUT .../merge is refused on a queue branch). Their holds are unchanged.

Consequences

Amendment 2026-11-04: tenio joins, on its own CI