[eslint-refiner] ESLint Refiner — Daily Report 2026-07-23 #47497
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by ESLint Refiner. A newer discussion is available at Discussion #47734. |
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 rule-quality pass over
eslint-factory(27 custom rules) againstactions/setup/js(751.cjstargets). Focus: false negatives, weak diagnostics, and missing edge cases in the interpolation- and error-handling rule families. 3 concrete refinement tasks filed, all grounded in rule source + real target code, all non-duplicate.Key metrics
actions/setup/js/**.cjs)Refinement tasks filed
no-child-process-interpolated-command(shell-injection coverage).no-exec-interpolated-commandonly covers the@actions/execglobal (arg-splitting). Node'schild_process.execSync/exec/spawnrun through a shell → interpolated command strings are a shell-injection vector nothing currently catches. Demand is proven:push_repo_memory.test.cjs:1155-1165hand-rolls a regex to forbidexecSync(\git ${var}`), andstart_mcp_gateway.cjshas real interpolatedexecSync` calls.no-exec-interpolated-command— single-level variable-indirection false negative. The rule inspects onlyarguments[0]'s syntactic shape; assigning the command to a variable first evades it (documented out-of-scope atno-exec-interpolated-command.test.ts:22-23). Real code builds command strings in variables (create_pull_request.test.cjs:3064).no-unsafe-catch-error-property— flow-insensitive guard. A single frame-levelhasGuardflag lets a guard on one branch (or textually after the access) suppress an unguarded access on another branch → false negatives.Analysis detail & method
try-catch-rule-utils.ts) and the interpolation/error-handling rule sources directly; the codebase already exposeschild_processbinding resolvers (isRequireChildProcess,isChildProcessImportBinding,isChildProcessObjectBinding), so task rejig docs #1 can reuse them.no-exec-interpolated-commandcorrectly flags the directexec.exec(\git ${x}`, [])shape — many real occurrences remain inpush_to_pull_request_branch.cjs/create_pull_request.cjs`, pending eslint-monster code fixes ([eslint-monster] setup/js lint stream 2: wrap sync fs and sync exec I/O in try/catch #47412/[eslint-monster] setup/js lint stream 3: standardize failure signaling and unsafe coercion patterns #47413). Those are code-fix streams, not rule defects, so they were not re-filed.Limitations this run
/tmp/gh-aw/repo-memory/default/path is blocked at the tool layer in this session (both read and write), so no strategy/state snapshot could be written or validated viapush_repo_memory. Continuity notes for the next run are captured in this discussion instead: next candidates to evaluate are (a)no-json-stringify-errornested-in-object coverage (JSON.stringify({ error: err })), and (b) adding safe suggestions tono-exec-interpolated-commandfor simple space-delimited commands.eslint-factorydev deps are not installed and network install was unavailable; findings are from static source review, which is sufficient for rule-quality gaps.Next actions
References:
All reactions