@blumintinc/eslint-plugin-blumint 1.20.13 → 1.20.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -89,7 +89,7 @@ full closed loop is documented in agora's `.claude/skills/eslint-autonomy/SKILL.
89
89
  | [dynamic-https-errors](docs/rules/dynamic-https-errors.md) | Keep HttpsError messages static and move request-specific details to the third argument so error identifiers remain stable and debugging context is preserved. | ✅ | | | | | |
90
90
  | [enforce-assert-safe-object-key](docs/rules/enforce-assert-safe-object-key.md) | Enforce the use of assertSafe(id) when accessing object properties with computed keys that involve string interpolation or explicit string conversion. | ✅ | | | 🔧 | | |
91
91
  | [enforce-assert-throws](docs/rules/enforce-assert-throws.md) | Enforce that functions with an assert prefix must throw an error or call process.exit(1), and functions that call assert-prefixed methods should themselves be assert-prefixed | ✅ | | | | | |
92
- | [enforce-boolean-naming-prefixes](docs/rules/enforce-boolean-naming-prefixes.md) | Enforce consistent naming conventions for boolean values by requiring approved prefixes | ✅ | | | 🔧 | | |
92
+ | [enforce-boolean-naming-prefixes](docs/rules/enforce-boolean-naming-prefixes.md) | Enforce consistent naming conventions for boolean values by requiring approved prefixes | ✅ | | | | | |
93
93
  | [enforce-callable-types](docs/rules/enforce-callable-types.md) | Enforce Props and Response type exports in callable functions | ✅ | | | | | |
94
94
  | [enforce-callback-memo](docs/rules/enforce-callback-memo.md) | Enforce useCallback for inline functions and useMemo for objects/arrays containing functions in JSX props to prevent unnecessary re-renders. This improves React component performance by ensuring stable function references across renders and memoizing complex objects. | ✅ | | | | | |
95
95
  | [enforce-centralized-mock-firestore](docs/rules/enforce-centralized-mock-firestore.md) | Enforce usage of centralized mockFirestore from predefined location | ✅ | | | 🔧 | | |
@@ -198,7 +198,7 @@ full closed loop is documented in agora's `.claude/skills/eslint-autonomy/SKILL.
198
198
  | [no-redundant-usecallback-wrapper](docs/rules/no-redundant-usecallback-wrapper.md) | Prevent wrapping already memoized/stable callbacks from hooks/contexts in an extra useCallback() | ✅ | | | 🔧 | | |
199
199
  | [no-render-function-components](docs/rules/no-render-function-components.md) | Disallow declaring a local `render*` function that returns JSX and consuming it as a plain function (direct call or array-iteration callback); author it as a real component rendered with JSX instead | ✅ | | | | | |
200
200
  | [no-res-error-status-in-onrequest](docs/rules/no-res-error-status-in-onrequest.md) | Forbid sending 4xx/5xx Express responses inside onRequest handlers; throw structured HttpsError instances instead so the wrapper can format, log, and map errors consistently. | ✅ | | | | | |
201
- | [no-restricted-properties-fix](docs/rules/no-restricted-properties-fix.md) | Disallow certain properties on certain objects, with special handling for Object.keys() and Object.values() | | | | 🔧 | | |
201
+ | [no-restricted-properties-fix](docs/rules/no-restricted-properties-fix.md) | Disallow certain properties on certain objects, with special handling for Object.keys() and Object.values() | | | | | | |
202
202
  | [no-satisfies-in-frontend-bundle](docs/rules/no-satisfies-in-frontend-bundle.md) | Disallow the `satisfies` operator in files that reach the frontend webpack bundle (Next.js 12 SWC cannot parse it) | ✅ | | | | | |
203
203
  | [no-separate-loading-state](docs/rules/no-separate-loading-state.md) | Disallow separate loading state variables that track the loading status of other state | ✅ | | | | | |
204
204
  | [no-single-dismiss-dialog-button](docs/rules/no-single-dismiss-dialog-button.md) | Disallow a single dialog button whose label is a dismiss action (Cancel, Close, Dismiss, Not now, Never mind). Use navigation.onClose for dismissal; the buttons array should only contain affirmative actions. | ✅ | | | | | |
@@ -206,15 +206,15 @@ full closed loop is documented in agora's `.claude/skills/eslint-autonomy/SKILL.
206
206
  | [no-stale-state-across-await](docs/rules/no-stale-state-across-await.md) | Prevent stale intermediate state by disallowing useState setter calls both before and after async boundaries (await, .then(), yield) within the same function | ✅ | | | | | |
207
207
  | [no-static-constants-in-dynamic-files](docs/rules/no-static-constants-in-dynamic-files.md) | Disallow exporting SCREAMING_SNAKE_CASE constants from .dynamic.ts/.dynamic.tsx files; move static constants to non-dynamic modules instead. | ✅ | | | | | |
208
208
  | [no-try-catch-already-exists-in-transaction](docs/rules/no-try-catch-already-exists-in-transaction.md) | Disallow catching ALREADY_EXISTS errors inside Firestore transaction callbacks | ✅ | | | | | |
209
- | [no-type-assertion-returns](docs/rules/no-type-assertion-returns.md) | Enforce typing variables before returning them, rather than using type assertions or explicit return types | ✅ | | | 🔧 | | |
209
+ | [no-type-assertion-returns](docs/rules/no-type-assertion-returns.md) | Enforce typing variables before returning them, rather than using type assertions or explicit return types | ✅ | | | | | |
210
210
  | [no-undefined-null-passthrough](docs/rules/no-undefined-null-passthrough.md) | Avoid functions that return undefined or null when their single argument is undefined or null | ✅ | | | | | |
211
211
  | [no-unmemoized-memo-without-props](docs/rules/no-unmemoized-memo-without-props.md) | Prevent wrapping prop-less Unmemoized components in memo since memo provides no benefit without props and adds unnecessary indirection | ✅ | | | | | |
212
212
  | [no-unnecessary-destructuring](docs/rules/no-unnecessary-destructuring.md) | Avoid object patterns that only spread an existing object, since they clone the whole value without selecting properties | ✅ | | | 🔧 | | |
213
213
  | [no-unnecessary-destructuring-rename](docs/rules/no-unnecessary-destructuring-rename.md) | Disallow destructuring renames that are only used to assign back to the original property name | ✅ | | | 🔧 | | |
214
214
  | [no-unnecessary-verb-suffix](docs/rules/no-unnecessary-verb-suffix.md) | Prevent unnecessary verb suffixes in function and method names | ✅ | | | 🔧 | | |
215
215
  | [no-unpinned-dependencies](docs/rules/no-unpinned-dependencies.md) | Enforces pinned dependencies | ✅ | | | 🔧 | | |
216
- | [no-unsafe-firestore-spread](docs/rules/no-unsafe-firestore-spread.md) | Prevent unsafe object/array spreads in Firestore updates | ✅ | | | 🔧 | | |
217
- | [no-unused-props](docs/rules/no-unused-props.md) | Detect unused props in React component type definitions | ✅ | | | 🔧 | | |
216
+ | [no-unsafe-firestore-spread](docs/rules/no-unsafe-firestore-spread.md) | Prevent unsafe object/array spreads in Firestore updates | ✅ | | | | | |
217
+ | [no-unused-props](docs/rules/no-unused-props.md) | Detect unused props in React component type definitions | ✅ | | | | | |
218
218
  | [no-unused-usestate](docs/rules/no-unused-usestate.md) | Disallow unused useState hooks | ✅ | | | 🔧 | | |
219
219
  | [no-useless-fragment](docs/rules/no-useless-fragment.md) | Prevent unnecessary use of React fragments | ✅ | | | 🔧 | | |
220
220
  | [no-useless-usememo-primitives](docs/rules/no-useless-usememo-primitives.md) | Disallow useless useMemo with primitive values. | ✅ | | | 🔧 | | |
@@ -224,13 +224,13 @@ full closed loop is documented in agora's `.claude/skills/eslint-autonomy/SKILL.
224
224
  | [optimize-object-boolean-conditions](docs/rules/optimize-object-boolean-conditions.md) | Detects and suggests optimizations for boolean conditions formed over objects in React hook dependencies. Suggests extracting boolean conditions into separate variables to reduce unnecessary re-computations when objects change frequently but the boolean condition changes less frequently. | ✅ | | | | | |
225
225
  | [parallelize-async-operations](docs/rules/parallelize-async-operations.md) | Enforce the use of Promise.all() when multiple independent asynchronous operations are awaited sequentially | ✅ | | | 🔧 | | |
226
226
  | [parallelize-loop-awaits](docs/rules/parallelize-loop-awaits.md) | Disallow sequential await expressions inside loops when iterations could be parallelized with Promise.all(items.map(...)) | ✅ | | | | | |
227
- | [prefer-batch-operations](docs/rules/prefer-batch-operations.md) | Enforce using setAll() and overwriteAll() instead of multiple set() or overwrite() calls | ✅ | | | 🔧 | | |
227
+ | [prefer-batch-operations](docs/rules/prefer-batch-operations.md) | Enforce using setAll() and overwriteAll() instead of multiple set() or overwrite() calls | ✅ | | | | | |
228
228
  | [prefer-block-comments-for-declarations](docs/rules/prefer-block-comments-for-declarations.md) | Enforce the use of block comments for declarations | ✅ | | | 🔧 | | |
229
229
  | [prefer-clone-deep](docs/rules/prefer-clone-deep.md) | Prefer using cloneDeep over nested spread copying | ✅ | | | 🔧 | | |
230
230
  | [prefer-destructuring-no-class](docs/rules/prefer-destructuring-no-class.md) | Enforce destructuring when accessing object properties, except for class instances | ✅ | | | 🔧 | | |
231
231
  | [prefer-docsetter-setall](docs/rules/prefer-docsetter-setall.md) | Enforce batching DocSetter and DocSetterTransaction writes by using setAll instead of set inside loops or array callbacks. | ✅ | | | | | |
232
232
  | [prefer-document-flattening](docs/rules/prefer-document-flattening.md) | Enforce using the shouldFlatten option when setting deeply nested objects in Firestore documents | | | | | 💡 | |
233
- | [prefer-field-paths-in-transforms](docs/rules/prefer-field-paths-in-transforms.md) | Flatten aggregation updates inside transformEach so diff-based deletes remove only the intended fields instead of wiping sibling data. | ✅ | | | 🔧 | | |
233
+ | [prefer-field-paths-in-transforms](docs/rules/prefer-field-paths-in-transforms.md) | Flatten aggregation updates inside transformEach so diff-based deletes remove only the intended fields instead of wiping sibling data. | ✅ | | | | | |
234
234
  | [prefer-flat-transform-each-keys](docs/rules/prefer-flat-transform-each-keys.md) | Warn when transformEach in a propagation strategy returns nested object values instead of flat dot-notation keys. | ✅ | | | | | |
235
235
  | [prefer-fragment-component](docs/rules/prefer-fragment-component.md) | Require the Fragment named import instead of shorthand fragments or React.Fragment to keep fragments explicit and prop-friendly | | | ✅ | 🔧 | | |
236
236
  | [prefer-fragment-shorthand](docs/rules/prefer-fragment-shorthand.md) | Prefer <> shorthand for <React.Fragment> | ✅ | | | 🔧 | | |
@@ -240,7 +240,7 @@ full closed loop is documented in agora's `.claude/skills/eslint-autonomy/SKILL.
240
240
  | [prefer-next-dynamic](docs/rules/prefer-next-dynamic.md) | Prefer Next.js dynamic() over custom useDynamic() for component imports | ✅ | | | 🔧 | | |
241
241
  | [prefer-nullish-coalescing-boolean-props](docs/rules/prefer-nullish-coalescing-boolean-props.md) | Prefer nullish coalescing over logical OR, but allow logical OR in boolean contexts | ✅ | | | 🔧 | | |
242
242
  | [prefer-params-over-parent-id](docs/rules/prefer-params-over-parent-id.md) | Prefer event.params over ref.parent.id for type-safe Firebase trigger paths. | ✅ | | | 🔧 | | |
243
- | [prefer-settings-object](docs/rules/prefer-settings-object.md) | Enforce using a settings object for functions with multiple parameters | ✅ | | | 🔧 | | |
243
+ | [prefer-settings-object](docs/rules/prefer-settings-object.md) | Enforce using a settings object for functions with multiple parameters | ✅ | | | | | |
244
244
  | [prefer-spread-over-reassembly](docs/rules/prefer-spread-over-reassembly.md) | Prefer spread syntax over destructure-then-reassemble when all destructured fields are forwarded identically to a single target | ✅ | | | 🔧 | | |
245
245
  | [prefer-sx-prop-over-system-props](docs/rules/prefer-sx-prop-over-system-props.md) | Enforce using the MUI `sx` prop instead of deprecated system props (e.g. `mt`, `display`, `flexDirection`) on MUI components. | ✅ | | | 🔧 | | |
246
246
  | [prefer-type-alias-over-typeof-constant](docs/rules/prefer-type-alias-over-typeof-constant.md) | Prefer named type aliases over `typeof` on same-file global constants; ensure types are declared before constants. | ✅ | | | | | |
package/lib/index.js CHANGED
@@ -223,7 +223,7 @@ function noFrontendImportsFromFunctionsPatterns(pattern) {
223
223
  module.exports = {
224
224
  meta: {
225
225
  name: '@blumintinc/eslint-plugin-blumint',
226
- version: '1.20.13',
226
+ version: '1.20.15',
227
227
  },
228
228
  parseOptions: {
229
229
  ecmaVersion: 2020,
@@ -51,7 +51,6 @@ exports.enforceBooleanNamingPrefixes = (0, createRule_1.createRule)({
51
51
  description: 'Enforce consistent naming conventions for boolean values by requiring approved prefixes',
52
52
  recommended: 'error',
53
53
  },
54
- fixable: 'code',
55
54
  schema: [
56
55
  {
57
56
  type: 'object',
@@ -242,6 +242,16 @@ exports.default = (0, createRule_1.createRule)({
242
242
  return false;
243
243
  }
244
244
  const target = unwrapAssertions(node);
245
+ // Skip an initializer already wrapped in a non-`const` assertion
246
+ // (`{...} as T`, `<T>{...}`, `{...} as unknown as T`). A `const`
247
+ // assertion may only be applied to a literal, so appending one
248
+ // after an assertion chain is TS1355 — the same failure mode the
249
+ // regex/null/boolean carve-outs below exist for. Such a cast is
250
+ // also the author pinning the type deliberately, exactly like the
251
+ // `id.typeAnnotation` case skipped next.
252
+ if (target !== node) {
253
+ return false;
254
+ }
245
255
  // Skip if there's an explicit type annotation
246
256
  if (declaration.id.typeAnnotation) {
247
257
  return false;
@@ -17,7 +17,6 @@ exports.noRestrictedPropertiesFix = (0, createRule_1.createRule)({
17
17
  description: 'Disallow certain properties on certain objects, with special handling for Object.keys() and Object.values()',
18
18
  recommended: 'error',
19
19
  },
20
- fixable: 'code',
21
20
  schema: [
22
21
  {
23
22
  type: 'array',
@@ -118,7 +117,6 @@ exports.noRestrictedPropertiesFix = (0, createRule_1.createRule)({
118
117
  propertyName: restrictedProp.property,
119
118
  restrictionReason: formatRestrictionReason(restrictedProp.message),
120
119
  },
121
- fix: () => null,
122
120
  });
123
121
  }
124
122
  // If only property is restricted (for any object)
@@ -142,7 +140,6 @@ exports.noRestrictedPropertiesFix = (0, createRule_1.createRule)({
142
140
  propertyName: restrictedProp.property,
143
141
  restrictionReason: formatRestrictionReason(restrictedProp.message),
144
142
  },
145
- fix: () => null,
146
143
  });
147
144
  }
148
145
  // If only object is restricted (any property)
@@ -162,7 +159,6 @@ exports.noRestrictedPropertiesFix = (0, createRule_1.createRule)({
162
159
  propertyName,
163
160
  restrictionReason: formatRestrictionReason(restrictedProp.message),
164
161
  },
165
- fix: () => null,
166
162
  });
167
163
  }
168
164
  }
@@ -85,7 +85,6 @@ exports.noTypeAssertionReturns = (0, createRule_1.createRule)({
85
85
  recommended: 'error',
86
86
  requiresTypeChecking: false,
87
87
  },
88
- fixable: 'code',
89
88
  schema: [
90
89
  {
91
90
  type: 'object',
@@ -12,7 +12,6 @@ exports.noUnsafeFirestoreSpread = (0, createRule_1.createRule)({
12
12
  description: 'Prevent unsafe object/array spreads in Firestore updates',
13
13
  recommended: 'error',
14
14
  },
15
- fixable: 'code',
16
15
  schema: [],
17
16
  messages: {
18
17
  unsafeObjectSpread: 'Firestore merge update spreads an object at "{{path}}" and rewrites that entire field. Spreading bypasses Firestore field-path merges and can drop sibling data. Update specific fields with dot notation or FieldPath instead.',
@@ -51,7 +50,6 @@ exports.noUnsafeFirestoreSpread = (0, createRule_1.createRule)({
51
50
  node: property,
52
51
  messageId: 'unsafeObjectSpread',
53
52
  data: { path: pathLabel(parentPath) },
54
- fix: null,
55
53
  });
56
54
  }
57
55
  else if (property.type === utils_1.AST_NODE_TYPES.Property) {
@@ -98,7 +96,6 @@ exports.noUnsafeFirestoreSpread = (0, createRule_1.createRule)({
98
96
  node: element,
99
97
  messageId: 'unsafeArraySpread',
100
98
  data: { path: pathLabel(parentPath) },
101
- fix: null,
102
99
  });
103
100
  }
104
101
  }
@@ -18,7 +18,6 @@ exports.noUnusedProps = (0, createRule_1.createRule)({
18
18
  messages: {
19
19
  unusedProp: 'Prop "{{propName}}" is declared in the component Props type but never used inside the component body. Unused props make the component API misleading: callers keep passing values that are ignored and reviewers assume behavior that is not implemented. Remove "{{propName}}" from the Props type, consume it in the component, or forward it with a rest spread (e.g., `const MyComponent = ({ usedProp, ...rest }: Props) => <Child {...rest} />`).',
20
20
  },
21
- fixable: 'code',
22
21
  },
23
22
  defaultOptions: [],
24
23
  create(context) {
@@ -319,7 +319,6 @@ exports.preferBatchOperations = (0, createRule_1.createRule)({
319
319
  description: 'Enforce using setAll() and overwriteAll() instead of multiple set() or overwrite() calls',
320
320
  recommended: 'error',
321
321
  },
322
- fixable: 'code',
323
322
  schema: [],
324
323
  messages: {
325
324
  preferBatch: 'DocSetter.{{setterMethod}} is invoked repeatedly inside {{contextDescription}}, which issues separate Firestore writes per document and can leave partial updates when later calls fail. Batch the documents with DocSetter.{{batchMethod}} so the writes stay grouped and latency stays predictable.',
@@ -379,7 +378,6 @@ exports.preferBatchOperations = (0, createRule_1.createRule)({
379
378
  node: existing.firstNode,
380
379
  messageId,
381
380
  data: messageData,
382
- fix: () => null, // We can't provide a fix because we don't know the array structure
383
381
  });
384
382
  }
385
383
  }
@@ -402,7 +400,6 @@ exports.preferBatchOperations = (0, createRule_1.createRule)({
402
400
  node,
403
401
  messageId,
404
402
  data: messageData,
405
- fix: () => null, // We can't provide a fix because we don't know the array structure
406
403
  });
407
404
  }
408
405
  }
@@ -414,7 +411,6 @@ exports.preferBatchOperations = (0, createRule_1.createRule)({
414
411
  node,
415
412
  messageId,
416
413
  data: messageData,
417
- fix: () => null, // We can't provide a fix because we don't know the array structure
418
414
  });
419
415
  }
420
416
  }
@@ -156,7 +156,6 @@ function analyzeReturnedObject(obj, context, containerNameMatches) {
156
156
  nestedPath,
157
157
  flattenedPath: `${keyName}.${nestedPath}`,
158
158
  },
159
- fix: () => null,
160
159
  });
161
160
  }
162
161
  }
@@ -169,7 +168,6 @@ exports.preferFieldPathsInTransforms = (0, createRule_1.createRule)({
169
168
  description: 'Flatten aggregation updates inside transformEach so diff-based deletes remove only the intended fields instead of wiping sibling data.',
170
169
  recommended: 'error',
171
170
  },
172
- fixable: 'code',
173
171
  schema: [
174
172
  {
175
173
  type: 'object',
@@ -17,7 +17,6 @@ exports.preferSettingsObject = (0, createRule_1.createRule)({
17
17
  description: 'Enforce using a settings object for functions with multiple parameters',
18
18
  recommended: 'error',
19
19
  },
20
- fixable: 'code',
21
20
  schema: [
22
21
  {
23
22
  type: 'object',
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  const utils_1 = require("@typescript-eslint/utils");
3
3
  const createRule_1 = require("../utils/createRule");
4
+ // Anchored at the end of the path so multi-part suffixes such as
5
+ // `EventRegistry.integration.test.ts` are recognized while production modules
6
+ // that merely contain the word (`testUtils.ts`, `latest.ts`,
7
+ // `foo.test.helper.ts`) keep their enforcement.
8
+ const TEST_FILE_SUFFIX = /\.(test|spec)\.[cm]?[jt]sx?$/;
9
+ // Jest convention directories hold test-only modules regardless of file name.
10
+ const TEST_FILE_DIRECTORY = /(^|\/)(__tests__|__mocks__)\//;
11
+ /**
12
+ * Jest test files live beside production code under `functions/src`, but they
13
+ * are never invoked as a Cloud Function and never return an HTTP response to a
14
+ * client. Throwing a plain `Error` in their setup guards, fixtures, and mock
15
+ * failure modes is idiomatic, so the rule's rationale does not apply to them
16
+ * (issue #1380).
17
+ */
18
+ const isTestFile = (filename) => TEST_FILE_SUFFIX.test(filename) || TEST_FILE_DIRECTORY.test(filename);
4
19
  module.exports = (0, createRule_1.createRule)({
5
20
  name: 'require-https-error',
6
21
  meta: {
@@ -26,6 +41,9 @@ module.exports = (0, createRule_1.createRule)({
26
41
  if (!filename.includes('functions/src')) {
27
42
  return {};
28
43
  }
44
+ if (isTestFile(filename)) {
45
+ return {};
46
+ }
29
47
  const httpsIdentifiers = new Map();
30
48
  const httpsErrorIdentifiers = new Map();
31
49
  const reportProprietary = (node, data) => context.report({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blumintinc/eslint-plugin-blumint",
3
- "version": "1.20.13",
3
+ "version": "1.20.15",
4
4
  "description": "Custom eslint rules for use within BluMint",
5
5
  "author": {
6
6
  "name": "Brodie McGuire",
@@ -1,4 +1,96 @@
1
1
  [
2
+ {
3
+ "version": "1.20.15",
4
+ "date": "2026-07-29T08:50:35.880Z",
5
+ "rules": [
6
+ {
7
+ "name": "enforce-boolean-naming-prefixes",
8
+ "changeType": "fix",
9
+ "issues": [
10
+ 1376
11
+ ],
12
+ "summary": "drop false fixable declaration (closes #1376)"
13
+ },
14
+ {
15
+ "name": "no-restricted-properties-fix",
16
+ "changeType": "fix",
17
+ "issues": [
18
+ 1381
19
+ ],
20
+ "summary": "drop false fixable declaration (closes #1381)"
21
+ },
22
+ {
23
+ "name": "no-type-assertion-returns",
24
+ "changeType": "fix",
25
+ "issues": [
26
+ 1377
27
+ ],
28
+ "summary": "drop false fixable declaration (closes #1377)"
29
+ },
30
+ {
31
+ "name": "no-unsafe-firestore-spread",
32
+ "changeType": "fix",
33
+ "issues": [
34
+ 1382
35
+ ],
36
+ "summary": "drop false fixable declaration (closes #1382)"
37
+ },
38
+ {
39
+ "name": "no-unused-props",
40
+ "changeType": "fix",
41
+ "issues": [
42
+ 1378
43
+ ],
44
+ "summary": "drop false fixable declaration (closes #1378)"
45
+ },
46
+ {
47
+ "name": "prefer-batch-operations",
48
+ "changeType": "fix",
49
+ "issues": [
50
+ 1383
51
+ ],
52
+ "summary": "drop false fixable declaration (closes #1383)"
53
+ },
54
+ {
55
+ "name": "prefer-field-paths-in-transforms",
56
+ "changeType": "fix",
57
+ "issues": [
58
+ 1384
59
+ ],
60
+ "summary": "drop false fixable declaration (closes #1384)"
61
+ },
62
+ {
63
+ "name": "prefer-settings-object",
64
+ "changeType": "fix",
65
+ "issues": [
66
+ 1379
67
+ ],
68
+ "summary": "drop false fixable declaration (closes #1379)"
69
+ },
70
+ {
71
+ "name": "require-https-error",
72
+ "changeType": "fix",
73
+ "issues": [
74
+ 1380
75
+ ],
76
+ "summary": "stop flagging throws in Jest test files (closes #1380)"
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "version": "1.20.14",
82
+ "date": "2026-07-29T06:45:40.321Z",
83
+ "rules": [
84
+ {
85
+ "name": "global-const-style",
86
+ "changeType": "fix",
87
+ "issues": [
88
+ 1375
89
+ ],
90
+ "summary": "stop appending as const after a type assertion (closes #1375)"
91
+ }
92
+ ]
93
+ },
2
94
  {
3
95
  "version": "1.20.13",
4
96
  "date": "2026-07-29T06:26:25.973Z",