Repository navigation
chore: bump Go 1.27.3 to clear GO-2026-6809 - #331
Merged
Merged
Conversation
bborbe
marked this pull request as ready for review
October 21, 2026 20:18
Contributor
There was a problem hiding this comment.
{
"verdict": "approve",
"summary": "The diff is a single-line `go` directive bump from 1.27.2 to 1.27.3 in go.mod — no require-block or go.sum changes, no toolchain directive, and no other Go pin to move in lockstep (CI reads `go-version-file: go.mod`). GO-2026-6809 is confirmed fixed in Go 1.27.3 per the Go vulnerability database, and the required `test` check is green on head SHA 6a96df8. Selector mode: 9 candidate judgment rules, 2 applicable (both commit-message rules), 7 skipped, 0 mechanical findings, 0 files excluded by .reviewignore.",
"comments": [],
"concerns_addressed": [
{
"concern": "correctness: verify the diff is exactly one line, no stray edits to the require block, and go.sum is untouched",
"disposition": "addressed",
"detail": "`git diff origin/master...HEAD --stat` shows go.mod | 2 +- (1 insertion, 1 deletion); the hunk is only `go 1.27.2` → `go 1.27.3` at go.mod:3. go.sum is absent from the file list — no dependency changes."
},
{
"concern": "correctness: check whether go.mod carries a toolchain directive that would remain at 1.27.2",
"disposition": "not-an-issue",
"detail": "grep of go.mod shows no `toolchain` line at all. The `go 1.27.3` directive alone sets the minimum toolchain, so builds move to the patched release; CI's setup-go resolves `go-version-file: go.mod` to 1.27.3."
},
{
"concern": "correctness: check for other Go version pins that should move in lockstep (Dockerfile, CI workflows, .tool-versions, golangci) and confirm precedent d5c1f72 touched go.mod alone",
"disposition": "not-an-issue",
"detail": "No Dockerfile/.tool-versions/.go-version exists; .github/workflows/ci.yml:20 and release.yml:28 both use `go-version-file: go.mod`; .goreleaser.yaml, Makefile, tools.env, .golangci.yml contain no 1.27 pin. `git show --stat d5c1f72` confirms the precedent (\"Update Go to 1.27.1\") touched go.mod only, matching this PR's shape."
},
{
"concern": "security: confirm 1.27.3 is the release that fixes GO-2026-6809 and that the build actually uses it",
"disposition": "addressed",
"detail": "vuln.go.dev/ID/GO-2026-6809.json reports the crypto/x509 compromised-intermediate issue fixed in go1.27.3 (and go1.26.9), matching the PR body. GO-2026-6809 is not in .trivyignore, and CI's `test` job runs `make precommit` → `check` → vulncheck/osv-scanner/trivy, which passed on this SHA — so govulncheck no longer flags it. Skipped locally per selector mode (precommit skipped — CI covers lint+test)."
},
{
"concern": "tests: the required test check must be green in CI on this head SHA, not a prior SHA",
"disposition": "addressed",
"detail": "GitHub check-runs for head_sha 6a96df883d252784437d524a362a1b86e5b767c0 show `test` conclusion=success (run 39669096187), along with do-not-merge and unfinished-pipeline success; base sha matches origin/master b60c6a3."
}
]
}
Contributor
There was a problem hiding this comment.
{
"verdict": "approve",
"summary": "One-line toolchain bump (go.mod `go 1.27.2` → `go 1.27.3`) is correct and correctly wired: both CI workflows resolve the toolchain via `go-version-file: go.mod`, there is no `toolchain` directive or GOTOOLCHAIN override to defeat it, no Dockerfile/.tool-versions pin, no other go.mod, and the diff touches nothing else (go.sum needs no regeneration). One Should-Fix: the change adds no `## Unreleased` bullet, so the auto-release pipeline will not cut a release carrying the GO-2026-6809 fix until an unrelated change lands — traceability: 1 file reviewed, 0 excluded by .reviewignore, precommit skipped (selector mode, CI covers it), mechanical funnel 0 findings, 10 judgment candidates → 3 applicable (git-commit/feature-branch-no-tag, git-commit/imperative-mood, git-workflow/never-direct-commit-to-master, all pass) → 7 skipped.",
"comments": [
{
"file": "go.mod",
"line": 3,
"severity": "major",
"blocking": false,
"blocking_reason": "",
"message": "Should Fix (Important) — this PR changes a non-vendored file but adds no bullet under a `## Unreleased` heading in `CHANGELOG.md` (the file runs straight from the SemVer preamble into `## v0.177.0`). The repo's auto-release pipeline only emits a release task after a commit on `master` carries `## Unreleased` bullets (`docs/releasing-vault-cli.md:86`), so without one this Go 1.27.3 / GO-2026-6809 fix does not reach a tagged binary until some unrelated change lands with a bullet — and it is currently the only pending change. The cited precedent `d5c1f72` (Go 1.27.1, 2026-09-08) is the older case; the immediately preceding bump `ce32b22` (Go 1.27.2, 2026-10-09) added exactly the bullet this PR omits (`- chore: bump Go to 1.27.2 … to clear stdlib/x/net vulncheck advisories`). Add the analogous `- chore: bump Go to 1.27.3 to clear GO-2026-6809` line under `## Unreleased`. *(rule: `changelog/unreleased-entry-required`)*"
}
],
"concerns_addressed": [
{
"concern": "correctness: verify no toolchain directive elsewhere overrides the bump (toolchain line in go.mod, GOTOOLCHAIN=local in Makefile/CI, or .tool-versions)",
"disposition": "not-an-issue",
"detail": "go.mod has no `toolchain` directive (only `module` + `go 1.27.3`); grep for GOTOOLCHAIN/toolchain across Makefile and .github/workflows finds only an unrelated comment in check-unfinished-pipeline.yml; no .tool-versions, no Dockerfile, and `find -name go.mod` returns only the root module. The directive is authoritative."
},
{
"concern": "security: verify the build pipeline actually resolves the toolchain from go.mod (setup-go/go-version-file, Dockerfile Go image pin for a stale 1.27.2)",
"disposition": "not-an-issue",
"detail": ".github/workflows/ci.yml:20 and .github/workflows/release.yml:28 both use `actions/setup-go@v6` with `go-version-file: go.mod`, so the bump propagates to CI and to the release build automatically. No Dockerfile or other Go image pin exists in the repo."
},
{
"concern": "correctness: confirm repo tooling (golangci-lint, govulncheck, osv-scanner pins in tools.go/Makefile) parses 1.27.3 and does not choke on a patch-level directive",
"disposition": "not-an-issue",
"detail": "go.mod already carried the patch-level directive `go 1.27.2` before this change, so 1.27.3 introduces no new syntax for any parser. tools.env pins tool versions independently of the go directive (GOLANGCI_LINT v2.14.0, GOVULNCHECK v1.3.0, OSV_SCANNER v2.6.0); `make precommit` in CI exercises them."
},
{
"concern": "tests: no test changes in diff, as expected — confirm the required test status check builds under 1.27.3 and go.sum needs no regeneration",
"disposition": "not-an-issue",
"detail": "Diff is exactly 1 insertion / 1 deletion in go.mod; go.sum is untouched and a `go` directive change never affects it. CI's test job (setup-go from go.mod → `make precommit`, ubuntu-latest) is the verifier that builds and runs the suite under 1.27.3."
},
{
"concern": "correctness: PR asserts a directive-only bump carries no CHANGELOG bullet, citing precedent d5c1f72 — verify against repo convention and release tooling",
"disposition": "addressed",
"detail": "Assertion does not hold: `changelog/unreleased-entry-required` fires (CHANGELOG.md exists, a non-vendored file changed, and there is no `## Unreleased` heading at all), and `docs/releasing-vault-cli.md:86` gates the release watcher on `## Unreleased` bullets. The more recent comparable precedent ce32b22 (Go 1.27.2) added one. Reported as a Should Fix comment on go.mod:3."
},
{
"concern": "security: confirm the documented known-broken path (update-go agent running as root, precommit read-only-dir assertions in pkg/storage) is environmental, not a real defect being masked",
"disposition": "not-an-issue",
"detail": "The read-only assertions are chmod-based tests (pkg/storage/markdown_test.go:167, objective_test.go, vision_test.go) that only fail when the suite runs as root; GitHub Actions ubuntu-latest runs as the non-root `runner` user, so CI exercises them correctly. Pre-existing and untouched by this diff — this PR does not need to change it."
}
]
}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Bumps the
godirective ingo.modfrom1.27.2to1.27.3. One line, no dependency changes.Why
make vulncheckfails onGO-2026-6809— stdlibcrypto/x509, "Distrust compromised intermediate certificates in crypto/x509", fixed in Go 1.27.3.Because
testis a required status check onmaster, every PR against this repo fails CI regardless of its own diff, and no PR can merge. Master's last green run was 2026-10-20T18:58 on the identical SHAb60c6a3; the advisory database gained the entry since, so the repo is wedged for all work.The automated
github-update-go-agenttask for this repo (Update Go bborbe-vault-cli b60c6a3,current_go: 1.27.2,latest_go: 1.27.3) cannot deliver this bump: itsprecommitgate fails permanently with 7returns error when writing to read-only directory/invalid pathfailures inpkg/storage. Those fail because the agent runs as root in its container — root can write to a read-only directory, so the assertions never fire. The gate passes in CI and for a normal user, so the agent reports the target as broken and never retries at that HEAD (retry_count: 0).That root-in-container cause is not addressed here — it is owned by the
Run the update-go Agent as Non-Rootwork. This PR only moves the directive so the repo can build and merge again.Verification
make precommitgreen locally: all Go suites pass,golangci-lint0 issues,go vetclean,govulncheckreports "No unignored vulnerabilities found",osv-scanner0 packages affected,trivy fs0 vulnerabilities, CHANGELOG structure OK.d5c1f72 Update Go to 1.27.1, which also touchedgo.modalone. A directive-only bump carries no CHANGELOG bullet; the deps-only bumpce32b22added one because it changed dependencies too.Not in scope
precommitgate (Run the update-go Agent as Non-Root).