Skip to content

Clear what CI found the first time it ran - #3

Merged
abyssmemes merged 2 commits into
mainfrom
test/ci-followups
Jul 31, 2026
Merged

Clear what CI found the first time it ran#3
abyssmemes merged 2 commits into
mainfrom
test/ci-followups

Conversation

@abyssmemes

Copy link
Copy Markdown
Collaborator

The gates added in sprint 4 ran for the first time on the sprint-5 merge and
failed. Everything here is what they found, plus the two ways the gates
themselves were wrong.

Dependencies

govulncheck reported 22 reachable vulnerabilities across 8 modules
reachable meaning it found a call path from this code, not merely a version in
go.mod. Ten were in x/crypto, which the server uses for password hashing and
SSH. Upgrading x/crypto, x/text, go-git, go-billy, lego, goldmark,
circl and grpc takes it to zero.

Two Windows failures, both in tests rather than code

  • TestTheFirstRunIsSilent left its background refresh running and returned, so
    the goroutine wrote into a directory the test framework was removing. Windows
    reports that; Unix hides it. The same mistake was fixed in the neighbouring
    test last sprint and missed here.
  • TestAKeyRoundTripsBackToItsPath asserted a backslash survives an S3 key
    round trip. It does not and should not: CleanPath treats a backslash as a
    separator on every OS, reached through filepath.ToSlash, which only rewrites
    on Windows. The case encoded a Unix-only assumption.

The gates themselves

golangci-lint was pinned to v1.62, whose binary is built with Go 1.23 and
refuses to load a module targeting 1.25. It could never have passed — the local
run that suggested otherwise used a newer binary than CI installs. Migrated to
v2 and the v2 config schema.

That migration is not a rename: in v2 staticcheck absorbs stylecheck, so
checks: ["all"] would pull in naming opinions. The setting is dropped and the
defaults used. The five findings the defaults report are fixed rather than
excluded
— De Morgan on a character-class test, four WriteString(Sprintf)
that are Fprintf, and a bare 502 that is http.StatusBadGateway.

Verified

All three OS matrices, integration, analysis and lint green on this branch.

edward lugovtsov and others added 2 commits July 31, 2026 12:41
Three things, all surfaced by gates added last sprint and none of them visible
before.

govulncheck reported 22 reachable vulnerabilities across 8 modules — reachable
meaning it found a call path from this code, not merely a version in go.mod. Ten
were in x/crypto, which the server uses for password hashing and SSH. Upgrading
x/crypto, x/text, go-git, go-billy, lego, goldmark, circl and grpc takes it to
zero. Two remain in modules that are required but never called, which
govulncheck reports separately and does not fail on.

The gate found these on its first run. They were there the whole time.

Two Windows failures, both in tests I wrote rather than in the code:

TestTheFirstRunIsSilent left the background refresh running and returned, so the
goroutine wrote its state file into a directory the test framework was already
removing. Windows reports that as "the directory is not empty"; Unix hides it.
The same mistake was fixed in the neighbouring test last sprint and missed here.

TestAKeyRoundTripsBackToItsPath asserted that a backslash survives a round trip
through an S3 key. It does not, and should not: CleanPath treats a backslash as
a separator on every OS so a path is judged identically wherever a server, a
client or a shared backend sees it, and sanitizePath reaches that through
filepath.ToSlash — which only rewrites on Windows. The case encoded a Unix-only
assumption. Removed, with the reasoning, rather than made conditional.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two CI failures, neither about the code.

golangci-lint was pinned to v1.62, whose binary is built with Go 1.23. It
refuses to load a module targeting 1.25 and says so plainly — "the Go language
version used to build golangci-lint is lower than the targeted Go version" — so
the gate added last sprint could never have passed, and the local run that
convinced me otherwise was a newer binary than the one CI installs. v2 with the
v2 config schema.

The migration is not a rename. In v2 staticcheck absorbs stylecheck, so
checks: ["all"] would pull in naming and comment-formatting opinions; the
setting is dropped and the defaults used, because a gate that argues about taste
is a gate somebody turns off. The five findings the new default reports are
fixed rather than excluded: De Morgan on a character-class test, four
WriteString(Sprintf) that are Fprintf, and a bare 502 that is
http.StatusBadGateway.

The control plane pinned Go with go-version-file: go.mod, which setup-go honours
literally — go.mod says 1.25.0, and the standard-library CVEs its vulnerability
check reports are fixed in 1.25.10 through 1.25.12. The gate was telling the
truth about a toolchain nobody meant to pin. It now takes the newest patch of
that line, the way contextd already did.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@abyssmemes
abyssmemes merged commit ca7705c into main Jul 31, 2026
13 checks passed
@abyssmemes
abyssmemes deleted the test/ci-followups branch July 31, 2026 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant