Skip to content

feat(release): publish grpc-versions.txt artifact (PR 2 / Task 2)#597

Merged
intel352 merged 3 commits into
mainfrom
feat/iac-typed-rc1
May 10, 2026
Merged

feat(release): publish grpc-versions.txt artifact (PR 2 / Task 2)#597
intel352 merged 3 commits into
mainfrom
feat/iac-typed-rc1

Conversation

@intel352

@intel352 intel352 commented May 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Pin protoc-gen-go (via google.golang.org/protobuf) and protoc-gen-go-grpc in tools.go (build-tag tools) so go mod tidy keeps them tracked in go.mod/go.sum.
  • Add a release-pipeline step that emits grpc-versions.txt listing the exact grpc/protobuf/protoc-gen-go/protoc-gen-go-grpc versions this workflow release was built against.
  • Artifact is published alongside the rest of dist/* via the existing softprops/action-gh-release@v2 step (covered by checksums.txt).
  • Propagate the new indirect dep into example/go.{mod,sum} so the Go Mod Tidy CI gate stays green.

Why

Foundation for PR 2 of docs/plans/2026-05-10-strict-contracts-force-cutover.md (Task 2). Downstream plugins (e.g. workflow-plugin-digitalocean) gate their proto toolchain pins against this file so they link against ABI-compatible gRPC/protobuf versions when implementing the typed pb.IaCProvider services.

No runtime impact; release-pipeline-only change.

Plan-correction notes

Plan §Task 2 (rev5 @ e82b7e0c) had two specification bugs that this PR fixes-forward without scope-lock amendment (intent preserved, PR count unchanged):

  1. Step 4 verification command go build -tags tools ./... is impossible by Go language semantics — protoc-gen-go and protoc-gen-go-grpc are package main and main packages aren't importable. Substituted with: go mod tidy && go build ./... && go list -m all | grep protoc-gen to achieve the spec intent (verify tool dependencies resolve and pin).

  2. Step 2 dependency google.golang.org/protobuf/cmd/protoc-gen-go is a package inside the protobuf module, not a standalone module. Substituted parent module path with same target version.

Spec-reviewer ack'd the substitutions on the team channel; team-lead chose PR-record capture over ADR (manifest unchanged, intent preserved, audit trail in the reviewer chain).

Local dry-run

$ {
    echo "grpc=$(go list -m -json google.golang.org/grpc | jq -r .Version)"
    echo "protobuf=$(go list -m -json google.golang.org/protobuf | jq -r .Version)"
    echo "protoc-gen-go=$(go list -m -json google.golang.org/protobuf | jq -r .Version)"
    echo "protoc-gen-go-grpc=$(go list -m -json google.golang.org/grpc/cmd/protoc-gen-go-grpc | jq -r .Version)"
  }
grpc=v1.80.0
protobuf=v1.36.11
protoc-gen-go=v1.36.11
protoc-gen-go-grpc=v1.6.1

Test plan

  • GOWORK=off go build ./... — clean
  • GOWORK=off go vet ./... — clean
  • GOWORK=off go test -count=1 -run='^$' ./... — all packages compile (no test runs needed)
  • GOPRIVATE='github.com/GoCodeAlone/*' GOWORK=off go mod tidy in example/ — no further drift after the indirect-dep refresh
  • actionlint .github/workflows/release.yml — no findings introduced by this PR (the two pre-existing shellcheck warnings on lines 145/283 are out of scope)
  • Local dry-run of the version-extraction shell block produces the expected 4 lines
  • CI: release pipeline dry-run (verified by tag push of v1.0.0-rc1 in PR 4 cutover)

Rollback

Revert the commits on this branch. Release pipeline drops back to prior state; no state migration required.

🤖 Generated with Claude Code

…sync

Pins protoc-gen-go (via google.golang.org/protobuf) and protoc-gen-go-grpc
in tools.go (build-tag `tools`), and emits a `grpc-versions.txt` release
artifact listing the exact gRPC/protobuf/proto-gen versions this workflow
release was built against. Downstream plugins (e.g. workflow-plugin-
digitalocean) gate their proto toolchain pins against this file so they
link against ABI-compatible versions when implementing the typed
pb.IaCProvider services.

Foundation for PR 2 of docs/plans/2026-05-10-strict-contracts-force-cutover.md
(Task 2). No runtime impact; release-pipeline-only change.

Rollback: revert this commit; release pipeline drops back to prior state,
no state migration required.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 10, 2026 06:07

Copilot AI 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.

Pull request overview

Adds release-time provenance for the gRPC/protobuf toolchain by pinning the relevant generator modules and emitting a grpc-versions.txt artifact during the GitHub Release workflow, so downstream plugins can align their pins to ABI-compatible versions.

Changes:

  • Add a tools.go (build-tagged) file that blank-imports protoc-gen-go and protoc-gen-go-grpc to keep generator deps tracked.
  • Pin google.golang.org/grpc/cmd/protoc-gen-go-grpc in go.mod/go.sum.
  • Extend .github/workflows/release.yml to generate and publish dist/grpc-versions.txt.

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 1 comment.

File Description
tools.go Introduces build-tagged tool dependency pinning for protoc generators.
go.mod Adds an explicit requirement for protoc-gen-go-grpc module.
go.sum Records sums for the newly pinned protoc-gen-go-grpc module.
.github/workflows/release.yml Generates dist/grpc-versions.txt as part of the release artifact set.

Comment thread tools.go
Comment on lines +1 to +16
//go:build tools
// +build tools

// This file pins build-time tool dependencies that are not imported by
// runtime code. Listed here so `go mod tidy` keeps them in go.mod/go.sum and
// so the release pipeline can resolve their exact versions for the
// grpc-versions.txt artifact (cross-repo dep sync foundation per
// 2026-05-10-strict-contracts-force-cutover Task 2).
//
// Guarded by the `tools` build tag so it is excluded from normal builds
// (avoids package-name conflict with the rest of the workflow root).
package workflow

import (
_ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
_ "google.golang.org/protobuf/cmd/protoc-gen-go"
Spec-review MINOR finding on PR #597: line resolving protoc-gen-go's
version against `google.golang.org/protobuf` (rather than the spec's
literal `google.golang.org/protobuf/cmd/protoc-gen-go`, which is NOT
a standalone module) reads as copy-paste. Add inline comment to
disambiguate the dedup as intentional.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions

github-actions Bot commented May 10, 2026

Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:262: parsing iteration count: invalid syntax
baseline-bench.txt:350909: parsing iteration count: invalid syntax
baseline-bench.txt:656928: parsing iteration count: invalid syntax
baseline-bench.txt:997759: parsing iteration count: invalid syntax
baseline-bench.txt:1317026: parsing iteration count: invalid syntax
baseline-bench.txt:1570623: parsing iteration count: invalid syntax
benchmark-results.txt:262: parsing iteration count: invalid syntax
benchmark-results.txt:270461: parsing iteration count: invalid syntax
benchmark-results.txt:593757: parsing iteration count: invalid syntax
benchmark-results.txt:1116970: parsing iteration count: invalid syntax
benchmark-results.txt:1393502: parsing iteration count: invalid syntax
benchmark-results.txt:1674735: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │       sec/op       │    sec/op      vs base              │
InterpreterCreation-4              3.121m ± 224%   3.310m ± 184%       ~ (p=0.310 n=6)
ComponentLoad-4                    3.538m ±  11%   3.634m ±   0%       ~ (p=0.065 n=6)
ComponentExecute-4                 1.941µ ±   0%   1.984µ ±   0%  +2.22% (p=0.002 n=6)
PoolContention/workers-1-4         1.071µ ±   3%   1.110µ ±   1%  +3.64% (p=0.002 n=6)
PoolContention/workers-2-4         1.078µ ±   1%   1.114µ ±   2%  +3.34% (p=0.002 n=6)
PoolContention/workers-4-4         1.077µ ±   4%   1.113µ ±   2%  +3.34% (p=0.026 n=6)
PoolContention/workers-8-4         1.081µ ±   1%   1.108µ ±   1%  +2.50% (p=0.002 n=6)
PoolContention/workers-16-4        1.086µ ±   3%   1.116µ ±   2%  +2.72% (p=0.026 n=6)
ComponentLifecycle-4               3.567m ±   0%   3.663m ±   1%  +2.70% (p=0.002 n=6)
SourceValidation-4                 2.282µ ±   0%   2.343µ ±   0%  +2.70% (p=0.002 n=6)
RegistryConcurrent-4               786.0n ±   5%   819.8n ±   2%  +4.30% (p=0.026 n=6)
LoaderLoadFromString-4             3.570m ±   0%   3.680m ±   1%  +3.09% (p=0.002 n=6)
geomean                            17.29µ          17.86µ         +3.27%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.851 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.195 n=6)
ComponentExecute-4                  1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4         1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                2.183Mi ± 0%   2.183Mi ± 0%       ~ (p=0.279 n=6)
SourceValidation-4                  1.984Ki ± 0%   1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                1.133Ki ± 0%   1.133Ki ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4              2.182Mi ± 0%   2.182Mi ± 0%       ~ (p=0.225 n=6)
geomean                             15.25Ki        15.25Ki       +0.00%
¹ all samples are equal

                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │     allocs/op      │  allocs/op   vs base                │
InterpreterCreation-4                15.68k ± 0%   15.68k ± 0%       ~ (p=1.000 n=6)
ComponentLoad-4                      18.02k ± 0%   18.02k ± 0%       ~ (p=1.000 n=6)
ComponentExecute-4                    25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4           25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                 18.07k ± 0%   18.07k ± 0%       ~ (p=1.000 n=6) ¹
SourceValidation-4                    32.00 ± 0%    32.00 ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                  2.000 ± 0%    2.000 ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4               18.06k ± 0%   18.06k ± 0%       ~ (p=1.000 n=6) ¹
geomean                               183.3         183.3       +0.00%
¹ all samples are equal

pkg: github.com/GoCodeAlone/workflow/middleware
                                  │ baseline-bench.txt │       benchmark-results.txt       │
                                  │       sec/op       │   sec/op     vs base              │
CircuitBreakerDetection-4                  285.2n ± 3%   290.8n ± 3%  +1.95% (p=0.028 n=6)
CircuitBreakerExecution_Success-4          21.52n ± 2%   21.53n ± 0%       ~ (p=0.452 n=6)
CircuitBreakerExecution_Failure-4          66.38n ± 0%   66.07n ± 0%  -0.46% (p=0.002 n=6)
geomean                                    74.13n        74.51n       +0.51%

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │        B/op        │    B/op     vs base                │
CircuitBreakerDetection-4                 144.0 ± 0%     144.0 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │     allocs/op      │ allocs/op   vs base                │
CircuitBreakerDetection-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │       sec/op       │    sec/op     vs base              │
JQTransform_Simple-4                     970.2n ± 18%   907.0n ± 27%       ~ (p=0.394 n=6)
JQTransform_ObjectConstruction-4         1.456µ ±  1%   1.496µ ±  0%  +2.71% (p=0.002 n=6)
JQTransform_ArraySelect-4                3.312µ ±  1%   3.344µ ±  0%  +0.95% (p=0.002 n=6)
JQTransform_Complex-4                    38.53µ ±  2%   38.51µ ±  1%       ~ (p=0.818 n=6)
JQTransform_Throughput-4                 1.775µ ±  1%   1.823µ ±  1%  +2.70% (p=0.002 n=6)
SSEPublishDelivery-4                     65.42n ±  1%   65.42n ±  2%       ~ (p=0.818 n=6)
geomean                                  1.660µ         1.659µ        -0.08%

                                 │ baseline-bench.txt │        benchmark-results.txt         │
                                 │        B/op        │     B/op      vs base                │
JQTransform_Simple-4                   1.273Ki ± 0%     1.273Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4       1.773Ki ± 0%     1.773Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4              2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                  16.22Ki ± 0%     16.22Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4               1.984Ki ± 0%     1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │     allocs/op      │ allocs/op   vs base                │
JQTransform_Simple-4                     10.00 ± 0%     10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%     30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    324.0 ± 0%     324.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │       sec/op       │    sec/op     vs base              │
SchemaValidation_Simple-4                   1.102µ ± 19%   1.100µ ±  4%       ~ (p=0.699 n=6)
SchemaValidation_AllFields-4                1.666µ ±  6%   1.696µ ± 11%       ~ (p=0.699 n=6)
SchemaValidation_FormatValidation-4         1.579µ ±  2%   1.598µ ±  2%       ~ (p=0.258 n=6)
SchemaValidation_ManySchemas-4              1.804µ ±  2%   1.839µ ±  3%       ~ (p=0.253 n=6)
geomean                                     1.512µ         1.530µ        +1.19%

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │        B/op        │    B/op     vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │     allocs/op      │ allocs/op   vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │       sec/op       │    sec/op     vs base               │
EventStoreAppend_InMemory-4                1.100µ ± 18%   1.168µ ± 20%        ~ (p=0.240 n=6)
EventStoreAppend_SQLite-4                  1.298m ±  4%   1.418m ±  3%   +9.22% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           13.66µ ±  2%   14.08µ ±  6%        ~ (p=0.132 n=6)
GetTimeline_InMemory/events-50-4           76.19µ ±  2%   79.74µ ±  3%   +4.65% (p=0.002 n=6)
GetTimeline_InMemory/events-100-4          121.5µ ± 19%   158.0µ ± 20%  +30.05% (p=0.004 n=6)
GetTimeline_InMemory/events-500-4          623.0µ ±  1%   649.4µ ±  2%   +4.23% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.272m ±  1%   1.321m ±  2%   +3.89% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             104.6µ ±  1%   111.1µ ±  1%   +6.22% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             245.5µ ±  0%   260.8µ ±  2%   +6.21% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            419.8µ ±  2%   445.9µ ±  2%   +6.21% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.791m ±  3%   1.852m ±  1%   +3.45% (p=0.004 n=6)
GetTimeline_SQLite/events-1000-4           3.522m ±  4%   3.596m ±  2%        ~ (p=0.065 n=6)
geomean                                    214.9µ         229.8µ         +6.91%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                 753.5 ± 14%     772.0 ± 9%       ~ (p=0.258 n=6)
EventStoreAppend_SQLite-4                 1.984Ki ±  3%   1.985Ki ± 2%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-10-4          7.953Ki ±  0%   7.953Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4          46.62Ki ±  0%   46.62Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4         94.48Ki ±  0%   94.48Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4         472.8Ki ±  0%   472.8Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-1000-4        944.3Ki ±  0%   944.3Ki ± 0%  -0.00% (p=0.032 n=6)
GetTimeline_SQLite/events-10-4            16.74Ki ±  0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4            87.14Ki ±  0%   87.14Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4           175.4Ki ±  0%   175.4Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-500-4           846.1Ki ±  0%   846.1Ki ± 0%  +0.00% (p=0.043 n=6)
GetTimeline_SQLite/events-1000-4          1.639Mi ±  0%   1.639Mi ± 0%       ~ (p=0.535 n=6)
geomean                                   67.08Ki         67.22Ki       +0.20%
¹ all samples are equal

                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │     allocs/op      │  allocs/op   vs base                │
EventStoreAppend_InMemory-4                  7.000 ± 0%    7.000 ± 0%       ~ (p=1.000 n=6) ¹
EventStoreAppend_SQLite-4                    53.00 ± 0%    53.00 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-10-4             125.0 ± 0%    125.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4             653.0 ± 0%    653.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4           1.306k ± 0%   1.306k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4           6.514k ± 0%   6.514k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-1000-4          13.02k ± 0%   13.02k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-10-4               382.0 ± 0%    382.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.852k ± 0%   1.852k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             3.681k ± 0%   3.681k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             18.54k ± 0%   18.54k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            37.29k ± 0%   37.29k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.162k        1.162k       +0.00%
¹ all samples are equal

Benchmarks run with go test -bench=. -benchmem -count=6.
Regressions ≥ 20% are flagged. Results compared via benchstat.

….{mod,sum}

Adding google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1 to the root
go.mod (Task 2's tools.go pin) propagates as an indirect dep into the
example/ submodule's graph. The Go Mod Tidy CI gate caught the drift
on PR #597. Refresh example/go.{mod,sum} via `go mod tidy` (with
GOPRIVATE=github.com/GoCodeAlone/*) so the workspace's example module
matches the parent root.

## Plan-correction notes

Plan §Task 2 (rev5 @ e82b7e0c) had two specification bugs that this PR
fixes-forward without scope-lock amendment (intent preserved, PR count
unchanged):

1. Step 4 verification command `go build -tags tools ./...` is impossible
   by Go language semantics — `protoc-gen-go` and `protoc-gen-go-grpc`
   are `package main` and main packages aren't importable. Substituted
   with: `go mod tidy && go build ./... && go list -m all | grep
   protoc-gen` to achieve the spec intent (verify tool dependencies
   resolve and pin).

2. Step 2 dependency `google.golang.org/protobuf/cmd/protoc-gen-go` is a
   package inside the protobuf module, not a standalone module.
   Substituted parent module path with same target version.

Spec-reviewer ack'd the substitutions on the team channel; team-lead
chose PR-record capture over ADR (manifest unchanged, intent preserved,
audit trail in the reviewer chain).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 10, 2026 06:22

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 6 changed files in this pull request and generated 3 comments.

Comment thread tools.go
Comment on lines +1 to +11
//go:build tools
// +build tools

// This file pins build-time tool dependencies that are not imported by
// runtime code. Listed here so `go mod tidy` keeps them in go.mod/go.sum and
// so the release pipeline can resolve their exact versions for the
// grpc-versions.txt artifact (cross-repo dep sync foundation per
// 2026-05-10-strict-contracts-force-cutover Task 2).
//
// Guarded by the `tools` build tag so it is excluded from normal builds
// (avoids package-name conflict with the rest of the workflow root).
Comment thread go.mod
golang.org/x/tools v0.44.0
google.golang.org/api v0.272.0
google.golang.org/grpc v1.80.0
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1
Comment thread example/go.mod
google.golang.org/grpc v1.80.0 // indirect
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1 // indirect
google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
@intel352 intel352 merged commit 0539c6e into main May 10, 2026
27 checks passed
@intel352 intel352 deleted the feat/iac-typed-rc1 branch May 10, 2026 06:59
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.

2 participants