chore: adopt Go 1.27 - #672
Conversation
roborev: Combined Review (
|
Go 1.27 is now the supported build toolchain, so local, CI, release, container, and Nix builds need one consistent version and analyzer level. Adopt the Go 1.27 lint rewrites required by golangci-lint 2.13.1 so the repository does not carry suppressions or syntax that the pinned analyzer rejects. Generated with Codex (GPT-5) Co-authored-by: Codex <codex@openai.com>
Nix users received the Go 1.27 compiler with a language server, linter, and debugger from the older locked package set. That split left the development shell unable to guarantee support for the module's active Go version. Build compatible tool releases with the same pinned compiler. Keep Delve's test phase enabled, but skip its two generator checks because Go 1.27 rejects their versioned tool queries under the derivation's forced vendoring mode. Generated with Codex (GPT-5) Co-authored-by: Codex <codex@openai.com>
The base branch added this fixture after the Go 1.27 migration branch was created. Its explicit embedded token literal does not pass the migration's pinned modernize analyzer. Use promoted token fields so the rebased branch follows the same Go 1.27 literal form as the rest of the repository. Generated with Codex (GPT-5) Co-authored-by: Codex <codex@openai.com>
c3bb337 to
0896537
Compare
roborev: Combined Review (
|
|
looking |
Use the current stable driver for Go 1.27 compatibility. The prior release predates recent statement-close and SQLite amalgamation fixes. The Go 1.27 database/sql row-cleanup deadlock remains reproducible, so this dependency update is not the fix for that failure. Generated with Codex (GPT-5) Co-authored-by: Codex <codex@openai.com>
roborev: Combined Review (
|
Install golangci-lint through the versioned Make target and put its bin directory first in later CI steps so self-hosted runners cannot select a stale binary. Refresh the Nix module hash after the SQLite driver update.
roborev: Combined Review (
|
Capture the terminal row error when iteration ends and return that cached result to callers. This preserves SQL logging while avoiding the Go 1.27 database/sql close-mutex race caused by immediately acquiring the row read lock twice.
roborev: Combined Review (
|
|
i'm back looking at this |
The pull request workflow comes from the base branch, so it can install a golangci-lint release that predates Go 1.27 even when this branch pins a newer release. Make the CI target install and invoke its own pin at the Go toolchain's configured binary location. PostgreSQL reconciliation also allowed concurrent workers to collide while creating the same attachment occurrence or reject an event that a peer had already consumed. Serialize first writes for one attachment and accept the peer's durable cursor advance. Generated with Codex Co-authored-by: Codex <codex@openai.com>
roborev: Combined Review (
|
|
still grinding on this |
Concurrent SQLite reconciliation workers could read an old write-ahead log snapshot and then return a busy error when they tried to update occurrence or consumer state. That violates the reconciliation contract that duplicate work converges without exposing database contention to callers. Reserve SQLite's writer slot before either transaction reads mutable state. Each worker now reads after earlier writes commit, while PostgreSQL keeps its existing row and advisory lock behavior. Generated with Codex Co-authored-by: Codex <codex@openai.com>
roborev: Combined Review (
|
A lower-sequence reconciliation could keep eligible attachment metadata while a newer event removed its occurrence. It could then restore stale document search authority after the removal committed. Hold the backend-specific attachment fence across the authority read and the occurrence write. Eligible and ineligible outcomes now use the same transaction, so newer removal work cannot be overtaken. Generated with Codex Co-authored-by: Codex <codex@openai.com>
Move msgvault's supported build toolchain to Go 1.27.0 across the module, CI and release-derived setup, container builders, Nix packaging, and source-build documentation.
Pin golangci-lint 2.13.1, set its analyzer language level to Go 1.27, and adopt its
gomodguard_v2replacement. Apply the Go 1.27 modernization rewrites required by that pinned analyzer, including typederrors.Ascalls and promoted embedded fields. CI installs the linter through the versioned Make target and prepends its bin directory so self-hosted runners cannot select an older cached binary.The Nix development shell now builds gopls 0.23.0, gotools 0.44.0, golangci-lint 2.13.1, and Delve 1.27.1 with the same pinned Go 1.27.0 compiler. Delve retains its test phase but skips two generator checks whose versioned tool queries conflict with Go 1.27's forced vendoring behavior.
Update go-sqlite3 to v1.14.50, its current stable release, so the migration uses the maintained SQLite amalgamation and recent driver fixes. The driver update alone did not remove the Go 1.27
database/sqlclose-mutex deadlock: msgvault's logging wrapper consumedRows.Errat the end ofNext, then normal callers consumed it again. Capture the terminal row error once and return that cached result, preserving SQL logging without the second lock acquisition.Historical implementation plans remain unchanged because their older Go versions describe work at the time rather than active build support.
generated by a clanker