microsoft/playwright

14 rules learned from 2,000 merged PRs: the files and habits in microsoft/playwright that kept needing a fix after merge.

Merged PRs read
2,000
Needed a fix
182 (9.2%)
Reverted
53
Merged between
2026-03-26 and 2026-11-11

Tested on PRs the rules had never seen

17 of the 67 code PRs that breached a rule needed a fix (25%), against 13 of the 114 that breached none (11%).

Rules were learned from older PRs, then tested on later PRs they hadn't seen. How we tested

PRTitle and the rule it breachedWhat happened
fix(zip): reject on malformed archives instead of crashingFragile area: packages/utils/ (12 of 18 earlier PRs needed a fix) fixed in #43725, 3 days later
fix(aria): honor reflected label referencesFragile area: packages/injected/ (13 of 25 earlier PRs needed a fix) fixed in #43722, 3 days later
fix(clock): format an explicit timestamp of 0 as the epoch in Intl.DateTimeFormatFragile area: packages/injected/ (13 of 25 earlier PRs needed a fix) fixed in #43523, 4 days later

Fix-prone files and folders

PRs that touched these paths needed a follow-up fix more often than the 23% repo average. Counts are PRs that touched the path.

  1. Hotspot: packages/playwright-core/src/client/channels.d.ts

    19 of 28 earlier PRs that changed this needed a fix.

    9 clean, 19 fixed (68%)
  2. Hotspot: packages/playwright-core/src/tools/dashboard/dashboardApp.ts

    14 of 21 earlier PRs that changed this needed a fix.

    7 clean, 14 fixed (67%)
  3. Hotspot: packages/playwright-core/src/server/channels.d.ts

    18 of 27 earlier PRs that changed this needed a fix.

    9 clean, 18 fixed (67%)
  4. Hotspot: packages/playwright-core/src/tools/mcp/extensionContextFactory.ts

    7 of 11 earlier PRs that changed this needed a fix.

    4 clean, 7 fixed (64%)
  5. Hotspot: packages/playwright-core/src/server/browserContext.ts

    15 of 24 earlier PRs that changed this needed a fix.

    9 clean, 15 fixed (63%)
  6. Hotspot: packages/protocol/src/validator.ts

    18 of 29 earlier PRs that changed this needed a fix.

    11 clean, 18 fixed (62%)
  7. Fragile area: packages/protocol/

    31 of 54 earlier PRs that changed this needed a fix.

    23 clean, 31 fixed (57%)
  8. Fragile area: packages/dashboard/

    10 of 18 earlier PRs that changed this needed a fix.

    8 clean, 10 fixed (56%)
  9. Hotspot: packages/playwright-core/src/tools/cli-client/program.ts

    10 of 19 earlier PRs that changed this needed a fix.

    9 clean, 10 fixed (53%)
  10. Fragile area: utils/generate_types/

    22 of 42 earlier PRs that changed this needed a fix.

    20 clean, 22 fixed (52%)
  11. Fragile area: packages/utils/

    14 of 27 earlier PRs that changed this needed a fix.

    13 clean, 14 fixed (52%)
  12. Hotspot: packages/playwright-client/types/types.d.ts

    36 of 72 earlier PRs that changed this needed a fix.

    36 clean, 36 fixed (50%)
  13. Fragile area: packages/html-reporter/

    6 of 12 earlier PRs that changed this needed a fix.

    6 clean, 6 fixed (50%)
  14. Fragile area: packages/trace-viewer/

    9 of 18 earlier PRs that changed this needed a fix.

    9 clean, 9 fixed (50%)

Conventions

Habits most PRs here follow, where PRs that broke them needed a fix more often. Counts on each bar are the PRs that broke it.

No habit here made the list.

Recent PRs that needed a fix

Rules flagged 75 recent PRs, and 21 of those needed a fix (28%), against 14% of all recent PRs. These are the 15 with the strongest rule that needed a fix, with the PR that fixed each.

PRTitleSizeRule it breachedWhat happened
feat(webmcp): add page.webmcp API +2,531 -135 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
chore(webmcp): remove enable/disable and toolsChanged event +137 -1,562 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed fixed in #43121, 3 days later
feat(locator): add a context-wide visibility default +1,069 -97 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
feat(evaluate): add "world" option to evaluate methods +538 -203 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
feat(api): add APIRequestContext.cookies and clearCookies +546 -75 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed fixed in #43074, 1 day later
feat(evaluate): opt in to Map and Set serialization +411 -131 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
feat(tracing): allow configuring the screenshots size +237 -12 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
feat(webauthn): add signCount to virtual credentials +201 -37 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed fixed in #43132, 4 days later
fix(client-certificates): reestablish a way to explicitly send no client certificate for an origin +199 -25 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed reverted
chore(recorder): move fill coalescing back to collapseActions +56 -13 touches packages/playwright-core/src/client/channels.d.ts9 clean, 19 fixed fixed in #42627, 11 days later
feat(extension): allow disabling controlled tab groups +110 -29 touches packages/playwright-core/src/tools/mcp/extensionContextFactory.ts4 clean, 7 fixed fixed in #43970, 6 days later
fix: do not send proxy credentials to website auth challenges +62 -28 touches packages/playwright-core/src/server/browserContext.ts9 clean, 15 fixed reverted
Revert "fix: do not send proxy credentials to website auth challenges (#43342)" +28 -62 touches packages/playwright-core/src/server/browserContext.ts9 clean, 15 fixed fixed in #43482, 2 days later
fix(client-certificates): respect launch proxy and proxy.bypass +41 -9 touches packages/playwright-core/src/server/browserContext.ts9 clean, 15 fixed fixed in #42909, 1 day later
feat(reporter): introduce TestStep.subtitle, unify step formatting +712 -475 touches packages/protocol/23 clean, 31 fixed fixed in #42515, 6 days later

Get this for your own repo

Precall reads your repo's history the same way and comments on new PRs that touch the spots that kept breaking.