Repository navigation
ci: drop off-PR and informational checks - #8894
Conversation
…thout deepening history Checking out the PR head (#8812) made pr-scope-touches.sh deepen a shallow history back to the PR's recorded base. On long-lived branches that merge main often, the interaction-scope decide step went from a few seconds to up to three minutes, and one run hit the job's five-minute timeout, which fails the required test join. Both scope jobs now check out the merge commit with its parents and pass its first parent as the base, so the helper diffs the PR's own change against the base it merged into with no deepening. The merge queue keeps its base. A contract test pins the checkout and asserts no deepening on a branch that merged main four times.
…dates Pull request updates keep the fast checks and every required context. The visual, accessibility and RTL owners run for release-check, which Main now dispatches on each push to main (one at a time, skipping a commit main has moved past, failing Main when it fails), and which the release gate already runs before a cut. A pull request opts in with the ci:heavy-lanes label. A main failure is fixed forward. AST-030 FR12 and the new DEC-7 record the change.
One run per workflow and ref at a time, never cancelling a running check, so a burst of pushes is checked once at its newest commit, and Main's fast checks are no longer held behind the heavy wait.
lint.yml classifies a pull request's files with the trusted base classifier and skips full ESLint for a spec-only, docsite-only or tooling-only change. Its depth-1 checkout never let the merge commit reach its merge base, so the classifier was never fed and every pull request ran full lint (about four minutes of ESLint on a spec-only change). The checkout now takes the same 50-commit history ci.yml's check-scope does. A contract test runs the real step and classifier with real git.
The job checked out the whole history on a 4-core runner for every pull request into main, then learned from the branch name that only a release merge-back has anything to validate: about six minutes of larger-runner time per run for nothing. Its condition now names the merge-back branch pattern, so other pull requests skip it outright; the exact branch contract is still checked after the checkout, and required lint still validates merge-backs.
Internal Registry's dependency check runs only when a dependency declaration or the lockfile changes, the CLI smoke test only when a package, the workspace configuration or its own scripts change (its paths-ignore becomes an allowlist), and the hardening-issue opener only when Core component sources change. A registry records every workflow's kind and reason, and a contract test holds each workflow to it: no paths-ignore, no match-all glob, and no path filter on a workflow that reports a required context.
… classifier answered
…rds why (review) Internal Registry's header no longer says to make its check required: behind its path filter it never starts on a pull request that touches no dependency file. Re-enabling gating means dropping the filter and registering it as change-scope. A review-event workflow on pull_request_target now records in the registry why every pull-request update matters to review state, and the contract test requires it.
Removes the scope classifier jobs (check-scope, interaction-scope, native-swift-scope, check-components). Each job that owns tests now runs .github/actions/test-scope right after a sparse checkout: it reads the pull request's file list and the base commit's trusted classifier, and skips the job's remaining steps with success when nothing in its scope changed. Anything it cannot decide puts everything in scope (spec:AST-030 FR3, FR4). native-swift-runner is the one pre-job left, because only a job's runner has to be chosen before it starts. Also: - fixture-contrast's steps run in test-build (same Playwright runner); - registry-contract becomes test-registry-e2e and runs for release-check only; its network-free production gate runs with the unit tests; - ci-duration and the weekly a11y and RTL workflows are removed (the full audits run on main); - the Internal Registry job becomes test-deps, scoped by its trigger paths; - the test join requires release-bump on a release-branch pull request.
The main-tier release-check dispatcher runs on every landed commit, like the Main workflow, so it is a landed-commit workflow.
…per job Review follow-ups: - The registry contract, ci-duration, the weekly sweeps and the Internal Registry rename move to their own pull request, so this one only removes the scope classifier jobs and folds fixture-contrast into test-build. registry-contract stays a pull-request job here, deciding its own scope. - A ci:heavy-lanes pull request keeps its visual and RTL audits on the affected components (spec:AST-030 FR13): the scope action can also run the base's component-audit-scope.cjs and list the changed files, and the RTL and visual jobs read those instead of a classification job. - The interaction and native Swift scopes include the scope action, so a change to it runs the jobs it gates.
- registry-contract becomes test-registry-e2e and runs for release-check only, until the production registry launches (spec:AST-026 is a draft); its network-free production gate runs with the unit tests. - ci-duration is removed: report-only, and nothing reads it. - The weekly accessibility and RTL workflows are removed: the release-check on every push to main audits the full roster. rtl-audit-evidence INV7 and its verification row now name that run. - The Internal Registry job becomes test-deps, scoped by its trigger paths; its own classifier step is removed.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
|
Posted by Cindy's agent on her behalf. /approve-spec 1e3b58c |
There was a problem hiding this comment.
This needs an engineering owner's decision before it can be approved, plus three fixes. Moving the shadcn registry full-catalog check off pull-request and merge-queue CI has no current spec behind it, and draft AST-026 FR10 and IR4 still require it in pull-request CI, so any engineering owner (the author included) should record here whether that move stands and whether FR10/IR4 will be amended to match.
- INV7, its owning-code line, the RTL scorecard line and the
ci.ymlcomment describe a release-check on every push tomain, which current AST-030 FR12 forbids until the stacked base's amendment is onmain, so retarget ontomainafter it lands or drop that wording. - Docsite-only pull requests, including edits to
generate-shadcn-registry.mjs, skiptest-node, so the production gate theci.ymlcomment says runs on every pull request first runs in the merge queue; run it indocsite-dataor correct the comment. apps/storybook/rtl-audit/README.mdandrtl-audit.mjsstill point at the deletedrtl-weekly.yml.
[Automated review]
| # The full shadcn registry install, preview and hidden production legs | ||
| # (spec:AST-026 FR10, draft): every item through the pinned client. It runs | ||
| # for an explicit release check until the production registry launches; the | ||
| # network-free production gate and the generator test run with the unit |
There was a problem hiding this comment.
This holds only for pull requests that reach test-node. test-node skips every step on the docsite-only lane (lines 680-721), and change-scope.cjs puts any change confined to apps/docsite/** in that lane, including edits to scripts/generate-shadcn-registry.mjs, which the gate imports, so those pull requests first run the gate in the merge queue. Adding node internal/shadcn-registry/verify-production-gate.mjs to docsite-data would keep this promise; otherwise the comment should say which pull requests it covers.
| - **INV7 — PR scope and full-roster scope answer different questions.** PR CI | ||
| checks components affected by the change; it may run per package, but the PR | ||
| result is the join of every package scope and cannot pass with one scope | ||
| missing. The release-check that runs on every push to main, and before a cut, |
There was a problem hiding this comment.
On main, AST-030 FR12 still says "Release checks MUST NOT run on every push", and DEC-5 keeps full visual, accessibility and RTL checks off main pushes. The per-push dispatch and the FR12/DEC-7 amendment that make this sentence true exist only in the stacked base, so this line (and line 279) should land after that amendment reaches main.
|
/approve-spec 1e3b58c Posted by Cindy's agent on her behalf. |
…ocsite-test validates Review follow-ups: - On a ci:heavy-lanes pull request, the accessibility, visual and RTL jobs decide their own component scope and skip their work, downloads included, when it does not apply, so a spec-, docsite- or tooling-only change no longer fails on a missing analysis artifact. The RTL join accepts shards that decided their scope and did nothing. - The scope action reports whether it decided. docsite-test validates spec records when its own scope is spec-only or undecided, so a failed lookup can never pass the required check unvalidated (spec:AST-030 FR4).
|
/approve-spec 375709c Posted by Cindy's agent on her behalf. |
The scorecard's failure-and-gap tests move to rtl-scorecard-failures.test.mjs; main's rtl-scorecard-summary.test.mjs keeps the declared-exclusion tests.
|
/approve-spec 90aee27 |
|
/approve-spec 8fa0ebf |
PR Analysis Report📚 Storybook Preview🧪 Sandbox PreviewNo new or modified components detected. Bundle Size SummaryNo component packages changed. Accessibility AuditStatus: The accessibility audit did not run on this pull request. It runs after merges to Generated by PR Enrichment workflow | Storybook | Sandbox | View full report |
There was a problem hiding this comment.
This is ready to approve: an engineering owner's /approve-spec at this head covers the INV7 rewrite and the move of the full-catalog registry check to the release-check, and every other change matches the current CI spec (AST-030), with the routing, release-check and new RTL scorecard tests passing. One optional wording clarification in CONTRIBUTING.md is noted inline. Draft AST-026 FR10 and IR4 still describe the full-catalog check as required pull-request CI, so they need amending before that record is approved.
[Automated review]
| before each release (and on a pull request labelled `ci:heavy-lanes`), at | ||
| full scope across the component surface, and the `useAnnounce` lint rule |
There was a problem hiding this comment.
Optional: as written, "at full scope" can be read as covering the labelled pull request too, but AST-030 FR12 keeps an opted-in pull request's accessibility audit scoped to changed components (as the RTL section below says for pr-rtl). For example: "runs a full-scope axe audit across the component surface after merges to main and before each release (and, scoped to the changed components, on a pull request labelled ci:heavy-lanes)".
docsite-test takes over docsite-data's new production registry gate step (node internal/shadcn-registry/verify-production-gate.mjs), and its contract test reads it there. Main dropped ci-duration, so its needs list goes with it.
Who this helps: everyone opening a pull request. Two 6-minute registry legs on 4-core runners leave every PR run, and so do a report-only job and two weekly scans that no one reads.
Stacked: on #8919, the last of the four PRs #8888 was split into (#8916 → #8917 → #8918 → #8919). The base moves to
mainonce they land.What changes
Registry contract off pull requests:
registry-contractbecomestest-registry-e2eand runs for release-check only, until the production registry launches.verify-production-gate.mjs) now runs on every PR that can change the registry. It runs with the Node unit tests (verify-production-gate.test.mjs), and indocsite-datafor a docsite-only change, which skipstest-node.ci-durationremoved: it was report-only, and nothing read it. The 15-minute timeout guard stays.Weekly accessibility and RTL scans removed (
a11y-weekly.yml,rtl-weekly.ymland their summary scripts). The release-check that runs on every push to main, and before a cut, audits the full roster.CONTRIBUTING.mdand the Lab README name that run instead of a weekly schedule. The Lab README change is wording only, so there's no Changeset.rtl-scorecard-failures.test.mjsnow proves every not-RTL result, D5 and D6 failure, error, coverage gap and stale verified N/A reaches the RTL job summary, besidemain'srtl-scorecard-summary.test.mjs, which covers declared exclusions. INV3's verification row andverified_byname it.mainwhen it merges.test-deps: the Internal Registry job is renamed. Its trigger paths already limit it to dependency changes, so its own classifier step is removed. It's still advisory.test-deps(Internal Registry) decides its own scope with the test-scope action: the registry check runs only when a PR changes apackage.json, the lockfile, the workspace file or that workflow, and a merge-group entry always runs it. A spec-only PR keeps skipping it.Writing rubric results
Run over
docs/architecture/rtl-audit-evidence.md: INV7, its owning-code line, and the INV3 and INV7 verification rows.rtl-scorecard-summary.test.mjs, the release-check workflow tests), not this pull request.Line count
+290 / −1,165, net −875.
Testing
vitest run --project node .github/scripts internal/shadcn-registry internal/lab-readiness: all pass (1,574), andscripts/check-knowledge.mjspasses.