Skip to content

ci: scope-gate the examples/ag-ui e2e job and make it block merges - #944

Merged
blove merged 1 commit into
mainfrom
blove/ci-scope-ag-ui-e2e
Sep 2, 2026
Merged

ci: scope-gate the examples/ag-ui e2e job and make it block merges#944
blove merged 1 commit into
mainfrom
blove/ci-scope-ag-ui-e2e

Conversation

@blove

@blove blove commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Second waste lever after #939, found by auditing every job's if: gate.

examples-ag-ui-e2e had no if: at all. It ran on every push and every pull request — a Playwright suite with a 35-minute timeout, executing on docs-only and website-only PRs. On #932 (three files under apps/website/src) it ran to completion for nothing.

It was also absent from required-pr-checks, so an ag-ui e2e failure never blocked a merge. Both halves are fixed here deliberately: gating it without requiring it would leave a suite that is skipped often and ignored when it fails — the worst of both.

The plumbing was half-built, not missing

examples/ag-ui/project.json and examples/ag-ui/angular/project.json already carried scope:examples-ag-ui. But examples_ag_ui was never added to SCOPE_KEYS, so classifyFromAffected read the tag and discarded it (SCOPE_KEYS.includes('examples_ag_ui') → false). There was simply no output for the job to gate on. The removed comment said as much: "No dedicated ci-scope output exists for examples/ag-ui yet."

Not buying speed with coverage

examples/ag-ui/python/project.json had no tags at all. That's the backend the e2e job uv syncs and drives the Angular app against, so scoping the job while leaving the backend untagged would have made a python-only change silently skip the suite. It's tagged here. examples/chat/python already carries its scope:examples-chat tag exactly this way.

Verified against real commits

change examples_ag_ui
website-only (#932 base..head) false
an examples/ag-ui/angular change true
an isolated python-only change true (with examples_chat and website both false)

Tests

Five specs, all confirmed failing first:

not ok 1 - an affected examples/ag-ui project selects examples_ag_ui only
not ok 2 - the python backend the e2e job uv-syncs owns the scope too
not ok 3 - a website-only change leaves examples_ag_ui false
not ok 1 - contains the 13 documented scope keys
not ok 16 - scope-gates the examples/ag-ui e2e job and requires it

The existing provides one stable required PR check that waits for scoped CI jobs guard also fired on the needs addition — that guard doing its job — and its expected list is updated. 137/137 node --test after; nx lint scripts clean.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadplane Ready Ready Preview Sep 2, 2026 1:59am UTC

Request Review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

`examples-ag-ui-e2e` had no `if:` at all. It ran on every push and every pull
request — a Playwright suite with a 35-minute timeout, executing on docs-only
and website-only PRs. On #932 (three files under apps/website/src) it ran to
completion for nothing.

It was also absent from `required-pr-checks`, so an ag-ui e2e failure never
blocked a merge. Both halves are fixed here deliberately: gating it without
requiring it would leave a suite that is skipped often and ignored when it
fails.

The plumbing was half-built rather than missing. examples/ag-ui/project.json
and examples/ag-ui/angular/project.json already carried `scope:examples-ag-ui`,
but `examples_ag_ui` was never added to SCOPE_KEYS, so classifyFromAffected
read the tag and discarded it — there was no output for the job to gate on.

Also tags examples/ag-ui/python, which had no tags at all. That is the backend
the e2e job `uv sync`s and drives the Angular app against, so leaving it
untagged would have made a python-only change silently skip the suite — buying
speed by dropping coverage. examples/chat/python already carries its
`scope:examples-chat` tag the same way.

Verified against real commits: website-only #932 base..head → false; an
ag-ui angular change → true; an isolated python-only change → true, with
examples_chat and website both false.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@blove
blove force-pushed the blove/ci-scope-ag-ui-e2e branch from 401860a to 4f4f22c Compare September 2, 2026 01:55
@blove
blove enabled auto-merge (squash) September 2, 2026 01:55
@blove
blove force-pushed the blove/ci-scope-ag-ui-e2e branch from 401860a to 4f4f22c Compare September 2, 2026 01:55
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit e454935 into main Sep 2, 2026
73 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.

1 participant