ci: align governance gates with local scripts and pin Node 24 - #803
Merged
Conversation
rafaelgarbinatto
approved these changes
Jul 27, 2026
isaquebock
approved these changes
Jul 27, 2026
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.
Summary
Fixes three open findings from the engineering audit (2026-07-26 re-check):
Pin Node (was: 17 ×
node-version: 'lts/*', no.nvmrc, noengines).nvmrc=24— whatlts/*resolves to today, so zero behavioral change; a future Node major becomes an explicit one-line PR instead of a silent CI bump.engines.node: ">=24".node-version-file: '.nvmrc'(checkout precedes setup-node in every workflow).CI gate ≡
pnpm governance(was: CI re-implementing the checks with different flags;pnpm governancenever ran in CI)--ext .js,.js,.vuetypo in webkit'slint/lint:fix— local lint now covers the 144.tsfiles CI was already linting (prerequisite for aligning without weakening CI).format/format:checknow cover the whole package (wassrc/only;packages/webkit/.prettierignoremirrors the root ignores, incl. generatedcatalog.json) and the rootwebkit:format*scripts alias them. The rootwebkit:lint:stylewrapper carries CI's package-wide stylelint glob.governance.yml's six raw steps (eslint, stylelint, prettier, vue-tsc, type-coverage, audit) now invoke the root npm scripts, andpnpm governancechains the same six legs — one command set, two entry points, no way to drift again.Concurrency & workflow hygiene (was: no
concurrency:in governance/deploy workflows)governance.yml: cancels superseded runs on the same PR (a new push obsoletes the old run's 8 Playwright-sharded jobs); pushes tomainqueue instead, so every landed commit keeps its own complete status.governance.ymltriggers are nowmain-only —devdropped, matching the repo'smain-flow.app-storybook.yml/app-icons-gallery.yml: per-workflow groups withcancel-in-progress: false— an in-flightazion deployis never killed mid-way; a queued run is replaced by the newest.app-storybook-dev.yml— thedev-branch storybook deploy is dead wiring now that the repo ismain-flow.auto-author-assign.ymlis already least-privilege (issues: write,pull-requests: write) with a SHA-pinned action; deploy/OSSF workflows all carrypermissions: {}+ job-level grants.Notes
no-invalid-position-declarationfires ontextarea.vue's deliberate, comment-documented inlinestyle="width: 100%"(in-tree since feat: V4 sync release webkit/theme/icons #768, which also bumped stylelint to 17.14.0 — CI's identical stylelint step passes it on the same tree; false negative, mechanism unidentified). Since webkit bans<style>blocks in.vuefiles (zero exist), inlinestyleattributes are the only CSS stylelint sees there, and bare declarations are the only valid content — the rule is disabled for**/*.vuevia an override in.stylelintrc.json. The component is untouched.citype → no release; no consumer-facing runtime change; no new dependencies.webkit:lint,webkit:lint:style, andwebkit:format:checkall pass — including a positive control (a misformatted probe outsidesrc/fails the check;dist/andcoverage/stay ignored).