Repository navigation
[eslint-refiner] Daily ESLint Refiner report — 2026-10-21 (disciplined 0-issue run, 4 new rules reviewed) #70769
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #71029. |
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 since 2026-10-05 (16-day gap).
eslint-factory's registered rule count grew from 65 → 69. Used the established "ruleCount bump" method to find the never-before-reviewed rules and gave each a first-ever grounded audit against the liveactions/setup/js/**/*.cjscorpus. Open eslint-factory issue queue was confirmed at zero both before and after this run — the backlog-clearance milestone from 2026-10-05 has held for over two weeks.No new issues filed this run. Every rule audited either fired correctly on live code or had zero live misfires; no grounded rule defect was found. This is the 9th disciplined 0-issue run recorded in memory.
Key metrics
What was reviewed
no-map-parseint-callback (first-ever review) — clean
Flags
.map(parseInt)/.map(Number.parseInt)(index becomes radix). Grepped every liveparseInt(call site inactions/setup/js/**/*.cjs(~75 sites): every single one passes an explicit radix (parseInt(x, 10)orparseInt(x, 16)) and none is passed bare to.map(). Also checked for aconst alias = parseInt;indirection that would escape the rule's direct-identifier check — zero occurrences. Codebase is disciplined here; no gap found.require-finite-check-before-date-toisostring (first-ever review) — clean
Flags
new Date(dynamicArg).toISOString()/.toJSON()when the argument isn't provably finite and there's noNumber.isFinite/isNaNguard or try/catch. The rule's own test suite documents a known scope limit: aDatefirst assigned to a variable (const d = new Date(ms); d.toISOString();) is not flagged, only the inline chained form.Grepped every live
= new Date(assignment in the corpus and traced each to its.toISOString()/.toJSON()use:report_ast.cjs:434/467,check_stop_time.cjs:95,create_project_status_update.cjs:242,expired_entity_cleanup_helpers.cjs:34, andephemerals.cjs:67/83are all guarded — either with a directNumber.isNaN(x.getTime())check right above the call, or (forephemerals.cjs) becauseextractExpirationDate()already validates and returnsnullon failure before any.toISOString()call is reached. The documented scope gap exists but has zero live misses — not filed.no-split-filter-trim-without-trim-map (first-ever review) — rule confirmed working, 2 structural gaps found but ungrounded
Flags
.split(delimiter).filter(x => x.trim()), which drops blank entries but leaves whitespace on the kept ones. Found the rule correctly firing on two live sites:redact_secrets.cjs:688—secretNames.split(",").filter(name => name.trim()), thensecretNameused un-trimmed in`SECRET_${secretName}`at line 690. AGH_AW_SECRET_NAMESvalue like"FOO, BAR"produces a lookup forSECRET_ BAR(leading space) that never matches a real env var — the custom secret silently never gets redacted.redact_secrets.cjs:778— same split/filter pattern, though here the value is re-trimmed at point of use (line 782), so no live bug there.This is a genuine, security-adjacent bug the rule would catch if wired into CI lint — good confirmation the rule has real value. It's an app-code fix, not a rule defect, so no eslint-factory issue was filed for it; flagging here for visibility since redaction correctness is security-relevant.
Two structural gaps were found in the rule itself but not filed (zero live grounding):
isSplitSeparatoronly accepts a string-literal delimiter, not a regex literal (e.g..split(/,\s*/)) — same whitespace bug would escape detection with a regex separator.isTrimmedNonEmptyunwraps!-negation but not aBoolean(x.trim())wrapper — grepped for both patterns combined with a non-newline split; no live occurrences of either.no-ad-hoc-jsonl-parser — lighter pass, deferred
Most complex of the 4 new rules (alias/ESM/destructuring resolution, parser-restart detection). Its own test suite is already unusually thorough (32 cases). 69 files touch
jsonl_helpers.cjs. Did not find a fresh angle within this run's budget — carried to next run for a deeper grounded pass.Rotation/chronic-theory re-checks
no-core-error-then-process-exit/-exitcodenamed-constant exit-code theory: re-grepped everyprocess.exit(/process.exitCode=site (~30) for a named-constant argument paired withcore.error— 3rd consecutive zero-grounding check. Retiring this theory per the established 2+-check precedent.no-unguarded-async-timer-callbackleading-guard-clause asymmetry: still exactly 1 livesetInterval(async ...)site in the whole corpus (process_runner.cjs:458), still confounded by genuine trailing-code risk in the same callback. No new site appeared; not filed, not retired.Next actions
no-ad-hoc-jsonl-parsera dedicated, deeper grounded review next run (deferred this run for time budget).no-unguarded-async-timer-callbackleading-guard theory before filing.redact_secrets.cjs:688's untrimmed-secret-name lookup bug is noted here for maintainer awareness but is out of this workflow's scope to fix directly (app code, not an eslint-factory rule).All reactions