Skip to content

chore(deps): Go 1.27, anthropic/openai SDKs, go-keyring - #90

Merged
0xMMA merged 5 commits into
mainfrom
chore/go-deps
Oct 4, 2026
Merged

0xMMA merged 5 commits into
mainfrom
chore/go-deps

Conversation

@0xMMA

@0xMMA 0xMMA commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Go toolchain and direct Go module bumps. Wails is deliberately untouched (separate PR, stacked on this one).

Versions

from to
Go (go.mod, CI go-version, CLAUDE.md, README) 1.26 1.27
anthropic-sdk-go v1.73.0 v1.75.0
openai-go/v3 v3.61.0 v3.66.0
zalando/go-keyring v0.2.6 v0.2.8

go mod tidy also moved x/crypto, x/net and x/text, pulled in coder/websocket (openai-go links it now, so the binary grows slightly), and dropped shellescape.

Behaviour pinned: certificate store

Go 1.27 changes a default: SSL_CERT_FILE / SSL_CERT_DIR now replace the Windows/macOS certificate store. A stale variable would break every provider call and the updater, and a corporate root CA that lives only in the store would stop being trusted. godebug x509sslcertoverrideplatform=0 in go.mod keeps the pre-1.27 behaviour. TestCertStoreOverrideStaysOff fails if the line goes; that was checked by removing it.

Open for Michael: should "the Windows store wins over SSL_CERT_FILE" be a permanent product rule? Today it simply keeps status quo.

Other Go 1.27 GODEBUG changes: only tracebacklabels (runtime tracebacks, harmless). The removed settings were already on their new defaults at go 1.26.

SDK audit — nothing new leaks

  • anthropic: client.go, option/, requestconfig, apierror are byte-identical across the range.
  • openai reads the same env vars. New ones only appear in foundry/, lib/environments and tests.
  • Retry/timeout code is unchanged.
  • A wire dump through claude/openai/ollama with every SDK env var set gave identical headers and query on main and here. The existing leak tests pass.

Windows paths (stdlib diff 1.26.1 → 1.27)

  • syscall/exec_windows.go, os/exec_windows.go and lp_windows.go are byte-identical, so HideWindow spawning of the Claude Code CLI is unaffected.
  • LazyProc.Call semantics are unchanged for clipboard, shortcut and updater.
  • go-keyring: keyring_windows.go is byte-identical and wincred is unchanged, so stored API keys cannot be orphaned.

govulncheck

  • Before: 22 findings (16 stdlib, 6 go-git/go-billy). After: 8, all go-git 5.16.4 / go-billy 5.7.0 via Wails, unchanged from main.
  • Not reachable in shipped builds. The only call path is Wails' application_debug.go (//go:build !production). With -tags production, which every CI and release build uses, Linux and Windows report 0 affected.

Developer machines (README updated)

  • go install builds a tool with the Go version the tool declares. A wire or wails3 built on Go 1.26 therefore refuses this module ("package requires newer Go version go1.27"); wire gen hard-fails. Reinstall both with Go ≥ 1.27, or run GOTOOLCHAIN=go1.27.1 go install ….
  • README pinned wails3@latest, which is a beta CLI today against an alpha module. It is now pinned to go.mod's version.
  • CI is unaffected: every wails3 install runs after setup-go 1.27, and no job installs wire.

Verification

  • go vet ./... and go vet -tags eval ./internal/... clean.
  • go test -race ./internal/... passes.
  • go build passes, including GOOS=windows, pure Go.
  • wails3 alpha.72 rebuilt with 1.27: generate bindings shows no diff. wire diff: no drift.
  • npm test 198/198.
  • One live Anthropic call through the CLI with the 1.27 binary. OpenAI was not called live: no key on the machine.
  • CI: build-linux, build-windows, e2e, test all green.

Review

Implementer's review-pr round (found the x509 default), then an independent Opus review with review-pr fork. The independent review found no defects in shipped behaviour. Its findings were this body (previously pasted from the wrong PR), the tool-install trap, and the missing guard test. All three are addressed.

Conflict check vs #31: git merge-tree clean.

The test fails if the godebug line leaves go.mod (checked by removing it). README: wails3 was installed @latest, which today is a beta CLI against an alpha module; pin it to go.mod's version, and say that wails3/wire must be built with Go >= 1.27.
@0xMMA
0xMMA merged commit ddb645f into main Oct 4, 2026
4 checks passed
0xMMA added a commit that referenced this pull request Oct 4, 2026
#90 (the base of this branch) was squash-merged into main together with
#89, #91 and #92. Conflicts resolved with main's content, then only the
Wails parts re-applied:

- go.mod/go.sum: main's, then go get wails/v3@v3.0.0-beta.25 + tidy
  (Go 1.27 directive and the x509 godebug line kept)
- package.json/lock: main's cooldown-resolved lock, only
  @wailsio/runtime moved to 3.0.0-beta.25 (exact)
- CLAUDE.md, README.md, docs/roadmap.md: main's text plus the
  beta.25 / -tags gtk3 / GTK3 decision lines

Bindings regenerated with wails3 v3.0.0-beta.25: no drift.
0xMMA added a commit that referenced this pull request Oct 10, 2026
…#95)

* chore(deps): move the Go toolchain to 1.27

* chore(deps): bump anthropic, openai SDKs and go-keyring

* chore(deps): keep system cert store on Windows under Go 1.27

* docs(roadmap): record the bumped SDK versions

* test(llm): pin the x509 GODEBUG; README tool install notes

The test fails if the godebug line leaves go.mod (checked by removing it). README: wails3 was installed @latest, which today is a beta CLI against an alpha module; pin it to go.mod's version, and say that wails3/wire must be built with Go >= 1.27.

* chore(deps): move Wails to v3.0.0-beta.25 (Go and runtime)

The Go module and @wailsio/runtime move together to the same release,
and the runtime is now pinned exactly: it had drifted to alpha.79 on a
caret while the Go side sat on alpha.72.

No Go API change touches KeyLint and the regenerated bindings are
byte-identical. The bump also drops go-git/go-billy out of the build
graph, which clears the 8 govulncheck findings #90 left behind.

* fix(ci): wails3 beta.25 CLI and GTK4 + WebKitGTK 6.0 deps

Wails made GTK4 + WebKitGTK 6.0 the Linux default in alpha.93; the
GTK3 stack is now opt-in via -tags gtk3 and upstream removes it in
v3.1. Every job that compiles the Go code (tests, bindings drift,
Linux and Windows builds, release) now installs the GTK4 headers
instead of GTK3, and installs the wails3 CLI matching go.mod.

* fix(build): Linux packages depend on GTK4 and WebKitGTK 6.0

The binary now links libgtk-4 and libwebkitgtk-6.0, so the deb/rpm/arch
dependencies follow; values match the beta.25 nfpm template.

* docs: Wails beta.25, GTK4 build deps, E4 step 1 status

* chore(build): regenerate icons and .desktop with wails3 beta.25

The build task regenerates these on every run; with the beta.25 CLI
the output differs from the committed alpha.72 output (same ICO sizes,
new encoder; .desktop Name now keeps the product's casing), so the
first wails3 dev or task build left the tree dirty.

* fix(build): bind the dev server to 127.0.0.1 for wails3 dev

Since alpha.79 the Wails dev proxy dials a localhost dev server over
tcp4 only. ng serve on "localhost" can bind ::1 under Node 24, and
wails3 dev then showed a blank window with 'connection refused' in the
log. Reproduced on Linux before the change, gone after.

* docs(roadmap): link E4 step 1 to #95

* fix(ci): refresh apt lists before installing the GTK4 stack

cache-apt-pkgs only runs apt update under nektos/act. On a runner whose
lists are stale, the first GTK4 install 404'd on superseded glib and
gstreamer debs, the action carried on and cached an empty result, and
every later run restored that empty cache and failed at pkg-config.
The GTK3 set never hit this only because its cache predates the drift.

* fix(ci): fail at the apt step when GTK4 headers are missing

* docs: WebKitGTK 6.0 sandbox on Ubuntu 23.10+, review nits

* fix(build): keep Linux on GTK3 via the gtk3 build tag

Wails' default Linux stack is GTK4 + WebKitGTK 6.0, whose forced bwrap
sandbox aborts at start on stock Ubuntu 23.10+. Switching stacks breaks
the released Linux binary and its self-update, which is a product
decision this upgrade should not make implicitly.

Every Linux build, test, vet, bindings run and wails3 CLI install now
passes -tags gtk3 (the CLI's own cgo package is gtk3-tagged too, so no
GTK4 headers are needed anywhere). CI, release, the Linux Taskfile and
the nfpm dependencies are back on GTK3 / WebKit2GTK 4.1. The apt refresh
and the pkg-config presence check stay, now for the GTK3 packages.

* docs: gtk3 tag for Linux builds, GTK4 decision in roadmap

* fix(build): always prepend gtk3 to Linux build tags

A caller's EXTRA_TAGS replaced the gtk3 default and silently moved the
build to GTK4. gtk3 is now prepended in build:native and build:docker.

* fix(ci): catch untracked bindings and assert the GTK3 link

The drift check used git diff, which ignores untracked files, so a newly
registered service's bindings passed. It now fails on any git status
output under frontend/bindings.

The Linux builds in CI and release now fail unless the binary links
libgtk-3 and libwebkit2gtk-4.1, so a dropped gtk3 tag cannot ship.

* docs: gtk3 tag in eval-human.sh, ship command and roadmap

* docs(roadmap): Wails beta.28 is out, bump is a follow-up

---------

Co-authored-by: Michael <0xMMA@users.noreply.github.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