[eslint-refiner] ESLint Refiner — Daily Report 2026-07-22 #47213
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #47497. |
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 refiner run since 2026-07-08. In that gap the
eslint-factoryplugin grew from 12 → 24 registered rules (~1 new rule/day), leaving 12 rules never reviewed. Today I reviewed the 4 newest (byindex.tsimport order) and filed 2 non-duplicate refinement issues. The newest rules are high quality and well-calibrated against the live corpus.Key metrics
Issues filed
execFileSyncinrequire-execsync-try-catch— the newest rule guardsexecSync(throws on non-zero exit) but not its identical-semantics siblingexecFileSync;spawnSync(non-throwing) is covered by a different rule, soexecFileSyncis unguarded. Grounded:execFileSyncruns in 4+ live scripts, manually try-wrapped in most (proving the invariant), but unwrapped inbuild_checkout_manifest.cjs:44/48. (HIGH, grounded)no-core-error-then-process-exitcodeforward-scan parity — it only inspects the adjacent statement, while its siblingno-core-error-then-process-exitscans forward; a benign intervening line (e.g.core.info(...)) betweencore.error()andprocess.exitCode = 1silently defeats it. Sinceprocess.exitCodedoes not halt, intervening statements are common. (MED, soundness/parity)Rule health — calibration checks
True-positives / true-negatives verified statically against non-test
.cjsrequire-execsync-try-catch: correctly flags unwrappedstart_mcp_gateway.cjs:824execSync(\node "${p}"`); correctly **passes** wrapped sites (:482/:670/:693/:896,get_current_branch.cjs:18`). Well-calibrated.no-exec-interpolated-command: all liveexec.exec/exec.getExecOutputuse a static command string plus an args array (e.g.git_auth_helpers.cjs) → clean true-negatives; no false negative found.no-core-error-then-process-exit: correctly flagsconvert_gateway_config_shared.cjs:48-49and:70-71(core.error(); process.exit(1)).Backlog observations (not filed this run)
no-core-error-then-process-exit*family: they pair statements only within a single block, whereas the cousinrequire-return-after-core-setfailedalready handles cross-block/loop/switch continuation. Candidate parity fix (ungrounded).process.exit(0)override:core.setFailed(m); process.exit(0)passesrequire-return-after-core-setfailedyet resets the exit code to success — a latent correctness footgun; niche/ungrounded (discussion-worthy, not an issue).no-core-exportvariable-non-stringshares thenon-string-kindutil withno-core-setoutput-non-string, so it inherits the known gaps tracked for setOutput (only.length; misses unary/negative numeric literals,.number/.size). Review next; avoid duplicating prior setOutput issues.require-execsync-try-catch:148-160(withinDeferredBoundarycomputed thenvoid-ed).Next actions
require-return-after-core-setfailed,no-github-request-interpolated-route, andno-throw-plain-object.build_checkout_manifest.cjs:44/48flagged and wrappedexecFileSyncsites clean; confirm the exitCode forward-scan leaves existing valid cases green.eslint-refinerbranch) for continuity.References: §29895687838
All reactions