Skip to content

Cloud-SDK extraction — PR 7 (Amendment A2): SDK serve hook + ListBackendNames RPC + manifest field#673

Merged
intel352 merged 8 commits into
mainfrom
feat/cloud-sdk-extraction-p7-serve
May 14, 2026
Merged

Cloud-SDK extraction — PR 7 (Amendment A2): SDK serve hook + ListBackendNames RPC + manifest field#673
intel352 merged 8 commits into
mainfrom
feat/cloud-sdk-extraction-p7-serve

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

Amendment A2 (decisions/0035). Post-merge of PRs #668/#669/#670/#671, an integration-surface investigation found the plugin-serve seam the design assumed did not exist in plugin/external/sdk. This PR closes it — it is the prerequisite for the cross-repo PR 4 (workflow-plugin-azure serving azure_blob).

  • Task 16 — add a ListBackendNames RPC to the IaCStateBackend service in iac.proto (regenerated via buf). Lets the engine ask a loaded plugin which iac.state backend names it serves. Additive; honors the iac.proto no-structpb invariant.
  • Task 17registerIaCServicesOnly now type-asserts pb.IaCStateBackendServer, so ServeIaCPlugin auto-registers it alongside the IaCProvider* optionals — a plugin whose provider type also implements the state-backend interface serves it with no extra wiring.
  • Task 18PluginManifest.IaCStateBackends []string + decode wiring (top-level key and nested capabilities.iacStateBackends). The authoring point for which backend names a plugin serves.

Also carries the Amendment A2 plan changes: decisions/0035 + the manifest re-amendment (6 PRs/15 tasks → 8 PRs/19 tasks) + the re-lock (alignment re-passed, zero drift).

Design / Plan / ADR

  • ADR: decisions/0035-iac-state-backend-plugin-integration-surface.md
  • Plan: docs/plans/2026-05-14-cloud-sdk-extraction.md (re-locked after A2)

Scope Manifest

PR Count: 8 · Tasks: 19 · Status: Locked 2026-05-14T18:43:55Z
This is PR 7Tasks 16, 17, 18 — branch feat/cloud-sdk-extraction-p7-serve. Base main (PRs 1/2/3/6 already merged).

Test status

go test ./plugin/... ./plugin/external/... ./wftest/bdd/ green; full go build ./... clean. The two repo-wide pre-existing failures (TestFallbackRuns, TestInfraMultiEnv_E2E) are unrelated — see PR #668.

🤖 Generated with Claude Code

intel352 and others added 7 commits May 14, 2026 14:07
Records the integration-gap investigation (post PR 1/2/3/6 merge) + the
two operator decisions that unblock the rest of the cloud-SDK extraction:

- Plugin-serve gap: ServeIaCPlugin has zero IaCStateBackend awareness; the
  plan's Task 11 assumed a seam that doesn't exist.
- Backend-name advertisement: plugin.json capabilities.iacStateBackends
  as the authoring point, exposed at runtime via a new ListBackendNames
  RPC on the IaCStateBackend service; engine cross-checks ContractRegistry.
- One type carries both concerns: azureIaCServer implements
  pb.IaCStateBackendServer alongside its provider interfaces.
- Plan restructure: adds PR 7 (SDK serve hook + ListBackendNames RPC +
  manifest field) and PR 8 (engine host-wiring); PR 4 depends on PR 7,
  PR 5 depends on PR 4 + PR 8.

The plan manifest amendment + re-alignment + re-lock is the next step and
requires an operator unlock (the lock commit squash-merged into main, so
the prior `git revert` unlock path is no longer cleanly available).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…R 8)

Post-merge of PRs 1/2/3/6, the integration-surface investigation
(decisions/0035) found the plugin-serve and host-resolve seams the
design assumed did not exist. Amendment A2:

- PR 7 (workflow): SDK serve hook auto-registering pb.IaCStateBackendServer
  (Task 17) + ListBackendNames RPC on the IaCStateBackend service
  (Task 16) + plugin.PluginManifest.IaCStateBackends field (Task 18).
  Must merge before PR 4.
- PR 8 (workflow): engine host-wiring — exported RegisterIaCStateBackend +
  ExternalPluginAdapter.IaCStateBackendClients() + the loadPluginInternal
  optional-interface seam (Task 19). The expanded form of the original
  Task 14's engine half.
- Task 14 trimmed to migration-doc-only.
- PR 4 revised: depends on PR 7; azureIaCServer implements
  pb.IaCStateBackendServer directly (one type, both concerns per
  decisions/0035); the SDK serve hook auto-registers it.
- Manifest: 6 PRs/15 tasks -> 8 PRs/19 tasks. PRs 1/2/3/6 marked MERGED.
  Execution order: PR 7 -> PR 4 -> PR 8 -> PR 5.

Next: re-run alignment-check, then re-lock.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Lets the engine ask a loaded plugin which iac.state backend NAMES it
serves. Additive; honors the iac.proto no-structpb invariant. Part of
Amendment A2 (decisions/0035).
registerIaCServicesOnly now type-asserts pb.IaCStateBackendServer and
registers it, alongside the IaCProvider* optionals — so a plugin whose
provider type also implements the state-backend interface serves it with
no extra wiring. Amendment A2 (decisions/0035).
…vertisement

A plugin declares the iac.state backend names it serves via plugin.json
capabilities.iacStateBackends; this adds the matching Go field + ensures
the decode path populates it. The engine (PR 8 / Task 19) reads it and
cross-checks against the ListBackendNames RPC. Amendment A2
(decisions/0035).
Code-review Minors: the IaCStateBackends field has two authoring paths
(top-level key + nested under capabilities); add a test for the
top-level path and the absent case, and broaden the field doc comment to
mention both paths.
Copilot AI review requested due to automatic review settings May 14, 2026 18:57
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 the missing SDK + contract surface needed for IaC state-backend plugins to advertise and serve iac.state backends (per Amendment A2 / decisions/0035), so cross-repo plugins (e.g. workflow-plugin-azure serving azure_blob) can be wired end-to-end in the next PRs.

Changes:

  • Extend IaCStateBackend gRPC contract with ListBackendNames (+ regenerated bindings + compile-guard test).
  • Update plugin/external/sdk auto-registration to also register pb.IaCStateBackendServer when implemented by the provider.
  • Add PluginManifest.IaCStateBackends and legacy-capabilities promotion + tests; update plan + scope lock + decision record.

Reviewed changes

Copilot reviewed 9 out of 11 changed files in this pull request and generated no comments.

Show a summary per file
File Description
plugin/manifest.go Adds IaCStateBackends manifest field and promotes it from legacy capabilities object during JSON unmarshal.
plugin/manifest_test.go Adds tests covering legacy + top-level decode paths for iacStateBackends.
plugin/external/sdk/iacserver.go Auto-registers pb.IaCStateBackendServer alongside existing IaC optional services.
plugin/external/sdk/iacserver_test.go Verifies IaCStateBackend service gets registered when the provider satisfies the interface.
plugin/external/proto/iac.proto Adds ListBackendNames RPC + request/response messages to IaCStateBackend.
plugin/external/proto/iac.pb.go Regenerated protobuf message bindings for the new RPC/messages.
plugin/external/proto/iac_grpc.pb.go Regenerated gRPC bindings (client/server/handlers/service desc) for ListBackendNames.
plugin/external/proto/iac_statebackend_test.go Extends compile-level guards to assert the new RPC/messages exist in generated code.
docs/plans/2026-05-14-cloud-sdk-extraction.md.scope-lock Updates scope-lock hash after plan amendment changes.
docs/plans/2026-05-14-cloud-sdk-extraction.md Updates the plan for Amendment A2 (adds PR 7/8, tasks, ordering, dependency notes).
decisions/0035-iac-state-backend-plugin-integration-surface.md New ADR documenting the integration-surface gap and the A2 plan restructure.
Files not reviewed (2)
  • plugin/external/proto/iac.pb.go: Language not supported
  • plugin/external/proto/iac_grpc.pb.go: Language not supported

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 14, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:276: parsing iteration count: invalid syntax
baseline-bench.txt:327757: parsing iteration count: invalid syntax
baseline-bench.txt:646097: parsing iteration count: invalid syntax
baseline-bench.txt:916779: parsing iteration count: invalid syntax
baseline-bench.txt:1193002: parsing iteration count: invalid syntax
baseline-bench.txt:1458866: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:302191: parsing iteration count: invalid syntax
benchmark-results.txt:585059: parsing iteration count: invalid syntax
benchmark-results.txt:1072065: parsing iteration count: invalid syntax
benchmark-results.txt:1372966: parsing iteration count: invalid syntax
benchmark-results.txt:1688483: 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              5.152m ± 102%   8.853m ± 65%       ~ (p=0.699 n=6)
ComponentLoad-4                    3.584m ±  11%   3.585m ±  0%       ~ (p=0.818 n=6)
ComponentExecute-4                 1.960µ ±   1%   1.941µ ±  0%  -0.97% (p=0.002 n=6)
PoolContention/workers-1-4         1.100µ ±   1%   1.080µ ±  1%  -1.77% (p=0.002 n=6)
PoolContention/workers-2-4         1.095µ ±   1%   1.083µ ±  1%  -1.14% (p=0.013 n=6)
PoolContention/workers-4-4         1.099µ ±   1%   1.085µ ±  1%  -1.23% (p=0.013 n=6)
PoolContention/workers-8-4         1.105µ ±   1%   1.086µ ±  1%  -1.67% (p=0.002 n=6)
PoolContention/workers-16-4        1.111µ ±   3%   1.090µ ±  2%  -1.89% (p=0.015 n=6)
ComponentLifecycle-4               3.667m ±   1%   3.632m ±  1%       ~ (p=0.093 n=6)
SourceValidation-4                 2.357µ ±   1%   2.303µ ±  1%  -2.29% (p=0.002 n=6)
RegistryConcurrent-4               803.7n ±   3%   787.7n ±  3%       ~ (p=0.180 n=6)
LoaderLoadFromString-4             3.705m ±   2%   3.619m ±  1%  -2.32% (p=0.002 n=6)
geomean                            18.41µ          18.99µ        +3.20%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.855 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.310 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.420 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.370 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                  286.8n ± 1%   286.7n ± 4%       ~ (p=0.732 n=6)
CircuitBreakerExecution_Success-4          21.53n ± 0%   21.44n ± 0%  -0.39% (p=0.006 n=6)
CircuitBreakerExecution_Failure-4          66.20n ± 0%   66.43n ± 0%  +0.36% (p=0.013 n=6)
geomean                                    74.21n        74.19n       -0.03%

                                  │ 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              316.8n ± 31%   317.5n ± 23%       ~ (p=0.589 n=6)
IaCStateBackend_GRPC-4                   10.05m ±  2%   10.29m ±  2%  +2.39% (p=0.015 n=6)
JQTransform_Simple-4                     726.9n ± 29%   661.9n ± 33%       ~ (p=0.180 n=6)
JQTransform_ObjectConstruction-4         1.552µ ±  2%   1.465µ ±  0%  -5.61% (p=0.002 n=6)
JQTransform_ArraySelect-4                3.530µ ±  2%   3.355µ ±  0%  -4.97% (p=0.002 n=6)
JQTransform_Complex-4                    40.29µ ±  0%   38.43µ ±  1%  -4.64% (p=0.002 n=6)
JQTransform_Throughput-4                 1.919µ ±  1%   1.798µ ±  0%  -6.31% (p=0.002 n=6)
SSEPublishDelivery-4                     63.72n ±  0%   63.47n ±  0%  -0.38% (p=0.009 n=6)
geomean                                  3.976µ         3.833µ        -3.59%

                                 │ 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.840Mi ± 11%     6.050Mi ± 8%       ~ (p=0.310 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.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.44%               ²
¹ 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.841k ± 0%     6.835k ± 0%       ~ (p=0.574 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                    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.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.101µ ± 15%   1.117µ ± 7%       ~ (p=0.394 n=6)
SchemaValidation_AllFields-4                1.676µ ±  4%   1.664µ ± 2%       ~ (p=0.327 n=6)
SchemaValidation_FormatValidation-4         1.585µ ±  4%   1.595µ ± 1%       ~ (p=0.394 n=6)
SchemaValidation_ManySchemas-4              1.802µ ±  3%   1.859µ ± 3%  +3.16% (p=0.015 n=6)
geomean                                     1.515µ         1.532µ       +1.13%

                                    │ 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.307µ ± 15%   1.262µ ± 16%        ~ (p=0.394 n=6)
EventStoreAppend_SQLite-4                  1.386m ±  6%   1.431m ±  4%   +3.26% (p=0.041 n=6)
GetTimeline_InMemory/events-10-4           14.82µ ±  2%   13.71µ ±  2%   -7.50% (p=0.002 n=6)
GetTimeline_InMemory/events-50-4           66.07µ ± 24%   75.72µ ±  3%        ~ (p=0.394 n=6)
GetTimeline_InMemory/events-100-4          131.8µ ±  2%   155.1µ ± 12%  +17.72% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          677.6µ ±  1%   634.9µ ±  1%   -6.30% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.374m ±  1%   1.307m ±  2%   -4.88% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             112.6µ ±  1%   106.8µ ±  1%   -5.13% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             264.0µ ±  1%   249.5µ ±  0%   -5.47% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            447.5µ ±  1%   421.9µ ±  1%   -5.72% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.921m ±  1%   1.805m ±  1%   -6.04% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.696m ±  4%   3.527m ±  2%   -4.55% (p=0.002 n=6)
geomean                                    228.8µ         225.5µ         -1.43%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  808.0 ± 5%     817.5 ± 9%       ~ (p=0.853 n=6)
EventStoreAppend_SQLite-4                  1.986Ki ± 3%   1.985Ki ± 1%       ~ (p=0.669 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=0.567 n=6)
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%   944.3Ki ± 0%       ~ (p=0.394 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%       ~ (p=0.061 n=6)
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%   1.639Mi ± 0%       ~ (p=0.394 n=6)
geomean                                    67.48Ki        67.54Ki       +0.09%
¹ 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 May 14, 2026

Codecov Report

❌ Patch coverage is 17.14286% with 58 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
plugin/external/proto/iac.pb.go 9.75% 37 Missing ⚠️
plugin/external/proto/iac_grpc.pb.go 0.00% 21 Missing ⚠️

📢 Thoughts on this report? Let us know!

The ListBackendNames RPC added to the IaCStateBackend service made the
test-only fakeStateBackendClient stub no longer satisfy the
pb.IaCStateBackendClient interface, breaking the module package
typecheck (Lint) and the Test (Go 1.26) job. Add the no-op method.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@intel352 intel352 merged commit 9d7ca68 into main May 14, 2026
25 of 26 checks passed
@intel352 intel352 deleted the feat/cloud-sdk-extraction-p7-serve branch May 14, 2026 19:25
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