Skip to content

build: upgrade Go toolchain to 1.27 - #1946

Open
sylr wants to merge 1 commit into
Kpa-clawbot:masterfrom
sylr:feat/upgrade-go-1.27
Open

build: upgrade Go toolchain to 1.27#1946
sylr wants to merge 1 commit into
Kpa-clawbot:masterfrom
sylr:feat/upgrade-go-1.27

Conversation

@sylr

@sylr sylr commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Bumps the Go toolchain used to build/test to 1.27: golang:1.27-alpine in Dockerfile and Dockerfile.go, and go-version: '1.27' in the three actions/setup-go steps in .github/workflows/deploy.yml.
  • Each module's go.mod go directive is intentionally left at 1.22 — no 1.27-only language features are being adopted, and a 1.27 toolchain builds a go 1.22-declared module without issue.

Test plan

  • go build ./... + go vet ./... for all 13 modules (cmd/server, cmd/ingestor, cmd/migrate, cmd/decrypt, 10 internal/* packages) under Go 1.27.0
  • go test ./... passes for cmd/server, cmd/ingestor, cmd/migrate, cmd/decrypt
  • docker build against the new golang:1.27-alpine base (Docker wasn't available in the sandbox this change was prepared in — needs a check in CI or locally)

Bumps the Go toolchain used to build and test the project, without
raising each module's go.mod language floor (still go 1.22) since no
1.27-only language features are being adopted.

Constraint: go.mod `go` directives intentionally left at 1.22 — a 1.27
toolchain builds a go-1.22-declared module without issue, and this
avoids forcing a language-version bump alongside a toolchain bump.
Confidence: high
Scope-risk: narrow
Not-tested: docker build against the new golang:1.27-alpine base image
(Docker was unavailable in the sandbox that produced this change)
@sylr
sylr force-pushed the feat/upgrade-go-1.27 branch from 6541bc0 to 421806b Compare September 3, 2026 12:12
efiten added a commit that referenced this pull request Sep 3, 2026
Release notes for the first tag since `v3.9.2` on 2026-06-13. **111
commits**, and no auto-generated coverage bumps fall in this range, so
all 111 are substantive.

Nothing here changes behaviour. It is `docs/release-notes/v3.10.0.md`
plus a `CHANGELOG.md` section.

## Verification

The header promises that every bullet ends with a SHA you can `git
show`. That is checked mechanically rather than trusted: all **69**
references were confirmed to point at a commit that exists and whose
subject line contains the issue or PR number cited beside it. Zero
mismatches.

## Two things operators need, and both are silent failures

The urgency line leads with the first one on purpose.

1. **CARTO requires an API key** on its raster basemaps since 2026-08.
Without one every tile is served watermarked with HTTP 200. Nothing
errors, no healthcheck fires, and the only way to notice is to look at a
tile. Anyone upgrading needs to set `map.tiles.providers.carto.key`.
2. **`pathTrust.minHashBytesForMapping` ships at 1**, which is the
existing behaviour, so an upgrade changes nothing on its own. The note
states what raising it to 2 would actually cost, with numbers from a
live instance (56% of path-hop observations are 1-byte, 41% of repeaters
use a 1-byte hash), because there is no UI to undo it.

The relay `last_seen` fix is quantified the same way rather than
described as "improved": for repeaters that relayed within the last
hour, the gap between `last_relayed` and `last_seen` drops from a median
of 12,062 s to 193 s, and the share more than five minutes behind falls
from 96% to 39%.

## A theme worth naming

Three of the highlights are the same defect in three places: something
is operable before its own setup has finished. The Live view toggles are
inert for about 100 ms after paint, the colour picker's deferred focus
undid arrow-key navigation so Enter assigned the wrong colour, and an
analytics theme-refresh discarded the filter you had just applied. All
three were first written off as flaky tests, twice by me. Each is now
fixed with a regression test that fails on the previous commit.

## Sequencing

This should land, and the `v3.10.0` tag be cut, **before** the Go 1.27
upgrade in #1946. A toolchain bump changes the compiler, the runtime and
`gofmt` for everything at once; landing it on top of 111 unpublished
commits means a later regression cannot be separated from the toolchain.
#1946 itself says no 1.27-only features are being adopted, so there is
no cost to waiting one release. A tag first also gives a known-good
bisect point.

## Not done

The CHANGELOG has no `3.9.2` section and did not have one before this
change. I left that gap alone rather than reconstructing it
retroactively.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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