Repository navigation
ci(vale): report the contract verdict and upstream's new format readers on the upgrade PR - #429
Merged
theCodeDrift merged 1 commit intoSep 30, 2026
Conversation
…rs on the upgrade PR The upgrade workflow left the contract suites to Validate, "a red check on a pull request that already carries upstream's notes". Validate does not run there: a pull_request run triggered by github-actions[bot] waits at action_required until a maintainer approves it. Every bot-opened upgrade, Vale and ast-grep alike, measured the same way, and #427 read as a pull request with no checks while three contract tests failed. The job now runs vale-schema-contract and vale-vendor-contract itself, continue-on-error so a changed verdict still proposes the upgrade, and vale-upgrade-report.cjs renders the verdict into the body. The same report lists the files upstream added under internal/lint/. That is the source check capabilities.ts asked for by hand on every bump, and the one that would have caught kt.go on 3.23.0: an extension with no VALE_FORMAT_TIERS row is never probed, so no test can. Neither half gates. A missing test report or a failed compare fetch is said in the body, so "not checked" never reads as a pass.
This was referenced Sep 30, 2026
theCodeDrift
added this pull request to stack #430
September 30, 2026 16:03
theCodeDrift
removed this pull request from stack #430
September 30, 2026 17:16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack (root → tip):
Stacks on #428, which stacks on #427. Two checks for the drift #427 slipped through. Neither one gates.
Validate never runs on the upgrade PR
vale-upgrade.ymlleft the contract suites to Validate: "left to Validate, it is a red check on a pull request that already carries upstream's notes." That red check never appears. Apull_requestrun triggered bygithub-actions[bot]waits ataction_requireduntil a maintainer approves it:Every earlier upgrade got its first Validate run when a human pushed. #427 read as a PR with no checks while three contract tests were failing.
Now: the job runs
vale-schema-contractandvale-vendor-contractitself, withcontinue-on-errorso a changed verdict still proposes the upgrade, as the header intends.vale-upgrade-report.cjsthen renders the verdict into the PR body.A format Vale learns can't be caught by a test
VALE_FORMAT_TIERSis re-probed row by row, which catches a format that moved. An extension with no row is never probed, so a format Vale learned only shows up in upstream's source. The table's header asked for that check by hand on every bump. On 3.23.0 nobody did it, andcode/kt.gomoved Kotlin to the comment tier with the suite green (#428 adds the rows).Now: the report lists the files upstream added under
internal/lint/between the pinned tag and the new one, using the compare API. It names readers, not extensions, and says to readinternal/core/format.goand probe each one before adding a row. That matters most for the dangerous case: a reader that shells out to a converter turns a missing row into a crash that takes down the whole Vale run.What #427's body would have said
Rendered from the real compare API and #427's actual test report:
Silence never reads as a pass
A missing test report renders Did not run. A failed fetch renders Could not check with the error. A comparison at the API's 300-file cap is flagged as possibly incomplete. If the report step fails outright, the body says Not measured. Each case is covered in
vale-upgrade-report.test.cjs(11 tests).Not in this PR
ast-grep-upgrade.ymlhas the sameaction_requiredexposure, as the table above shows. The contract half of this would port directly; the format-reader half is Vale-specific.pnpm lintandpnpm test:scripts(500 passed) are green locally. The workflow parses, and the new step order is contract, then report, then propose.Refs #427