|
| 1 | +# 2026-04-30 ESLint TSC Meeting Notes |
| 2 | + |
| 3 | +## Transcript |
| 4 | + |
| 5 | +[`2026-04-30-transcript.md`](2026-04-30-transcript.md) |
| 6 | + |
| 7 | +## Attending |
| 8 | + |
| 9 | +- Nicholas C. Zakas (@nzakas) - TSC |
| 10 | +- Milos Djermanovic (@mdjermanovic) - TSC |
| 11 | +- Francesco Trotta (@fasttime) - TSC |
| 12 | + |
| 13 | +@nzakas moderated, and @sam3k took notes. |
| 14 | + |
| 15 | +## Topics |
| 16 | + |
| 17 | +### Follow-up from Previous Meeting |
| 18 | + |
| 19 | +**TSC Summary:** No follow-up items to review from the previous meeting. |
| 20 | + |
| 21 | +### Statuses |
| 22 | + |
| 23 | +* **@nzakas:** Health continued to keep him from contributing in any meaningful way since the last meeting. |
| 24 | +* **@mdjermanovic:** Fixed some ASI-related bugs in core rules and has been working on upgrading `file-entry-cache` to v11. |
| 25 | +* **@fasttime:** Made progress on the `--base-path` RFC and added tests for older TypeScript versions to a few repos. |
| 26 | + |
| 27 | +### Availability Next Two Weeks |
| 28 | + |
| 29 | +* **@nzakas:** Can't be sure given his health; best to assume he won't be around consistently until things resolve. |
| 30 | +* **@mdjermanovic:** Hopes to be able to work 1-1.5 hours each day. |
| 31 | +* **@fasttime:** Hopes to work 9-12 hours per week the next couple of weeks. |
| 32 | + |
| 33 | +### RFC Duty Update |
| 34 | + |
| 35 | +* This week: @mdjermanovic |
| 36 | +* May 4: @nzakas |
| 37 | +* May 11: @fasttime |
| 38 | + |
| 39 | +### [Bug: Config loading crashes when `require.cache` is unavailable](https://github.com/eslint/eslint/issues/20813) |
| 40 | + |
| 41 | +**TSC Summary:** After @fasttime's investigation, the crash turned out to be a bug in Yarn. The team discussed whether to wait for upstream fixes or land a guard in ESLint. |
| 42 | + |
| 43 | +**Discussion Points:** |
| 44 | +- @fasttime suggested waiting for the next Node.js 24 release to see if it fixes the problem before deciding how to proceed. |
| 45 | +- @nzakas felt the fix is low-risk and preferred landing it so users are unblocked rather than waiting on Yarn or Node.js. |
| 46 | +- A PR is already open: [PR #20812](https://github.com/eslint/eslint/pull/20812). |
| 47 | + |
| 48 | +**Resolution:** The TSC agreed to move forward with [PR #20812](https://github.com/eslint/eslint/pull/20812) so users aren't blocked while Yarn/Node.js work on their own fixes. |
| 49 | + |
| 50 | +### [fix: correctly identify file paths in `loadFormatter`](https://github.com/eslint/eslint/pull/20814) |
| 51 | + |
| 52 | +**TSC Summary:** The PR author flagged that the change could break some existing usage and asked whether it should be treated as a breaking change for v11. |
| 53 | + |
| 54 | +**Discussion Points:** |
| 55 | +- @nzakas: if any existing use cases stop working, the change should wait until v11. |
| 56 | +- @fasttime agreed that's the safer route. |
| 57 | + |
| 58 | +**Resolution:** The TSC agreed this is a breaking change and should be held until v11. |
| 59 | + |
| 60 | +### [Change Request: Checking `meta.deprecated` schema in rule tester](https://github.com/eslint/eslint/issues/20603) |
| 61 | + |
| 62 | +**TSC Summary:** The team discussed whether and how invalid `meta.deprecated` values in rules should be handled. (Noted that "tsc agenda" is for meeting discussion and "tsc waiting" is for offline resolution; this one was picked up since the team had time.) |
| 63 | + |
| 64 | +**Discussion Points:** |
| 65 | +- @nzakas: because `meta.deprecated` doesn't generally affect runtime behavior, runtime validation isn't appropriate; `RuleTester` is a better place for this. By contrast, `meta.languages` is validated at runtime because it does affect runtime behavior. |
| 66 | +- @nzakas suggested this is a good use case for the TypeScript `JSRuleDefinition` type. |
| 67 | +- @mdjermanovic noted that invalid values can in fact crash ESLint at runtime — specifically, if `meta.deprecated.replacedBy` exists but isn't an array, ESLint will crash (see [eslint.js#L148](https://github.com/eslint/eslint/blob/3ffb14ea517de750ed1181579ef844af342e4096/lib/eslint/eslint.js#L148)). This was previously hit by a rule in `eslint-plugin-eslint-comments` ([fix commit](https://github.com/eslint-community/eslint-plugin-eslint-comments/commit/de049807e525ac3e2d164c8873f9035b08eb23a6)). |
| 68 | +- @fasttime confirmed types should already catch incorrect values during development, but `RuleTester` currently has no validation. |
| 69 | +- The team aligned on a two-part approach: at runtime, guard against non-array `replacedBy` (so ESLint doesn't crash) as a regular fix; in `RuleTester`, add comprehensive validation of `meta.deprecated` (a breaking change). |
| 70 | +- On RFC necessity: @nzakas didn't feel it warranted an RFC but didn't feel strongly. @mdjermanovic was slightly in favor; @fasttime deferred to @mdjermanovic. The team agreed to do an RFC, expecting details around invalid properties, URLs, etc. |
| 71 | + |
| 72 | +**Resolution:** The TSC agreed to: |
| 73 | +- Add a runtime guard so ESLint doesn't crash when `meta.deprecated.replacedBy` isn't an array (regular fix). |
| 74 | +- Add comprehensive `meta.deprecated` validation to `RuleTester` (breaking change), driven by an RFC. |
| 75 | + |
| 76 | +### Scheduled Release for May 1st, 2026 |
| 77 | + |
| 78 | +**Packages to Release:** |
| 79 | +- `eslint` (no pending releases for ESLint dependencies; just the `eslint` package). |
| 80 | + |
| 81 | +**Action Items:** |
| 82 | +- @mdjermanovic will do the release on May 1st. |
| 83 | +- @mdjermanovic will re-check [PR #20812](https://github.com/eslint/eslint/pull/20812) before the release; the remaining suggestion is minor (test-related). @fasttime will also take a look. |
0 commit comments