[eslint-refiner] Daily ESLint Rule Refinement — 2026-07-20 #46736
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #46995. |
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.
Overview
Daily refinement pass over the
eslint-factorycustom ESLint rules. Major change since last run (2026-07-08): the package grew 12 → 22 rules via a squash-commit that reset every rule file's git add-date to 2026-07-20 — the previous "newest-rule-first" cadence heuristic is now dead, so this pass diffedindex.tsrules[]against the reviewed set instead. All 22 rules are now reviewed at least once.Key metrics
prefer-core-logging→ #46643,no-core-error-then-process-exit→ #46642, both filed by the Code-Quality miner)Issues filed
no-github-request-interpolated-route— the rule'sgetOctokitsource set is{github, actions}but the repo's actual factory isglobal.getOctokit(...)(setup_globals.cjs:56, used in 8+ files) plusglobalState.getOctokit. Aliases of the dominant factory aren't recognized as Octokit clients, so an interpolated route on one would be silently unflagged. HIGH, grounded, latent.core-method-resolve(shared helper → 3 core rules) — the resolver rejects non-Variabledefs, so a function parameter carryingcore(DI style:validate_context_variables.cjscoreArg.setFailed(...)) is never recognized as core, disablingrequire-return-after-core-setfailed/no-core-exportvariable-non-string/no-core-setoutput-non-stringfor that shape. MED, grounded, high-leverage.require-mkdirsync-try-catch— omits theallowUnboundFsIdentifier: trueoption its siblingrequire-fs-sync-try-catchpasses, so an unwrappedfs.mkdirSync(...)with an unresolvedfsreceiver is ignored whilefs.readFileSync(...)is flagged. MED, consistency gap.Unfiled backlog (recorded in repo-memory for next pass)
no-exec-interpolated-command— only matches an object literally namedexec, but the repo DI-passes exec asexecApi(git_helpers.cjs,create_pull_request.cjs). Tests explicitly mark aliased-exec out-of-scope, so this is a design discussion, not an issue — and it's asymmetric with the sibling request rule that does resolve aliases.require-return-after-core-setfailed—findContinuationOutsideBlocknever inspects aTryStatement.finalizer;setFailedas the last statement of a try/catch that has afinallyruns cleanup in the failed state undetected. Ungrounded soundness gap.no-throw-plain-object— JSON-RPC exemption only accepts numeric-literalcode; a named-constant code (throw { code: INVALID_PARAMS }) would be a false positive. Low, ungrounded.require-spawnsync-error-check—.erroron the right of&&is rejected (the||form is accepted), false-positiving a valid combined guard. Low.require-new-url-try-catch— exempts all static-string args, sonew URL('rel/path')(throws at runtime) is unflagged, contradicting the rule's own message. Low.no-core-exportvariable-non-stringandno-throw-plain-objecthave zero grounded corpus defects — everyexportVariablearg is a string and everythrow {}is the exempt JSON-RPC shape.Next actions
index.tsnext run for any rules added beyond 22, and re-check whether [Code Quality] Fix no-core-error-then-process-exit autofix: return is not equivalent to process.exit #46642/[Code Quality] Fix prefer-core-logging: corrupts MCP stdio channel and drops multi-arg content #46643 landed fixes.exec-DIandsetfailed-try/finallyagainst live sites; consolidate the design-level ones into a discussion rather than issues.memory/eslint-refinerbranch) for continuity.Filed by ESLint Refiner. Dedup verified against open issues; the Code-Quality/Discussion-Task-Miner agents also file
eslint-factoryrule issues, so cross-agent dedup was applied.All reactions