Repository navigation
EPBDS-16211: lint the tooling, fail focused tests, coverage thresholds at what is measured, and the plan's stale lines - #203
Merged
Conversation
…s at what is measured, and the plan's stale lines The process half of the 2026-10-08 audit: - lint:js covers scripts/, e2e/ and the root config files, 63 files, under eslint-config-react-app's rules without the React ones. Its first run found 16 problems: 11 fixed (seven unused names in the browser specs, the console guard's buffer, the webpack configs' anonymous default exports, a global directive that redeclared a built-in), 4 answered by the globals and the rule set, and 1, a string of prose that quotes a template, suppressed with its reason. - A focused test (.only, fit, fdescribe) fails lint in every test location: jest has no --forbid-only. - The coverage thresholds are the measured coverage, rounded down: global 89/79/85/90 -> 98/95/97/99, rules.tsx 89/76/98/91 -> 96/87/100/98, eleven more entries raised, and six files get entries of their own. A run in the local time zone and one in UTC agreed on every file. - 13 plan lines: "never mix an upgrade with a refactor in one release" recorded as not held, what §9.3 step 2 left in rules.tsx, R8, R10, the npm audit baseline, and Appendix C's stale checks.
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.
What
The process half of the 2026-10-08 audit: lint for the code nobody linted, a gate against focused tests, coverage thresholds at what the suite covers, and the plan's stale lines.
Lint covers the tooling
npm run lint:jsnow runs overscripts/,e2e/and the config files at the root, as well assrc. That is 63 more files, undereslint-config-react-app's rules without the React, JSX and hooks ones (TOOLING_RULESineslint.config.js). Each file gets the node, browser or jest globals of the place it runs. The first run found 16 problems:DISMISSAL,TOUCH,tooltipA11yWiring,topmostAt,BUBBLE), and twobubblehelpers nothing called. TheirBUBBLEimports went with them.scripts/jest-console-guard.jsreassigned its buffer under a function created in a loop (no-loop-func). The buffer is now a constant array cleared in place, with the same behaviour.import/no-anonymous-default-export)./* global globalThis */redeclared a built-in, and is gone.documentwas undefined inscripts/fixtures/packed-browser-entry.js, which runs in a page; that file has browser globals now.useas React'suse; they are not applied to the tooling.scripts/wrapper-prop-curation.jsnames the${id}-helptemplate. The suppression states that reason.A focused test fails lint
The ban covers
it.only,describe.only,test.only,test.describe.only,test.concurrent.only,.only.each,fitandfdescribe. It applies insrc/**/__tests__,scripts/__tests__,e2e/**/*.pw.jsande2e/**/*.packed.js.A focused test runs alone: the rest of its file is skipped, and the run still passes. Jest has no
--forbid-only, and Playwright'sforbidOnlyis set for CI only.eslint-plugin-jestis not installed, so the gate uses two core rules:no-restricted-propertieson.onlyandno-restricted-globalsonfit/fdescribe.Coverage thresholds at what the suite measures
Each threshold is the measured value, rounded down to a whole percent (statements/branches/functions/lines):
rules.tsx: 89/76/98/91 → 96/87/100/98;function.tsgoes 96 → 100 on branches and 75 → 80 on functions, and its comment says why;documentHost.ts,formData.ts,errorMapping.ts,dataMapping.ts,popupScope.tsandlodash-lite.ts.jest.config.jsstates the rule above the block: a change that covers less either covers what it adds or lowers the number in the same commit, saying why.The plan's stale lines
13 lines in
docs/UPGRADE-PLAN.mdchanged, each one in place, with a date and the evidence:transformConfig/toOpenLConfigandinitSelectStatesFromData, still inrules.tsx.javascriptEnabledwent on 2026-10-08, andsize()/px()are called at 133 sites, not 186.npm auditbaseline was 0 on 2026-09-30 and 35 on 2026-10-06, and has not been re-measured since. The line also says why the"prop-types":pattern has a colon.cloneElementsites, not one.prop-typesis retired.Measured
Lint. 445 files, 0 problems: 382 in
srcand 63 in the tooling. Master's versions of five of the fixed files each fail the new configuration, with the rule named.Focused tests. A probe with nine focused forms was linted as a file in each of the three test locations. All nine are reported in each;
describe.skipis not, and neither is.onlyoutside a test file.The open PRs.
BUBBLEthis PR removes, in a different hunk of the same file.Coverage.
Local gates, all exit 0. That covers all 21 gates plus the manifest contract, on Node 24.14.0:
lint:js,lint:css,typecheck,typecheck:contract;docs:props:check,docs:views:check,css:fixture:check,build-css:check;test:env-flags,test:coverage,build,test:react16,test:react17,test:react19;test:pack,test:css:built,test:pack:peers,test:types,test:pack:browser;test:e2e,test:e2e:react19.They ran on this commit's tree before two wording fixes, one in a comment in
eslint.config.jsand one in the changelog entry. After those,lint:jswas rerun, along with the two suites that read those files (wrapper-prop-reference.contract.test.js,NavTabs.history.test.js), all exit 0.Against the open PRs.
git merge-treemerges this commit cleanly with EPBDS-16211: the published package is driven in a browser on React 16.14, 17 and 19 too #200, EPBDS-16211: validateMeta finds the props a 0.34 host lost, and the meta contract agrees with the renderer on more shapes #201 and EPBDS-16211: unset refuses prototype paths, and a select with no label has an accessible name #202. The file this PR and EPBDS-16211: unset refuses prototype paths, and a select with no label has an accessible name #202 both change,e2e/keyboard-a11y.pw.js, lints clean once merged.Left for the owners
GitHub holds eight branches; merged PR branches are deleted on merge. Besides
master,gh-pagesand the three open PRs' branches, three remain:main: a 2021 initial commit holding onlyLICENSE, outside master's history.h1-dead-weight: PR EPBDS-16211 H1: delete the dead weight, 26 files #52 was closed unmerged, and its content merged as EPBDS-16211 H1: delete the dead weight, 26 files #53 fromh1-dead-weight-rebased.release/v0.34: the 0.34 patch line §10 names. It carries two commits outside master's history (Epbds 16435 #27 and v0.34.3, 2026-08-12) and has no workflows.Whether to delete the first two, and whether the third gets CI or a statement that 0.34 takes no more fixes, is not decided here.
🤖 Generated with Claude Code