[eslint-refiner] ESLint Refiner daily report — 2026-09-27 #63782
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #63936. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
ESLint Refiner — daily report, 2026-09-27
Reviewed one previously-zero-live-call-site rule against the current corpus and found a genuine, first-ever-live false positive. All 62 registered rules now have at least one review; today used a new "re-grep previously-ungrounded theories against the current corpus" method since the codebase does evolve file-by-file even though
git logdiffing has been dead for 10 consecutive runs (shallow-clone squash commits show all-insertions, zero deletions, every day).Key metrics
no-math-minmax-array-spread, re-grounded)ba0499c(#63747) — 10th consecutive all-insertions squash artifactIssue filed today
no-math-minmax-array-spread: false positive on identifiers holding statically-bounded arraysMath.max(...times)inactions/setup/js/daily_aic_api_budget.cjs:24-25flags a variable (times = [reset, retryAt].filter(...)) that can never hold more than 2 elements — nowhere near the crash-risk size the rule targets. The rule only recognizes inline array literals as bounded; it never traces an identifier back to its declaration. This is the rule's first-ever live occurrence in the corpus (previously zero call sites existed), so it's a real firing false positive, not a latent theory.Full grounding detail
isUnboundedSpreadArgumentinno-math-minmax-array-spread.tstreats everyIdentifier/MemberExpression/CallExpressionas unbounded, with no scope resolution back to the declaration.no-math-minmax-array-spread.test.tsonly tests identifiers with no traceable initializer (barevalues) as invalid, and only an inline spread (Math.max(...[1,2,3])) as the bounded/valid case. No test covers an identifier whose initializer is itself a fixed-size literal.ArrayExpression(optionally through non-growing chain calls like.filter()/.slice()), treat as bounded.Other theories re-checked today (no new issue)
Re-confirmed unchanged / still ungrounded
core-method-resolve.ts2-hop alias theory (7 consumer rules) — still zeroconst x = core;matches anywhere in the corpus.no-json-stringify-equalityindirect-variable/indirect-template-literal gap — 103 files match= JSON.stringify(...)but, as in the 09-23/09-24/09-25 checks, every non-test match is an unrelated single assignment, not the indirect-then-compared shape. 4th consecutive non-refile; chronic theme (2 prior expiries: no-json-stringify-equality: misses indirect template-literal comparisons (live gap: trace_graders.cjs gradeLoops) #57869/no-json-stringify-equality: still misses indirect template-literal comparisons -- recurrence of expired issue 57869 #59892).require-spawn-error-listenernested-function reachability gap — still exactly 3 livespawn()sites (process_runner.cjs:127,start_mcp_gateway.cjs:905,apply_samples.cjs:629), all correctly guarded, unchanged since 09-18.Tracker watch list
Open issues and aging
#63566—require-escaped-regexp-interpolationregex-fragment-constant gap (filed 09-26, 1 day old)#63359—require-fetch-response-body-try-catchchain-unwrap gap, recurrence of require-fetch-response-body-try-catch: trailing .catch()/.then() on the body-read call hides it from the rule #61542 (2 days old)#62560—no-string-fallback-for-non-string-messagealias-type-narrowing FP, recurrence of no-string-fallback-for-non-string-message: false positive on type-narrowed catch-param alias (safeoutputs_cli.cjs:48) #60757 (5 days old — past where prior first-expiries have historically landed, watch closely)#62317—require-invalid-date-check-before-comparearithmetic-derived-duration recurrence, recurrence of require-invalid-date-check-before-compare misses arithmetic-derived duration variables (live gap in check_rate_limit.cjs) #60577 (6 days old — likewise past the typical expiry window)Chronic, do-not-refile themes (2+ expiries, no new grounding — flagged for a human/PR-capable workflow, not for another issue filing):
try-catch-rule-utils.tsVariableDeclaration-suggestion gap, affecting ~14 fs-sync/child-process rules (eslint-factory: shared try/catch suggestion builder silently skips VariableDeclaration call sites #57868/eslint-factory: shared try/catch suggestion builder still skips VariableDeclaration call sites -- recurrence of expired issue 57 #59891, both expired).no-json-stringify-equalityindirect-operand gap (no-json-stringify-equality: misses indirect template-literal comparisons (live gap: trace_graders.cjs gradeLoops) #57869/no-json-stringify-equality: still misses indirect template-literal comparisons -- recurrence of expired issue 57869 #59892, both expired).require-error-code-in-thrown-error's two themes (require-error-code-in-thrown-error: ERROR_CODE_PATTERN does not recognize error_codes.cjs non-ERR_/E0xx exports #61285/require-error-code-in-thrown-error: nested identifier aliases inside binary/template messages bypass write-once resolution (fals #61284, both expired, re-audited 09-24 as still ungrounded).Known upstream fixes that landed without issue closure (this workflow has no
close_issue/add_commentsafe-output — needs a human or PR-capable workflow to verify and close): #61044 (09-23), #61543 (09-24).Next actions
#62317and#62560for their first expiry next run — both are now past the ~1-week window where prior recurrences have historically expired.core-method-resolve.ts,no-json-stringify-equality,no-unsafe-promise-catch-error-property) since the corpus evolves even though git-log diffing stays unusable.README.mdstill documents only 2 of 62 rules — worth a documentation pass at some point, not urgent enough for its own issue yet.All reactions