[sergo] Sergo Report: Registry-Jump-Reconcile-EnforceReadiness - 2026-08-04 #50179
Closed
Replies: 1 comment
|
This discussion was automatically closed because it expired on 2026-08-05T05:03:47.966Z.
|
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.
Run: §30878629010
Executive summary
The custom-linter registry jumped from 43 → 62 analyzers since the last recorded baseline (R60, 2026-07-08) — a bigger gap than any single prior run, and the registry mechanism itself was refactored along the way. All previously-filed
sergoissues are closed, including for the two newest linters. This run reconciled that history, confirmed several prior fixes actually landed in code (not just closed-without-action), and found that 23 of the 62 registered linters are still absent from CI enforcement. One high-confidence batched issue was filed covering 4 of those 23 that are demonstrably clean and ready to enforce today.Tool & infrastructure changes
cmd/linters/main.gono longer enumerates analyzers individually — it now callslinters.All()from the newpkg/linters/registry.go. The old detection method (grep -c Analyzer main.go) is dead; the new source of truth is thedoc.gobullet count cross-checked against theregistry.goarray (both agree at 62, no doc-drift this run).Strategy: 50/50 split
sergo-labeled issue history viagh apirather than trusting local memory files alone.Findings
Reconciliation: zero open sergo issues, prior fixes verified landed
gh api repos/github/gh-aw/issues?labels=sergo&state=openreturned zero results — every issue up to and including #49902 (uncheckedflushreturnnode-filter gap) and #49901 (walkfuncerrshadowmigration debt) is closed. Spot-checked that closure reflects real fixes, not just closure:writebytestring:isExactStringcheck present, wraps non-exact-string args withstring(s)— sg60a1 fix landed.bytescomparestring: message no longer claims allocation; now "written the long way" — bytescomparestring (new 44th linter): the "allocates" premise is inaccurate under gc — string(a) == string(b) does NOT allocate [Content truncated due to length] #44484 landed.nilctxpassed:call.Ellipsis.IsValid()guard present — nilctxpassed: spread call f(nil...) to a variadic context.Context param is a false positive — nil variadic slice misreported as [Content truncated due to length] #45903 variadic-spread false positive fixed.stringbytesroundtrip:[]byte(string(b))arm now correctly labeled a "wasteful two-copy clone", not a false "redundant round-trip" — stringbytesroundtrip: the []byte(string(b)) arm mislabels the defensive-copy idiom as a "redundant round-trip" — a false-positiv [Content truncated due to length] #47704 fixed.hardcodedfilepath: format-verb regex now includes%x %t %c %g— hardcodedfilepath: hasFormatVerb verb-set too narrow — format-template paths using %x/%t/%c/%g escape exclusion (latent FP) #42174 fixed.logfatallibrary/rawloginlib: function sets (Fatal*vsPrint*/Panic*) confirmed non-overlapping — logfatallibrary duplicates the already-CI-enforced rawloginlib — its entire detection surface (log.Fatal/Fatalf/Fatalln in libra [Content truncated due to length] #45379 resolved by design, not just closed.walkfuncerrshadowis already in the CILINTER_FLAGSlist, which corroborates that its migration debt (walkfuncerrshadow (61st linter): 10 production sites still shadow err/err — migration from ADR-49633 not done #49901: "10 sites still shadow err") must be resolved — otherwise CI would be failing on every build.Non-obvious note for future runs: the local strategy history (
sergo-strategies.jsonl) only had 3 entries (R58–R60) despite issue numbers jumping from #44187 to #49902 — clear evidence 15+ runs happened between recorded entries. The aggregatesergo-stats.json"last_run" date was similarly stale. Future runs should trustgh apiissue history over local run counters when they disagree.Enforce-readiness gap: 39/62 linters enforced in CI
.github/workflows/cgo.yml'slint-gojob enforces 39 linters viaLINTER_FLAGS(both the default andGOOS=js GOARCH=wasmsteps). 23 registered linters are absent from that list. Of those 23, four were verified this run to be fully wired (type-resolved detection,internal/nolint+internal/filechecksupport) with their previously-known bugs fixed and zero current production violations:uncheckedflushreturn(62nd, newest)DeferStmtin node filter.Flush()sites, both check the error)bytescomparestringnilctxpassedstringbytesroundtripFiled as a single batched issue (matching this repo's established pattern for grouping enforce-readiness findings).
Audited clean, no issue filed
goroutinemissingrecover: correctly refuses to descend into nestedFuncLits when searching for a top-leveldefer/recover()guard, and verifiesrecoverviatypes.Builtin(not just identifier name) to avoid a user-shadowed-function false positive — textbook-correct scope handling.ctxbackground/deferinloop: both respect theFuncLitscope boundary correctly per the establishedscope_boundary_funclitpattern from prior runs.Generated task
1 issue filed (see below) covering 4 linters as one enforce-readiness task — CI config change only, no source edits required, small effort.
Issues created
uncheckedflushreturn,bytescomparestring,nilctxpassed,stringbytesroundtrip)Metrics
Next-run focus (R62)
Probe the remaining 19 unenforced-and-unaudited linters for enforce-readiness or latent bugs:
appendbytestring,excessivefuncparams,fileclosenotdeferred,httprespbodyclose,httpstatuscode,largefunc,lenstringzero,seenmapbool,sortslice,sprintferrdot,sprintferrorsnew,ssljson,stringsconcatloop,timesleepnocontext,errorfwrapv,errormessage. Also verify the 4 flags from sg61a1 actually landed incgo.yml.References:
All reactions