Skip to content

feat(iac): extract iac/specparse + add iac/specgen.SpecToYAML (infra-admin P2 PR2/12)#841

Merged
intel352 merged 5 commits into
mainfrom
feat/infra-p2-specgen
Jun 2, 2026
Merged

feat(iac): extract iac/specparse + add iac/specgen.SpecToYAML (infra-admin P2 PR2/12)#841
intel352 merged 5 commits into
mainfrom
feat/infra-p2-specgen

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 2, 2026

PR2/12 — extract iac/specparse + add iac/specgen.SpecToYAML (infra-admin Phase 2 foundation)

Locked plan docs/plans/2026-06-02-infra-admin-phase2-3.md (workspace), Tasks 2–4. Foundation for the Phase 2 dynamic-input apply (PR3) and commit-back (PR5). No runtime consumer yet — pure additive packages + doc fixes.

Changes

  • iac/specparse (new) — extracts the in-memory []any[]interfaces.ResourceSpec converter out of module (was the private parseResourceSpecs at pipeline_step_iac_provider_plan.go:57). module keeps a thin wrapper so the plan + apply step call sites are unchanged. Pure package (imports only interfaces+stdlib); runs NO secret resolver — secret:// refs pass through verbatim. (The cmd/wfctl file-reader parseInfraResourceSpecs is a different parser and is untouched.)
  • iac/specgen.SpecToYAML (new) — serializes AUTHORED specs to the resource-spec YAML schema, the round-trip inverse of specparse. Round-trips all six ResourceSpec fields (Name/Type/Config/Size/Hints/DependsOn) with secret:// refs preserved verbatim. Proven by reflect.DeepEqual over a fully-populated spec.
  • Docs — fix a stale infra.admin comment in iac/wfctlhelpers/state_test.go; mark docs/plans/2026-06-01-iac-provider-region-lister.md SUPERSEDED (shipped via the migration).

Review note

Code review caught a round-trip field-drop (DependsOn/Hints were dropped by both directions; the original test fixture was too thin to catch it) — fixed in 99e1875cc with a fully-populated round-trip fixture + a dedicated parse test. Verified: go build ./... exit 0; iac/specparse + iac/specgen + module + plugins/all tests pass; golangci-lint --new-from-rev=origin/main 0 issues.

🤖 Generated with Claude Code

intel352 and others added 4 commits June 2, 2026 17:02
…parse

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-trips iac/specparse)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gion-lister plan

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ParseResourceSpecs and SpecToYAML handled only Name/Type/Config/Size and
silently dropped the remaining two ResourceSpec fields (Hints, DependsOn).
The typed adapter dispatches Hints+DependsOn to provider plugins, so the
serialize path stripped them. Tests now use a fully-populated fixture and
prove symmetry via reflect.DeepEqual over the full SpecToYAML->Unmarshal->
ParseResourceSpecs round-trip.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 2, 2026 21:15
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

This PR lays groundwork for infra-admin Phase 2 by extracting the in-memory IaC resource-spec parsing logic into a dedicated package and adding a YAML generator that round-trips with that parser, plus a couple of small documentation/comment updates.

Changes:

  • Extracted []any[]interfaces.ResourceSpec parsing into new iac/specparse and routed module call sites through a thin wrapper.
  • Added iac/specgen.SpecToYAML to serialize []interfaces.ResourceSpec into the resource-spec YAML shape consumable by specparse.
  • Added focused tests for parsing + YAML round-trip, and updated a couple of docs/comments.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
module/pipeline_step_iac_provider_plan.go Swaps the local parser implementation for a wrapper around specparse.ParseResourceSpecs.
iac/wfctlhelpers/state_test.go Updates test comment to reflect current intent/coverage.
iac/specparse/specparse.go New package implementing the in-memory ResourceSpec parser (no secret expansion).
iac/specparse/specparse_test.go New tests covering parse shape, nil handling, and depends_on/hints mapping.
iac/specgen/specgen.go New YAML serializer for authored specs that is intended to round-trip with specparse.
iac/specgen/specgen_test.go New tests asserting YAML round-trip behavior and preservation of secret:// refs.
docs/plans/2026-06-01-iac-provider-region-lister.md Marks the plan as superseded with a short note.

Comment thread module/pipeline_step_iac_provider_plan.go Outdated
Comment thread iac/specparse/specparse.go Outdated
Comment thread iac/specgen/specgen.go
Comment thread iac/specgen/specgen.go Outdated
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:298: parsing iteration count: invalid syntax
baseline-bench.txt:315341: parsing iteration count: invalid syntax
baseline-bench.txt:629199: parsing iteration count: invalid syntax
baseline-bench.txt:924283: parsing iteration count: invalid syntax
baseline-bench.txt:1240238: parsing iteration count: invalid syntax
baseline-bench.txt:1553703: parsing iteration count: invalid syntax
benchmark-results.txt:302: parsing iteration count: invalid syntax
benchmark-results.txt:350130: parsing iteration count: invalid syntax
benchmark-results.txt:649363: parsing iteration count: invalid syntax
benchmark-results.txt:973454: parsing iteration count: invalid syntax
benchmark-results.txt:1294962: parsing iteration count: invalid syntax
benchmark-results.txt:1625947: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │       sec/op       │    sec/op      vs base              │
InterpreterCreation-4               6.679m ± 64%   10.198m ± 71%       ~ (p=0.394 n=6)
ComponentLoad-4                     3.496m ±  9%    3.478m ±  1%       ~ (p=0.818 n=6)
ComponentExecute-4                  1.837µ ±  2%    1.831µ ±  1%       ~ (p=0.310 n=6)
PoolContention/workers-1-4          1.012µ ±  3%    1.016µ ±  2%       ~ (p=0.550 n=6)
PoolContention/workers-2-4          1.039µ ±  1%    1.025µ ±  1%       ~ (p=0.056 n=6)
PoolContention/workers-4-4          1.034µ ±  2%    1.012µ ±  2%  -2.13% (p=0.011 n=6)
PoolContention/workers-8-4          1.024µ ±  1%    1.016µ ±  1%       ~ (p=0.058 n=6)
PoolContention/workers-16-4         1.022µ ±  1%    1.020µ ±  1%       ~ (p=0.517 n=6)
ComponentLifecycle-4                3.597m ±  1%    3.523m ±  1%  -2.04% (p=0.002 n=6)
SourceValidation-4                  2.106µ ±  1%    2.094µ ±  1%       ~ (p=0.095 n=6)
RegistryConcurrent-4                751.4n ±  5%    743.0n ±  2%       ~ (p=0.485 n=6)
LoaderLoadFromString-4              3.551m ±  2%    3.597m ±  4%  +1.30% (p=0.026 n=6)
geomean                             17.76µ          18.29µ        +2.96%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.937 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.786 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.418 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                 297.6n ± 19%   298.9n ± 2%       ~ (p=0.485 n=6)
CircuitBreakerExecution_Success-4         22.70n ±  0%   22.65n ± 0%  -0.20% (p=0.026 n=6)
CircuitBreakerExecution_Failure-4         70.96n ±  0%   70.91n ± 0%       ~ (p=0.216 n=6)
geomean                                   78.26n         78.31n       +0.07%

                                  │ 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              298.6n ± 25%   295.1n ± 35%       ~ (p=0.240 n=6)
IaCStateBackend_GRPC-4                   10.26m ±  1%   10.32m ±  1%  +0.52% (p=0.041 n=6)
JQTransform_Simple-4                     674.1n ± 66%   646.4n ± 45%       ~ (p=0.180 n=6)
JQTransform_ObjectConstruction-4         1.486µ ± 18%   1.543µ ±  1%       ~ (p=0.065 n=6)
JQTransform_ArraySelect-4                3.636µ ±  2%   3.674µ ±  1%       ~ (p=0.290 n=6)
JQTransform_Complex-4                    44.16µ ±  1%   45.38µ ±  1%  +2.76% (p=0.002 n=6)
JQTransform_Throughput-4                 1.846µ ±  1%   1.859µ ±  1%  +0.70% (p=0.026 n=6)
SSEPublishDelivery-4                     65.09n ±  1%   63.97n ±  1%  -1.74% (p=0.002 n=6)
geomean                                  3.950µ         3.957µ        +0.19%

                                 │ 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.768Mi ± 9%     5.871Mi ± 16%       ~ (p=0.589 n=6)
JQTransform_Simple-4                   1.273Ki ± 0%     1.273Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4       1.773Ki ± 0%     1.773Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4              2.625Ki ± 0%     2.625Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                  16.31Ki ± 0%     16.31Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4               1.984Ki ± 0%     1.984Ki ±  0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%       0.000 ±  0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                  +0.22%               ²
¹ 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.857k ± 0%     6.867k ± 0%       ~ (p=0.225 n=6)
JQTransform_Simple-4                     10.00 ± 0%      10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%      15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%      30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    328.0 ± 0%      328.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%      17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%      0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                +0.02%               ²
¹ 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.069µ ± 7%   1.091µ ± 12%       ~ (p=0.180 n=6)
SchemaValidation_AllFields-4                 1.634µ ± 7%   1.631µ ±  2%       ~ (p=0.485 n=6)
SchemaValidation_FormatValidation-4          1.574µ ± 1%   1.558µ ±  1%       ~ (p=0.225 n=6)
SchemaValidation_ManySchemas-4               1.607µ ± 2%   1.592µ ±  3%       ~ (p=0.485 n=6)
geomean                                      1.450µ        1.450µ        +0.00%

                                    │ 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.056µ ± 14%   1.098µ ± 12%       ~ (p=0.818 n=6)
EventStoreAppend_SQLite-4                  1.091m ±  3%   1.021m ±  1%  -6.39% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           14.46µ ±  5%   13.22µ ±  8%  -8.58% (p=0.009 n=6)
GetTimeline_InMemory/events-50-4           79.18µ ±  2%   72.09µ ±  6%  -8.95% (p=0.002 n=6)
GetTimeline_InMemory/events-100-4          120.7µ ±  1%   110.1µ ± 38%       ~ (p=0.394 n=6)
GetTimeline_InMemory/events-500-4          625.1µ ±  1%   563.3µ ±  1%  -9.89% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.265m ±  1%   1.143m ±  1%  -9.62% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             61.63µ ±  1%   57.20µ ±  3%  -7.19% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             206.6µ ±  0%   188.4µ ±  1%  -8.82% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            384.4µ ±  1%   353.7µ ±  4%  -8.00% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.765m ±  2%   1.634m ±  0%  -7.40% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.452m ±  6%   3.212m ±  4%  -6.95% (p=0.002 n=6)
geomean                                    198.6µ         184.1µ        -7.28%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  797.0 ± 7%     777.5 ± 7%       ~ (p=0.671 n=6)
EventStoreAppend_SQLite-4                  1.982Ki ± 2%   1.983Ki ± 1%       ~ (p=0.719 n=6)
GetTimeline_InMemory/events-10-4           7.953Ki ± 0%   7.953Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4           46.62Ki ± 0%   46.62Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4          94.48Ki ± 0%   94.48Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4          472.8Ki ± 0%   472.8Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%   944.3Ki ± 0%       ~ (p=0.067 n=6)
GetTimeline_SQLite/events-10-4             16.74Ki ± 0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%   87.14Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%   175.4Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%   846.1Ki ± 0%  -0.00% (p=0.032 n=6)
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%   1.639Mi ± 0%  +0.00% (p=0.032 n=6)
geomean                                    67.39Ki        67.25Ki       -0.20%
¹ all samples are equal

                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │     allocs/op      │  allocs/op   vs base                │
EventStoreAppend_InMemory-4                  7.000 ± 0%    7.000 ± 0%       ~ (p=1.000 n=6) ¹
EventStoreAppend_SQLite-4                    53.00 ± 0%    53.00 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-10-4             125.0 ± 0%    125.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4             653.0 ± 0%    653.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4           1.306k ± 0%   1.306k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4           6.514k ± 0%   6.514k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-1000-4          13.02k ± 0%   13.02k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-10-4               382.0 ± 0%    382.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.852k ± 0%   1.852k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             3.681k ± 0%   3.681k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             18.54k ± 0%   18.54k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            37.29k ± 0%   37.29k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.162k        1.162k       +0.00%
¹ all samples are equal

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

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 2, 2026

Codecov Report

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

Files with missing lines Patch % Lines
iac/specparse/specparse.go 94.59% 1 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@intel352 intel352 merged commit 6ebbe1a into main Jun 2, 2026
28 checks passed
@intel352 intel352 deleted the feat/infra-p2-specgen branch June 2, 2026 21:40
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