Skip to content

docs(adr): record IaC typed force-cutover decisions (0024 + 0025 + 0026) — Task 14#604

Merged
intel352 merged 2 commits into
mainfrom
docs/iac-typed-cutover-adrs
May 10, 2026
Merged

docs(adr): record IaC typed force-cutover decisions (0024 + 0025 + 0026) — Task 14#604
intel352 merged 2 commits into
mainfrom
docs/iac-typed-cutover-adrs

Conversation

@intel352

Copy link
Copy Markdown
Contributor

Summary

Task 14 of the strict-contracts force-cutover plan (docs/plans/2026-05-10-strict-contracts-force-cutover.md, rev5).

Adds three ADRs to decisions/ documenting the architectural trade-offs the cutover commits to. Documentation only — no production code changes; no rollback required.

ADRs

  • decisions/0024-iac-typed-force-cutover.md — Hard cutover for IaC-flavored interfaces (IaCProvider, ResourceDriver) supersedes the additive 2026-04-26 design for those interfaces only. Module/Step/Trigger work remains live. Records bug-cycle data (T3.9 structpb drop, v0.27.1 EnumeratorAll bridge gap, InvokeService case-string class) and the alternatives rejected: continue additive, compat shim / build-tag dual-path, deferral.

  • decisions/0025-iac-optional-method-typed-services-not-bool.md — Cycle 3 I-1 split: REQUIRED service (11 RPCs) + 6 OPTIONAL typed services, auto-registered by SDK type-assertion. Absence of registration IS the negative signal — no NotSupported flag, no codes.Unimplemented as "supported by intent." Records alternatives rejected: NotSupported bool (cycle 1 I-1), codes.Unimplemented (cycle 1 I-1 + v0.27.1 boundary-translator evidence), single service with method-level type-assert.

  • decisions/0026-iac-direct-grpc-client-no-wrapper.md — wfctl uses pb.IaCProviderRequiredClient directly. No hand-written iacProviderClient wrapper layer (cycle 1 Alternative C: removes one of the four bug-class surfaces by removing the layer entirely, not by typing it). Records the narrow engine-side adapter (Task 30) as the bounded exception for platform.ComputePlan / wfctlhelpers.ApplyPlan.

Format

Each ADR follows the existing decisions/ format (Date, Status, Context, Decision, Consequences, Alternatives Rejected) modeled on decisions/0015–0023.

Verification

  • All three files render in markdown preview without warnings
  • Format consistent with existing ADRs (manually compared against 0015, 0023)

Test plan

  • All three files added in the correct location
  • Headings + sections match the existing ADR template
  • Cross-references to plan + design + cycle-N findings are accurate

🤖 Generated with Claude Code

Task 14 of the strict-contracts force-cutover plan
(docs/plans/2026-05-10-strict-contracts-force-cutover.md, rev5).

Adds three ADRs to decisions/ documenting the architectural
trade-offs the cutover commits to:

- 0024-iac-typed-force-cutover.md
  Hard cutover for IaC-flavored interfaces (IaCProvider,
  ResourceDriver) supersedes the additive 2026-04-26 design for
  those interfaces only. Module/Step/Trigger work remains live.
  Rationale: bug-cycle data (T3.9 structpb drop, v0.27.1
  EnumeratorAll bridge gap, InvokeService case-string class) and
  user mandate feedback_force_strict_contracts_no_compat. Records
  the alternatives rejected: continue additive, compat shim /
  build-tag dual-path, deferral until Module/Step/Trigger lands.

- 0025-iac-optional-method-typed-services-not-bool.md
  Cycle 3 I-1 split: REQUIRED service (11 RPCs) + 6 OPTIONAL
  typed services, auto-registered by SDK type-assertion. Absence
  of the service registration IS the negative signal — no
  NotSupported flag in any response, no codes.Unimplemented as a
  "supported by intent" signal. Records the alternatives rejected:
  Candidate A (NotSupported bool, cycle 1 I-1), Candidate B
  (codes.Unimplemented, same bug-class shape as v0.27.1
  isPluginMethodUnimplemented boundary translator), single
  service with method-level type-assert.

- 0026-iac-direct-grpc-client-no-wrapper.md
  wfctl uses pb.IaCProviderRequiredClient directly. No hand-
  written iacProviderClient wrapper layer (cycle 1 Alternative C:
  removes one of the four bug-class surfaces by removing the
  layer entirely, not by typing it). Records the narrow engine-
  side adapter (Task 30) as the bounded exception for
  platform.ComputePlan / wfctlhelpers.ApplyPlan consumers.

No production code changes; documentation only. No rollback
required.

Verification: spell-checked manually; rendered locally via
markdown preview. Each ADR follows the existing decisions/ format
(Date, Status, Context, Decision, Consequences, Alternatives
Rejected) modeled on decisions/0015–0023.
Copilot AI review requested due to automatic review settings May 10, 2026 06:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds three Architecture Decision Records (ADRs) under decisions/ documenting the chosen approach for the IaC typed force-cutover (required/optional typed services split, and wfctl using typed gRPC clients directly).

Changes:

  • Add ADR 0024 documenting the hard cutover decision for IaC interfaces (superseding the earlier additive design for IaC only).
  • Add ADR 0025 documenting the “required + optional typed services” approach (no NotSupported flags / no codes.Unimplemented signaling).
  • Add ADR 0026 documenting wfctl consuming typed pb.*Client APIs directly (no handwritten wrapper layer), with a narrow engine-side adapter exception.

Reviewed changes

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

File Description
decisions/0024-iac-typed-force-cutover.md Records the rationale and scope of the IaC typed hard cutover.
decisions/0025-iac-optional-method-typed-services-not-bool.md Documents optional-capability signaling via service registration rather than flags/status codes.
decisions/0026-iac-direct-grpc-client-no-wrapper.md Documents wfctl’s direct use of typed gRPC clients and why wrapper layers are rejected.

Comment on lines +47 to +48
plan (`docs/plans/2026-05-10-strict-contracts-force-cutover.md`)
implements that mandate.
@github-actions

github-actions Bot commented May 10, 2026

Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:262: parsing iteration count: invalid syntax
baseline-bench.txt:361088: parsing iteration count: invalid syntax
baseline-bench.txt:697557: parsing iteration count: invalid syntax
baseline-bench.txt:964129: parsing iteration count: invalid syntax
baseline-bench.txt:1280207: parsing iteration count: invalid syntax
baseline-bench.txt:1793820: parsing iteration count: invalid syntax
benchmark-results.txt:262: parsing iteration count: invalid syntax
benchmark-results.txt:326909: parsing iteration count: invalid syntax
benchmark-results.txt:658092: parsing iteration count: invalid syntax
benchmark-results.txt:997009: parsing iteration count: invalid syntax
benchmark-results.txt:1333037: parsing iteration count: invalid syntax
benchmark-results.txt:1618953: 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                 3.150m ± 197%
ComponentLoad-4                       3.635m ±   8%
ComponentExecute-4                    1.963µ ±   1%
PoolContention/workers-1-4            1.087µ ±   1%
PoolContention/workers-2-4            1.094µ ±   3%
PoolContention/workers-4-4            1.094µ ±   0%
PoolContention/workers-8-4            1.095µ ±   1%
PoolContention/workers-16-4           1.105µ ±   1%
ComponentLifecycle-4                  3.623m ±   2%
SourceValidation-4                    2.324µ ±   2%
RegistryConcurrent-4                  807.8n ±   5%
LoaderLoadFromString-4                3.633m ±   5%
geomean                               17.58µ

                            │ 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: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4              3.340m ± 210%
ComponentLoad-4                    3.528m ±   1%
ComponentExecute-4                 1.855µ ±   1%
PoolContention/workers-1-4         1.017µ ±   1%
PoolContention/workers-2-4         1.017µ ±   2%
PoolContention/workers-4-4         1.022µ ±   1%
PoolContention/workers-8-4         1.059µ ±   3%
PoolContention/workers-16-4        1.024µ ±   1%
ComponentLifecycle-4               3.591m ±   1%
SourceValidation-4                 2.104µ ±   0%
RegistryConcurrent-4               754.9n ±   2%
LoaderLoadFromString-4             3.630m ±   2%
geomean                            16.84µ

                            │ 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                     286.9n ± 4%
CircuitBreakerExecution_Success-4             21.55n ± 1%
CircuitBreakerExecution_Failure-4             66.31n ± 1%
geomean                                       74.29n

                                  │ 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: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  298.2n ± 1%
CircuitBreakerExecution_Success-4          22.70n ± 1%
CircuitBreakerExecution_Failure-4          70.91n ± 0%
geomean                                    78.30n

                                  │ 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         │
JQTransform_Simple-4                        974.9n ± 22%
JQTransform_ObjectConstruction-4            1.515µ ±  0%
JQTransform_ArraySelect-4                   3.446µ ±  1%
JQTransform_Complex-4                       39.35µ ±  0%
JQTransform_Throughput-4                    1.835µ ±  1%
SSEPublishDelivery-4                        65.03n ±  0%
geomean                                     1.697µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
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       │
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: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
JQTransform_Simple-4                     861.5n ± 30%
JQTransform_ObjectConstruction-4         1.425µ ±  3%
JQTransform_ArraySelect-4                3.469µ ±  3%
JQTransform_Complex-4                    41.95µ ±  8%
JQTransform_Throughput-4                 1.770µ ±  4%
SSEPublishDelivery-4                     64.27n ±  1%
geomean                                  1.652µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
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      │
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.113µ ± 18%
SchemaValidation_AllFields-4                   1.661µ ±  4%
SchemaValidation_FormatValidation-4            1.595µ ±  2%
SchemaValidation_ManySchemas-4                 1.844µ ±  2%
geomean                                        1.527µ

                                    │ 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: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.110µ ±  4%
SchemaValidation_AllFields-4                1.659µ ± 16%
SchemaValidation_FormatValidation-4         1.591µ ±  1%
SchemaValidation_ManySchemas-4              1.598µ ±  4%
geomean                                     1.471µ

                                    │ 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.226µ ± 19%
EventStoreAppend_SQLite-4                     1.998m ±  7%
GetTimeline_InMemory/events-10-4              13.97µ ±  1%
GetTimeline_InMemory/events-50-4              78.62µ ±  3%
GetTimeline_InMemory/events-100-4             124.1µ ± 27%
GetTimeline_InMemory/events-500-4             638.3µ ±  1%
GetTimeline_InMemory/events-1000-4            1.303m ±  6%
GetTimeline_SQLite/events-10-4                110.2µ ±  1%
GetTimeline_SQLite/events-50-4                254.0µ ±  4%
GetTimeline_SQLite/events-100-4               447.8µ ±  2%
GetTimeline_SQLite/events-500-4               1.844m ±  2%
GetTimeline_SQLite/events-1000-4              3.582m ±  3%
geomean                                       230.9µ

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

                                   │ 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: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.074µ ± 20%
EventStoreAppend_SQLite-4                  1.044m ±  3%
GetTimeline_InMemory/events-10-4           12.90µ ±  2%
GetTimeline_InMemory/events-50-4           72.92µ ±  2%
GetTimeline_InMemory/events-100-4          144.1µ ±  1%
GetTimeline_InMemory/events-500-4          556.7µ ± 36%
GetTimeline_InMemory/events-1000-4         1.155m ±  2%
GetTimeline_SQLite/events-10-4             83.11µ ±  1%
GetTimeline_SQLite/events-50-4             218.2µ ±  1%
GetTimeline_SQLite/events-100-4            389.4µ ±  2%
GetTimeline_SQLite/events-500-4            1.699m ±  0%
GetTimeline_SQLite/events-1000-4           3.302m ±  0%
geomean                                    199.0µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  758.0 ± 7%
EventStoreAppend_SQLite-4                  1.986Ki ± 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.12Ki

                                   │ 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.

- ADR-0025: ResourceDriver "10 RPCs" → "9 RPCs" (count drift; iac.proto
  ships 9: Create, Read, Update, Delete, Diff, Scale, HealthCheck,
  SensitiveKeys, Troubleshoot).
- ADR-0024: "PR-A" → "PR 2" (manifest naming consistency with the
  2026-05-10-strict-contracts-force-cutover.md PR Grouping table).
@intel352 intel352 merged commit 5743afb into main May 10, 2026
18 checks passed
@intel352 intel352 deleted the docs/iac-typed-cutover-adrs branch May 10, 2026 07:20
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