Skip to content

feat(iac): add resource ownership contract#824

Merged
intel352 merged 4 commits into
mainfrom
issue-779-ownership-tags
Jun 1, 2026
Merged

feat(iac): add resource ownership contract#824
intel352 merged 4 commits into
mainfrom
issue-779-ownership-tags

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 1, 2026

Summary

Verification

  • buf generate
  • GOWORK=off go test ./plugin/external/proto ./plugin/external/sdk ./cmd/wfctl -run 'Ownership|RegisterAll|ContractRegistry|TypedAdapter' -count=1\n- GOWORK=off go test ./cmd/wfctl -run 'Ownership|Owners|TypedAdapter' -count=1\n- GOWORK=off go test ./interfaces ./plugin/external/proto ./plugin/external/sdk -count=1\n- GOWORK=off go test ./cmd/wfctl -run '^$' -count=1\n- GOWORK=off go test ./iac/wfctlhelpers -count=1\n- GOWORK=off golangci-lint run ./interfaces ./plugin/external/... ./cmd/wfctl\n- git diff --check\n\n## Notes\n- buf lint is not currently a clean gate in this repo; it fails on existing proto package/service naming rules, plus the new ownership service follows the existing service naming pattern.\n- A full GOWORK=off go test ./interfaces ./plugin/external/proto ./plugin/external/sdk ./cmd/wfctl -count=1 run was stopped after the first three packages passed and cmd/wfctl did not finish within the local wait window; targeted wfctl ownership tests and compile-only checks passed.\n\nCloses Cross-driver IaC ownership-tagging convention (phase 2 of gocodealone-dns import) #779 for the core contract. Provider plugin tag/label implementations follow as cascade PRs after this lands.

Copilot AI review requested due to automatic review settings June 1, 2026 21:58
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a provider-neutral IaC “resource ownership” contract to the plugin ecosystem so wfctl can (a) enforce an ownership safety gate during infra apply and (b) enumerate owned resources via a new infra owners subcommand.

Changes:

  • Introduces optional gRPC service IaCProviderOwnership (proto + generated Go) and a matching Go interface interfaces.OwnershipProvider.
  • Wires SDK auto-registration + ContractRegistry advertisement and extends the typed wfctl adapter with ownership RPCs.
  • Adds wfctl infra apply --owner/--force-owner gating + wfctl infra owners listing, plus ADR/plan/docs updates.

Reviewed changes

Copilot reviewed 19 out of 21 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
plugin/external/sdk/iacserver.go Auto-registers the new optional ownership gRPC service when implemented by a provider.
plugin/external/sdk/iacserver_test.go Extends registration tests to include IaCProviderOwnership.
plugin/external/sdk/contracts_iac_test.go Ensures ContractRegistry advertises ownership service when registered.
plugin/external/proto/iac.proto Adds the IaCProviderOwnership service and request/response message types.
plugin/external/proto/iac.pb.go Regenerated protobuf message/types for the new ownership contract.
plugin/external/proto/iac_grpc.pb.go Regenerated gRPC client/server stubs for IaCProviderOwnership.
plugin/external/proto/iac_proto_test.go Updates optional-service interface distinctness test to include ownership.
interfaces/iac_provider.go Adds OwnershipProvider, ResourceOwner, and OwnerFilter to the public IaC interfaces surface.
cmd/wfctl/iac_typed_adapter.go Adds typed ownership client wiring and implements OwnershipProvider methods (optional-service gated).
cmd/wfctl/iac_typed_adapter_test.go Adds unit/integration coverage for ownership optional gating and round-trips.
cmd/wfctl/iac_typed_fixture_test.go Extends typed-fixture to register ownership service for adapter tests.
cmd/wfctl/infra.go Adds infra owners dispatcher entry + apply flag plumbing for --owner/--force-owner.
cmd/wfctl/infra_owners.go New wfctl infra owners command implementation.
cmd/wfctl/infra_owners_test.go Adds coverage for listing and “unsupported provider” behavior.
cmd/wfctl/infra_apply.go Wires the ownership gate into apply hooks (both “computed plan” and “precomputed plan” paths).
cmd/wfctl/infra_apply_ownership.go Implements the ownership gate hook logic and owner identity resolution (flag/env).
cmd/wfctl/infra_apply_ownership_test.go Adds focused tests for ownership gate behavior (missing/mismatch/force/create stamping).
cmd/wfctl/infra_apply_dns_gate.go Switches DNS gate wiring to compose with other OnBeforeAction hooks.
docs/WFCTL.md Documents infra owners and the new infra apply ownership flags/behavior.
docs/plans/2026-06-01-iac-resource-ownership.md Records the implementation plan for the ownership contract and CLI changes.
decisions/0046-iac-resource-ownership-contract.md ADR documenting why/how the ownership contract was added and expected consequences.
Files not reviewed (1)
  • plugin/external/proto/iac_grpc.pb.go: Language not supported

Comment thread cmd/wfctl/infra_owners.go
Comment thread cmd/wfctl/infra_apply_ownership.go
Comment thread cmd/wfctl/infra_apply_ownership.go
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:306: parsing iteration count: invalid syntax
baseline-bench.txt:310345: parsing iteration count: invalid syntax
baseline-bench.txt:646559: parsing iteration count: invalid syntax
baseline-bench.txt:973899: parsing iteration count: invalid syntax
baseline-bench.txt:1289491: parsing iteration count: invalid syntax
baseline-bench.txt:1600244: parsing iteration count: invalid syntax
benchmark-results.txt:306: parsing iteration count: invalid syntax
benchmark-results.txt:295405: parsing iteration count: invalid syntax
benchmark-results.txt:581636: parsing iteration count: invalid syntax
benchmark-results.txt:934977: parsing iteration count: invalid syntax
benchmark-results.txt:1212082: parsing iteration count: invalid syntax
benchmark-results.txt:1484756: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │       benchmark-results.txt        │
                            │       sec/op       │    sec/op     vs base              │
InterpreterCreation-4               9.576m ± 68%   9.323m ± 64%       ~ (p=1.000 n=6)
ComponentLoad-4                     3.499m ± 11%   3.483m ±  1%       ~ (p=0.589 n=6)
ComponentExecute-4                  1.810µ ±  2%   1.832µ ±  1%       ~ (p=0.065 n=6)
PoolContention/workers-1-4          1.018µ ±  2%   1.023µ ±  2%       ~ (p=0.288 n=6)
PoolContention/workers-2-4          1.009µ ±  3%   1.043µ ±  2%  +3.42% (p=0.004 n=6)
PoolContention/workers-4-4          1.037µ ±  1%   1.046µ ±  3%       ~ (p=0.197 n=6)
PoolContention/workers-8-4          1.018µ ±  3%   1.020µ ±  3%       ~ (p=0.411 n=6)
PoolContention/workers-16-4         1.009µ ±  0%   1.027µ ±  1%  +1.73% (p=0.002 n=6)
ComponentLifecycle-4                3.525m ±  1%   3.510m ±  1%       ~ (p=0.394 n=6)
SourceValidation-4                  2.097µ ±  1%   2.117µ ±  2%       ~ (p=0.069 n=6)
RegistryConcurrent-4                746.6n ±  2%   772.3n ±  4%       ~ (p=0.065 n=6)
LoaderLoadFromString-4              3.565m ±  1%   3.563m ±  1%       ~ (p=0.818 n=6)
geomean                             18.18µ         18.31µ        +0.72%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.455 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.115 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.900 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.130 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                  300.3n ± 2%   298.4n ± 6%       ~ (p=0.180 n=6)
CircuitBreakerExecution_Success-4          22.67n ± 1%   22.68n ± 1%       ~ (p=0.229 n=6)
CircuitBreakerExecution_Failure-4          70.95n ± 0%   70.93n ± 0%       ~ (p=0.509 n=6)
geomean                                    78.46n        78.30n       -0.20%

                                  │ 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              │
IaCStateBackend_InProcess-4              289.0n ±  1%   317.0n ± 18%       ~ (p=0.190 n=6)
IaCStateBackend_GRPC-4                   11.30m ± 11%   10.14m ±  2%       ~ (p=0.310 n=6)
JQTransform_Simple-4                     658.2n ± 31%   663.2n ± 24%       ~ (p=0.937 n=6)
JQTransform_ObjectConstruction-4         1.413µ ±  1%   1.385µ ±  1%  -1.95% (p=0.002 n=6)
JQTransform_ArraySelect-4                3.394µ ±  0%   3.441µ ±  1%  +1.40% (p=0.004 n=6)
JQTransform_Complex-4                    41.38µ ±  1%   42.49µ ±  1%  +2.69% (p=0.002 n=6)
JQTransform_Throughput-4                 1.745µ ±  1%   1.703µ ±  1%  -2.41% (p=0.002 n=6)
SSEPublishDelivery-4                     63.85n ±  1%   64.46n ±  1%       ~ (p=0.065 n=6)
geomean                                  3.842µ         3.841µ        -0.03%

                                 │ baseline-bench.txt │         benchmark-results.txt         │
                                 │        B/op        │     B/op       vs base                │
IaCStateBackend_InProcess-4             416.0 ±  0%       416.0 ±  0%       ~ (p=1.000 n=6) ¹
IaCStateBackend_GRPC-4                5.696Mi ± 14%     5.732Mi ± 12%       ~ (p=0.937 n=6)
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.31Ki ±  0%     16.31Ki ±  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.08%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │        benchmark-results.txt        │
                                 │     allocs/op      │  allocs/op   vs base                │
IaCStateBackend_InProcess-4              2.000 ± 0%      2.000 ± 0%       ~ (p=1.000 n=6) ¹
IaCStateBackend_GRPC-4                  6.853k ± 0%     6.861k ± 0%       ~ (p=0.240 n=6)
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                    328.0 ± 0%      328.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.01%               ²
¹ 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.082µ ± 2%   1.085µ ± 16%       ~ (p=0.455 n=6)
SchemaValidation_AllFields-4                 1.642µ ± 2%   1.666µ ±  3%       ~ (p=0.509 n=6)
SchemaValidation_FormatValidation-4          1.560µ ± 1%   1.566µ ±  1%       ~ (p=0.734 n=6)
SchemaValidation_ManySchemas-4               1.607µ ± 3%   1.588µ ±  2%       ~ (p=0.786 n=6)
geomean                                      1.452µ        1.456µ        +0.25%

                                    │ 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.091µ ± 17%   1.067µ ± 14%       ~ (p=0.485 n=6)
EventStoreAppend_SQLite-4                  1.010m ±  5%   1.109m ±  4%  +9.79% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           13.45µ ±  2%   13.49µ ±  3%       ~ (p=0.937 n=6)
GetTimeline_InMemory/events-50-4           72.54µ ±  2%   72.83µ ± 24%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-100-4          114.0µ ± 28%   110.9µ ±  1%  -2.77% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          580.5µ ±  1%   563.0µ ±  1%  -3.03% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.187m ±  3%   1.141m ±  1%  -3.88% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             86.55µ ±  1%   84.96µ ±  2%  -1.84% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             225.0µ ±  0%   222.8µ ±  2%       ~ (p=0.394 n=6)
GetTimeline_SQLite/events-100-4            395.3µ ±  1%   389.5µ ±  1%  -1.47% (p=0.009 n=6)
GetTimeline_SQLite/events-500-4            1.729m ±  1%   1.677m ±  1%  -2.97% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.359m ±  0%   3.313m ±  1%  -1.36% (p=0.002 n=6)
geomean                                    198.7µ         196.9µ        -0.89%

                                   │ baseline-bench.txt │         benchmark-results.txt         │
                                   │        B/op        │     B/op       vs base                │
EventStoreAppend_InMemory-4                  745.0 ± 5%     754.0 ± 10%       ~ (p=0.242 n=6)
EventStoreAppend_SQLite-4                  1.984Ki ± 1%   1.983Ki ±  2%       ~ (p=0.673 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.041 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.032 n=6)
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%   1.639Mi ±  0%  +0.00% (p=0.022 n=6)
geomean                                    67.01Ki        67.08Ki        +0.10%
¹ 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.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 1, 2026

Copilot AI review requested due to automatic review settings June 1, 2026 22:19
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 20 out of 22 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • plugin/external/proto/iac_grpc.pb.go: Language not supported

Comment thread cmd/wfctl/infra_apply_ownership.go
Comment thread cmd/wfctl/infra_apply_ownership.go Outdated
@intel352 intel352 merged commit 0072d32 into main Jun 1, 2026
28 checks passed
@intel352 intel352 deleted the issue-779-ownership-tags branch June 1, 2026 22:46
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