Skip to content

Run the gate on pull requests, so Dependabot is not merged unread - #150

Merged
silverstein merged 3 commits into
masterfrom
agent/pr-gate-ci
Aug 11, 2026
Merged

Run the gate on pull requests, so Dependabot is not merged unread#150
silverstein merged 3 commits into
masterfrom
agent/pr-gate-ci

Conversation

@silverstein

Copy link
Copy Markdown
Member

The gap

Every workflow in this repository is workflow_dispatch only, on the reasoning recorded in windows-render.yml and windows-runtime.yml: Windows runners bill higher, and evidence is worth more at an exact SHA than continuously. That is sound for Windows evidence. It does not carry to the ordinary gate, because it assumes a human ran the gate before pushing.

Dependabot is the counter-example. Three of its PRs are open — #129, #128, and #48 since 27 July — and gh pr checks reports "no checks reported" on all three. There is no signal about whether they even build, so the only options are merge unread or leave them to rot. Both have been happening.

What this runs

Linux, where runners are free for a public repository. npm test, then the three release steps that live outside it:

  • npm run test:contract:share
  • npm run build:mcpb
  • npm run smoke:mcpb

Those are not extras. A forty-third tool once landed with the in-test contract updated and the share contract and packed smoke stale, so npm run smoke:mcpb was broken on master and nobody knew until release. This is the class of defect the workflow exists to catch.

Node matrix

20.19 and 22.12 — the two floors of the declared ^20.19.0 || >=22.12.0 range. Nothing verified the 20 half before now; the maintainer's machine and both Windows jobs run 22. Either the claim holds or the range wants narrowing. This PR's own run decides which, which is the intended first result.

fail-fast: false, because which of the two failed is the entire signal.

Boundary

This is a Linux runner. The darwin-gated suites — native-canvas mechanism campaigns, the macOS supervisor and its exec budget, the system-renderer fallback — skip here by design and stay macOS-only evidence. Green here is a floor beneath incoming changes, not a substitute for the maintainer's local qualification run.

Incidentally, the macOS supervisor suite failing deterministically under CPU contention is a reason to want it skipped on a shared runner rather than a reason to add one.

Verification

The first run of this workflow is on this PR. Actions pinned by commit SHA to match the Windows workflows; concurrency cancels superseded runs.

🤖 Generated with Claude Code

x1wealth and others added 2 commits August 11, 2026 12:24
Every workflow here is workflow_dispatch only, on reasoning recorded in
windows-render.yml and windows-runtime.yml: Windows runners cost more,
and evidence is worth more at an exact SHA than continuously. That holds
for Windows evidence. It does not hold for the ordinary gate, because it
assumes a human ran the gate before pushing.

Dependabot is the counter-example. Three of its pull requests are open,
one since 27 July, and `gh pr checks` reports "no checks reported" on all
three. There is no signal at all about whether they build, so the choice
is merge unread or leave them to rot, and both have been happening.

The workflow runs on pull_request and on dispatch, on Linux, where
runners are free for a public repository. It runs `npm test`, and then
the three release steps that live outside it: the share contract, the
MCPB build, and the packed smoke. Those three are not extras. A
forty-third tool once landed with the in-test contract updated and the
share contract and packed smoke stale, so `npm run smoke:mcpb` was broken
on master and nobody knew until release.

The Node matrix is 20.19 and 22.12 — the two floors of the declared
`^20.19.0 || >=22.12.0` range. Nothing verified the 20 half before now;
the maintainer's machine and both Windows jobs run 22. Either the claim
holds or the range wants narrowing, and this decides which.

Actions are pinned by commit SHA to match the Windows workflows.
Concurrency cancels a superseded run, since its answer is stale anyway.

Boundary: this is a Linux runner. The darwin-gated suites — the native
canvas mechanism campaigns, the macOS supervisor and its exec budget, the
system-renderer fallback — skip here by design and stay macOS-only
evidence. Green here is a floor beneath incoming changes, not a
substitute for the maintainer's local qualification run.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The first run of the pull-request gate found three things, in two classes.

A real defect. comparison-observations asserted that a renderer whose
fingerprint does not match the reference must produce at least one pixel
digest that differs from the frozen ones. The Linux runner reproduced
every frozen digest byte for byte while its fingerprint mismatched, and
the test called that a failure. The fingerprint binds platform, Node and
N-API alongside the two library versions, so it is strictly narrower than
the rasterization it identifies, and identical pixels off the reference
renderer are perfectly possible. Cross-platform determinism should not
read as a regression. The sibling comparison-reference-baseline already
branches on whether raw visuals reproduced instead of requiring that they
do not; this now matches it, and still asserts what genuinely does not
depend on the renderer, which is which facets carry a digest at all. The
test name changes with it: the digests are authoritative on the reference
renderer, not exclusive to it.

Two hardware measurements. deep-malformed-campaign asserts a 15 s
per-call budget and landed at 15001-15016 ms; fuzz-malformed-pdfs runs
one serial loop over every fixture, tool and target mode against a 180 s
per-test bound. Neither indicates a product defect: the tools bound
themselves, and a two-core shared runner is simply slower than the
machine the budgets were calibrated against. Raising either bound to fit
the slowest plausible host would blunt the only assertion that catches an
unbounded parse or a hang, so instead they stand down under
PDF_TOOLS_TIMING_CALIBRATED=skip and stay maintainer-hardware evidence.
They are skipped rather than filtered out, so a run says plainly that 120
tests did not execute.

Result either way: both Node versions reported an identical 2335 passed
and 160 skipped, so the declared ^20.19.0 || >=22.12.0 range holds on
both floors and wants no narrowing.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@silverstein
silverstein merged commit abfa191 into master Aug 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants