Repository navigation
probe 3: contributor + maintainer commits - #8
Merged
Merged
Conversation
quad341
pushed a commit
that referenced
this pull request
Oct 3, 2026
…de for the v2 allocator (gastownhall#6961) ## Summary Reconciler v2 slice P3-1. It extracts main's pool decision code so the v2 allocator can call it unchanged, and adds the two opt-in modes the allocator needs: bead-ID keying for the awake set, and a plan-only mode for the pool planner. Legacy calls every extraction in place and never sets either mode. **Zero behavior change.** The evidence: - **Verbatim moves.** `buildDemandTargets` (the demand pass's agent loop), `computeNamedSessionDemand` and `classifyOverlaySession` (overlay membership without template resolution) are moved out unchanged apart from their parameters and return structs; `classifyOverlaySession` turns the loop's `continue`s into returns of a verdict. `git diff --color-moved` shows only those edges as new lines. Frozen copies of the moved code (`pool_pieces_prerefactor_test.go`, from c3d461c) back randomized differential tests: 400 seeds each for demand targets, named demand and the overlay. The copies carry a "delete, don't update" header. - **Normalized awake-set differential.** `ComputeAwakeSet` is now the session-name wrapper of `computeAwakeSetKeyed`. It is compared exactly against the frozen pre-refactor algorithm on 20000 randomized inputs. No seeds are skipped (see the map-order finding below). - **140 awake-set fixtures through both keyings.** Every `compute_awake_set_test.go` fixture goes through `computeAwakeSetChecked`, which checks the name keying against the frozen copy and, when session names are unique, checks bead-ID keying against name keying row by row. - `classifyOverlaySession` takes `now` explicitly. Legacy passes `time.Now()` for each row, as before. - The existing suites are unchanged and green. ## Plan-only guarantees (`agentBuildParams.planOnly`; legacy never sets it) - Selection skips singleton identity normalization and returns the census row unchanged. It makes no store write (POOL-046 moves to the session key). - `verifiedPoolTriggerWorkDir` still runs the filesystem-free evidence checks first (worktree error, bead mismatch, store mismatch), then skips `worktree.Verify`. The create plan carries a copy of the worktree spec (`poolSessionCreatePlan.worktreeSpec`), so the v2 create effect can verify it and stamp `gc.work_dir`. - The dependency floor returns a create plan (`selectOrPlanDependencyPoolSessionBead`) instead of creating. - Template resolution, overlay staging, hook install, session-bead creates and trigger binds refuse with `errPlanOnlyEffect`. - The tests run planOnly against a harness that observes every effect channel: every store write (Create, Update, Close, Reopen, CloseAll, SetMetadata, SetMetadataBatch, SetLocalString, Tx, Delete, DepAdd, DepRemove), store reads, fsys calls, the city directory, `lookPath` and `worktree.Verify`. Each test has a legacy control proving the fixture reaches the effect. ## Bead-ID keying and its partial scope `awakeKeyBeadID` gives every row its own decision, so rows that share a `session_name` no longer collapse by slice order (BEHAVIORS POOL-082, #8). This is only a partial fix, and it is documented on `awakeKeyBeadID`: - work assigned by session name still matches every row carrying that name, so stale siblings of the live owner get `assigned-work`; - a configured named session resolves to the first row in slice order that claims its identity. The v2 caller (P3-5a) must exclude stale siblings and identity losers, or sort the census. That obligation is recorded in the P3 spec. `endpointKeyForAgent` computes `resolvedEndpointKey` from config alone: upstream first, then the provider for a non-`start_command` agent, then the row's provider. A fixture covers every shape. ## Finding on main: map-order nondeterminism in `ComputeAwakeSet` When rows of two scale_check templates share a session name, `ComputeAwakeSet`'s reason for that name is `scaled:demand` or `scaled:creating`, depending on Go map iteration order. `ShouldWake` and the key set are the same either way. This happens on main too, and it is inert in legacy. It shows up in about 10% of randomized inputs (1917 of 20000 seeds). For those inputs the differential maps `scaled:creating` to `scaled:demand` on both sides and then compares exactly. It no longer skips them. Bead-ID keying avoids the collision. This is tracked to close with the legacy path. ## Tests and the mutations they kill Each mutation was applied to a `git archive` copy, and the named test failed: | Test | Mutation | Result | |---|---|---| | `TestComputeAwakeSetMinActiveCountsAsleepRowWithAnotherWake` | `countMinActiveCovered` reads `desired[b.SessionName]` instead of `desired[key(b)]` | FAIL (gc-b woken `min-active` under bead-ID keying) | | same | drop the asleep-and-desired count | FAIL (name keying differs from pre-refactor) | | `TestComputeAwakeSetKeyedByIDNamedResolvesToIdentityRow` | `namedBead` re-resolves by session name under bead-ID keying | FAIL | | `TestComputeAwakeSetKeyedByIDUnresolvedNamedDesiresEveryRowWithItsName` | `desireName` stops at the first row | FAIL | | `TestPoolTriggerMetadataPlanOnlySkipsWorktreeVerify` | plan-only return moved above the bead/store checks | FAIL (bead mismatch and store mismatch return nil) | | `TestSelectOrPlanPoolSessionBeadPlanOnlyCarriesWorktreeSpec` | spec not put on the plan | FAIL | | same | the request's spec pointer aliased instead of copied | FAIL | The tests already on the branch cover the rest: `TestSelectOrPlanPoolSessionBeadPlanOnlyWritesNothing`, `TestDependencyFloorPlanOnlyReturnsPlanNoCreate`, `TestPlanOnlyBuildParamsRefuseEffects`, `TestComputeAwakeSetKeyedByIDKeepsRowsThatShareAName`, `TestEndpointKeyForAgentMatchesResolvedEndpointKey`, and the differentials. Local gates: gofmt, `go vet ./cmd/gc`, `go build ./...`, `-race` on the pool/demand/awake/desired/named/overlay/plan-only/dependency-floor tests, the full `cmd/gc` fast suite, `./scripts/...`, `./internal/testpolicy/...` (no ledger growth), golangci-lint 2.12.0 on the changed packages (0 issues), gazelle diff (BUILD.bazel up to date), and the pre-commit and pre-push hooks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
quad341
pushed a commit
that referenced
this pull request
Oct 26, 2026
…townhall#8291) Part of the Dolt 2.6.0 rollout that follows the eMudhra CA compromise (https://emudhra.we-have-a-problem.com/). Dolt 2.6.0 is the first Dolt release built with a Go toolchain (1.27.3) that distrusts the eight compromised eMudhra intermediates. This PR makes 2.6.0 Gas City's minimum Dolt, moves gascity to Go 1.27.3, and re-pins the rbe-west worker host to Go 1.27.3 and Dolt 2.6.0. **Stacked on gastownhall#8321** (golangci-lint v2.14.0, gofumpt v0.12.0, staticcheck v0.8.1). golangci-lint v2.12.0 cannot read Go 1.27 export data, so without gastownhall#8321 `Mac / quality` and `Mac regression summary` go red on this PR, and after a merge on every PR. This branch currently contains gastownhall#8321's four commits plus three of its own. Once gastownhall#8321 is squash-merged, I'll rebase this branch onto `main` and drop them; the golangci-lint pin then comes from `main`. gastownhall#8287 (the Dolt CLI and image pins) is merged as `5e10c84c2`. **Updated 2026-10-26 after the independent review** (gastownhall#8291 (comment)). The section "Review findings" below says what changed for each finding. ## What changed **Commit 1 (`fix(deps)`): Dolt 2.6.0 floor, Go 1.27.3 and the CHANGELOG** | | Old | New | |---|---|---| | `internal/doltversion` `ManagedMin` (gc init/start readiness, `gc doctor` `dolt-version`) | 2.1.0 | **2.6.0** | | dolt pack `doctor/check-dolt` `required`, `pack.toml` minimum note | 2.1.0 | 2.6.0 | | Bazel test Dolt (`MODULE.bazel` http_archive, every `GC_TEST_TOOL_PATHS` / runfiles reference) | `dolt_bin_v2_2_0` | `dolt_bin_v2_6_0` (sha256 `a8d4c2e2…`, the release asset) | | `go.mod`, `tools/nogo/go.mod`, `gazelle.go.work` `go` line | 1.26.10 | 1.27.3 | | Bazel `go_sdk.download` + `MODULE.bazel.lock` go_sdk facts | 1.26.10 | 1.27.3 (39 archives; sha256s identical to go.dev's JSON) | | gazelle `go_repository_tools` `_PINS` | go1.26.10 | + `0.53.0/go1.27.3/linux_amd64` (same digests beads pins, reproducible build) | | `golang.org/x/tools` (root and `tools/nogo`) / `golang.org/x/telemetry` (root, required by x/tools) | v0.49.0 / `v0.0.0-20260811182544-a038080d80e5` | v0.50.0 / `v0.0.0-20260908163034-4bcc4b2ee518` (staticcheck stays at gastownhall#8321's v0.8.1) | | `contrib/k8s/Dockerfile.agent` bd-builder stage | `golang:1.26.10-bookworm@sha256:ee3901c6…` | `golang:1.27.3-bookworm@sha256:972b4110ba0f47539a975c31e52c64765e1ff19f2d74469ae4a595c6676e80a5` (index digest; same image gastownhall#8287 uses for `Dockerfile.base`) | | devcontainer image / README | `go:1.26-ubuntu-24.04` | `go:1.27-ubuntu-24.04` | - **Why `x/tools`:** in v0.49.0, nogo's importer (`internal/pkgbits`) reads export data up to version 4, and Go 1.27 writes version 5. On the 1.27.3 SDK, every nogo action failed with `cannot decode "os", export data version 5 is greater than maximum supported version 4`. v0.50.0 adds V5; beads moved to it in beads#7829. - `third_party/patches/x_tools_ctrlflow_stdlib_noreturn.patch` still applies, because `ctrlflow.go` is identical in v0.49.0 and v0.50.0. - The root `go.sum` only gains the new x/tools and x/telemetry lines; no other `require` moved. I didn't run Go 1.27's `go mod tidy` on the root module: it would also prune about 270 stale `go.sum` lines, which is unrelated churn. `tools/nogo` is tidy (`go mod tidy` there only drops x/tools v0.49.0; gastownhall#8321 already dropped the other orphans). - Docs: README, `docs/getting-started/{installation,troubleshooting}.md` and `docs/troubleshooting/dolt-bloat-recovery.md` now give the 2.6.0 floor and its reason, and say building from source needs Go 1.27.3. - CHANGELOG `[Unreleased]`, Upgrading Notes: - "Dolt 2.6.0 or newer is now required". - gastownhall#8287's pin note, corrected: - **Which CI pins moved:** the workflows' `DOLT_VERSION` (macOS regression, nightly, RC Gate, Ollama, fork-verify) and, with this PR, the Bazel test Dolt. - **The behaviour changes the 2.2.0 → 2.6.0 move crosses, each attributed to its release:** strict `sql_mode` since 2.3.3; 2.4.0's UPDATE privilege for `ON DUPLICATE KEY UPDATE` and its MySQL error codes; 2.5.0's multi-branch commits; and 2.6.0's `dolt_merge()` change. That change applies only to histories with several merge bases (criss-cross): 2.6.0 merges a virtual base, as git does. It can raise conflicts that earlier releases resolved silently and drop some spurious ones. - **Why rollback is not a downgrade:** once Dolt 2.3.3+ creates or alters a schema with a descending index column, as bd's schema has, a Dolt below 2.3.3 can't write to the database (`table has unknown fields`). The old note blamed a first-start migration instead. - **A new Go 1.27.3 note.** On macOS and Windows, a set `SSL_CERT_FILE`/`SSL_CERT_DIR` now replaces the system trust store (GODEBUG `x509sslcertoverrideplatform`, new default in Go 1.27). gc on macOS needs macOS 13 or newer. This is documented, with no `godebug` opt-out. - CHANGELOG, Changed: "Go toolchain 1.27.3". It now tells contributors to rebuild golangci-lint with Go 1.27.3. - `examples/bd/dolt/pack.toml` no longer claims that the sync step checks the Dolt version; `commands/sync/run.sh` has no such check. - `internal/testenv/bazel_tools_internal_test.go`: the last `dolt_bin_v2_2_0` (a path-splitting fixture string) is now `dolt_bin_v2_6_0`. - The comments in the generated managed-Dolt config (`cmd/gc/cmd_dolt_config.go`, `gc-beads-bd.sh`) now say the floor is 2.6.0+. **Commit 2 (`fix(productmetrics)`): `tls.Config.Rand` under Go 1.27.** Go 1.27 deprecates `tls.Config.Rand` ("should be left nil in production"), so staticcheck v0.8.1 reports SA1019 on `isClosedProductionTLSConfig`'s read of it (`internal/productmetrics/upload.go:287`). The policy requires `Rand` to be nil, which is exactly what the deprecation asks for. So the check stays, and the read carries a `//nolint:staticcheck // SA1019` with that reason. **Commit 3 (`build(rbe)`): worker host re-pin** | | Old | New | |---|---|---| | `.github/actions/rbe-worker/pin` | `3bfd8aea` | `80d70774f18401e5aed2cb4982328fee808d0fc2` | | `tools/rbe/worker-env.txt` `dolt` / `go` lines | `dolt version 2.1.8` / `go1.26.10` | `dolt version 2.6.0` / `go1.27.3` | | `platforms/BUILD.bazel` worker-env pin | `sha256:7065d0a1…` | `sha256:1c13f58eb37a36d4961b8db0e37825d1ddc39ebce86a33bd58b50abb495bfd98` (sha256 of the manifest) | rbe-worker bump (`bin/bump-summary 3bfd8aea 80d70774`): - Compare: gastownhall/rbe-worker@3bfd8ae...80d7077 - Commits: - `80d7077` chore(worker): bump dolt 2.1.8 -> 2.6.0 (#9). The only worker-executed change: `DOLT_VERSION=2.6.0`, `DOLT_SHA256=a8d4c2e2…`. - `4f3a96b` fix(security): build and self-test with Go 1.26.10 (#8). This touches only rbe-worker's own go.mod and fixtures. - Measurement, isolation and microVM files: unchanged. The workers install `go.mod`'s Go (`blacksmith-worker.sh`: `GO_VERSION=$(awk '/^go /…' go.mod)`) and the pinned rbe-worker's Dolt. Go 1.27.3 and the 2.6.0 floor therefore need this new host in the same PR: the floor needs the host Dolt at 2.6.0, and `TestRBEWorkerEnvManifestNamesTheWorkerHost` requires the manifest's `go` line to equal go.mod's. The former commit 3 (`style(test)`, the formatter-agnostic `worker_inference` return) is now in gastownhall#8321, which needs it for gofumpt v0.12.0 too, so it dropped out of this branch on rebase. ## Review findings (gastownhall#8291 (comment)) 1. **Conflict with `main`: fixed.** I rebased with `git rebase --onto origin/main 72472bd` and then onto gastownhall#8321. 2. **Mac / quality red: fixed by gastownhall#8321**, plus commit 2 here, as recommended. gastownhall#8321 is a separate PR on Go 1.26.10. It carries golangci-lint v2.14.0, gofumpt v0.12.0, staticcheck v0.8.1, the reformat and the Go-1.26 findings. On gastownhall#8321, `Mac / quality` and `Mac regression summary` pass. 3. **GODEBUG defaults: documented.** The new CHANGELOG Upgrading Note covers the `SSL_CERT_FILE`/`SSL_CERT_DIR` change on macOS/Windows and macOS 13. There is no `godebug` opt-out (the coordinator's decision). `tracebacklabels` changes only traceback output and isn't called out. 4. **staticcheck crash on Go 1.27 struct-literal keys: fixed in gastownhall#8321** (v0.8.1). The `analyzers.bzl` lists were updated: +SA9010, -SA5011. 5. **Enqueue alone:** this is merge gate 4. 6. **Stale `dolt_bin_v2_2_0` fixture: renamed** to `v2_6_0`. 7. **pack.toml sync-step claim: removed.** 8. **Devcontainer tag: not changed** (see Follow-ups). 9. **`tools/nogo/go.sum`: tidy.** The gastownhall#8287 review's CHANGELOG wording fixes (gastownhall#8287 (comment)), findings 1-3, are applied here. They cover the rollback mechanism, the `sql_mode` attribution to 2.3.3 plus 2.4.0/2.5.0, and which CI pins moved. The `dolt_merge` description is corrected too: it changes only for criss-cross histories and does not "take the newer change". ## Deferred: the beads library bump `go.mod` keeps `github.com/steveyegge/beads v1.3.2`. `deps.env` `BD_*`, `Dockerfile.agent` `BD_SOURCE_REF` and the native store's schema cursors (66/26) are unchanged. Moving to beads `main` (the Dolt 2.6.0 engine, beads#7829) takes bd's schema to 72/28 (migrations 0067-0072 and ignored 0027-0028). Every Bazel bd cell runs the v1.3.2 release archive, so the native-lane acceptance tests would see `schema_skew` and fall back to the bd CLI. That bump moves with the **bd v1.4.0** release: go.mod at the tag, `BD_CURRENT_VERSION`/`BD_VERSION`, a `bd_bin_v1_4_0` archive and the cursors together. Until then, `scripts/check-embedded-pins` (nightly `bundled-pack-pins`, and `rc-gate`'s `--bd-advisory`) reports `DOLT_VERSION=2.6.0, beads v1.3.2 qualifies Dolt 2.2.0`, as on gastownhall#8287. ## Merge prerequisites and order This PR is labelled `status/human-review-required` so the review pipeline cannot auto-merge it. Remove the label only once these gates hold: 1. **gastownhall#8321 is merged, and this branch is rebased onto `main` after it.** gastownhall#8287 is already merged. 2. **The hosted beads Dolt is upgraded to 2.6.0 (gascity/infra#2471), along with the other B3 servers and CLIs.** After this merges, `gc init`/`gc start` and `gc doctor` refuse any Dolt below 2.6.0. 3. **The farm-side worker-env prerequisite below is done.** No operator step is needed, but check these before merging. - **How the farm picks up the new pin.** rbe-west's oss and oss-fork schedulers match `worker-env` exactly. Pool workers come from `rbe-worker-pool.yml`, which runs on gascity `main` only. They are dispatched by `rbe-oss-pool-scaler` on rbe-west-core-1 when actions queue, by its warm floor, and by `bazel.yml`'s pre-warm. Each one checks out `main`, fetches the pinned rbe-worker, installs `main`'s Go and the rbe-worker's Dolt, measures the host, and advertises that hash for its whole life. The first pool runs dispatched after the merge therefore serve the new pin. Main's post-merge Bazel run queues actions on that pin, and the scaler dispatches workers for them, so nothing on rbe-west-core-1 needs editing or restarting. Before the merge nothing can serve the new pin (see "What CI checks" below). - **The PR's `rbe worker host` job (bazel.yml `worker-host`) must be green.** It fetches rbe-worker `80d70774` anonymously and runs H5 on the bump range. It then measures a real Blacksmith host (Go from this go.mod, Dolt 2.6.0) against the new manifest, which fails if they differ, and runs the new commit's `cmd/product-check`. If the measurement drifted, merging would leave every gascity remote action unservable. - **No open `rbe-worker-env-drift` issue on gastownhall/gascity.** While one is open, both pool scalers cap the pools at 2 workers. There was none at 2026-10-26 03:10Z; the canary was green at 01:00Z. - **`rbe-oss-pool-scaler` up, with its breaker closed.** This is an operator journal check (`pool scaler:` lines). I haven't touched or ssh'd to the farm. - **Workers already running keep the old pin until they retire.** Burst workers retire after their idle window (the scaler currently dispatches them with 8 minutes). Warm-floor workers last until 03:00Z or 300 minutes, and they count toward the floor and the 24-worker max but take no new-pin work. **Merge outside the 13:00Z-03:00Z floor window**, or expect the old floor to linger. - **No grace window for beads.** This re-pin moves the `dolt` line as well as `go`, so `worker-env-notify-beads.yml`'s grace job publishes `previous none` and rbe-west runs no previous-pin legacy workers. The same push dispatches `gascity-worker-env-repinned`, and beads' `worker-env-autosync.yml` opens the sync PR within a minute or two. Its CI runs fully uncached, about an hour; the release lane has hit its 90-minute timeout before. Until that PR lands, every beads PR fails at `Bazel / execution mode`. - beads `main` is already on Go 1.27.3 with Dolt 2.6.0 test pins, so the new host suits it. - bd-enterprise and gc-enterprise copy the manifest by hand; gc-enterprise's is in its mirror PR. - **The first runs after the re-pin are uncached** (every action key changes). Main's push run executes everything on the new host, on a congested farm with 60-90-minute lane timeouts. Re-run a cancelled lane; the remote cache keeps progress. - **Rollback:** revert this PR. Pool workers dispatched from the reverted `main` measure and serve the old pin again. 4. **Enqueue this PR alone.** The worker-env pin moves, so worker-env preflight skips `bazel test` for the whole merge group. The `main` ruleset batches up to 5 PRs, and any PR batched with this one would land without ever having been Bazel-tested on Go 1.27.3. Enqueue it when the queue is empty. ## What CI checks before merge, and what runs only after Because the worker-env pin moves, `bazel.yml`'s `worker-env preflight` skips `bazel test` in **every lane (unit `//...`, acceptance, integration-packages, integration-smoke), on this PR and in the merge queue**. The pool serves only `main`'s pin. The required `bazel test (side-by-side)` gate passes on `rbe`, `sync-check` and `worker-host` alone. - **Runs pre-merge:** - `worker-host` (the measurement, H5 and product-check above); - `BUILD files in sync` (gazelle, using the read-only fork cache); - the GitHub-hosted jobs: Container Scan, which builds the images with this PR's Dockerfiles; the Mac smoke tier; the Contract radar, which has failed since beads#7829 because it builds bd main with go.mod's Go and should pass again on 1.27.3; and the other path-filtered `ci.yml` jobs. - **Runs only after merge:** the push to `main` runs the full Bazel suite on the new pin, uncached: - nogo/vet/format/policy and unit `//...`; - acceptance Tier A, with the bd v1.3.2 and Dolt 2.6.0 cells; - integration-packages and integration-smoke. `bazel-nightly.yml` adds the full `//test/integration` suite and coverage. Watch the first main run, the `rbe-worker-env-canary.yml` run on the merge, and beads' autosync PR. ## Verification (local, on cherry) Under the disk guard, I ran no local Bazel test suite and no Docker build (Container Scan covers the images). **This revision** (`aa058bace`, on gastownhall#8321 rebased onto `main` `3fb225b90`), all with Go 1.27.3. After the rebase, the code that main gained since the last revision is clean: `go build ./...`, `go vet` and golangci-lint v2.14.0 on its packages report 0 issues, and the formatters are clean on its files. - **golangci-lint v2.14.0** (built with Go 1.27.3): - `golangci-lint run ./...` reports `0 issues.` That covers the `tls.Config.Rand` SA1019, which it reported before commit 2. - `golangci-lint fmt --diff ./...` prints nothing. - **`scripts/check-go-format.sh`** with gofumpt v0.12.0 and goimports v0.50.0, both built with Go 1.27.3: `5823 Go files formatted.` - **Pre-commit hook on the new and amended commits.** These ran with the old worker-env pin still in place, so remote nogo could serve them. - nogo on `//internal/testenv` and `//internal/productmetrics` (staticcheck v0.8.1, Go 1.27.3 SDK, remote) passed. - `//test/docsync:docsync_test` passed. - Codegen showed no drift. - **`go build ./...`** passes. - **`go test`**, with Dolt 2.6.0 first on PATH, all ok: `./internal/productmetrics/...`, `./internal/testenv`, `./internal/doltversion`, `./test/docsync`, `./scripts` (the policy suite) and `tools/nogo`. - **Pre-push** (`GC_PREPUSH_SUITE=go`): `All fast jobs passed`, 10 of 10 jobs: unit-core, unit-cmd-gc 1-6 of 6, fsys-darwin-compile and the two self-tests. This is the hook's documented mode for a moved pin; `auto` would fall back to fork-cache with local execution, which the host rules forbid. **CI on revision `40cb54244`** (before the 06:30Z rebase onto `main` `3fb225b90`, which conflicted only in the CHANGELOG): every check passes. That includes `Mac / quality`, `Mac regression summary`, `Contract radar` (green again now that go.mod is at 1.27.3), `Image vulnerabilities`, `rbe worker host`, `bazel test (side-by-side)` and `CI / required`. The Bazel test lanes were skipped by worker-env preflight, as described above. **Earlier revision**, with the same floor and toolchain changes: - **nogo through the pre-commit hook.** `make lint-changed LINT_CHANGED_SCOPE=staged` over the staged packages (`//cmd/gc`, `//internal/beads`, `//internal/doctor`, `//internal/doltversion`, `//examples/bd/dolt`, `//scripts`, `//test/integration`) built remotely on rbe-west's oss instance with the Go 1.27.3 SDK. It ran before the worker-host files changed, which is why the re-pin is its own commit. Build completed successfully: 6,522 actions, 6,503 of them remote. - **`make check-docs`** (Bazel docsync test, remote) in the same hook: `//test/docsync:docsync_test` PASSED. - **Go 1.27.3, plain go:** - `go build ./...` passes; - `go vet ./...` is clean under every build tag the tree uses (integration, acceptance_a/b/c, acceptance_bd_contract, gascity_native_beads, dolt_integration, productmetrics_testhook, gc_coarse_clock) and under GOOS=darwin; - `tools/nogo` `go test ./...` passes. - **`go test`, Go 1.27.3, with Dolt 2.6.0 first on PATH** (`/usr/local/lib/dolt-2.6.0/dolt`, the same bytes as the v2.6.0 release binary): - `./internal/doltversion`: ok. - `./internal/doctor`: ok, whole package. - `./examples/bd/dolt`: 412 PASS, 0 SKIP, 0 FAIL. - `./examples/bd/dolt -tags integration`, against real Dolt 2.6.0 servers and bd v1.3.2 (release archive, sha-verified): 426 PASS, 0 SKIP, 0 FAIL. This includes the real-Dolt compaction, flatten, rollback and remote-push tests and the real-bd stale-db close test. - `./cmd/gc`, targeted: `TestBuiltinDoltDoctor*`, `TestCheckHardDependencies*`, `TestDoStartForegroundReportsHardDependenciesBeforeDoltIdentity`, and the dolt-config/readiness set. 82 PASS, 0 FAIL, 1 SKIP; the skip is the shell-fallback test, which is process-only by design. - `./scripts`: the whole policy suite passes, including TestDoltVersionPins, TestBDVersionPins, TestRBEWorker*, TestBazelExecutesOnWorkerPlatform, TestGoRepositoryTools*, the container and Dockerfile tests, the worker-env grace and drift tests, and the hooks tests. - `./test/docsync`: ok. - `./tools/nogo`: TestModuleRequirementsAgreeWithRoot passes. - **rbe-worker `cmd/product-check -product-root <this checkout> -skip-client` at `80d70774`:** `product-check: ok`. This covers the manifest package set, the dolt line against the worker's `DOLT_VERSION`, the test PATH, and the pin against the manifest's sha256. - **`.github/actions/rbe-worker/h5.sh` on `3bfd8aea..80d70774`:** 2 commits, all signed, verified, committed by web-flow and merged. - **`tools/rbe/worker-env-grace record`** for this re-pin: `previous none` ("the re-pin moves more than the go line"). Record: `pin sha256:1c13f58e…`, `previous none`, reason `-dolt dolt version 2.1.8, +dolt dolt version 2.6.0`. - **Pre-push hook:** `GC_PREPUSH_SUITE=go` (`make test-fast-parallel`). The hook refuses remote execution for a moved pin, and the disk guard rules out its local Bazel fallback. `All fast jobs passed` (10 jobs: unit-core, unit-cmd-gc 1-6 of 6, fsys-darwin-compile and the two self-tests), about 36 minutes, on both pushes. The second push added commit 3, and its pre-commit nogo on `//test/acceptance/worker_inference` also passed. ## Tests changed, and why - **Floor moves to 2.6.0, so boundaries move with it.** Below-floor cases now include 2.5.1 (the last release under the floor), 2.2.0 and 2.1.0 (the previous floor). Above-floor cases include multi-digit 2.6.10 and 2.10.0 (lexical-order traps). Pre-release cases now sit at the 2.6.0 floor. - `internal/doltversion/doltversion_test.go` - `internal/doctor/checks_test.go`: DoltVersionCheck cases. - `examples/bd/dolt/doctor_test.go`: TestDoctorCheckVersionFloor, and the flock/lsof/no-sort tests now use a passing 2.6.x. - `cmd/gc/embed_builtin_packs_test.go`: the at-minimum and bounded-probe doctor tests now use 2.6.0 and 2.6.10. - **`scripts/dolt_version_pin_test.go`:** `doltFloor` is now 2.6.0. gastownhall#8287 already moved `doltPin`. - **`internal/beads/lookup_limit_error_test.go`:** Go 1.27's vet printf check rejects `%w` with a `*LookupLimitError` operand, because the value type is the error. The test still wraps a pointer, now passed as an `error` value. No production code changed. - **`scripts/container_tool_security_test.go`:** only the comment and message naming the rebuild toolchain changed, from 1.26.10 to 1.27.3. ## Follow-ups and caveats - **beads library and bd pins:** bump them with bd v1.4.0 (see "Deferred" above). - **`Mac / quality` and `Mac regression summary`** were red on the previous revision because golangci-lint v2.12.0 can't read Go 1.27 export data. gastownhall#8321 moves to v2.14.0 and fixes what that flags on Go 1.26.10. This branch adds the one Go-1.27-only finding (`tls.Config.Rand`, commit 2). - **golangci-lint has to be rebuilt.** A golangci-lint built with Go 1.26 refuses this module ("the Go language version (go1.26) used to build golangci-lint is lower than the targeted Go version (1.27.3)"). The pre-commit formatter (`scripts/precommit-format-staged-go`) runs `golangci-lint` from PATH, so contributors and agent hosts need `make install-tools` run with Go 1.27.3. CI builds it with go.mod's Go, so CI is unaffected. On cherry I built v2.14.0 with Go 1.27.3 into a private directory and left the shared `~/go/bin` alone. The CHANGELOG entry carries the rebuild command. - **The devcontainer image tag doesn't exist.** `mcr.microsoft.com/devcontainers/go:*-ubuntu-24.04` isn't published (MCR lists only `1.27`, `1.27-bookworm` and `1.27-trixie`), and `1.26-ubuntu-24.04` didn't exist before this PR either. I kept the repo's tag style and moved it to 1.27; switching the base is a separate change. - **`MODULE.bazel`'s comment on the x/tools ctrlflow patch** cites SA5011, which staticcheck v0.8.1 no longer runs. See gastownhall#8321. - **beads-team-server, gastown and crucible** follow in their own B4 PRs. The gc-enterprise mirror is a separate PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Throwaway attribution probe for mpr cherry-pick design (gm-ubcxn). No workflows in base; nothing to review.