[sergo] Sergo Report: DELTA-72to73-newlinter-audit(uncheckedsliceindex)+reverse-phantom-refile(bufioscannererunchecked) - 2026-09-22 #62542
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by Sergo - Serena Go Expert. A newer discussion is available at Discussion #62863. |
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.
Sergo Report: newlinter-audit(uncheckedsliceindex) + reverse-phantom-refile(bufioscannererunchecked) — 2026-09-22
Executive summary
Run R74. The linter registry grew 72->73 with a new linter (uncheckedsliceindex, PR #62408). First-ever audit found a systemic Ident-only equality bug that defeats bounds-check and loop-safety recognition for any struct-field slice or string base, confirmed with 2 live production false-positive sites. Separately, the 7th reverse-phantom-reconcile instance was caught: issue #60738 (bufioscannererunchecked, filed at run R66) auto-expired to closed/not_planned with the underlying bug still 100 percent present, so it was refiled with fresh evidence. 2 new issues created this run, both deduplicated via gh api search before filing.
Tool updates
Strategy: 50/50 split
Findings
1. uncheckedsliceindex: selector-based bases defeat all safety recognition (new issue)
sameExpr (pkg/linters/unchecked-slice-index/uncheckedsliceindex.go:366-371) requires both compared expressions to reduce to a bare *ast.Ident. Every safety check built on top of it, isLenOf, isInRangeLoop, isInBoundedForLoop, and writesObjects, inherits this limitation. Any base that is a selector expression (obj.Field) can never be matched back to its own len() bound, so a struct-field slice or string index is always reported as unchecked, even when properly guarded.
Confirmed live production false positives:
Not yet CI-enforced, but this is a foundational gap rather than an edge case, and it will generate broad noise the moment the linter is enabled, since its own testdata never indexes anything but bare local variables.
2. bufioscannererunchecked: block-scope Err() gap, 7th reverse-phantom (refiled)
Issue #60738 (filed at run R66) auto-expired to closed/not_planned on 2026-09-21 with zero code change. hasScannerErrCheck (bufioscannererunchecked.go:72-98) still only searches for a trailing scanner.Err() call within the same statement slice as the loop, so an Err() check placed in an enclosing block (after an if/for/switch wrapping the scan loop) remains invisible. This is the 7th time this project has seen an issue auto-expire while the underlying defect was never touched.
Generated tasks (2)
Metrics
Historical context
This is run 74 of a continuing series. 6 prior reverse-phantom instances (nolint space-prefix, the 4-linter main-guard gap, manualmutexunlock selector-collapse, slicemakezerolength var-vs-make, and bufferresetbeforereuse per-block-state) share the same root pattern: an issue auto-expires and closes as not_planned while the code defect is never addressed. #60738 is the 7th. The new ident_only_equality_gap pattern class is distinct from the previously catalogued paren_unwrap_gap: that class is about missing ParenExpr unwrapping before an otherwise-adequate type assertion, while this one is about an equality helper refusing to handle anything but a bare identifier, even after full unwrapping.
Recommendations and next-run focus
References:
Warning
Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
api.anthropic.comTo allow these domains, add them to the
network.allowedlist in your workflow frontmatter:See Network Configuration for more information.
All reactions