Skip to content

The host ignore step skipped on author, and dropped three registry deploys

Date: 2026-08-31 Status: closed Supersedes: none Superseded-by: none — current

petrova-host builds from the repo root. scripts/vercel-build.sh stages registry.yaml, registry.schema.json, state/, docs/, contracts/, spec/, schemas/, core/, cli/dist and the host and dashboard builds into the function bundle, so those paths are its build inputs.

scripts/vercel-ignore.sh deliberately excluded it, and the reasoning was about cost and was correct: re-measured over the 265 non-merge commits on main since 2026-08-20, only 4 (1.5%) touch none of its inputs. There is no meaningful saving here.

What the reasoning did not cover is that the project was not unguarded. It carried an Ignored Build Step in the Vercel project settings, invisible to this repo:

if git log -1 --pretty=%an | grep -qiE "\[bot\]"; then echo "skip: bot commit"; exit 0; fi;
npx --yes turbo-ignore 2>/dev/null; if [ $? -eq 0 ]; then exit 0; else exit 1; fi

The first arm skips on the author of a commit. The second cannot fire at all — this repo has no turbo.json, so turbo-ignore infers a package name, finds no graph, and fails open.

Every commit petrova-act[bot] has landed on main since 2026-08-20 was therefore skipped. There are three, and all three changed host build inputs:

commitsubjectoutcome
fd01b9b8act(petrova): edit registry for console (#384)CANCELED
02994347act(petrova): register consumer console (#381)CANCELED
c2bc471bact(petrova): reconcile drift for null0-tollCANCELED

Read from the build log of the first:

Running "if git log -1 --pretty=%an | grep -qiE "\[bot\]" ... "
skip: bot commit
The Deployment has been canceled as a result of running the command defined in
the "Ignored Build Step" setting.

These are control-plane writes — the registry edits the petrova-act path exists to make — and they did not reach production. The surface has been serving a registry older than the ledger says it is, and nothing reported it, because a cancelled deployment is a normal-looking event.

Add a host surface to scripts/vercel-ignore.sh with the real input list, and set ignoreCommand in the root vercel.json so it overrides the settings-UI string. The author check is not carried forward in any form: a guard that skips on who wrote a commit cannot be right about what the commit did, and it is wrong in both directions — a bot commit that changes the app is skipped, and a human commit that changes nothing is built.

This is a correctness change, not a cost change. It is expected to skip roughly 1 commit in 65 and its purpose is to stop skipping the other 64. The cost lever for this project is deployment frequency and is addressed separately.

Input list, from scripts/vercel-build.sh rather than from the directory layout: cli host dashboard state docs contracts spec schemas core registry.yaml registry.schema.json package.json package-lock.json vercel.json scripts/vercel-build.sh scripts/vercel-ignore.sh. The guard script lists itself: a change to the predicate should rebuild the surface it guards.

  • Delete the settings string and run unguarded — rejected. It fixes the wrong skips and leaves the project with no rule under review, which is how the broken string survived.
  • Keep the bot arm and add a path check — rejected. The bot arm has no correct use here; the path check subsumes every case it was standing in for.
  • Leave it alone because the saving is 1.5% — rejected once the three dropped deploys were found. The finding is not about minutes.
  • Bot-authored commits that change host inputs now deploy. The three above are already superseded by later deploys of main, so no backfill is required.
  • Roughly 1 commit in 65 will skip where it previously built.
  • The settings-UI string is overridden by vercel.json and should be cleared in the UI when convenient, so two rules do not sit in two places.

Run from the repo root as Vercel invokes it, against real commit ranges on origin/main:

caseexpectedgot
fd01b9b8 (bot, registry edit)buildbuild
02994347 (bot, register consumer)buildbuild
c2bc471b (bot, reconcile drift)buildbuild
d663755a (CLAUDE.md only)skipskip
1de9675d (two workflow files)skipskip
7435aacf (eight SKILL.md)skipskip
4010cd04 (.gitignore)skipskip
unknown surfacebuildbuild
base unreachable after deepeningbuildbuild

That is all four of the 4/264 non-input commits, and all three of the wrongly-skipped ones.

  • subagent: claude-sonnet-5, re-verified 2026-09-04 — author-skip logic confirmed absent from scripts/vercel-ignore.sh at HEAD (negative evidence, not merely untriggered); re-ran both falsifiers against host live: 4010cd04 (should-skip) → skip, exit 0; fd01b9b8 (should-build) → build, names registry.yaml exactly as this doc predicts.
  • human: alex@devarno.com