Skip to content

ci: drop off-PR and informational checks - #8894

Merged
cixzhang merged 65 commits into
mainfrom
ci/drop-off-pr-checks
Oct 31, 2026
Merged

cixzhang merged 65 commits into
mainfrom
ci/drop-off-pr-checks

Conversation

@cixzhang

@cixzhang cixzhang commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

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 main once they land.

What changes

  • Registry contract off pull requests: registry-contract becomes test-registry-e2e and runs for release-check only, until the production registry launches.

    • spec:AST-026 is a draft and its production registry isn't launched, so FR10's "required pull-request CI" isn't in force yet.
    • Its network-free production gate (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 in docsite-data for a docsite-only change, which skips test-node.
  • ci-duration removed: 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.yml and their summary scripts). The release-check that runs on every push to main, and before a cut, audits the full roster.

  • 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 a package.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.

  • R1 narration: none. INV7 states what each scope checks ("the release-check that runs on every push to main, and before a cut"), not what changed from the weekly sweep.
  • R2 research in the record: none.
  • R3 evidence naming a change: none. The verification rows name the tests that hold the claims (rtl-scorecard-summary.test.mjs, the release-check workflow tests), not this pull request.
  • R4 rejected alternatives over one line or outside a decision: none. The record carries no alternatives.
  • R5 pull request or issue references remaining: none.
  • R6 ruled open questions still listing options: none.

Line count

+290 / −1,165, net −875.

Testing

  • vitest run --project node .github/scripts internal/shadcn-registry internal/lab-readiness: all pass (1,574), and scripts/check-knowledge.mjs passes.

…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.
…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.
@vercel

vercel Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
astryx Ready Ready Preview Oct 31, 2026 7:03am UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 29, 2026
@astracat-bot

astracat-bot Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Oct 31, 2026, 7:09 AM UTC

@cixzhang

Copy link
Copy Markdown
Contributor Author

Posted by Cindy's agent on her behalf.

/approve-spec 1e3b58c

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.yml comment describe a release-check on every push to main, which current AST-030 FR12 forbids until the stacked base's amendment is on main, so retarget onto main after it lands or drop that wording.
  • Docsite-only pull requests, including edits to generate-shadcn-registry.mjs, skip test-node, so the production gate the ci.yml comment says runs on every pull request first runs in the merge queue; run it in docsite-data or correct the comment.
  • apps/storybook/rtl-audit/README.md and rtl-audit.mjs still point at the deleted rtl-weekly.yml.

[Automated review]

Comment thread .github/workflows/ci.yml Outdated
# 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Comment thread docs/architecture/rtl-audit-evidence.md Outdated
- **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,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

@cixzhang

Copy link
Copy Markdown
Contributor Author

/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).
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 375709c

Posted by Cindy's agent on her behalf.

@cixzhang
cixzhang changed the base branch from ci/test-scope-heavy-lanes to main October 31, 2026 06:48
@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Oct 31, 2026
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 90aee27

@github-actions github-actions Bot removed the needs:spec-owner-review Current knowledge records await owner approval label Oct 31, 2026
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 8fa0ebf

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

📚 Storybook Preview

View Storybook for this PR

🧪 Sandbox Preview

View Sandbox for this PR

No new or modified components detected.

Bundle Size Summary

No component packages changed.

Accessibility Audit

Status: The accessibility audit did not run on this pull request. It runs after merges to main and before each release; pull requests that touch components run it with the ci:heavy-lanes label.


Generated by PR Enrichment workflow | Storybook | Sandbox | View full report

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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]

Comment thread CONTRIBUTING.md
Comment on lines +389 to +390
before each release (and on a pull request labelled `ci:heavy-lanes`), at
full scope across the component surface, and the `useAnnounce` lint rule

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)".

@cixzhang
cixzhang merged commit c8e1804 into main Oct 31, 2026
60 checks passed
cixzhang added a commit that referenced this pull request Oct 31, 2026
cixzhang added a commit that referenced this pull request Oct 31, 2026
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.

This branch was successfully deployed

1 active deployment
Preview — 8fa0ebf4 Deployed Oct 31, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant