Skip to content

ci(heavy-caps): engineering owners are exempt; other authors get 15 oldest PRs and 100 heavy runs a day - #9077

Merged
cixzhang merged 4 commits into
mainfrom
lane4/heavy-caps-engowners
Oct 31, 2026
Merged

cixzhang merged 4 commits into
mainfrom
lane4/heavy-caps-engowners

Conversation

@cixzhang

@cixzhang cixzhang commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

User impact

  • Before: every agent-lane pull request beyond the shared login's five oldest, P1 fixes included, failed its heavy suites with "Queued behind your 3 oldest PRs" until a manual pre-merge re-run. Outside authors were held after their three oldest.
  • After:
    • Engineering owners listed in .github/ENGOWNERS are not held by any of these limits: per-author, per-prefix, or the shared login's five-PR and forty-run backstops. That includes the shared agent login.
    • Other authors' heavy suites run for their fifteen oldest open non-draft pull requests (was three), and up to one hundred heavy runs a day (was twelve).
    • The shared login's five-PR backstop fails with its own message, so a held pull request says which limit held it.
  • Unchanged: repo-wide limits, drafts running nothing, ci:run for fork pull requests, and the re-run and bot exemptions.

Authority

Cindy, 2026-10-30: "let's lift that block for engowners" and "we can also raise to 15" (16:25 PT), and "daily cap 100" (16:56 PT). spec:AST-030 FR16 changes to match, along with its Verification row and the CONTRIBUTING line. That needs an owner's /approve-spec at this head.

Changes

  • .github/actions/heavy-caps/action.yml:
    • reads .github/ENGOWNERS through the API at the pull request's base commit, so a pull request cannot add its own author, and returns early for a listed author (handles compared case-insensitively, comment lines ignored);
    • the per-author oldest-N is a constant, OLDEST = 15, used by both the queue check and the daily count's set of pull requests;
    • the per-author daily cap is a constant, DAILY = 100;
    • the backstop hold has its own message;
    • a roster that can't be read falls into the existing "running the heavy suite" path.
  • heavy-caps-action.test.mjs:
    • owners (two handles, mixed case), a commented-out handle, a non-owner, the shared login listed, and an unreadable roster;
    • the roster is read only at the base commit;
    • the sixteenth-oldest pull request is held and the fifteenth runs;
    • the daily count reaches the fifteenth-oldest, and the 100th heavy run holds while the 99th does not;
    • the backstop's own message.
  • spec:AST-030 FR16, its Verification row, and CONTRIBUTING.md.

Evidence

Scope

  • One change: who heavy-caps holds, and how many.
  • Public text contains no internal Meta context.

Writing rubric results

  • R1 narration: none. FR16 is present tense.
  • R2 research: none.
  • R3 evidence: the FR16 Verification row names the new states (owner, commented-out handle, unreadable roster, sixteenth-oldest) and failures (a held owner, a roster read from the head).
  • R4 rejected alternatives: none in the record.

…een oldest PRs, and the backstop names itself

Cindy (16:25): "let's lift that block for engowners" and "we can also
raise to 15". Authors listed in .github/ENGOWNERS, read from the pull
request's base commit so a pull request cannot add its own author, skip
the per-author, per-prefix and shared-login caps; this includes the
shared agent login, so agent lanes are no longer held. Other authors'
heavy suites run for their fifteen oldest open non-draft pull requests
(was three; the twelve-run daily cap is unchanged). The shared login's
five-PR backstop now fails with its own message instead of the
per-author one. Repo-wide limits, drafts and ci:run are unchanged.
spec:AST-030 FR16, its Verification row and CONTRIBUTING say so.
@vercel

vercel Bot commented Oct 30, 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 12:32am UTC

Request Review

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

astracat-bot Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

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

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

github-actions Bot commented Oct 30, 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.

The change does what the description says, and the heavy-caps tests cover the new owner, roster and fifteen-PR states. Approval waits on an engineering owner's decision on the rewritten spec:AST-030 FR16: exempting listed owners (the shared agent login included), the fifteen-PR window, the backstop's own message, and running the suite when the roster can't be read. An engineering owner records the decision by commenting /approve-spec <full head SHA>, and the author may do so as an engineering owner. Two small optional fixes:

  • action.yml treats a handle that appears only in a trailing roster comment as an owner, which the spec-owner gate's parseOwnerFile does not.
  • The heavy-job contract test does not require contents: read, which the roster read now depends on.

[Automated review]

Comment thread .github/actions/heavy-caps/action.yml Outdated
Comment on lines +106 to +108
.split('\n').filter(line => !line.trimStart().startsWith('#'))
.flatMap(line => line.match(/@[\w-]+/g) ?? [])
.map(handle => handle.slice(1).toLowerCase());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

A handle that appears only in a trailing comment (@alice # was @bob) counts as an owner here. The spec-owner gate's parseOwnerFile (.github/scripts/knowledge-frontmatter.cjs) strips # to the end of the line, so it does not. Stripping comments the same way keeps the two rosters identical:

.split('\n').map(line => line.replace(/#.*/, ''))

…contents: read

Review follow-up: a handle only in a trailing # comment no longer counts
as an owner, matching parseOwnerFile, and the heavy-job contract test
requires the contents: read the roster read depends on.
…wners skip every limit

Cindy (16:56): "daily cap 100". The per-author daily cap becomes a
DAILY constant of 100 (was 12); the shared login's five-PR and forty-run
backstops stay for a non-owner shared login. FR16 now says engineering
owners are exempt from all of these limits, the shared login's included,
and its Verification row names the 101st heavy run and an owner's shared
login past the backstops.

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

The code and tests do what the rewritten FR16 says, and approval waits on an engineering owner's decision on that spec change. An engineering owner needs to approve or amend the updated spec:AST-030 FR16: listed engineering owners (the shared agent login included) skip every heavy-suite limit, other authors get their fifteen oldest pull requests and one hundred heavy runs a day, the shared-login backstop gets its own message, and an unreadable roster lets the suite run. They record that decision by commenting /approve-spec <full head SHA> on this pull request, and the author may do so as an engineering owner. Please also update the description, which still says the twelve-run daily cap is unchanged.

[Automated review]

@cixzhang cixzhang changed the title ci(heavy-caps): engineering owners are exempt, other authors get fifteen oldest PRs ci(heavy-caps): engineering owners are exempt; other authors get 15 oldest PRs and 100 heavy runs a day Oct 31, 2026
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 96870fb

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

# Conflicts:
#	docs/specs/AST-030/spec.md
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 2629396

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

The change matches spec:AST-030 FR16 as rewritten here, which an engineering owner approved for this revision, and the tests cover every new state, so this looks ready to merge. One optional wording fix: the description's Evidence list says the 100th heavy run is held, but the code and the FR16 Verification row hold the 101st.

[Automated review]

@cixzhang
cixzhang merged commit 5171ac1 into main Oct 31, 2026
104 of 106 checks passed
@github-actions
github-actions Bot deleted the lane4/heavy-caps-engowners branch October 31, 2026 06:09

This branch was successfully deployed

1 active deployment
Preview — 2629396f 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