Application map / References / Push gate

The Push Gate (no-mistakes)

The operating model for the nine-step pre-share validation pipeline that gates every substantive push to the product monorepo.

Posture: prefer mature, proven mechanisms (GitHub branch protection, managed runners, launchd, upstream configuration) over custom glue. Optimize for correctness-gate value per wall-clock hour, not for making the pipeline merely feel fast.

Provenance note: the corpus doc this page replaces deferred its "present state" to a NoMistakesNow.md that never existed — that pointer dangled from the start. This page is the operating doc; run records live with the tool.

What it is

A locally-installed git-push gate: pushing a branch to it intercepts the push and runs a nine-step serial pipeline before the change reaches the shared remote as a PR. It is the sole correctness gate for the two-app monorepo and it catches real defects across parallel agent-driven branches.

each step executed by a fresh AI agent, serially intent rebase review test document lint push PR ci-babysit approval gate findings park the run; respond drives it outcome: checks-passed report the PR link; a human merges
The pipeline: intent → rebase → review → test → document → lint → push → PR → CI babysit.

Behavioral properties that shape everything else

The operating model

  1. CI executes exactly once. The mirrored second CI system's workflows are deleted; GitHub Actions is the single orchestrator. Managed runners participate as runners (a label swap that keeps check names), never as a second CI system.
  2. Cadence: one run per PR-ready branch push. Not per commit (runs cost tens of minutes and a re-push supersedes anyway) and not per merge (nothing new exists at merge time). "Every merge is validated" is enforced by branch protection on main — required checks, PRs required, no direct pushes — a mature GitHub feature, not glue. Both workflows drop their paths: filters on PR triggers so every required check reports on every PR (a required check that never reports blocks the merge forever).

Monitoring is two layers

Configuration and deliberate redundancy

  1. Configuration: bounded idle CI timeout; review auto-fix disabled (findings are judgment calls); fully unattended --yes runs only on explicit per-conversation consent; concurrent runs on different branches allowed.
  2. Deliberately kept: local test/lint duplicating CI (catching before sharing is the point), the document step, and a redundant independent build signal as an honest cross-check.
  3. The test step is provisioned, not improvising: deterministic step commands from committed pipeline config, real credentials at runtime through the machine-authed secrets manager, the proven test framework as both test framework and browser tool, and standing guidance inlined verbatim into every pipeline agent (injection is the only reliable channel — "see the other file" pointers are weak links).

Stall taxonomy (how to read a "hung" run)

Looks likeActually isOwner
Running for hours, no progressA genuinely hung fix agent — no built-in watchdog will unwedge itBabysitter kills CI-fix agents; humans/agents abort-then-rerun other steps
Stuck at "awaiting response"A gate parked waiting for a respond nobody is givingWhoever picks it up drives it; babysitter surfaces it
A terminal that never returnsA blocking client process left behind by an ended session — the run itself kept workingKill the client; the daemon runs rounds in the background
"Running" long after greenThe post-checks-passed babysit window — cosmeticNobody; merge the PR and the monitor retires