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
Run 88. Registry stable at 76 analyzers (no delta since R85). Serena still exposes the exact same 24 tools. The sergo-labeled issue queue reconciled to exactly 1 open item (#65753, predicted precisely by the prior run), and I spent this runs budget two ways: verifying that 3 recently closed fixes actually landed correctly in code, and finding one fresh, code-confirmed bug that a recent refactor silently reintroduced into two linters. One new issue filed: sg88a1.
Tool and Registry Status
Serena: 24 tools, unchanged (activate_project, find_symbol, search_for_pattern, etc. all present, no additions or removals). Registry: 76 analyzers in pkg/linters/registry.go, matching the doc.go header, no drift between the two.
Strategy: 50 percent cached, 50 percent new
Cached half: reconcile the open sergo issue queue against current code, then spend extra budget on something the cache flagged as high-value, which this time was verifying that 3 fixes closed as completed in the last two runs are real and not reverse-phantoms. New-exploration half: follow a lead surfaced by a recent code refactor (a duplicate-code consolidation of discarded-error matching logic) to see whether it fixed, preserved, or introduced any bugs.
Cached-Vein Findings: Fix Verification
closeerrorunchecked.go: now has a dual AssignStmt plus ExprStmt nodeFilter, and both assignment patterns call astutil.UnwrapParenExpr before asserting the rhs is a CallExpr. The parenthesized-Close-discard gap from sg82a1 is genuinely fixed.
typeassertionnil.go: the core gate now resolves the asserted type via pass.TypesInfo.TypeOf plus types.Unalias instead of a syntactic StarExpr check. This correctly closes the pointer-type-alias and parenthesized-pointer-type blind spot from sg84a1.
uncheckedsliceindex.go: sameExpr now recurses through SelectorExpr bases (matching the selector Ident via ObjectOf, then recursing into the receiver), instead of only accepting bare Ident operands. The selector-base blind spot from sg74a1 is genuinely fixed.
Spot-checked nolint and filecheck wiring on the 3 newest linters (closeerrorunchecked, typeassertionnil, fprintferrorunchecked): full parity, no suppression gaps.
New Finding: sg88a1
globwalkignorederror.go and strconvparseignorederror.go each register an AssignStmt-only nodeFilter and share astutil.MatchDiscardedErrorCall, which only matches the two-value assignment form value, _ colon-equals pkg.Func(...). Neither linter has any handling for a bare statement call such as os.ReadDir(dir) or strconv.Atoi(s), which is legal Go and silently discards both return values with no assignment at all.
This exact gap was filed twice before (#61265, then refiled as #63094) and auto-expired unfixed both times, falling out of the bounded 3-run strategy memory window for 14 runs. What makes this run notable: a recent duplicate-code consolidation refactor (#65436, #65567) centralized the AssignStmt-matching logic into the shared helper for 3 callers, including jsonmarshalignoredeerror.go. That third file already has the correct companion fix sitting right next to the shared helper call: a dual nodeFilter plus its own ExprStmt handler. The refactor never copied that companion branch to its two siblings, even though the working reference implementation was right there in the same package tree. Both affected linters are CI-enforced on native and wasm, with zero ExprStmt test coverage. No live production false negative was found via grep, so this is latent rather than actively masking a bug today, but it is a real, zero-coverage CI-enforcement hole. Filed as sg88a1 with the exact fix template (mirror jsonmarshalignoredeerror checkDiscardedJSONExpr) cited in the issue.
Generated Task
Add an ExprStmt branch to globwalkignorederror.run and strconvparseignorederror.run, mirroring jsonmarshalignoredeerror, plus testdata covering bare statement calls to os.ReadDir, filepath.Glob, and strconv.Atoi. Small effort, two files, existing reference implementation to copy from.
Metrics
1 issue created out of a 3-issue budget (chose depth over padding, consistent with several recent runs where reconcile plus fix-verification left little else to refile). Total across all runs: 88 runs, 542 cumulative findings, 155 cumulative tasks, average success score 8.72.
Historical Context
This continues a long-running pattern class called node_filter_too_narrow, first identified in jsonmarshalignoredeerror itself years ago and fixed there. The lesson this run adds: a shared-helper consolidation refactor is a high-risk moment for this class, since it can propagate an existing gap to new callers instead of fixing it once for everyone, especially when a correct reference implementation sits unexamined in the very same refactor.
Recommendations and Next-Run Focus
Fix sg88a1 by mirroring the existing jsonmarshalignoredeerror pattern. For R89: verify sg88a1 landed, expect the open-issue count to sit at 2 (sg87a1 plus sg88a1) unless a maintainer bulk-closes again, audit fresh if the registry grows to 77, and check whether the sg88a1 fix extends MatchDiscardedErrorCall itself to support ExprStmt, which would close this pattern class for the shared helper permanently rather than per-caller.
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.
Executive Summary
Run 88. Registry stable at 76 analyzers (no delta since R85). Serena still exposes the exact same 24 tools. The sergo-labeled issue queue reconciled to exactly 1 open item (#65753, predicted precisely by the prior run), and I spent this runs budget two ways: verifying that 3 recently closed fixes actually landed correctly in code, and finding one fresh, code-confirmed bug that a recent refactor silently reintroduced into two linters. One new issue filed: sg88a1.
Tool and Registry Status
Serena: 24 tools, unchanged (activate_project, find_symbol, search_for_pattern, etc. all present, no additions or removals). Registry: 76 analyzers in pkg/linters/registry.go, matching the doc.go header, no drift between the two.
Strategy: 50 percent cached, 50 percent new
Cached half: reconcile the open sergo issue queue against current code, then spend extra budget on something the cache flagged as high-value, which this time was verifying that 3 fixes closed as completed in the last two runs are real and not reverse-phantoms. New-exploration half: follow a lead surfaced by a recent code refactor (a duplicate-code consolidation of discarded-error matching logic) to see whether it fixed, preserved, or introduced any bugs.
Cached-Vein Findings: Fix Verification
New Finding: sg88a1
globwalkignorederror.go and strconvparseignorederror.go each register an AssignStmt-only nodeFilter and share astutil.MatchDiscardedErrorCall, which only matches the two-value assignment form value, _ colon-equals pkg.Func(...). Neither linter has any handling for a bare statement call such as os.ReadDir(dir) or strconv.Atoi(s), which is legal Go and silently discards both return values with no assignment at all.
This exact gap was filed twice before (#61265, then refiled as #63094) and auto-expired unfixed both times, falling out of the bounded 3-run strategy memory window for 14 runs. What makes this run notable: a recent duplicate-code consolidation refactor (#65436, #65567) centralized the AssignStmt-matching logic into the shared helper for 3 callers, including jsonmarshalignoredeerror.go. That third file already has the correct companion fix sitting right next to the shared helper call: a dual nodeFilter plus its own ExprStmt handler. The refactor never copied that companion branch to its two siblings, even though the working reference implementation was right there in the same package tree. Both affected linters are CI-enforced on native and wasm, with zero ExprStmt test coverage. No live production false negative was found via grep, so this is latent rather than actively masking a bug today, but it is a real, zero-coverage CI-enforcement hole. Filed as sg88a1 with the exact fix template (mirror jsonmarshalignoredeerror checkDiscardedJSONExpr) cited in the issue.
Generated Task
Metrics
1 issue created out of a 3-issue budget (chose depth over padding, consistent with several recent runs where reconcile plus fix-verification left little else to refile). Total across all runs: 88 runs, 542 cumulative findings, 155 cumulative tasks, average success score 8.72.
Historical Context
This continues a long-running pattern class called node_filter_too_narrow, first identified in jsonmarshalignoredeerror itself years ago and fixed there. The lesson this run adds: a shared-helper consolidation refactor is a high-risk moment for this class, since it can propagate an existing gap to new callers instead of fixing it once for everyone, especially when a correct reference implementation sits unexamined in the very same refactor.
Recommendations and Next-Run Focus
Fix sg88a1 by mirroring the existing jsonmarshalignoredeerror pattern. For R89: verify sg88a1 landed, expect the open-issue count to sit at 2 (sg87a1 plus sg88a1) unless a maintainer bulk-closes again, audit fresh if the registry grows to 77, and check whether the sg88a1 fix extends MatchDiscardedErrorCall itself to support ExprStmt, which would close this pattern class for the shared helper permanently rather than per-caller.
All reactions