Skip to content

test: run the printer equivalence suite against Gecko in CI - #22155

Merged
alexander-akait merged 6 commits into
mainfrom
test/equivalence-firefox-ci
Sep 18, 2026
Merged

alexander-akait merged 6 commits into
mainfrom
test/equivalence-firefox-ci

Conversation

@alexander-akait

@alexander-akait alexander-akait commented Sep 17, 2026 •

Copy link
Copy Markdown
Member

Summary

#22151 made the equivalence suite able to ask Gecko, but nothing runs it, so the five defects only that engine sees are found by hand or not at all — this adds the syntax-equivalence-firefox job beside the Chrome one. Following up on that PR it also fixes three harness defects it left: unsampledBy treated device-width/device-height/device-aspect-ratio as sampled by the viewport and counted a repeated feature twice, so distinct conditions collapsed and @media (monochrome) and (monochrome) read as different from the (monochrome) it folds to; FILED_COLOR_REWRITES was tolerated rather than held exactly like every other filed set; and two JSDoc blocks had come apart from what they document.

What kind of change does this PR introduce?

test

Did you add tests for your changes?

This is the test: test/specCases/syntaxEquivalence.spectest.js and test/helpers/syntaxEquivalence.js, now run twice in CI.

Does this PR introduce a breaking change?

No — nothing under lib/ changes.

If relevant, what needs to be documented once your changes are merged or what have you already documented?

Documented here: TESTING_DOCS.md gains EQUIVALENCE_BROWSER / yarn setup:firefox / PUPPETEER_CACHE_DIR and still pointed at the deleted launchChrome.js; AGENTS.md names both jobs as fetching test/wpt.

Use of AI

AI was used. It reviewed #22151, reproduced each finding, and wrote the job and the fixes. The Gecko run itself could not be exercised where this was prepared — Mozilla's download hosts are blocked there — so the fallback branch was verified by forcing it on in Chrome over the same corpus, which is how the duplicate-feature defect was found; the first CI run of the new job is its first real run. I reviewed the result.


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added WebKit support for syntax-equivalence testing alongside Chrome and Firefox.
    • Added configurable browser cache locations and explicit executable-path support.
  • Bug Fixes

    • Firefox installation failures now report errors and fail appropriately.
    • Improved cross-browser media-condition and syntax-equivalence comparisons.
    • Strengthened divergence checks to detect resolved or unexpected differences.
  • Documentation

    • Updated testing documentation with browser coverage, setup instructions, and engine-specific validation details.
    • Updated contributor guidance for browser-based syntax-equivalence testing.

@changeset-bot

changeset-bot Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 8b57509

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions

github-actions Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

This PR is packaged and the instant preview is available (db556f3).

Install it locally:

  • npm
npm i -D webpack@https://pkg.pr.new/webpack@db556f3
  • yarn
yarn add -D webpack@https://pkg.pr.new/webpack@db556f3
  • pnpm
pnpm add -D webpack@https://pkg.pr.new/webpack@db556f3

@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: f7e84c06-46cd-494d-8372-880f54eab1b1

📥 Commits

Reviewing files that changed from the base of the PR and between 05894c2 and 8b57509.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock, !yarn.lock
📒 Files selected for processing (3)
  • .github/workflows/test.yml
  • cspell.json
  • test/specCases/syntaxEquivalence.spectest.js

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The syntax-equivalence workflow now runs Chrome, Firefox, and WebKit matrix entries. Browser launch supports Playwright-backed WebKit pages. Engine filtering, media handling, normalization, assertions, setup, and documentation were updated.

Changes

Cross-browser syntax-equivalence

Layer / File(s) Summary
Browser installation and CI matrix
.github/workflows/test.yml, package.json, tooling/install-firefox.js, cspell.json
CI runs Chrome, Firefox, and WebKit. WebKit uses playwright-core. Firefox installation uses the configurable Puppeteer cache and reports failures through the process exit code.
Browser launch adapters
test/helpers/launchBrowser.js
The launch helper supports Chrome, Firefox, and WebKit. WebKit uses a Puppeteer-shaped adapter over Playwright. Chrome and Firefox honor configured executable paths and launch options.
Equivalence normalization and assertions
test/specCases/syntaxEquivalence.spectest.js, test/helpers/syntaxEquivalence.js, AGENTS.md, TESTING_DOCS.md
The suite filters engine-specific cases, limits media emulation to Chrome, updates media and font normalization, records engine-specific defects, and validates filed color divergences. Documentation describes the three-browser workflow and setup.

Suggested reviewers: aryanraj45

Priority: ⬇️ Low

Change: Other

Merge Risk: ⚪ Minimal · up to 8b575

The expanded browser matrix and equivalence harness consistently select and run the intended browser-specific paths. No actionable merge risk remains.

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title uses the allowed test type and valid Conventional Commit syntax. It accurately describes the Firefox/Gecko CI coverage. The branch prefix is not provided, so the required type match cannot… Provide the branch name or branch prefix. Confirm that it uses the test prefix.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title uses the allowed test type and valid Conventional Commit syntax. It accurately describes the Firefox/Gecko CI coverage. The branch prefix is not provided, so the required type match cannot be verified.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the area: tooling Repo tooling, codegen, CLI entry (tooling/, bin/) label Sep 17, 2026
@codecov

codecov Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.90%. Comparing base (4b2eed0) to head (8b57509).

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #22155      +/-   ##
==========================================
- Coverage   94.90%   94.90%   -0.01%     
==========================================
  Files         733      733              
  Lines      103819   103819              
  Branches    31979    31979              
==========================================
- Hits        98532    98530       -2     
- Misses       5287     5289       +2     
Flag Coverage Δ
css-parsing 23.82% <ø> (ø)
html5lib 26.95% <ø> (ø)
integration 83.66% <ø> (-0.01%) ⬇️
syntax-equivalence 76.85% <ø> (ø)
test262 42.06% <ø> (ø)
unit 74.76% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Generated code size

Comparing base (4b2eed0) to head (8b57509). Merging this pull request moves 1 asset(s) whose tests it edits too.

What moved Tests Assets Gzip Raw Test edit
Changed, test untouched 0 0 — — —
Changed, test edited 1 1 🔴 ↑ +32 B 🔴 ↑ +101 B 🔴 ↑ +113 B
New 0 0 — — —
Deleted 0 0 — — —
Unchanged — 7720 — — —

Read Changed, test untouched first: the test is byte-identical on both sides, so webpack generated the difference. Changed, test edited moved partly because the test did — Test edit is how many bytes the test gained, and a bundle that grew by less is not a regression. New and Deleted are whole files, not deltas, so adding tests cannot bury a real change. Gzip decides, because that is what users download; raw is the tiebreak, and brotli and zstd are per asset below.

No asset with an untouched test changed size — every change below comes with a test this pull request edited.

1 asset(s) changed size, test edited
Asset Before After Change Gzip (9) Brotli (11) Zstd (19) Test edit (per test)
🔴 ↑ module/import-meta-parser-options bundle0.mjs 20.39 KiB 20.49 KiB +101 B (+0.48%) +32 B (+0.58%) +37 B (+0.77%) +37 B (+0.70%) +113 B

No runtime gained or lost a runtime module.

Built test/configCases with the defaults a user gets: 2181 test(s), 7721 asset(s), 87 emitted nothing.

@codspeed

codspeed Bot commented Sep 18, 2026 •

Copy link
Copy Markdown

Merging this PR will degrade performance by 64.31%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

❌ 2 regressed benchmarks
✅ 392 untouched benchmarks
⏩ 6 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
❌ Memory benchmark "side-effects-reexport", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 155 KB 903.7 KB -82.84%
❌ Memory unit benchmark "js-parser-unit", sourceType 'auto' 3.5 MB 4.7 MB -25.73%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing test/equivalence-firefox-ci (8b57509) with main (4b2eed0)

Open in CodSpeed

Footnotes

  1. 6 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@socket-security

socket-security Bot commented Sep 18, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​playwright-core@​1.63.0100100799980

View full report

…ples

Follow-up to #22151.

`unsampledBy` treated every feature whose name ends in a viewport dimension as
one the viewport bits already tell apart, so `device-width`, `device-height` and
`device-aspect-ratio` — the screen's, which `setViewport` does not move — were
dropped from the text and from the bits both, and two conditions naming
different ones read as one. The media type is now read outside the parentheses
as well, so a feature's own words cannot be taken for a type.

A filed color rewrite is held exactly, the way every other filed set in the file
is: a `FILED_COLOR_REWRITES` entry the engine stopped moving now fails rather
than sitting there. It is counted before the within-a-byte tolerance so the
tolerance cannot hide it, and the enumerated-fold comparison sorts both sides.

Two JSDoc blocks had come apart from what they document: `installHelpers` had
gained a second block instead of the `@param`, and `roundedOnly`'s had been left
above `withinAByte`.

`launchBrowser` and `install-firefox` read `PUPPETEER_CACHE_DIR` and build the
path with `path.join`, so they agree on where the browser went; a caller's own
`executablePath` is no longer overwritten, a platform puppeteer cannot detect
reports no browser rather than throwing, and a failed install prints its error
and exits non-zero. `TESTING_DOCS.md` still pointed at the deleted
`launchChrome.js`.
`syntax-equivalence-firefox` runs the same corpus and the same assertions under
`EQUIVALENCE_BROWSER=firefox`, beside the Chrome job rather than replacing it —
a rewrite only one engine reads differently is invisible to a suite that asks
one, and five of the defects filed today are ones only Gecko sees. It is a job
of its own so the existing check keeps its name, installs the browser with
`yarn setup:firefox`, and uploads no coverage: the Chrome job already reports
this suite's lines under the `syntax-equivalence` flag.

`unsampledBy` counted a feature once per occurrence, so `(monochrome) and
(monochrome)` and the `(monochrome)` the printer folds it to read as two
conditions where the viewport bits agreed. `and`, `or` and `,` are idempotent,
so the parts are a set — its own documentation already said "named once".
The Chrome run was `syntax-equivalence` with nothing saying which browser it
asked, while the engine added beside it said `-firefox` — so the pair read as a
suite and an afterthought rather than as one suite over two engines. They are
one matrix now, `syntax-equivalence (chrome)` and `syntax-equivalence
(firefox)`, the shape `runtimes (bun)` and `runtimes (deno)` already use here.

That also removes the copy of the job the second engine had brought with it:
the corpus checkout, the three caches and both comparison installs were
duplicated. Firefox is installed on its own row, Chrome reports the coverage
(both cover the same lines, so a second uploader only leaves the report short),
and `fail-fast: false` keeps one engine's failure from cancelling the other.
A matrix row carries the script and the coverage flag beside the browser, and
the generated name prints every key — so the checks read `syntax-equivalence
(chrome, cover:syntax-equivalence, true)`. An explicit `name` keeps the engine
and drops the rest.
WebKit is the third engine and the one Safari ships, and puppeteer reaches
Chrome and Firefox only — so `EQUIVALENCE_BROWSER=webkit` drives it through
playwright, under a shim in `launchBrowser.js` presenting the nine calls the
suites make. Playwright takes one argument where puppeteer takes several, and
offers no `color-gamut`, so it declines media emulation outright and a
condition carries what no viewport varies as text, the way Gecko already does.

`forEngine` no longer assumes two engines: a reason opening `<engine> only:` is
kept where it names the engine being run and dropped everywhere else, so a
third filed set needs nothing further.

The row is `continue-on-error` until its filed set is written from what it
actually sees. Both other engines opened with hundreds of differences that were
nearly all the harness rather than the printer, and the same is expected here;
filing them before the first run would be inventing them.
The first WebKit run reported 24 differences over 5803 checks, and they are
five causes. Each is filed with what was measured, so the row blocks like
Chrome's and Firefox's rather than reporting past a CI flag.

Three are the harness meeting a third engine. WebKit reads a different
`document.compatMode` for the two forms of eleven files and the reverse for
two, which a direction that flips per file says is how the document is built
rather than what the printer wrote. It lays out in sixty-fourths of a pixel,
so `112px` reads back as `111.984375px` in five framework stylesheets. And it
serializes a computed number to six significant digits where Blink keeps more
— which is the printer's own cap, so the whole-element comparison now reads
both sides at that precision, Chromium excepted since the fixtures were
measured against it.

Two are the engine: no `fetchpriority` reflection, so `high` and `low` both
read `auto`; no CSS Painting API, so a `paint()` image is dropped; and
`shape-image-threshold` read as the number its percentage means.

`attribute-tables` and `minimize-values` are filed by two engines for
different causes now, so a reason may name more than one.
@alexander-akait
alexander-akait force-pushed the test/equivalence-firefox-ci branch from 05894c2 to 8b57509 Compare September 18, 2026 02:29
@github-actions

Copy link
Copy Markdown
Contributor

Types Coverage

Coverage after merging test/equivalence-firefox-ci into main will be
98.35%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
bin
   webpack.js98.82%100%100%98.82%103
examples
   build-common.js100%100%100%100%
   buildAll.js100%100%100%100%
   examples.js100%100%100%100%
   template-common.js98.21%100%100%98.21%72
examples/custom-javascript-parser
   test.filter.js100%100%100%100%
examples/custom-javascript-parser/internals
   acorn-parse.js100%100%100%100%
   meriyah-parse.js100%100%100%100%
   oxc-parse.js100%100%100%100%
examples/markdown
   webpack.config.mjs100%100%100%100%
examples/module-federation
   test.filter.js100%100%100%100%
examples/reexport-components
   test.filter.js100%100%100%100%
examples/typescript
   test.filter.js100%100%100%100%
examples/typescript-non-erasable
   test.filter.js50%100%100%50%5
examples/virtual-modules
   test.filter.js100%100%100%100%
examples/wasm-bindgen-esm
   test.filter.js100%100%100%100%
examples/wasm-complex
   test.filter.js100%100%100%100%
examples/wasm-emscripten
   test.filter.js100%100%100%100%
examples/wasm-simple
   test.filter.js100%100%100%100%
examples/wasm-simple-source-phase
   test.filter.js100%100%100%100%
lib
   APIPlugin.js100%100%100%100%
   AsyncDependenciesBlock.js100%100%100%100%
   AutomaticPrefetchPlugin.js93.94%100%100%93.94%59, 62
   BannerPlugin.js100%100%100%100%
   Cache.js96.49%100%100%96.49%10, 104
   CacheFacade.js100%100%100%100%
   Chunk.js99.72%100%100%99.72%42
   ChunkGraph.js100%100%100%100%
   ChunkGroup.js100%100%100%100%
   ChunkTemplate.js100%100%100%100%
   CircularModulesPlugin.js99.50%100%100%99.50%289
   CleanPlugin.js97.81%100%100%97.81%111, 125, 128, 212, 232
   CodeGenerationResults.js100%100%100%100%
   CompatibilityPlugin.js100%100%100%100%
   Compilation.js98.59%100%100%98.59%1760, 2081, 2088, 2096, 2118, 2121, 3057, 3536–3537, 3569, 4158, 4162, 4261, 4282, 4407, 4444, 4451, 4504–4505, 4509, 4514, 4530–4531, 4545–4546, 4551–4552, 46, 5075, 5101, 5927, 5944, 5962, 5978, 5993, 6018, 6021, 6389, 6392–6393, 6398, 6413, 6496, 6520, 6634, 840–841
   Compiler.js98.81%100%100%98.81%1116, 1153, 1156, 1336–1337, 1345, 848, 934, 975
   ConcatenationScope.js99.10%100%100%99.10%293
   ConditionalInitFragment.js100%100%100%100%
   ConstPlugin.js100%100%100%100%
   CopyPlugin.js99.79%100%100%99.79%160
   DefinePlugin.js99.14%100%100%99.14%1127, 200–201, 217, 236, 310
   DependenciesBlock.js100%100%100%100%
   Dependency.js98.54%100%100%98.54%498, 545
   DependencyTemplate.js100%100%100%100%
   DependencyTemplates.js100%100%100%100%
   DotenvPlugin.js98.07%100%100%98.07%391, 439, 452–453
   DynamicEntryPlugin.js100%100%100%100%
   EntryOptionPlugin.js100%100%100%100%
   EntryPlugin.js100%100%100%100%
   Entrypoint.js100%100%100%100%
   EnvironmentPlugin.js97.14%100%100%97.14%49
   ErrorHelpers.js98.85%100%100%98.85%138
   EvalDevToolModulePlugin.js100%100%100%100%
   EvalSourceMapDevToolPlugin.js100%100%100%100%
   ExportsInfo.js99.26%100%100%99.26%415, 431, 763, 860, 878, 922, 927
   ExportsInfoApiPlugin.js100%100%100%100%
   ExternalModule.js98.78%100%100%98.78%1361, 1364, 595–599, 601, 766
   ExternalModuleFactoryPlugin.js100%100%100%100%
   ExternalsPlugin.js100%100%100%100%
   FileSystemInfo.js99.75%100%100%99.75%187, 285, 3947, 3962, 3986, 3989
   FlagAllModulesAsUsedPlugin.js100%100%100%100%
   FlagDependencyExportsPlugin.js95.64%100%100%95.64%119, 130, 146, 166, 170, 50, 52, 528, 533, 54, 540, 555, 558, 57
   FlagDependencyUsagePlugin.js100%100%100%100%
   FlagEntryExportAsUsedPlugin.js100%100%100%100%
   Generator.js100%100%100%100%
   HotModuleReplacementPlugin.js100%100%100%100%
   HotUpdateChunk.js100%100%100%100%
   IgnorePlugin.js100%100%100%100%
   IgnoreWarningsPlugin.js100%100%100%100%
   InitFragment.js100%100%100%100%
   JavascriptMetaInfoPlugin.js100%100%100%100%
   LazyBarrel.js100%100%100%100%
   LibraryTemplatePlugin.js100%100%100%100%
   LoaderOptionsPlugin.js100%100%100%100%
   LoaderTargetPlugin.js100%100%100%100%
   MainTemplate.js100%100%100%100%
   ManifestPlugin.js100%100%100%100%
   Module.js98.50%100%100%98.50%1327, 1332, 1391, 1405, 1467, 1476
   ModuleFactory.js100%100%100%100%
   ModuleFilenameHelpers.js98.90%100%100%98.90%111, 113
   ModuleGraph.js99.78%100%100%99.78%1177
   ModuleGraphConnection.js100%100%100%100%
   ModuleInfoHeaderPlugin.js100%100%100%100%
   ModuleNotFoundError.js100%100%100%100%
   ModuleProfile.js100%100%100%100%
   ModuleSourceTypeConstants.js100%100%100%100%
   ModuleTemplate.js100%100%100%100%
   ModuleTypeConstants.js100%100%100%100%
   MultiCompiler.js98.88%100%100%98.88%460, 532, 719, 784
   MultiStats.js100%100%100%100%
   MultiWatching.js93.75%100%100%93.75%37, 71
   NoEmitOnErrorsPlugin.js100%100%100%100%
   NodeStuffPlugin.js100%100%100%100%
   NormalModule.js98%100%100%98%1103, 1106, 1125, 1142, 1400, 1434, 1450, 1588, 1911, 2211, 2216–2224, 2226, 30
   NormalModuleFactory.js98.01%100%100%98.01%1341, 1644, 1661, 1670, 1674, 1702, 1709, 1713, 1718, 1730, 1741, 1790, 1801, 1811, 1862–1864, 1871, 732, 744
   NormalModuleReplacementPlugin.js100%100%100%100%
   NullFactory.js100%100%100%100%
   OptimizationStages.js100%100%100%100%
   OptionsApply.js100%100%100%100%
   Parser.js100%100%100%100%
   PlatformPlugin.js100%100%100%100%
   PrefetchPlugin.js100%100%100%100%
   ProgressPlugin.js99.80%100%100%99.80%694
   ProvidePlugin.js100%100%100%100%
   RawModule.js100%100%100%100%
   RecordIdsPlugin.js100%100%100%100%
   RequestShortener.js100%100%100%100%
   ResolverFactory.js100%100%100%100%
   RuntimeGlobals.js100%100%100%100%
   RuntimeModule.js100%100%100%100%
   RuntimePlugin.js95.53%100%100%95.53%317, 403, 412, 415, 428–429, 443, 461, 482–483, 506, 526–527, 563–564, 587, 600–601, 673, 686, 707, 726
   RuntimeTemplate.js99.66%100%100%99.66%352, 3744, 4579, 4591, 4596, 4598, 4603
   SelfModuleFactory.js100%100%100%100%
   SingleEntryPlugin.js100%100%100%100%
   SourceMapDevToolModuleOptionsPlugin.js100%100%100%100%
   SourceMapDevToolPlugin.js97.25%100%100%97.25%227, 231, 233, 408, 416, 445, 536, 539–540, 849, 870, 873
   Stats.js100%100%100%100%
   Template.js100%100%100%100%
   TemplatedPathPlugin.js99.48%100%100%99.48%365–366
   UseStrictPlugin.js100%100%100%100%
   WarnCaseSensitiveModulesPlugin.js100%100%100%100%
   WarnDeprecatedOptionPlugin.js100%100%100%100%
   WarnNoModeSetPlugin.js100%100%100%100%
   WatchIgnorePlugin.js100%100%100%100%
   Watching.js100%100%100%100%
   WebpackError.js100%100%100%100%
   WebpackIsIncludedPlugin.js100%100%100%100%
   WebpackOptionsApply.js100%100%100%100%
   WebpackOptionsDefaulter.js100%100%100%100%
   buildChunkGraph.js99.87%100%100%99.87%375
   cli.js98.63%100%100%98.63%10, 117, 547, 579, 629, 903
   index.js99.73%100%100%99.73%184
   validateSchema.js94.67%100%100%94.67%100, 87, 89, 98
   webpack.js97.12%100%100%97.12%10, 274, 296, 298
lib/asset
   AssetBytesGenerator.js100%100%100%100%
   AssetBytesParser.js100%100%100%100%
   AssetGenerator.js100%100%100%100%
   AssetModule.js100%100%100%100%
   AssetModulesPlugin.js98.15%100%100%98.15%338, 362, 365, 495, 57, 62
   AssetParser.js100%100%100%100%
   AssetSourceGenerator.js100%100%100%100%
   AssetSourceParser.js100%100%100%100%
   RawDataUrlModule.js100%100%100%100%
   WebManifestGenerator.js100%100%100%100%
   WebManifestParser.js100%100%100%100%
lib/async-modules
   AsyncModuleHelpers.js100%100%100%100%
   AwaitDependenciesInitFragment.js100%100%100%100%
   InferAsyncModulesPlugin.js100%100%100%100%
   isGeneratorLowered.js100%100%100%100%
lib/bun
   BunTargetPlugin.js100%100%100%100%
lib/cache
   AddBuildDependenciesPlugin.js100%100%100%100%
   AddManagedPathsPlugin.js100%100%100%100%
   IdleFileCachePlugin.js97.92%100%100%97.92%75, 87,

@alexander-akait
alexander-akait merged commit db556f3 into main Sep 18, 2026
66 checks passed
@alexander-akait
alexander-akait deleted the test/equivalence-firefox-ci branch September 18, 2026 04:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: tooling Repo tooling, codegen, CLI entry (tooling/, bin/)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant