Skip to content

ci: main's full unit run starts every leg at once, six UI and six Node legs, and a dispatch can name its commit (AST-030 FR22) - #9207

Merged
cixzhang merged 8 commits into
mainfrom
ci/unit-wide-shards
Nov 1, 2026
Merged

cixzhang merged 8 commits into
mainfrom
ci/unit-wide-shards

Conversation

@cixzhang

@cixzhang cixzhang commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Maintainer impact

  • Before: main's full unit run (the Main workflow) split each Vitest project into four legs. Its slowest Node leg took about 8 minutes, and over the last two days the run took a median of 10 minutes and 15 at the 90th percentile. The release train waits on that before it can re-check a fix.
  • After: six UI legs and six Node legs start together with the build-and-typecheck lane, with no max-parallel hold. Measured: every leg took 3–5.2 minutes, and the run took 5.5 minutes. The floor is one Node test file that takes about 6 minutes on its own; more legs would not move it.
  • Cost: measured 54 runner-minutes per run against 51, about 6% more. This run still starts on every push to main until the hourly unit-run change (ci: main's full unit run is about hourly and always finishes; a release needs one at its cut (AST-030 FR21) #9213) lands, so until then the extra minutes land on every push.

CI impact: standard GitHub-hosted runners only, no runner class changes; pull-request updates unchanged (ci.yml untouched); Main's unit run goes from 51 to 54 runner-minutes per run, about +225 runner-minutes a day at today's ~75 runs (about +0.2 average concurrent jobs, peak 10 → 14 jobs per run); time to green for main's unit run goes from a 10-minute median to 5.5 minutes.

Authority

Asked for by the Astryx TL: run main's full checks less often, "but we need to speed up these runs when they happen with more parallelization. It can be more expensive per run with runs less often or on demand during release." This PR adds spec:AST-030 FR22 and DEC-17 and needs an owner's /approve-spec at this head.

Changes

  • .github/workflows/deploy.yml:
    • test-ui and test-node: six legs each, with timeout-minutes: 15.
    • The dispatch takes sha and recheck inputs.
    • main-commit validates the requested commit.
    • The concurrency group cancels only for a workflow-token re-check.
  • .github/scripts/main-validation-workflow.test.mjs: contract tests for the leg plan, the dispatch inputs, the cancel rule, and the commit resolver (push, tip, a commit in main's history, outside it, malformed).
  • spec:AST-030: FR22, a Verification row, and DEC-17.

Evidence

  • Targeted Node suites pass: the new contract, ci-test-routing, ci-free-runners, ci-heavy-lanes, workflow-paths. That is 131 tests.
  • pnpm check:knowledge passes.
  • Measured run of this branch's Main workflow, dispatched on a scratch copy that differs only in its concurrency-group name, so it could not replace main's own validations. It validated main's tip and passed in 5.5 minutes from dispatch to the test join, against a median of 10 and a 90th percentile of 15 before.
    • Slowest Node leg 5.2 minutes, slowest UI leg 4.2, typecheck lane 5.1. Every leg started within 15 seconds of the dispatch.
    • 54 runner-minutes in total (65 with each job rounded up to a whole minute), against 51 (58) for a four-leg run.

Scope

  • One change: the shape and dispatch inputs of main's full unit run.
  • No required context renamed or removed.
  • Public text contains no internal context.

Writing rubric results

  • R1 narration: none; FR22 and DEC-17 are in the present tense.
  • R2 research: the measurements stay in this description.
  • R3 evidence: FR22’s Verification row names the states and the mutations.
  • R4 rejected alternatives: DEC-17 names larger runners and keeping four legs.

…e legs, and a dispatch can name its commit (AST-030 FR21)
@vercel

vercel Bot commented Oct 31, 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 Nov 1, 2026 7:42am UTC

Request Review

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

astracat-bot Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Nov 1, 2026, 7:52 AM UTC

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

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

🔎 Preview · 2dec806

Storybook · Sandbox · built from this PR's head

Package size: no published package changed; no new dependencies.

API changes: core +8 · ~20 · −0 (report stale: run pnpm api:report); richtext +0 · ~1 · −0 (report stale: run pnpm api:report)

29 API changes (advisory)
Package Where Signature Usage
+ core . · Types · interface FieldStatusProps message: string import type {FieldStatusProps} from '@astryxdesign/core'; const x: FieldStatusProps = {message: …}
+ core . · Types · interface FieldStatusProps ref?: React.Ref<HTMLDivElement> import type {FieldStatusProps} from '@astryxdesign/core'; const x: FieldStatusProps = {ref: …}
+ core . · Types · interface FieldStatusProps type: InputStatusType import type {FieldStatusProps} from '@astryxdesign/core'; const x: FieldStatusProps = {type: …}
+ core . · Types · interface FieldStatusProps variant?: FieldStatusVariant = 'attached' import type {FieldStatusProps} from '@astryxdesign/core'; const x: FieldStatusProps = {variant: …}
+ core . · Types · interface FieldStatusProps xstyle?: StyleXStyles import type {FieldStatusProps} from '@astryxdesign/core'; const x: FieldStatusProps = {xstyle: …}
+ core . · Types · interface FieldStatusProps inherits AriaAttributes, DOMAttributes, HTMLAttributes import type {FieldStatusProps} from '@astryxdesign/core'
+ core . · Types · interface SearchContext interface SearchContext<T extends SearchableItem = SearchableItem> import type {SearchContext} from '@astryxdesign/core'
+ core ./Typeahead · Also exported from an earlier entry point · SearchContext SearchContext (.) import {SearchContext} from '@astryxdesign/core/Typeahead'
~ core . · Components · component ComplexSelector prop statusVariant?: FieldStatusVariant = 'attached' for input selectors; 'detached' for secondary and ghost selectors → prop statusVariant?: FieldStatusPlacement = 'attached' for input selectors; 'detached' for secondary and ghost selectors <ComplexSelector statusVariant="attached" />
~ core . · Components · component DateInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <DateInput statusVariant="attached" />
~ core . · Components · component DateRangeInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <DateRangeInput statusVariant="attached" />
~ core . · Components · component Field prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <Field statusVariant="attached" />
~ core . · Components · component FieldStatus component FieldStatus(props: FieldStatusProps) → component FieldStatus @deprecated <FieldStatus />
~ core . · Components · component FieldStatus prop variant?: FieldStatusVariant = 'attached' → prop variant: FieldStatusVariant = 'attached' <FieldStatus variant="attached" />
~ core . · Components · component FileInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <FileInput statusVariant="attached" />
~ core . · Components · component MultiSelector prop statusVariant?: FieldStatusVariant = 'attached' for input selectors; 'detached' for secondary and ghost selectors → prop statusVariant?: FieldStatusPlacement = 'attached' for input selectors; 'detached' for secondary and ghost selectors <MultiSelector statusVariant="attached" />
~ core . · Components · component NumberInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <NumberInput statusVariant="attached" />
~ core . · Components · component PowerSearch prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <PowerSearch statusVariant="attached" />
~ core . · Components · component Selector prop statusVariant?: FieldStatusVariant = 'attached' for input selectors; 'detached' for secondary/ghost selectors → prop statusVariant?: FieldStatusPlacement = 'attached' for input selectors; 'detached' for secondary/ghost selectors <Selector statusVariant="attached" />
~ core . · Components · component TextArea prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <TextArea statusVariant="attached" />
~ core . · Components · component TextInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <TextInput statusVariant="attached" />
~ core . · Components · component TimeInput prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <TimeInput statusVariant="attached" />
~ core . · Components · component Tokenizer prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <Tokenizer statusVariant="attached" />
~ core . · Components · component Typeahead prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusPlacement = 'attached' <Typeahead statusVariant="attached" />
~ core . · Types · interface FieldStatusProps interface FieldStatusProps extends BaseProps<HTMLDivElement> (props of FieldStatus) → interface FieldStatusProps extends BaseProps<HTMLDivElement> import type {FieldStatusProps} from '@astryxdesign/core'
~ core . · Types · interface FieldStatusVariantMap tooltip: true → tooltip: true @deprecated import type {FieldStatusVariantMap} from '@astryxdesign/core'; const x: FieldStatusVariantMap = {tooltip: …}
~ core . · Types · interface SearchSource search: (query: string) => Promise<T[]> | T[] → search: (query: string, context?: SearchContext<T>) => Promise<T[]> | T[] import type {SearchSource} from '@astryxdesign/core'; const x: SearchSource = {search: …}
~ core . · Types · interface UseInputStatusIconOptions statusVariant?: FieldStatusVariant → statusVariant?: FieldStatusPlacement import type {UseInputStatusIconOptions} from '@astryxdesign/core'; const x: UseInputStatusIconOptions = {statusVariant: …}
~ richtext . · Components · component RichTextEditor prop statusVariant?: FieldStatusVariant = 'attached' → prop statusVariant?: FieldStatusVariant | 'tooltip' = 'attached' <RichTextEditor statusVariant="tooltip" />

Not run on this PR: add ci:run-visual, ci:run-a11y or ci:run-rtl to run them.

CI impact: 0 job-min per update · pool 0% · standard runners · 1 other workflow changed (not measured) · 1 CI action or script file changed (not measured)
Before After Change
Job-minutes per PR update 78.6 78.6 0
Runner pool, runner-minutes a day 36,679 36,679 0 (0%)
Average concurrent jobs 25.5 25.5 0
Time to green (median → this run) 14.6 min — —
Runs a day 466 466 0

Other workflows: deploy.yml changed: runs on push, workflow_dispatch; standard runners; its minutes are not measured here

Not measured (the jobs that use these keep their recent minutes above): .github/scripts/main-validation-workflow.test.mjs.

Assumptions: before is each job's average over the last 20 pull-request runs; after keeps that for unchanged jobs and uses this run's minutes for added or changed ones, weighted by how often each changed job ran in those runs; runs a day averages the seven whole days before today; time to green compares this run with the median of those runs that ran the same jobs.

Current run: CI concluded failure; parts of this report may be missing.


Generated by PR Enrichment workflow | 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.

Approval waits on an engineering owner's decision on the new spec:AST-030 FR21 and DEC-15. An engineering owner records it by commenting /approve-spec <full head SHA> on this pull request, or asks for changes; the author can do this as an engineering owner. Separately, these need fixing before merge:

  • DEC-15 and the new deploy.yml comment say main's full checks run on a cadence, not on every push, but the Main workflow still runs on every push, as FR12 requires: reword them, or amend FR12 together with a trigger change.
  • A sha dispatch shares the main-validation group, so it can replace a waiting validation of newer commits, or with recheck cancel the running one, and leave those commits without a result: give sha dispatches a group of their own and add test cases.
  • A sha older than the tip's workflow steps fails for that reason alone (for example, any commit before #9161 lacks the package-size.mjs script the typecheck lane now runs): refuse such commits in main-commit or guard those steps.
  • In a sha run, sync-exports still checks out main's tip: give it needs: [main-commit] and that commit as its ref.

[Automated review]

Comment thread .github/workflows/deploy.yml Outdated
concurrency:
group: 'main-validation'
cancel-in-progress: false
cancel-in-progress: ${{ github.event_name == 'workflow_dispatch' && inputs.recheck && github.triggering_actor == 'github-actions[bot]' }}

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 sha dispatch joins this group, and a dispatch that names an older commit validates only that commit. It replaces a waiting push run for a newer commit. With recheck from the workflow token it also cancels the running one, because this expression never reads sha. The newer commits then get no Main result until the next push. A concurrency group of its own for a sha dispatch, keyed by the run, keeps them covered, and test cases would pin it.

if (!['identical', 'ahead'].includes(comparison.status)) {
throw new Error(`${requested} is not in main's history.`);
}
sha = requested;

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 accepts any commit in main's history, but the run uses the tip's workflow against that commit's files. A commit before #9161 has no .github/scripts/package-size.mjs, so the typecheck lane fails on a missing script. Refusing a commit whose deploy.yml differs from the tip's, or guarding those steps, avoids a red run that says nothing about the commit.

Comment thread docs/specs/AST-030/spec.md Outdated
Comment on lines +558 to +559
`main`'s full checks run on a cadence and on demand during a release, not on
every push, so one run may cost more runner-minutes if it finishes sooner: the

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 premise does not hold for the Main workflow: it still runs on every push (push: branches: ['main'] is unchanged), as FR12 requires ("Main's own fast checks still run for every push"). Either justify the extra legs per push, or amend FR12 and the trigger in the same change.

@cixzhang cixzhang changed the title ci: main's full unit run starts every leg at once, six UI and six Node legs, and a dispatch can name its commit (AST-030 FR21) ci: main's full unit run starts every leg at once, six UI and six Node legs, and a dispatch can name its commit (AST-030 FR22) Oct 31, 2026

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

Approval waits on an engineering owner's decision on the new spec:AST-030 FR22, its Verification row and DEC-17. An engineering owner records it by commenting /approve-spec <full head SHA> on this pull request, or asks for changes; the author may do this as an engineering owner. Separately, these need fixing before merge:

  • DEC-17 and the new deploy.yml comment say main's full checks run on a cadence, not on every push, but the Main workflow still runs on every push, as FR12 requires: reword them, or amend FR12 together with a trigger change.
  • A sha dispatch shares the main-validation group, so it can replace a waiting validation of newer commits, or with recheck cancel the running one, and leave those commits without a result: give sha dispatches a group of their own and add test cases.
  • A sha older than the tip's workflow steps fails for that reason alone (any commit before #9161 lacks the package-size.mjs script the typecheck lane runs): refuse such commits in main-commit or guard those steps.
  • In a sha run, sync-exports still checks out main's tip: give it needs: [main-commit] and that commit as its ref.

[Automated review]

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 7983fd9

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

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

Approval waits on an engineering owner's decision on the new spec:AST-030 FR22, its Verification row and DEC-17 at the head that merges: the /approve-spec given for the previous head stopped counting when the merge commit was pushed. An engineering owner records it by commenting /approve-spec <full head SHA> on this pull request, or asks for changes; the author may do this as an engineering owner. Separately, these need fixing before merge:

  • The merge commit reformats packages/core/src/MultiSelector/MultiSelector.tsx, which fails the required lint check for a missing changeset: restore main's version of the file.
  • DEC-17 and the new deploy.yml comment say this run happens on a cadence, but it still runs on every push, as FR12 requires: reword them, or amend FR12 together with a trigger change.
  • A sha dispatch shares the main-validation group, so it can replace or cancel the validation of newer commits: give sha dispatches a group of their own and test it.
  • A sha from before #9161 fails the typecheck lane on a missing script, and in a sha run sync-exports still checks the tip: refuse or guard the first, and give sync-exports the resolved commit.

[Automated review]

el.tabIndex = -1;
}
}, triggerModality.ref, ref),
ref: mergeRefs<HTMLElement>(

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 reformat came in with the merge of main and changes only whitespace and one trailing comma, but it makes the required lint check fail: changeset coverage reports @astryxdesign/core shipping without a Changeset. Restoring main's version of this file keeps the pull request to its CI change and turns lint green.

Comment thread docs/specs/AST-030/spec.md Outdated
every Vitest leg of `main`'s full unit run at once, with no `max-parallel`
hold: six UI legs and six Node legs beside the build-and-typecheck lane, each
inside the fifteen-minute job budget (DEC-17). A dispatch may name `sha`, a
commit in `main`'s history, and every lane checks that commit out; without

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

sync-exports in deploy.yml has no needs: [main-commit] and no ref, so in a sha run it checks main's tip while the other lanes check the requested commit. Giving it needs: [main-commit] and ref: ${{ needs.main-commit.outputs.sha }} makes this sentence true.

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

Approval waits on an engineering owner's decision on the new spec:AST-030 FR22, its Verification row and DEC-17 at the head that merges: the earlier /approve-spec named a previous head, so an engineering owner, the author included, records the decision by commenting /approve-spec <full head SHA> on this pull request, or asks for changes. Restoring MultiSelector.tsx cleared the earlier lint failure; these still need fixing before merge:

  • DEC-17 and the new deploy.yml comment say this run happens on a cadence, but it still runs on every push, as FR12 requires: reword them in per-push terms, or land this after #9213.
  • A sha dispatch shares the main-validation group, so it can replace the waiting run for a newer push, and a workflow-token recheck that names sha can cancel one: give sha dispatches a group of their own and test both cases.
  • A sha from before #9161 fails the typecheck lane on a missing script, and a sha run's sync-exports still checks the tip: refuse the first with a named reason and give sync-exports the resolved commit.

[Automated review]

@cixzhang

cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

/approve-spec fad680a

@github-actions github-actions Bot removed the needs:spec-owner-review Current knowledge records await owner approval label Nov 1, 2026
…commit before the package-size measurement, and checks sync-exports out at it (AST-030 FR22)
@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 1, 2026
@cixzhang

cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

/approve-spec 9ad2862

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

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

Changes requested: the spec text is owner-approved at this head, but the sha dispatch and the description need fixes before merge.

  • The package-size check still accepts the 40 commits from #9161 up to #9164, whose analyze-pr.js lacks the --main-record flag the typecheck lane runs, so validating one of them goes red: raise the floor to #9164, amend FR22 to match, and test a commit in that window.
  • The description says main now runs this on a cadence instead of on every push, but the push trigger stays until #9213 lands, so the extra runner-minutes land on every push: correct it, or land this after #9213.
  • A sha of only spaces is trimmed to the tip yet still gets its own concurrency group, so it runs a second validation of main: drop the trim so it fails.
  • A sha run's checks attach to main's tip commit: add a run-name that names the validated commit.

[Automated review]

Comment thread .github/workflows/deploy.yml Outdated
Comment on lines +68 to +77
// The typecheck lane measures package size with this script;
// a commit from before it cannot run that lane.
try {
await github.rest.repos.getContent({
...context.repo, path: '.github/scripts/package-size.mjs', ref: requested,
});
} catch (error) {
if (error.status !== 404) throw error;
throw new Error(`${requested} predates the package-size measurement this run's typecheck lane takes; validate a later commit.`);
}

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 floor admits the 40 commits from #9161 up to #9164: they have package-size.mjs, but their analyze-pr.js has no --main-record, which the typecheck lane runs at line 188. That older script ignores the flag, runs the pull-request analysis against a main ref the SHA checkout lacks, and exits 1, so the run goes red for a commit that may be fine. Requiring #9164's commit to be an ancestor of the requested one (the same compareCommitsWithBasehead check as above) closes the window; FR22's floor and a contract case need the same change.

Comment thread .github/workflows/deploy.yml Outdated
if (context.eventName !== 'push') {
const {data} = await github.rest.repos.getBranch({...context.repo, branch: 'main'});
sha = data.commit.sha;
const requested = (context.payload.inputs?.sha ?? '').trim();

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 concurrency group at line 31 tests the raw input, but this trims it, so a sha of only spaces gets a group of its own and then validates main's tip beside the running main-validation run. Dropping .trim() makes any non-empty value meet the 40-character check; a spaces-only case belongs in the malformed list of the contract test.

branches: ['main']
workflow_dispatch:
inputs:
sha:

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 dispatch's run belongs to main's tip when it was dispatched, so a sha run's test, leg and typecheck checks attach to that tip and the run is listed under the tip's commit message. A run-name that names the validated commit for a sha dispatch (empty, and so the default, otherwise) keeps a failing older commit from reading as a red check of the tip.

…cords and only-spaces input, and is named for that commit (AST-030 FR22)
@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 1, 2026

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

Approval waits on an engineering owner's decision on the new spec:AST-030 FR22, its Verification row and DEC-17: the latest commit changed FR22's sha floor after the last approval, so an engineering owner (the author may, as one) records the decision by commenting /approve-spec <full head SHA> on the pull request. The branch now conflicts with main's AST-030 (FR19 and its Verification row, from #9187), so please resolve that first and have the approval land on the head that will merge. Separately, the description's Dispatch line and the sha input's description in deploy.yml should say that commits before #9164 are refused, since main-commit rejects them. The earlier floor, spaces-only sha, run-name and cost-wording findings are fixed at this head.

[Automated review]

Comment thread .github/workflows/deploy.yml Outdated
workflow_dispatch:
inputs:
sha:
description: 'Full SHA of a commit in main history to validate; empty validates main tip'

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 the text a person sees in the dispatch form, and it promises any commit in main's history, but main-commit refuses every commit before #9164 (lines 73-83). Suggest 'Full SHA of a commit in main history from #9164 on to validate; empty validates main tip', and the same floor in the description's Dispatch line.

@cixzhang

cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

/approve-spec 1720978

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

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

Changes requested: the spec:AST-030 FR22, Verification row and DEC-17 text is owner-approved at this head, but the dispatch wording promises more than main-commit accepts. The description's Dispatch line and the sha input's description in deploy.yml say that any commit in main's history can be validated, while main-commit refuses every commit before #9164. Please say "a commit in main's history from #9164 on" in both places and list that refusal with the others. Because that edit changes deploy.yml, an engineering owner (the author may, as one) then records the spec approval again with /approve-spec <full head SHA> on the new head.

[Automated review]

@cixzhang

cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

/approve-spec 2dec806

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

Recommended for approval: spec:AST-030 FR22, its Verification row and DEC-17 are owner-approved at this head, and the sha input and the description now both say that commits before #9164 are refused, which resolves the earlier change request. FR22's contract test, main-validation-workflow.test.mjs, passes at this head. The failing Touched components job is advisory and fails only because this branch predates main's touched-components.mjs; it feeds no required check.

[Automated review]

@cixzhang
cixzhang merged commit a55352c into main Nov 1, 2026
51 of 52 checks passed
cixzhang added a commit that referenced this pull request Nov 1, 2026
…ame their commit; a person's newer run replaces an incomplete one

This branch was successfully deployed

1 active deployment
Preview — 2dec806b Deployed Nov 1, 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