Skip to content

chore: bump Go 1.27.3 to clear GO-2026-6809 - #331

Merged
ben-s-pull-request-reviewer[bot] merged 1 commit into
masterfrom
chore/go-1.27.3
Oct 21, 2026
Merged

ben-s-pull-request-reviewer[bot] merged 1 commit into
masterfrom
chore/go-1.27.3

Conversation

@bborbe

@bborbe bborbe commented Oct 21, 2026

Copy link
Copy Markdown
Owner

What

Bumps the go directive in go.mod from 1.27.2 to 1.27.3. One line, no dependency changes.

Why

make vulncheck fails on GO-2026-6809 — stdlib crypto/x509, "Distrust compromised intermediate certificates in crypto/x509", fixed in Go 1.27.3.

Because test is a required status check on master, 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 SHA b60c6a3; the advisory database gained the entry since, so the repo is wedged for all work.

The automated github-update-go-agent task for this repo (Update Go bborbe-vault-cli b60c6a3, current_go: 1.27.2, latest_go: 1.27.3) cannot deliver this bump: its precommit gate fails permanently with 7 returns error when writing to read-only directory / invalid path failures in pkg/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-Root work. This PR only moves the directive so the repo can build and merge again.

Verification

  • make precommit green locally: all Go suites pass, golangci-lint 0 issues, go vet clean, govulncheck reports "No unignored vulnerabilities found", osv-scanner 0 packages affected, trivy fs 0 vulnerabilities, CHANGELOG structure OK.
  • Shape matches the existing precedent d5c1f72 Update Go to 1.27.1, which also touched go.mod alone. A directive-only bump carries no CHANGELOG bullet; the deps-only bump ce32b22 added one because it changed dependencies too.

Not in scope

  • The agent's root-in-container precommit gate (Run the update-go Agent as Non-Root).
  • Any dependency bump.

@bborbe
bborbe marked this pull request as ready for review October 21, 2026 20:18
@ben-s-pull-request-reviewer ben-s-pull-request-reviewer Bot added the auto-merge Opts the PR into GitHub-native auto-merge (watcher arms EnableAutoMerge) label Oct 21, 2026

@ben-s-pull-request-reviewer ben-s-pull-request-reviewer Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{
  "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."
    }
  ]
}

@ben-s-pull-request-reviewer ben-s-pull-request-reviewer Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{
  "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."
    }
  ]
}

@ben-s-pull-request-reviewer
ben-s-pull-request-reviewer Bot merged commit d2ba08c into master Oct 21, 2026
6 checks passed
@ben-s-pull-request-reviewer
ben-s-pull-request-reviewer Bot deleted the chore/go-1.27.3 branch October 21, 2026 21:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto-merge Opts the PR into GitHub-native auto-merge (watcher arms EnableAutoMerge)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant