chore: enable dormant eslint rules and include .mjs in lint/format globs - #823
Conversation
ESLint and Documentation UpdatesAdopt
|
| Item | Status | Notes |
|---|---|---|
| GOVERNANCE_NEXT_STEPS.md | Resolved by deletion | Nothing to do |
| packages/webkit/docs/GOVERNANCE_IMPLEMENTATION.md | Refreshed 2026-07-28 | Resurrected by #768 after #741 deleted it; ships to npm via files: docs |
Updates to GOVERNANCE_IMPLEMENTATION.md
.releasercclaim → publish-workflow mechanism- CI section rewritten for current 12-job pipeline:
main-only triggers- Plain
pnpm audit - Sharded tests/visual
- Lint canary/smoke
- Scripts/hooks/config locations brought current
- Refresh sits in working tree — lands with next PR
Action: Close #819 when it merges.
# ESLint and Documentation UpdatesAdopt globals package in eslint.config.js (§3)
Fixed: 2026-07-29, PR [#823](#823)
The 38-entry hand-maintained allowlist has been replaced by:
...globals.browser, ...globals.nodeDetails:
globals@17.8.0added as new root devDependency- Covers every previously-listed global plus five missing ones:
MutationObservergetComputedStylematchMediaAbortControllerstructuredClone
- Redundant entries (
Promise/Symbol/Reflect) dropped — flat config auto-enables ES built-ins perecmaVersion, proven byJSON/Mathnever needing to be listed - Validation:
webkit:lintclean tree-wide, canaries 56/56 ✓
Three ESLint Smells (§3)
Fixed: 2026-07-29, PR [#823](#823)
1. eslint-plugin-unused-imports Now Enabled
- Added rule:
unused-imports/no-unused-imports: error - Added rule:
unused-imports/no-unused-varswith^_ignore patterns - Turned off:
@typescript-eslint/no-unused-vars(to avoid double reports) - Verification: Live — flags unused
var/let/constin components
2. no-unused-vars Comment Cleanup
- Removed residue comment (
// 'error') that suggested the rule was toggled - The
offis now the deliberate configuration
3. vue/no-reserved-component-names Tuning
- Replaced commented-out block with enabled rule configured as:
htmlElementCaseSensitive: truedisallowBuiltInComponents: truedisallowComponentAsTag: true
- Rationale: Only mode compatible with the DS's PascalCase roots (
Table/Button/Link)
Residue
The .mjs-outside-every-glob hole remains in item 3, not duplicated here.
Purge Dangling .releaserc Mentions (§6 follow-up)
Tracked as: [#818](#818)
Fixed: 2026-07-28 — six files updated (five uncommitted in working tree; GOVERNANCE_IMPLEMENTATION.md via item 18 refresh, PR [#820](#820))
Updated Files
compound-api.mdcomponent-scaffold/SKILL.mdCOMPONENT_REQUIREMENTS.md(×2)STYLEGUIDE.md:497docs/OVERVIEW_LINT.md(§6 rewritten)
Changes
- Removed d.ts-at-publish claims referencing
.releaserc - Now name the publish workflows:
package-webkit.ymlrunsvue-tsc --declaration --emitDeclarationOnlyright beforenpm publishon release-please'srelease: publishedevent OVERVIEW_LINT.mdrewrite for release-please:- Squash-merged PR title = the parsed commit
- Leading-ticket example corrected to after-the-colon form (fixed fix: use @aziontech/theme/animations imports; move vue-tsc to devDependencies #804 trap)
- Type table de-hotfixed:
feat→minor,fix→patch, everything else→none - Sync invariant now names
release-please-config.jsoninstead ofpackages/*/.releaserc
Acceptance
Grep clean — only deliberate don't-do-this notes in release-types.md and one past-tense migration note in GOVERNANCE_IMPLEMENTATION.md remain.
Action: Close #818 when sweep PR lands.
Docs-Drift Residue (§6, changed since audit)
Status
| Item | Status | Notes |
|---|---|---|
GOVERNANCE_NEXT_STEPS.md |
Resolved by deletion | Nothing to do |
packages/webkit/docs/GOVERNANCE_IMPLEMENTATION.md |
Refreshed 2026-07-28 | Resurrected by #768 after #741 deleted it; ships to npm via files: docs |
Updates to GOVERNANCE_IMPLEMENTATION.md
.releasercclaim → publish-workflow mechanism- CI section rewritten for current 12-job pipeline:
main-only triggers- Plain
pnpm audit - Sharded tests/visual
- Lint canary/smoke
- Scripts/hooks/config locations brought current
- Refresh sits in working tree — lands with next PR
Action: Close #819 when it merges.
Summary
Turns the three dormant spots in the eslint setup into working configuration, and adopts the
globalspackage (engineering-audit hygiene items):eslint-plugin-unused-importswas registered inpluginsbut had no rule enabled — dead weight. Now runs the canonical pair:unused-imports/no-unused-imports(autofixable import removal on--fix) +unused-imports/no-unused-varswith the^_ignore patterns, and@typescript-eslint/no-unused-varsturned off so unused code isn't double-reported.vue/no-reserved-component-namesblock is replaced by the rule enabled, tuned for this design system:htmlElementCaseSensitive: truekeeps PascalCase roots (Table,Button,Link) valid while bothdisallow*BuiltInComponents: trueprevent a future component from shadowingTransition/Teleport/Suspense/KeepAlive.'no-unused-vars': 'off', // 'error') removed — theoffis now the deliberate half of the unused-imports pairing.globalsallowlist is replaced by...globals.browser, ...globals.node(theglobalspackage). It covers every previously-listed global plus the ones the hand list missed (MutationObserver,getComputedStyle,matchMedia,AbortController,structuredClone). The redundantPromise/Symbol/Reflecttrio is dropped — flat config auto-enables ES built-ins perecmaVersion(JSON/Mathwere never listed and lint always passed).lint/formatscripts include.mjs; the threetest/**/*.mjsfiles the widened prettier glob caught are formatted.lint-canaryjob correctly flagged the@typescript-eslint/no-unused-varsguard as weakened): that canary now guardsunused-imports/no-unused-vars, a new fixture guardsunused-imports/no-unused-imports, and the newly-enabledvue/no-reserved-component-namesgets its own canary.DOC_LINTS.md§2/§4/§5 rewritten for the new rule ids and the three now-false §12 footnotes dropped. Runner: 56/56 still broken.Notes
chore(dev tooling only, no runtime change).globals@17.8.0(was only a transitive dep; pnpm requires the direct declaration for the import ineslint.config.js). Dev-only, no runtime impact.pnpm --filter webkit lintis clean tree-wide with the new rules and the globals swap (the rules had never run against the full catalog);format:checkis clean on tracked files;node lint-canaries/index.jspasses 56/56.filesglob still doesn't cover.mjsscripts/hooks outsidesrc— that's the broader quality-gates work, out of scope here.