You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reviewed 3 previously-unreviewed eslint-factory rules against the live actions/setup/js/** corpus. Filed 1 grounded refinement issue; ruled out 2 candidates (1 solid/no-defect, 1 left unfiled pending verification). Also discovered and repaired a multi-week gap in repo-memory continuity.
Key metrics
Rules registered in eslint-factory/src/index.ts: 55 (up from the 12 last recorded in memory - the rule count had drifted badly out of sync).
Candidates investigated this run: 3 (require-fs-close-sync, no-throw-plain-object, no-string-fallback-for-non-string-message).
Issues filed: 1 (quality-over-cap, consistent with prior-run precedent of preferring one well-grounded finding over padding to 3).
Repo-memory: resynced and pushed successfully (push_repo_memory validated: 7 files, 14 KB total, 2 KB patch diff, well under the 12 KB limit).
Issue filed
no-string-fallback-for-non-string-message should exempt discriminated-union container guards. The rule flags typeof <c>.message === "string" ? <c>.message : String(<other>) whenever <other> isn't chain-identical to <c> - but doesn't account for the case where a leading typeof <container> === "object" conjunct already proves the container is non-object in the fallback branch (e.g. it's a plain string from heterogeneous parsed data), making String(container) the correct identity coercion rather than a bug. Grounded at actions/setup/js/log_parser_shared.cjs:1009; notably, the rule's own test suite already hardcodes this exact live shape as an "invalid" (should-report) case without recognizing the guard. Proposed fix adds the exemption and recategorizes that one test case, while keeping the true single-conjunct bug pattern (and mismatched-container-guard variants) correctly flagged.
Candidates ruled out
require-fs-close-sync — left unfiled, needs verification
actions/setup/js/start_mcp_gateway.cjs's main() opens outputFd/stderrFd via fs.openSync(...) and passes them into spawn(cmd, args, { stdio: ["pipe", outputFd, stderrFd], detached: true }), then calls child.unref(), without ever calling fs.closeSync on either fd. This could be a genuine rule false-negative (parent-owned descriptors that leak), or it could be correct as-is if fd ownership transfers to the detached child via stdio and the parent process exiting reclaims them anyway. Could not confirm Node.js fd-ownership-transfer semantics for this pattern this run (web search was unavailable). Left as a follow-up for next run rather than filing an ungrounded/uncertain report.
no-throw-plain-object — reviewed, no defect found
Traced the isJsonRpcErrorShape exemption logic in full and checked it against roughly 11 live throw { code, message, ... } JSON-RPC error sites across mcp_server_core.cjs and safe_outputs_handlers.cjs. All were correctly exempted (negative-numeric literal code, message present, keys constrained to {code, message, data}). No false positive or false negative found - this rule appears solid against the current corpus.
Repo-memory continuity gap
Repo-memory (state.json / history.jsonl) had not been updated since 2026-07-08, even though the workflow clearly continued running and filing issues through at least 2026-08-23 (rule count alone grew from 12 to 55 registered rules in that span). Treated GitHub Issues as the authoritative record for that period rather than the stale snapshot, and resynced memory this run with the true rule count, a note flagging the gap for future runs, and today's findings. A full backfill of the missing ~6 weeks was not attempted given the 10 KB memory patch budget; a condensed gap-marker record was appended to history.jsonl instead.
Next actions
Verify the require-fs-close-sync / start_mcp_gateway.cjs fd-closing question next run (Node.js child_process stdio fd-ownership semantics) before filing.
Re-survey all open eslint-factory-labeled issues via gh api to rebuild an accurate coverage index, since the local memory's issue list is known-incomplete for 2026-07-09 through 2026-08-23.
Continue working through the ~14 rules in index.ts with no matching issue-title history, prioritizing those over re-reviewing already-covered rules.
README rule-documentation debt remains open (docs cover far fewer than the 55 registered rules) - candidate for a documentation-only issue or a future discussion callout.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Overview
Reviewed 3 previously-unreviewed
eslint-factoryrules against the liveactions/setup/js/**corpus. Filed 1 grounded refinement issue; ruled out 2 candidates (1 solid/no-defect, 1 left unfiled pending verification). Also discovered and repaired a multi-week gap in repo-memory continuity.Key metrics
eslint-factory/src/index.ts: 55 (up from the 12 last recorded in memory - the rule count had drifted badly out of sync).require-fs-close-sync,no-throw-plain-object,no-string-fallback-for-non-string-message).push_repo_memoryvalidated: 7 files, 14 KB total, 2 KB patch diff, well under the 12 KB limit).Issue filed
no-string-fallback-for-non-string-messageshould exempt discriminated-union container guards. The rule flagstypeof <c>.message === "string" ? <c>.message : String(<other>)whenever<other>isn't chain-identical to<c>- but doesn't account for the case where a leadingtypeof <container> === "object"conjunct already proves the container is non-object in the fallback branch (e.g. it's a plain string from heterogeneous parsed data), makingString(container)the correct identity coercion rather than a bug. Grounded atactions/setup/js/log_parser_shared.cjs:1009; notably, the rule's own test suite already hardcodes this exact live shape as an "invalid" (should-report) case without recognizing the guard. Proposed fix adds the exemption and recategorizes that one test case, while keeping the true single-conjunct bug pattern (and mismatched-container-guard variants) correctly flagged.Candidates ruled out
require-fs-close-sync — left unfiled, needs verification
actions/setup/js/start_mcp_gateway.cjs'smain()opensoutputFd/stderrFdviafs.openSync(...)and passes them intospawn(cmd, args, { stdio: ["pipe", outputFd, stderrFd], detached: true }), then callschild.unref(), without ever callingfs.closeSyncon either fd. This could be a genuine rule false-negative (parent-owned descriptors that leak), or it could be correct as-is if fd ownership transfers to the detached child viastdioand the parent process exiting reclaims them anyway. Could not confirm Node.js fd-ownership-transfer semantics for this pattern this run (web search was unavailable). Left as a follow-up for next run rather than filing an ungrounded/uncertain report.no-throw-plain-object — reviewed, no defect found
Traced the
isJsonRpcErrorShapeexemption logic in full and checked it against roughly 11 livethrow { code, message, ... }JSON-RPC error sites acrossmcp_server_core.cjsandsafe_outputs_handlers.cjs. All were correctly exempted (negative-numeric literalcode,messagepresent, keys constrained to{code, message, data}). No false positive or false negative found - this rule appears solid against the current corpus.Repo-memory continuity gap
Repo-memory (
state.json/history.jsonl) had not been updated since 2026-07-08, even though the workflow clearly continued running and filing issues through at least 2026-08-23 (rule count alone grew from 12 to 55 registered rules in that span). Treated GitHub Issues as the authoritative record for that period rather than the stale snapshot, and resynced memory this run with the true rule count, a note flagging the gap for future runs, and today's findings. A full backfill of the missing ~6 weeks was not attempted given the 10 KB memory patch budget; a condensed gap-marker record was appended tohistory.jsonlinstead.Next actions
require-fs-close-sync/start_mcp_gateway.cjsfd-closing question next run (Node.js child_process stdio fd-ownership semantics) before filing.eslint-factory-labeled issues viagh apito rebuild an accurate coverage index, since the local memory's issue list is known-incomplete for 2026-07-09 through 2026-08-23.index.tswith no matching issue-title history, prioritizing those over re-reviewing already-covered rules.All reactions