Skip to content

Cloud-SDK extraction — PR 8 (Amendment A2): engine host-wiring for iac.state plugin backends#674

Merged
intel352 merged 2 commits into
mainfrom
feat/cloud-sdk-extraction-p8-hostwire
May 14, 2026
Merged

Cloud-SDK extraction — PR 8 (Amendment A2): engine host-wiring for iac.state plugin backends#674
intel352 merged 2 commits into
mainfrom
feat/cloud-sdk-extraction-p8-hostwire

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

Amendment A2 (decisions/0035) — the host-resolve half. Wires the workflow engine to resolve a plugin-served IaCStateBackend at plugin-load time, so iac.state backend: <name> dispatches to it.

  • Task 19 — exported module.RegisterIaCStateBackend wrapper; new plugin.IaCStateBackendProvider optional interface; *ExternalPluginAdapter.IaCStateBackendClients() (checks the ContractRegistry advertises the service, calls the ListBackendNames RPC for the live backend names, cross-checks against the plugin's PluginManifest.IaCStateBackends, returns name→client); engine.go loadPluginInternal gains the optional-interface type-assert (sibling to stepRegistrySetter/slogLoggerSetter) that populates the registry. Reserved-name rejection is enforced at the registry boundary; a plugin advertising a bad/reserved backend fails plugin-load loudly.

Cross-check semantics: the ListBackendNames RPC is live truth; when the plugin's disk manifest declares a non-empty iacStateBackends it must set-equal the RPC result (else error); a silent manifest accepts the RPC alone (accommodates strict-cutover plugins that leave GetManifest unimplemented).

Scope Manifest

PR Count: 8 · Tasks: 19 · Status: Locked 2026-05-14T18:43:55Z
This is PR 8Task 19 — branch feat/cloud-sdk-extraction-p8-hostwire. Base main. Depends on PR 7 (#673, merged). May land in parallel with PR 4; both precede PR 5.

Test status

6 files (4 source + 2 test). go build ./..., go vet, go test ./module/ ./plugin/external/ green; 4 bufconn-based adapter tests cover advertise+agree / silent-manifest / RPC-manifest-disagree / no-service-advertised. Negative launch check: server boots cleanly on the no-plugin path. The two repo-wide pre-existing failures are unrelated — see PR #668.

🤖 Generated with Claude Code

At plugin-load, the engine type-asserts plugins for IaCStateBackendProvider,
calls the plugin's ListBackendNames RPC (cross-checked against its
PluginManifest.IaCStateBackends), and registers each backend name — so
iac.state backend: azure_blob resolves to a plugin-served gRPC backend
with zero manual wiring. Amendment A2 (decisions/0035).

Rollback: revert — registry + IaCModule.Init dispatch survive; only the
engine auto-population is removed; core backends unaffected.
Copilot AI review requested due to automatic review settings May 14, 2026 19:38
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

Wires the workflow engine to discover and register plugin-served iac.state backends at plugin-load time (Amendment A2 / decisions/0035), enabling iac.state configs to dispatch backend: <name> to a gRPC-backed plugin implementation.

Changes:

  • Introduces plugin.IaCStateBackendProvider and has ExternalPluginAdapter implement it via IaCStateBackendClients() using ContractRegistry + ListBackendNames.
  • Adds an exported module.RegisterIaCStateBackend wrapper around the package-level backend registry (including reserved-name enforcement at the registry boundary).
  • Hooks backend registration into StdEngine.loadPluginInternal and adds bufconn-based adapter tests + registry wrapper test coverage.

Reviewed changes

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

Show a summary per file
File Description
plugin/iac_state_backend_provider.go Adds optional engine-facing interface for plugins that can provide IaC state backends.
plugin/external/adapter.go Implements backend discovery via ContractRegistry advertisement + ListBackendNames RPC and returns name → client mapping.
plugin/external/adapter_test.go Adds bufconn tests covering advertised/agree, silent manifest, mismatch, and no-service cases.
module/iac_state_plugin_registry.go Exposes RegisterIaCStateBackend wrapper for engine-side registration into the singleton registry.
module/iac_state_plugin_registry_test.go Adds test coverage for the exported registry wrapper and reserved-name rejection.
engine.go Registers plugin-provided backends during plugin load via optional interface type-assertion.

Comment thread plugin/external/adapter.go Outdated
Comment thread plugin/external/adapter.go
@codecov
Copy link
Copy Markdown

codecov Bot commented May 14, 2026

Codecov Report

❌ Patch coverage is 69.64286% with 17 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
plugin/external/adapter.go 78.72% 5 Missing and 5 partials ⚠️
engine.go 0.00% 6 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@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:350509: parsing iteration count: invalid syntax
baseline-bench.txt:690596: parsing iteration count: invalid syntax
baseline-bench.txt:1008081: parsing iteration count: invalid syntax
baseline-bench.txt:1282855: parsing iteration count: invalid syntax
baseline-bench.txt:1605788: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:328813: parsing iteration count: invalid syntax
benchmark-results.txt:670088: parsing iteration count: invalid syntax
benchmark-results.txt:970950: parsing iteration count: invalid syntax
benchmark-results.txt:1299586: parsing iteration count: invalid syntax
benchmark-results.txt:1852112: 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 │
                            │       sec/op       │
InterpreterCreation-4               5.463m ± 82%
ComponentLoad-4                     3.551m ±  9%
ComponentExecute-4                  1.829µ ±  0%
PoolContention/workers-1-4          1.010µ ±  2%
PoolContention/workers-2-4          1.018µ ±  1%
PoolContention/workers-4-4          1.013µ ±  1%
PoolContention/workers-8-4          1.020µ ±  1%
PoolContention/workers-16-4         1.046µ ±  4%
ComponentLifecycle-4                3.637m ±  1%
SourceValidation-4                  2.192µ ±  1%
RegistryConcurrent-4                811.8n ±  4%
LoaderLoadFromString-4              3.687m ±  1%
geomean                             17.69µ

                            │ baseline-bench.txt │
                            │        B/op        │
InterpreterCreation-4               2.027Mi ± 0%
ComponentLoad-4                     2.180Mi ± 0%
ComponentExecute-4                  1.203Ki ± 0%
PoolContention/workers-1-4          1.203Ki ± 0%
PoolContention/workers-2-4          1.203Ki ± 0%
PoolContention/workers-4-4          1.203Ki ± 0%
PoolContention/workers-8-4          1.203Ki ± 0%
PoolContention/workers-16-4         1.203Ki ± 0%
ComponentLifecycle-4                2.183Mi ± 0%
SourceValidation-4                  1.984Ki ± 0%
RegistryConcurrent-4                1.133Ki ± 0%
LoaderLoadFromString-4              2.182Mi ± 0%
geomean                             15.25Ki

                            │ baseline-bench.txt │
                            │     allocs/op      │
InterpreterCreation-4                15.68k ± 0%
ComponentLoad-4                      18.02k ± 0%
ComponentExecute-4                    25.00 ± 0%
PoolContention/workers-1-4            25.00 ± 0%
PoolContention/workers-2-4            25.00 ± 0%
PoolContention/workers-4-4            25.00 ± 0%
PoolContention/workers-8-4            25.00 ± 0%
PoolContention/workers-16-4           25.00 ± 0%
ComponentLifecycle-4                 18.07k ± 0%
SourceValidation-4                    32.00 ± 0%
RegistryConcurrent-4                  2.000 ± 0%
LoaderLoadFromString-4               18.06k ± 0%
geomean                               183.3

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                 4.813m ± 112%
ComponentLoad-4                       3.665m ±   8%
ComponentExecute-4                    1.926µ ±   2%
PoolContention/workers-1-4            1.230µ ±   2%
PoolContention/workers-2-4            1.223µ ±   2%
PoolContention/workers-4-4            1.234µ ±   2%
PoolContention/workers-8-4            1.219µ ±   2%
PoolContention/workers-16-4           1.225µ ±   2%
ComponentLifecycle-4                  3.767m ±   4%
SourceValidation-4                    2.253µ ±   2%
RegistryConcurrent-4                  894.7n ±   4%
LoaderLoadFromString-4                3.805m ±   3%
geomean                               19.33µ

                            │ benchmark-results.txt │
                            │         B/op          │
InterpreterCreation-4                  2.027Mi ± 0%
ComponentLoad-4                        2.180Mi ± 0%
ComponentExecute-4                     1.203Ki ± 0%
PoolContention/workers-1-4             1.203Ki ± 0%
PoolContention/workers-2-4             1.203Ki ± 0%
PoolContention/workers-4-4             1.203Ki ± 0%
PoolContention/workers-8-4             1.203Ki ± 0%
PoolContention/workers-16-4            1.203Ki ± 0%
ComponentLifecycle-4                   2.183Mi ± 0%
SourceValidation-4                     1.984Ki ± 0%
RegistryConcurrent-4                   1.133Ki ± 0%
LoaderLoadFromString-4                 2.182Mi ± 0%
geomean                                15.25Ki

                            │ benchmark-results.txt │
                            │       allocs/op       │
InterpreterCreation-4                   15.68k ± 0%
ComponentLoad-4                         18.02k ± 0%
ComponentExecute-4                       25.00 ± 0%
PoolContention/workers-1-4               25.00 ± 0%
PoolContention/workers-2-4               25.00 ± 0%
PoolContention/workers-4-4               25.00 ± 0%
PoolContention/workers-8-4               25.00 ± 0%
PoolContention/workers-16-4              25.00 ± 0%
ComponentLifecycle-4                    18.07k ± 0%
SourceValidation-4                       32.00 ± 0%
RegistryConcurrent-4                     2.000 ± 0%
LoaderLoadFromString-4                  18.06k ± 0%
geomean                                  183.3

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                 305.7n ± 11%
CircuitBreakerExecution_Success-4         22.68n ±  0%
CircuitBreakerExecution_Failure-4         71.19n ±  0%
geomean                                   79.03n

                                  │ baseline-bench.txt │
                                  │        B/op        │
CircuitBreakerDetection-4                 144.0 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │
                                  │     allocs/op      │
CircuitBreakerDetection-4                 1.000 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     459.5n ± 1%
CircuitBreakerExecution_Success-4             59.74n ± 0%
CircuitBreakerExecution_Failure-4             65.38n ± 1%
geomean                                       121.5n

                                  │ benchmark-results.txt │
                                  │         B/op          │
CircuitBreakerDetection-4                    144.0 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                  │ benchmark-results.txt │
                                  │       allocs/op       │
CircuitBreakerDetection-4                    1.000 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              288.7n ±  1%
IaCStateBackend_GRPC-4                   9.815m ± 15%
JQTransform_Simple-4                     676.2n ± 41%
JQTransform_ObjectConstruction-4         1.555µ ±  1%
JQTransform_ArraySelect-4                3.638µ ±  1%
JQTransform_Complex-4                    42.77µ ±  1%
JQTransform_Throughput-4                 1.923µ ±  2%
SSEPublishDelivery-4                     64.94n ±  1%
geomean                                  3.939µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4             416.0 ±  0%
IaCStateBackend_GRPC-4                5.735Mi ± 12%
JQTransform_Simple-4                  1.273Ki ±  0%
JQTransform_ObjectConstruction-4      1.773Ki ±  0%
JQTransform_ArraySelect-4             2.625Ki ±  0%
JQTransform_Complex-4                 16.22Ki ±  0%
JQTransform_Throughput-4              1.984Ki ±  0%
SSEPublishDelivery-4                    0.000 ±  0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │
                                 │     allocs/op      │
IaCStateBackend_InProcess-4              2.000 ± 0%
IaCStateBackend_GRPC-4                  6.860k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    324.0 ± 0%
JQTransform_Throughput-4                 17.00 ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 362.2n ± 25%
IaCStateBackend_GRPC-4                      9.670m ±  4%
JQTransform_Simple-4                        753.0n ± 23%
JQTransform_ObjectConstruction-4            1.589µ ±  3%
JQTransform_ArraySelect-4                   3.402µ ±  3%
JQTransform_Complex-4                       36.71µ ±  1%
JQTransform_Throughput-4                    1.934µ ±  2%
SSEPublishDelivery-4                        77.20n ±  0%
geomean                                     4.089µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                 416.0 ± 0%
IaCStateBackend_GRPC-4                    5.672Mi ± 6%
JQTransform_Simple-4                      1.273Ki ± 0%
JQTransform_ObjectConstruction-4          1.773Ki ± 0%
JQTransform_ArraySelect-4                 2.625Ki ± 0%
JQTransform_Complex-4                     16.22Ki ± 0%
JQTransform_Throughput-4                  1.984Ki ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                 │ benchmark-results.txt │
                                 │       allocs/op       │
IaCStateBackend_InProcess-4                 2.000 ± 0%
IaCStateBackend_GRPC-4                     6.876k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       324.0 ± 0%
JQTransform_Throughput-4                    17.00 ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                    1.090µ ± 9%
SchemaValidation_AllFields-4                 1.626µ ± 3%
SchemaValidation_FormatValidation-4          1.578µ ± 2%
SchemaValidation_ManySchemas-4               1.598µ ± 2%
geomean                                      1.454µ

                                    │ baseline-bench.txt │
                                    │        B/op        │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │
                                    │     allocs/op      │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.017µ ±  3%
SchemaValidation_AllFields-4                   1.520µ ± 22%
SchemaValidation_FormatValidation-4            1.484µ ±  1%
SchemaValidation_ManySchemas-4                 1.501µ ±  4%
geomean                                        1.362µ

                                    │ benchmark-results.txt │
                                    │         B/op          │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

                                    │ benchmark-results.txt │
                                    │       allocs/op       │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.095µ ± 30%
EventStoreAppend_SQLite-4                  1.045m ±  2%
GetTimeline_InMemory/events-10-4           12.43µ ±  2%
GetTimeline_InMemory/events-50-4           70.60µ ±  3%
GetTimeline_InMemory/events-100-4          110.9µ ± 25%
GetTimeline_InMemory/events-500-4          564.3µ ±  1%
GetTimeline_InMemory/events-1000-4         1.144m ±  1%
GetTimeline_SQLite/events-10-4             88.27µ ±  1%
GetTimeline_SQLite/events-50-4             225.4µ ±  1%
GetTimeline_SQLite/events-100-4            386.8µ ±  0%
GetTimeline_SQLite/events-500-4            1.676m ±  0%
GetTimeline_SQLite/events-1000-4           3.260m ±  0%
geomean                                    195.0µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  770.0 ± 8%
EventStoreAppend_SQLite-4                  1.986Ki ± 1%
GetTimeline_InMemory/events-10-4           7.953Ki ± 0%
GetTimeline_InMemory/events-50-4           46.62Ki ± 0%
GetTimeline_InMemory/events-100-4          94.48Ki ± 0%
GetTimeline_InMemory/events-500-4          472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%
GetTimeline_SQLite/events-10-4             16.74Ki ± 0%
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%
geomean                                    67.21Ki

                                   │ baseline-bench.txt │
                                   │     allocs/op      │
EventStoreAppend_InMemory-4                  7.000 ± 0%
EventStoreAppend_SQLite-4                    53.00 ± 0%
GetTimeline_InMemory/events-10-4             125.0 ± 0%
GetTimeline_InMemory/events-50-4             653.0 ± 0%
GetTimeline_InMemory/events-100-4           1.306k ± 0%
GetTimeline_InMemory/events-500-4           6.514k ± 0%
GetTimeline_InMemory/events-1000-4          13.02k ± 0%
GetTimeline_SQLite/events-10-4               382.0 ± 0%
GetTimeline_SQLite/events-50-4              1.852k ± 0%
GetTimeline_SQLite/events-100-4             3.681k ± 0%
GetTimeline_SQLite/events-500-4             18.54k ± 0%
GetTimeline_SQLite/events-1000-4            37.29k ± 0%
geomean                                     1.162k

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.119µ ± 23%
EventStoreAppend_SQLite-4                     954.3µ ±  3%
GetTimeline_InMemory/events-10-4              13.61µ ±  3%
GetTimeline_InMemory/events-50-4              76.01µ ±  4%
GetTimeline_InMemory/events-100-4             148.4µ ± 16%
GetTimeline_InMemory/events-500-4             629.8µ ±  3%
GetTimeline_InMemory/events-1000-4            1.287m ±  2%
GetTimeline_SQLite/events-10-4                83.49µ ±  2%
GetTimeline_SQLite/events-50-4                246.0µ ±  1%
GetTimeline_SQLite/events-100-4               447.8µ ±  3%
GetTimeline_SQLite/events-500-4               1.970m ±  2%
GetTimeline_SQLite/events-1000-4              3.912m ±  2%
geomean                                       214.4µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     776.0 ± 8%
EventStoreAppend_SQLite-4                     1.988Ki ± 1%
GetTimeline_InMemory/events-10-4              7.953Ki ± 0%
GetTimeline_InMemory/events-50-4              46.62Ki ± 0%
GetTimeline_InMemory/events-100-4             94.48Ki ± 0%
GetTimeline_InMemory/events-500-4             472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4            944.3Ki ± 0%
GetTimeline_SQLite/events-10-4                16.74Ki ± 0%
GetTimeline_SQLite/events-50-4                87.14Ki ± 0%
GetTimeline_SQLite/events-100-4               175.4Ki ± 0%
GetTimeline_SQLite/events-500-4               846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4              1.639Mi ± 0%
geomean                                       67.25Ki

                                   │ benchmark-results.txt │
                                   │       allocs/op       │
EventStoreAppend_InMemory-4                     7.000 ± 0%
EventStoreAppend_SQLite-4                       53.00 ± 0%
GetTimeline_InMemory/events-10-4                125.0 ± 0%
GetTimeline_InMemory/events-50-4                653.0 ± 0%
GetTimeline_InMemory/events-100-4              1.306k ± 0%
GetTimeline_InMemory/events-500-4              6.514k ± 0%
GetTimeline_InMemory/events-1000-4             13.02k ± 0%
GetTimeline_SQLite/events-10-4                  382.0 ± 0%
GetTimeline_SQLite/events-50-4                 1.852k ± 0%
GetTimeline_SQLite/events-100-4                3.681k ± 0%
GetTimeline_SQLite/events-500-4                18.54k ± 0%
GetTimeline_SQLite/events-1000-4               37.29k ± 0%
geomean                                        1.162k

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

- Source iacStateBackendServiceName from pb.IaCStateBackend_ServiceDesc
  .ServiceName instead of a hard-coded literal, so it cannot drift if the
  proto package path / service name changes.
- IaCStateBackendClients now errors when the disk manifest declares a
  non-empty IaCStateBackends list but the plugin does not advertise the
  IaCStateBackend service — previously this silent misconfiguration was
  swallowed as (nil, nil). Add test coverage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@intel352 intel352 requested a review from Copilot May 14, 2026 20:04
@intel352 intel352 merged commit 01f7476 into main May 14, 2026
28 checks passed
@intel352 intel352 deleted the feat/cloud-sdk-extraction-p8-hostwire branch May 14, 2026 20:08
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 6 out of 6 changed files in this pull request and generated 2 comments.

Comment on lines +5 to +8
// IaCStateBackendProvider is the optional interface an external-plugin adapter
// implements when its plugin serves one or more iac.state backends. The engine
// type-asserts loaded plugins against it (same pattern as stepRegistrySetter)
// and populates module's iac.state backend registry.
Comment thread engine.go
Comment on lines +331 to +340
if sb, ok := p.(plugin.IaCStateBackendProvider); ok {
clients, err := sb.IaCStateBackendClients()
if err != nil {
return fmt.Errorf("load plugin %q: iac.state backends: %w", p.EngineManifest().Name, err)
}
for name, client := range clients {
if err := module.RegisterIaCStateBackend(name, client); err != nil {
return fmt.Errorf("load plugin %q: %w", p.EngineManifest().Name, err)
}
}
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