[eslint-refiner] ESLint Refiner — Daily Report 2026-07-24 #47734
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #47933. |
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
First run after a 16-day gap. The
eslint-factorycustom rule set grew substantially — 12 → 29 rules — so this run prioritized the newest, highest-impact rules (error-handling + command/route-injection security rules). Reviewed 7 of the 17 new rules; filed 2 non-duplicate issues (quality over cap).Key metrics
Issues filed
1. HIGH —
no-err-stack-then-string-fallbackmisses the idiomaticinstanceof Errorguard (grounded, 3 live sites)err instanceof Error ? err.stack : String(err)falls through both rules:no-err-stack-then-string-fallbackonly matches the&&guard form, andprefer-get-error-messageonly matches a.messageconsequent (not.stack). The rule's own test file wrongly assumes the sibling covers this. Grounded atcreate_issue.cjs:1190(wheregetErrorMessage()is already used one line above),copilot_sdk_driver.cjs:148,pi_agent_core_driver.cjs:393. The equivalent&&-guard sites are flagged today, so coverage shouldn't depend on guard style.2. MED —
no-child-process-interpolated-commanddoesn't resolve command-variable initializers (shell-injection FN)The sibling
no-exec-interpolated-commandresolves an identifier command to its write-once initializer before classifying it; the child-process rule inspects only the syntactic first argument. Soconst cmd = \git ${x}`; execSync(cmd)escapes the **higher-severity** shell-injection guard. Ungrounded in the current (disciplined) corpus — filed as a soundness/consistency gap, matching the precedent of the previously-filed catch-less-try/finally` gap.Confirmed fixed since last run (2026-07-08)
Two prior findings have landed
try/finallysoundness gap —try-catch-rule-utils.isInsideTryBlocknow requiresancestor.handler != null, so all sibling try/catch rules correctly no longer treat atry { ... } finally { }(nocatch) as protective.require-fs-sync-try-catchdestructured/bare-fsfalse negative — the newrequire-fs-io-try-catchusescreateFsSyncMethodResolver(..., { allowUnboundFsIdentifier: true }), addressing the unbound-fsbinding class.Also reviewed (no new findings)
Three rules reviewed clean / guard-only
no-github-request-interpolated-route— thorough Octokit-client detection + const-alias resolution + opaque-whole-route vs value-interpolation split. Zero interpolated.request()routes in the corpus (typed-placeholder discipline); acts as a regression guard.no-setfailed-then-exit-zero— thoroughcore.setFaileddetection (direct/computed/alias/destructure) with forward-scan stopping at control transfer. Noprocess.exit(0)-after-setFailedin the corpus.require-fs-io-try-catch— coversstatSync/readdirSync/copyFileSync/unlinkSync/renameSync; live sites mostly wrapped.Next actions
require-execsync/execfilesync/spawnsync/mkdirsync/new-url-try-catch,no-core-error-then-process-exit(code),no-throw-plain-object,require-return-after-core-setfailed,prefer-core-logging,no-core-exportvariable-non-string.fsmethods covered by no rule (rmSync,openSync,chmodSync,realpathSync,symlinkSync,readlinkSync,truncateSync) — grep for unwrapped live sites before filing.no-exec-interpolated-commandresolves initializers — audit the interpolated-command / request-route rules for the same asymmetry.Strategy and findings persisted to repo-memory (
memory/eslint-refinerbranch, 12 KB). Grounding is static (grep on non-testactions/setup/js/**/*.cjs); npm and live-lint are unavailable in this environment.All reactions