Skip to content

feat(sdk): IaCServeOptions.TypedModules + .TypedSteps (future-prep for typed-Provider migration)#686

Merged
intel352 merged 1 commit into
mainfrom
feat/iac-bridge-typed-providers
May 15, 2026
Merged

feat(sdk): IaCServeOptions.TypedModules + .TypedSteps (future-prep for typed-Provider migration)#686
intel352 merged 1 commit into
mainfrom
feat/iac-bridge-typed-providers

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

  • Extends IaCServeOptions with TypedModules map[string]TypedModuleProvider + TypedSteps map[string]TypedStepProvider (parallel to the legacy Modules/Steps fields shipped in plan-2 PR 1).
  • mapBackedProvider now implements TypedModuleProvider + TypedStepProvider alongside the existing ModuleProvider + StepProvider impls. CreateTypedModule/CreateTypedStep return ErrTypedContractNotHandled when the type isn't in the typed map → grpc_server falls through to legacy CreateModule/CreateStep (Typed-first → legacy-fallback contract that grpc_server already implements).
  • Backwards compatible: existing legacy-only consumers (plan-2 plugins shipped v1.1.0 with strict descriptors + legacy Providers per ADR 0039) keep working unchanged. New consumers can adopt typed Providers as a clean drop-in via the existing protoc-generated config types from each plugin's internal/contracts/.
  • Scoped intentionally as future-prep — no consumer migration in this PR; the typed-Provider migration is a separate future plan when needed.

Test plan

  • 6 new tests in iacserver_modules_test.go: TypedModules/TypedSteps GetTypes union; CreateTypedModule/Step typed-first dispatch + legacy fallback; typed-only-without-legacy-map case
  • Existing 4 legacy-only tests (ModulesAndSteps_Delegate, Deterministic, ZeroValueOptions, NilBroker) — all pass; backwards-compat preserved
  • GOWORK=off go build ./... && go test ./... -race green
  • No structpb/Any introduced (iac.proto invariant)

🤖 Generated with Claude Code

…o providers

Adds two new map fields to IaCServeOptions and extends mapBackedProvider to
implement TypedModuleProvider + TypedStepProvider. Lets IaC plugins register
strict-proto module/step providers (sdk.NewTypedModuleFactory /
sdk.NewTypedStepFactory) through the existing IaC bridge — previously the
bridge accepted only the legacy ModuleProvider/StepProvider surface so
strict-typed providers were unreachable.

The dispatch contract (per grpc_server.go's existing CreateModule /
CreateStep handlers) is Typed-first → legacy-fallback: a type in
typedModules wins; absence returns ErrTypedContractNotHandled which causes
the dispatcher to try the legacy modules map. Coexistence is fully
supported — plugins can mix the two surfaces during migration.

mapBackedProvider.ModuleTypes / StepTypes stay legacy-only; the host
GetModuleTypes / GetStepTypes RPCs already merge TypedModuleTypes +
ModuleTypes via mergeTypeLists (typed-primary-first, then legacy-only
extras), so the union surfaces correctly through the existing path.

6 new tests in iacserver_modules_test.go cover:
- typed-only GetModuleTypes (no legacy map present)
- typed + legacy GetModuleTypes / GetStepTypes union via set-equality
- typed-first dispatch through CreateModule / CreateStep
- legacy-fallback when a type is not in the typed map

Existing legacy-only tests (ModulesAndSteps_Delegate, Deterministic,
ZeroValueOptions, NilBroker) continue to pass — backwards-compatible.

Full sdk + full workflow test suite green under -race; vet clean.

See decisions/0039 (forthcoming).
Copilot AI review requested due to automatic review settings May 15, 2026 20:48
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 typed module and step provider support to the IaC plugin SDK bridge, preparing IaC plugins for future strict-proto provider migration while preserving legacy provider fallback behavior.

Changes:

  • Extends IaCServeOptions with TypedModules and TypedSteps.
  • Wires typed provider maps through mapBackedProvider and typed-first/legacy-fallback dispatch.
  • Adds regression tests for typed discovery, typed dispatch, legacy fallback, and typed-only setup.

Reviewed changes

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

File Description
plugin/external/sdk/iacserver.go Adds typed module/step option fields and map-backed typed provider implementations.
plugin/external/sdk/iacserver_modules_test.go Adds tests covering typed IaC bridge discovery and dispatch behavior.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 15, 2026

Codecov Report

❌ Patch coverage is 92.59259% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
plugin/external/sdk/iacserver.go 92.59% 1 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown

⏱ 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:347521: parsing iteration count: invalid syntax
baseline-bench.txt:683936: parsing iteration count: invalid syntax
baseline-bench.txt:1035174: parsing iteration count: invalid syntax
baseline-bench.txt:1359625: parsing iteration count: invalid syntax
baseline-bench.txt:1630286: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:347623: parsing iteration count: invalid syntax
benchmark-results.txt:680480: parsing iteration count: invalid syntax
benchmark-results.txt:1173402: parsing iteration count: invalid syntax
benchmark-results.txt:1502782: parsing iteration count: invalid syntax
benchmark-results.txt:1821581: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  7.331m ± 58%
ComponentLoad-4                        3.515m ±  0%
ComponentExecute-4                     1.905µ ±  1%
PoolContention/workers-1-4             1.065µ ±  1%
PoolContention/workers-2-4             1.071µ ±  1%
PoolContention/workers-4-4             1.079µ ±  2%
PoolContention/workers-8-4             1.080µ ±  1%
PoolContention/workers-16-4            1.079µ ±  0%
ComponentLifecycle-4                   3.546m ±  0%
SourceValidation-4                     2.266µ ±  1%
RegistryConcurrent-4                   794.6n ±  3%
LoaderLoadFromString-4                 3.551m ±  3%
geomean                                18.49µ

                            │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4               7.661m ± 59%
ComponentLoad-4                     3.461m ±  2%
ComponentExecute-4                  1.839µ ±  1%
PoolContention/workers-1-4          1.175µ ±  1%
PoolContention/workers-2-4          1.178µ ±  1%
PoolContention/workers-4-4          1.171µ ±  1%
PoolContention/workers-8-4          1.181µ ±  1%
PoolContention/workers-16-4         1.174µ ±  1%
ComponentLifecycle-4                3.437m ±  1%
SourceValidation-4                  2.212µ ±  1%
RegistryConcurrent-4                867.9n ±  2%
LoaderLoadFromString-4              3.520m ±  2%
geomean                             19.22µ

                            │ 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

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 7763 64-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     283.7n ± 1%
CircuitBreakerExecution_Success-4             21.50n ± 0%
CircuitBreakerExecution_Failure-4             66.19n ± 0%
geomean                                       73.90n

                                  │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  448.3n ± 6%
CircuitBreakerExecution_Success-4          59.64n ± 0%
CircuitBreakerExecution_Failure-4          64.71n ± 0%
geomean                                    120.1n

                                  │ 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

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 7763 64-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 298.9n ± 26%
IaCStateBackend_GRPC-4                      9.712m ±  2%
JQTransform_Simple-4                        659.2n ± 33%
JQTransform_ObjectConstruction-4            1.466µ ±  0%
JQTransform_ArraySelect-4                   3.317µ ±  2%
JQTransform_Complex-4                       38.00µ ±  0%
JQTransform_Throughput-4                    1.784µ ±  0%
SSEPublishDelivery-4                        66.84n ±  9%
geomean                                     3.785µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                 416.0 ± 0%
IaCStateBackend_GRPC-4                    5.792Mi ± 7%
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.861k ± 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
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              333.2n ± 29%
IaCStateBackend_GRPC-4                   9.514m ±  3%
JQTransform_Simple-4                     710.5n ± 29%
JQTransform_ObjectConstruction-4         1.499µ ±  1%
JQTransform_ArraySelect-4                3.244µ ±  1%
JQTransform_Complex-4                    35.89µ ±  1%
JQTransform_Throughput-4                 1.821µ ±  1%
SSEPublishDelivery-4                     76.45n ±  1%
geomean                                  3.911µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4              416.0 ± 0%
IaCStateBackend_GRPC-4                 5.714Mi ± 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

                                 │ baseline-bench.txt │
                                 │     allocs/op      │
IaCStateBackend_InProcess-4              2.000 ± 0%
IaCStateBackend_GRPC-4                  6.872k ± 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 7763 64-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.117µ ± 16%
SchemaValidation_AllFields-4                   1.654µ ±  6%
SchemaValidation_FormatValidation-4            1.592µ ±  2%
SchemaValidation_ManySchemas-4                 1.811µ ±  3%
geomean                                        1.519µ

                                    │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                    1.018µ ± 3%
SchemaValidation_AllFields-4                 1.546µ ± 2%
SchemaValidation_FormatValidation-4          1.499µ ± 0%
SchemaValidation_ManySchemas-4               1.504µ ± 4%
geomean                                      1.372µ

                                    │ 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

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.248µ ± 15%
EventStoreAppend_SQLite-4                     1.441m ±  6%
GetTimeline_InMemory/events-10-4              13.17µ ±  3%
GetTimeline_InMemory/events-50-4              73.22µ ±  4%
GetTimeline_InMemory/events-100-4             148.4µ ±  1%
GetTimeline_InMemory/events-500-4             755.9µ ±  3%
GetTimeline_InMemory/events-1000-4            1.259m ±  1%
GetTimeline_SQLite/events-10-4                103.8µ ±  0%
GetTimeline_SQLite/events-50-4                241.5µ ±  1%
GetTimeline_SQLite/events-100-4               409.6µ ±  0%
GetTimeline_SQLite/events-500-4               1.747m ±  0%
GetTimeline_SQLite/events-1000-4              3.410m ±  0%
geomean                                       222.8µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     775.5 ± 9%
EventStoreAppend_SQLite-4                     1.983Ki ± 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.24Ki

                                   │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.119µ ±  4%
EventStoreAppend_SQLite-4                  915.3µ ±  6%
GetTimeline_InMemory/events-10-4           13.58µ ±  4%
GetTimeline_InMemory/events-50-4           74.38µ ±  3%
GetTimeline_InMemory/events-100-4          149.5µ ±  2%
GetTimeline_InMemory/events-500-4          746.4µ ± 21%
GetTimeline_InMemory/events-1000-4         1.195m ±  1%
GetTimeline_SQLite/events-10-4             80.53µ ±  1%
GetTimeline_SQLite/events-50-4             229.6µ ±  2%
GetTimeline_SQLite/events-100-4            415.9µ ±  3%
GetTimeline_SQLite/events-500-4            1.864m ±  1%
GetTimeline_SQLite/events-1000-4           3.720m ±  4%
geomean                                    210.0µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  801.0 ± 5%
EventStoreAppend_SQLite-4                  1.982Ki ± 2%
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.42Ki

                                   │ 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

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

@intel352 intel352 merged commit 3a992ee into main May 15, 2026
30 checks passed
@intel352 intel352 deleted the feat/iac-bridge-typed-providers branch May 15, 2026 21:02
intel352 added a commit that referenced this pull request May 16, 2026
…affolding (#689)

Records the resolution of two interlocking decisions made mid-execution
of plan-2 (plugin-modules-on-iac):

1. (c1) for plan-2 plugin shipping: aws + gcp v1.1.0 carry strict
   descriptors backing legacy ModuleProvider Go impls, satisfying
   wfctl plugin audit without forcing an eager typed-Provider migration.

2. SDK Typed-fields scaffolding (PR #686 #683): IaCServeOptions now
   carries TypedModules + TypedSteps alongside Modules + Steps;
   mapBackedProvider implements both contracts; grpc_server's
   Typed-first → legacy-fallback path is reused.

(c2) — relaxing the validator — rejected as eroding the strict-cutover
value (decisions/0024). (B1) — eager typed migration — rejected as
blocking the Phase B/C deletions per the user's "just get the remaining
plugins finished up" mandate.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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