Repository navigation
Conversation
kmcginnes
force-pushed
the
enforce-browser-floor-lint
branch
from
October 9, 2026 01:15
6b71a1f to
5f0c15b
Compare
This branch has not been deployed
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
#2394 pinned the floor, but nothing stops code from calling an API newer than it. This adds the lint layer from #2237 and writes down what still gets through.
@tailwindcss/viteruns its own Lightning CSS pass with fixed targets (Firefox 128, Safari 16.4, Chrome 111) and has no target option, so I turned it off withoptimize: false. Vite's CSS minify already compiles forbuild.cssTarget, which follows.browserslistrc.packages/graph-explorer/srcandpackages/shared/src. Tests are excluded because they run in Node.es-xinstance-method rules (layer 3). Without type information they only fire in aggressive mode, which flags everyarray.map()asIterator.prototype.map(more than 300 false positives).lib: ES2023already rejects those methods through types.available: "widely"replaces the issue'savailable: 2022. The year was tuned to the old Firefox 114 snapshot, and the floor is now current Widely available.ignoreFeatures:html-wrapper-methods(any.boldor.anchorproperty matches) andtop-level-await(web-features lists Safari 27, but the floor's Safari runs it and Vite builds it).showSaveFilePicker: feature-detected, falls back tosaveAs.navigator.clipboard.writeText: Widely available. The feature it's grouped under also coversClipboard.write.AbortSignal.timeout: needs Chrome 124, one version above the floor. It reaches Widely available on 2026-10-18.Error.isErrorruntime tests and theirdocs/agents/testing.mdbullet, as the Enforce the baseline-widely-available browser floor #2237 comment asked once a static guard landed.docs/agents/browser-floor.md, linked fromAGENTS.mdandREVIEW.md, explains the layers and what nothing catches: DOM instance methods, and ES2023 features after the floor such as symbols asWeakMapkeys.Evidence
After: a probe file under
packages/graph-explorer/srcgets flagged for each of these:pnpm check:lint:Error.isError,Promise.try,Symbol.dispose,using, a duplicate named group, and a RegExp modifier.pnpm check:types:Set.prototype.unionand[].values().map.WeakMapkeys andcheckVisibility().CSS: built
index.cssis 91,097 bytes with Tailwind's pass on and 89,112 with it off. The only difference is that native nesting stays instead of being flattened for Safari 16.4, and nesting is inside the floor (Chrome 120, Firefox 117, Safari 17.2). Lowering.browserslistrcto Firefox 100 / Safari 15 grows the output to about 94 KB with Tailwind's pass on or off, which shows Vite's pass is what applies the floor.Merge Danger
Door: two-way
Impact: lint and CSS output
eslint-plugin-baseline-jsis pre-1.0, and oxlint JS plugins are alpha. A plugin upgrade can change what"widely"allows, because the plugin bundles its own web-features data.Related