[sergo] Sergo Report: MAJOR-SERENA-TOOLSET-OVERHAUL+registry-refactor+coverage-gate-position-audit - 2026-08-16 #53032
Replies: 0 comments
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
Run R61 (2026-08-16) — strategy: MAJOR-SERENA-TOOLSET-OVERHAUL(23→24, LSP-native) + registry-refactor(main.go→registry.go) + DELTA-43to65(22 new linters) + coverage-gate-position-audit.
This run followed a large (~5 week / ~40 run) gap in this memory's tracking since the last recorded run (2026-07-08). Both the Serena tool surface and the linter registry structure changed materially in that gap. One new issue filed: mapclearloop coverage-gate position bug (
aw_sg61a1).Key findings
find_declaration,find_implementations,get_diagnostics_for_file,open_dashboard,rename_memory,replace_in_files,safe_delete_symbol. Removedcheck_onboarding_performed,find_file,list_dir, and all threethink_about_*reflection tools.get_diagnostics_for_filecould not be used this run (gonot onPATHin this sandbox → LSP unavailable) — not treated as blocking since Grep/Read covered the same ground.cmd/linters/main.gois now a thinmultichecker.Main(linters.All()...)wrapper. The real source of truth ispkg/linters/registry.go(var allAnalyzers). The old detector (grep -c Analyzer main.go) is dead; the new one isgrep -c '\.Analyzer,' pkg/linters/registry.gocompared againstdoc.go's header count — both read 65 this run, in sync.gh apisweep oflabels=sergoissues showed nearly all of that growth already individually audited, filed, and closed by intervening runs.pkg/linters/mapclearloop/mapclearloop.go:86gates onrangeStmt.Pos()— thefor-header position — instead of a position inside the loop body. Go's coverage instrumentation counts the body separately from the header, so this gate answers "was the loop entered" rather than "did the body run," defeating the stated intent of ADR-51573 for this specific linter. All 12 sibling coverage-gated linters were checked and use a correct in-body position.mapdeletecheck,nilctxpassed,packagelevelmutableslicemap,bytesbufferstring,bytescomparestring,ioutildeprecated,logfatallibrary.#52309/#52566, thecoverage.findProfilemodule-prefix path-matching bug — fix confirmed present in currentcoverage.go.Detail: strategy split, evidence, and fix suggestion
Strategy split: this run leaned toward exploration (new Serena toolset, new registry structure, 22 unaudited linters) rather than reuse of a cached-proven strategy, since the underlying tooling and registry had changed enough that prior cached approaches needed re-validation first.
mapclearloop evidence (
pkg/linters/mapclearloop/mapclearloop.go:86):For the codebase's standard gofmt multi-line style:
the
forline is reached once per loop entry regardless of whethermis empty, while the body's hit count is tracked by a separate coverage block starting atdelete(m, k). Suggested fix: query the hit count atrangeStmt.Body.List[0].Pos()(the body statement already validated bymatchDeleteBody) instead, plus a regression test mirroringcoverage_test.go'sTestMultiBlockProfileLookupwith distinct header/body hit counts.Also probed and ruled out: exact-type-param vs
Underlying()-match assignability bugs (the class behind the historicalwritebytestringbug) inbytesbufferstring/bytescomparestring/mapdeletecheck/mapclearloop— all clean, since[]byteas an unnamed literal type doesn't hit the named-type assignability trap thatstring(a named predeclared type) does.Deferred, lower-confidence lead (not filed):
coverage.go'shitCount()is column-blind — for a query line, it matches any covered block whose[StartLine, EndLine]contains that line and returns the last such block by slice order, without checking columns. This could pick the wrong block's count on a line with multiple non-overlapping blocks (e.g. compact single-line if/else). Flagged as a next-run probe target rather than filed, since a concrete repro wasn't constructed this run.Metrics & historical context
sergo-labeled issues were closed prior to this run except one unrelated stale probe issue.Next-run focus
aw_sg61a1mapclearloop fix lands (body-position fix + regression test).coverage.go'shitCount()column-blindness with a concrete same-line multi-block repro.grep -c '\.Analyzer,' pkg/linters/registry.govsdoc.goheader (registry.go is now canonical, notmain.go).References:
aw_sg61a1(filed this run, see Key findings above)All reactions