Skip to content

feat(#653): Phase 2 — strip AWS SDK from codebuild + EKS backends#659

Merged
intel352 merged 29 commits into
mainfrom
feat/issue-653-phase2-aws-operational
May 13, 2026
Merged

feat(#653): Phase 2 — strip AWS SDK from codebuild + EKS backends#659
intel352 merged 29 commits into
mainfrom
feat/issue-653-phase2-aws-operational

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

  • Replaces codebuildAWSBackend (~220 LOC) with codebuildAWSErrorBackend — error stub directing users to workflow-plugin-aws
  • Replaces eksBackend (~225 LOC) with eksErrorBackend — same pattern, same redirect
  • Drops github.com/aws/aws-sdk-go-v2/service/codebuild from go.mod and example/go.mod (zero remaining importers)
  • Extends aws-sdk-banned CI gate to cover service/codebuild and service/eks; scopes *.go grep to module/ (IaC provider paths in platform/ and provider/ legitimately import service/eks)
  • nosql_dynamodb.go and pipeline_step_s3_upload.go left untouched per design (no real SDK import; no go.mod win)

Test plan

  • TestCodeBuildAWSBackendMigrationError — PASS: migration error mentions workflow-plugin-aws, v0.53.0, provider: mock
  • TestPlatformKubernetes_EKSBackendMigrationError — PASS: migration error mentions workflow-plugin-aws, v0.53.0, cluster_type: kind
  • TestAWSServicePackagesAbsent — PASS: service/codebuild and service/eks not imported in module/
  • Full module test suite passes (GOWORK=off go test ./module/... -timeout 120s)
  • Full repo build passes (GOWORK=off go build ./...)
  • CI aws-sdk-banned grep gates pass (verified locally)
  • service/codebuild absent from go.mod and example/go.mod (verified by go mod tidy)

Files changed

File Change
module/codebuild.go Replace codebuildAWSBackend with codebuildAWSErrorBackend; drop SDK imports
module/codebuild_test.go Add TestCodeBuildAWSBackendMigrationError
module/platform_kubernetes_kind.go Replace eksBackend with eksErrorBackend; drop SDK imports
module/platform_kubernetes_test.go Replace stale EKS tests with TestPlatformKubernetes_EKSBackendMigrationError
module/aws_absent_test.go Add service/codebuild + service/eks to freed slice
.github/workflows/ci.yml Extend aws-sdk-banned gate; scope *.go grep to module/
go.mod, go.sum Drop service/codebuild (zero importers)
example/go.mod, example/go.sum Drop service/codebuild

🤖 Generated with Claude Code

intel352 and others added 26 commits May 13, 2026 07:54
Force-cutover of 6 AWS IaC modules to workflow-plugin-aws v0.2.0.
Key divergence from #617: cloud_account_aws.go stays (AWSConfigProvider
used by Phase 2 out-of-scope files). platform.dns module type stays;
only Route53 backend is removed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes: infra.autoscaling_group missing from core (C-1), platform.dns
validate-path guard gap (C-2), step count 15 not 16 (I-1), example/go.mod
tidy + grep gate (I-2), platform.dns schema description stale (I-3),
T1 file list ambiguity (m-1), T2 backend alternative justification (m-2),
T3 DNS row keep/remove clarity (m-3).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add module/app_container.go as partial-edit target in T1:
  move ECSContainer struct in from platform_ecs.go,
  remove case *PlatformECS type switch branch,
  update default error message.
- Record cycle 2 findings in adversarial review history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ix refinement)

After removing case *PlatformECS, all ECS-specific structs and methods in
app_container.go become dead code. Design updated to remove them entirely
rather than leave dead code in place.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix schema: infra.autoscaling_group auto-generated from infraTypes,
  no manual module_schema.go entry needed.
- Add app_container.go comment lines to string-update list.
- Record cycle 3 PASS in adversarial review history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 tasks, single PR. Covers:
- T1: delete 14 files + app_container.go C-3 fix + regression gate
- T2: replace Route53 backend with migration error stub
- T3: strip registration sites + add infra.autoscaling_group
- T4: internal/legacyaws + migration errors in engine + wfctl
- T5: modernize legacy-aws-types rule + migration doc
- T6: go mod tidy + CI grep gate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…cycle 1)

- T2: Init() succeeds for provider:aws (factory returns struct not error);
  migration error fires at Plan() time — fix test to call m.Plan() not m.Init();
  fix mock import (module.NewMockApplication not mock.); remove deleted Route53
  tests from file list
- T4: replace nonexistent minimalConfigWithModule() with newIsolatedEngine(t)
  + config.WorkflowConfig pattern from engine_legacy_do_migration_test.go;
  fix package (workflow not workflow_test); fix Create() call to 4-arg signature;
  add PluginLoaded variant mirroring DO test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- T5 test used nonexistent findRule/check/fix helpers and wrong package
  (modernize_test); actual pattern is package modernize, direct legacyAWSRule()
  call, yaml.Unmarshal + rule.Check/Fix — mirrors legacy_do_rule_test.go exactly
- Remove duplicate "Add to pipeline step registry tests" paragraph
- Fix yaml.Marshal round-trip in Fix test to match actual pattern

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove platform.ecs, platform.networking, platform.apigateway, platform.autoscaling
module types and their 15 step types (ecs/apigw/scaling/network) from all
registration sites: plugins/platform, schema/schema.go, schema/module_schema.go,
schema/step_schema_builtins.go, cmd/wfctl/type_registry.go.

Add infra.autoscaling_group to plugins/infra and type_registry.go.
Update DOCUMENTATION.md with AWS IaC removal notice + infra.autoscaling_group row.
Fix multi_region.go error string to reference infra.container_service.
Regenerate schema/testdata/editor-schemas.golden.json.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Create internal/legacyaws/types.go mirroring internal/legacydo/types.go.
Maps 4 removed module types (platform.ecs/networking/apigateway/autoscaling)
and 15 removed step types to their infra.*/step.iac_* successors.
RemovedInVersion = v0.53.0.

Wire into engine.go, cmd/wfctl/validate.go, cmd/wfctl/ci_validate.go:
- extra schema module types list includes legacyaws.ModuleTypes
- post-validate sweep checks legacyaws.IsModuleType / IsStepType
- actionable FormatModuleError / FormatStepError returned on match

Remove 15 legacy step entries from cmd/wfctl/type_registry.go KnownStepTypes().

Tests: engine_legacyaws_test.go (plugin not loaded + plugin loaded branches)
+ cmd/wfctl/legacy_aws_types_removed_test.go (registry absent + validate/ci_validate paths).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add modernize/legacy_aws_rule.go mirroring legacy_do_rule.go:
- ID: legacy-aws-types, Severity: error
- Auto-fixes: platform.ecs→infra.container_service, platform.apigateway→infra.api_gateway,
  platform.autoscaling→infra.autoscaling_group
- Flags but does not auto-fix: platform.networking (1→2 split) + all 15 step types
  (config key shape mismatch: platform + state_store vs legacy service/gateway/scaling keys)
- Uses walkTypeNodes helper from legacy_do_rule.go (same package)

Register legacyAWSRule() in modernize/modernize.go AllRules() list.

Add docs/migrations/v0.53.0-aws-iac-removal.md with full migration recipe
(install plugin, modernize, add provider, manual rewrites for networking + steps).

Tests: TestLegacyAWSRule_Rewrites (3 auto-fixable types) +
TestLegacyAWSRule_GapTypesFlaggedNotRewritten (networking + 6 step types).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
go mod tidy drops 3 freed AWS SDK packages:
- service/apigatewayv2 (was platform.apigateway)
- service/applicationautoscaling (was platform.autoscaling)
- service/route53 (was platform.dns Route53 backend)

Also tidy example/go.mod.

Add aws-sdk-banned CI job to .github/workflows/ci.yml mirroring the
godo-banned job: grep-gates both *.go imports and go.mod entries for
the three freed service paths, excluding aws_absent_test.go.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TestModernizeAllRulesRegistered: expected 9 rules → 10 (add legacy-aws-types).
TestKnownStepTypesPopulated: remove 15 legacy AWS step entries from expected list
(step.ecs_*/step.network_*/step.apigw_*/step.scaling_* all removed from KnownStepTypes).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adversarial review PASS (2 cycles). 4-file disposition:
- codebuild.go: strip codebuildAWSBackend → codebuildAWSErrorBackend
- platform_kubernetes_kind.go: strip eksBackend → eksErrorBackend
- pipeline_step_s3_upload.go: exempt (no go.mod win, useful utility step)
- nosql_dynamodb.go: exempt (no real SDK import, only in doc comment)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix: serial-dependency warning on Task 3, test fail-mode description,
errors import fate stated explicitly, rollback notes on T1+T2, PR base
branch corrected to main, .claire typo fixed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Strip aws-sdk-go-v2/service/codebuild from workflow core. Real AWS backend
replaced by codebuildAWSErrorBackend that returns a helpful migration error
directing users to workflow-plugin-aws. Mock backend unchanged.

Rollback: git revert HEAD; go mod tidy to restore SDK imports.
Strip aws-sdk-go-v2/service/eks from workflow core. Real EKS backend
replaced by eksErrorBackend that returns a helpful migration error
directing users to workflow-plugin-aws. GKE and AKS backends unchanged.

Rollback: git revert HEAD; go mod tidy to restore SDK imports.
go mod tidy drops service/codebuild (zero remaining importers) from go.mod
and example/go.mod. service/eks remains (provider/aws/* are legitimate IaC
importers). Extend aws-sdk-banned CI gate to module/ scope with codebuild
and eks banned packages. Add codebuild + eks to aws_absent_test.go freed
slice. CI grep gate scoped to module/ only so IaC provider paths are exempt.
Copilot AI review requested due to automatic review settings May 13, 2026 16:43
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

Phase 2 of issue #653 continues the AWS SDK removal from workflow core. It replaces the real codebuildAWSBackend and eksBackend implementations with thin error backends (codebuildAWSErrorBackend, eksErrorBackend) that surface actionable migration errors directing users to workflow-plugin-aws, drops the now-unused aws-sdk-go-v2/service/codebuild dependency from go.mod/example/go.mod, and extends the CI aws-sdk-banned gate to cover service/codebuild and service/eks in module/.

Changes:

  • Replace codebuildAWSBackend with codebuildAWSErrorBackend (and adjust tests) so the aws.codebuild mock backend stays functional but real AWS calls return a migration error.
  • Replace eksBackend with eksErrorBackend in platform_kubernetes_kind.go; rewrite EKS tests to assert the migration error.
  • Drop service/codebuild from go.mod/example/go.mod, extend the aws-sdk-banned CI grep, and add service/codebuild+service/eks to the aws_absent_test.go freed list.

Reviewed changes

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

Show a summary per file
File Description
module/codebuild.go Strips AWS SDK imports; replaces real backend with error stub returning migration error.
module/codebuild_test.go Adds TestCodeBuildAWSBackendMigrationError; the test calls CreateProject() twice (nit).
module/platform_kubernetes_kind.go Removes EKS SDK imports; replaces eksBackend with eksErrorBackend.
module/platform_kubernetes_test.go Replaces stale EKS stub tests with migration-error assertion.
module/aws_absent_test.go Adds service/codebuild and service/eks to the freed-imports list.
.github/workflows/ci.yml Extends the AWS SDK ban grep gate to module/; note service/eks is intentionally omitted from the go.mod grep.
go.mod, go.sum, example/go.mod, example/go.sum Drop service/codebuild (and example-only transitive entries).

Note: many other files shown in the diff (platform_dns_backends.go, platform_ecs_test.go, platform_networking_test.go, platform_autoscaling*.go, pipeline_step_apigateway.go, schema/registry deletions, modernize rule, migration docs, etc.) are Phase 1 content from the base branch, not new in this Phase 2 PR.

Comment thread module/codebuild_test.go Outdated
Comment thread .github/workflows/ci.yml
…dd ci.yml go.mod gate comment

- codebuild_test.go: capture CreateProject() error into variable on first call;
  reuse for nil-check and .Error() to avoid redundant call and subtle correctness
  assumption that both calls return identical messages.
- ci.yml: add comment on go.mod grep gate explaining why service/eks is omitted
  (platform/ and provider/ have legitimate callers not yet migrated in Phase 2);
  prevents future confusion during Phase 3 migration.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 56 out of 58 changed files in this pull request and generated 6 comments.

Comment thread module/codebuild.go
Comment thread schema/schema.go Outdated
Comment thread module/aws_absent_test.go Outdated
Comment thread .github/workflows/ci.yml Outdated
Comment thread module/platform_kubernetes_kind.go
Comment thread module/platform_kubernetes_kind.go
intel352 and others added 2 commits May 13, 2026 13:02
- schema/schema.go: remove blank lines left from step.network_* and
  step.scaling_* removals in coreModuleTypes slice (stylistic clutter).
- module/aws_absent_test.go: log parse errors via t.Logf instead of
  silently discarding with _ so that syntax errors in source files are
  visible during test runs.
- .github/workflows/ci.yml: broaden first grep gate from module/ to full
  repo for fully-removed packages; add separate gate for service/eks that
  excludes only platform/ and provider/ (the two legitimate locations),
  catching any new eks imports in cmd/, iac/, plugin/, etc.
- module/platform_kubernetes.go: remove dead helper safeIntToInt32 (was
  only called by the old eksBackend, now deleted) and its math import.
- module/cloud_account_aws.go: remove dead helpers awsProviderFrom and
  parseStringSlice (also only called by the old eksBackend).

Build verified: GOWORK=off go build ./... passes with no errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Resolves merge conflicts from Phase 1 PR #657 merging into main:
- ci.yml: incorporate main's --exclude-dir flags for worktree paths
  while keeping Phase 2's broader repo scope + service/eks split gate.
- schema/schema.go: keep blank-line removals from Phase 2 review fixes.
- module/aws_absent_test.go: keep Phase 2's codebuild+eks freed additions
  + the parseErr t.Logf improvement from round-2 review.
- example/go.mod + go.sum: go mod tidy after reconciling; service/codebuild
  absent (no importers), service/eks absent from example (transitively
  included via main module which still imports it via platform/provider).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 14 out of 16 changed files in this pull request and generated no new comments.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 13, 2026

Codecov Report

❌ Patch coverage is 61.11111% with 14 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
module/codebuild.go 50.00% 10 Missing ⚠️
module/platform_kubernetes_kind.go 75.00% 4 Missing ⚠️

📢 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:264: parsing iteration count: invalid syntax
baseline-bench.txt:269095: parsing iteration count: invalid syntax
baseline-bench.txt:566537: parsing iteration count: invalid syntax
baseline-bench.txt:875778: parsing iteration count: invalid syntax
baseline-bench.txt:1197652: parsing iteration count: invalid syntax
baseline-bench.txt:1523921: parsing iteration count: invalid syntax
benchmark-results.txt:264: parsing iteration count: invalid syntax
benchmark-results.txt:325144: parsing iteration count: invalid syntax
benchmark-results.txt:668261: parsing iteration count: invalid syntax
benchmark-results.txt:959199: parsing iteration count: invalid syntax
benchmark-results.txt:1504810: parsing iteration count: invalid syntax
benchmark-results.txt:1784810: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │       sec/op       │    sec/op      vs base              │
InterpreterCreation-4               6.357m ± 55%   4.265m ± 126%       ~ (p=0.589 n=6)
ComponentLoad-4                     3.548m ±  7%   3.574m ±  11%       ~ (p=0.240 n=6)
ComponentExecute-4                  1.939µ ±  0%   1.938µ ±   1%       ~ (p=0.738 n=6)
PoolContention/workers-1-4          1.083µ ±  0%   1.089µ ±   2%       ~ (p=0.100 n=6)
PoolContention/workers-2-4          1.078µ ±  2%   1.084µ ±   1%       ~ (p=0.374 n=6)
PoolContention/workers-4-4          1.082µ ±  1%   1.085µ ±   2%       ~ (p=0.314 n=6)
PoolContention/workers-8-4          1.114µ ± 10%   1.088µ ±   2%       ~ (p=0.106 n=6)
PoolContention/workers-16-4         1.095µ ±  3%   1.098µ ±   1%       ~ (p=1.000 n=6)
ComponentLifecycle-4                3.541m ±  0%   3.599m ±   0%  +1.63% (p=0.002 n=6)
SourceValidation-4                  2.284µ ±  0%   2.336µ ±   2%  +2.23% (p=0.002 n=6)
RegistryConcurrent-4                796.3n ±  2%   809.2n ±   3%       ~ (p=0.485 n=6)
LoaderLoadFromString-4              3.562m ±  0%   3.618m ±   0%  +1.58% (p=0.002 n=6)
geomean                             18.44µ         17.94µ         -2.70%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.812 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.818 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.905 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.223 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                  284.1n ± 4%   285.7n ± 5%       ~ (p=0.223 n=6)
CircuitBreakerExecution_Success-4          21.52n ± 0%   21.46n ± 0%  -0.26% (p=0.002 n=6)
CircuitBreakerExecution_Failure-4          66.52n ± 0%   66.16n ± 0%  -0.54% (p=0.015 n=6)
geomean                                    74.08n        74.03n       -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              │
JQTransform_Simple-4                     911.4n ± 26%   867.7n ± 28%       ~ (p=0.818 n=6)
JQTransform_ObjectConstruction-4         1.424µ ±  7%   1.441µ ±  8%  +1.19% (p=0.043 n=6)
JQTransform_ArraySelect-4                3.274µ ±  1%   3.324µ ±  1%  +1.53% (p=0.002 n=6)
JQTransform_Complex-4                    37.45µ ±  1%   37.81µ ±  0%  +0.95% (p=0.002 n=6)
JQTransform_Throughput-4                 1.745µ ±  0%   1.752µ ±  1%  +0.37% (p=0.006 n=6)
SSEPublishDelivery-4                     65.68n ±  3%   62.88n ±  1%  -4.28% (p=0.002 n=6)
geomean                                  1.622µ         1.608µ        -0.87%

                                 │ baseline-bench.txt │        benchmark-results.txt         │
                                 │        B/op        │     B/op      vs base                │
JQTransform_Simple-4                   1.273Ki ± 0%     1.273Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4       1.773Ki ± 0%     1.773Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4              2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                  16.22Ki ± 0%     16.22Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4               1.984Ki ± 0%     1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │     allocs/op      │ allocs/op   vs base                │
JQTransform_Simple-4                     10.00 ± 0%     10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%     30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    324.0 ± 0%     324.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²               +0.00%               ²
¹ 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.116µ ± 21%   1.095µ ± 5%       ~ (p=0.394 n=6)
SchemaValidation_AllFields-4                1.667µ ±  4%   1.647µ ± 1%       ~ (p=0.143 n=6)
SchemaValidation_FormatValidation-4         1.587µ ±  3%   1.579µ ± 2%       ~ (p=0.669 n=6)
SchemaValidation_ManySchemas-4              1.817µ ±  3%   1.794µ ± 4%       ~ (p=0.394 n=6)
geomean                                     1.522µ         1.503µ       -1.21%

                                    │ 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.204µ ±  8%   1.281µ ± 16%        ~ (p=0.093 n=6)
EventStoreAppend_SQLite-4                  1.348m ±  5%   1.405m ±  4%   +4.23% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           13.26µ ±  2%   13.42µ ±  4%        ~ (p=0.240 n=6)
GetTimeline_InMemory/events-50-4           67.18µ ± 16%   75.38µ ±  1%        ~ (p=0.589 n=6)
GetTimeline_InMemory/events-100-4          119.1µ ±  0%   153.7µ ± 22%  +29.04% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          614.1µ ±  0%   624.4µ ±  0%   +1.67% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.257m ±  1%   1.279m ±  1%   +1.77% (p=0.004 n=6)
GetTimeline_SQLite/events-10-4             104.8µ ±  0%   115.5µ ±  1%  +10.25% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             241.9µ ±  2%   257.1µ ±  2%   +6.30% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            410.3µ ±  0%   417.0µ ±  2%   +1.64% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.744m ±  1%   1.773m ±  1%   +1.70% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.411m ±  0%   3.449m ±  1%   +1.14% (p=0.002 n=6)
geomean                                    211.9µ         225.1µ         +6.21%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  822.5 ± 9%     780.5 ± 9%       ~ (p=0.329 n=6)
EventStoreAppend_SQLite-4                  1.982Ki ± 2%   1.986Ki ± 1%       ~ (p=0.249 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.424 n=6)
GetTimeline_SQLite/events-10-4             16.74Ki ± 0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%   87.14Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%   175.4Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%   846.1Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%   1.639Mi ± 0%       ~ (p=1.000 n=6)
geomean                                    67.57Ki        67.28Ki       -0.42%
¹ 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.

@intel352 intel352 merged commit 62e2287 into main May 13, 2026
30 of 31 checks passed
@intel352 intel352 deleted the feat/issue-653-phase2-aws-operational branch May 13, 2026 17:17
intel352 added a commit that referenced this pull request May 13, 2026
…EKS strip) (#660)

Scored 5 design + 6 plan adversarial-review findings (all resolved upfront);
7 gate misses with specific plan/design checklist fix ideas. Pattern strength
sufficient to ship 2 plugin-level follow-ups (lint/line-hygiene on derived
test files — 3rd occurrence; branch-rebased-on-base check at PR creation —
1st occurrence with clear cause); 2 more waiting for one additional retro
(dead-helper sweep; method-contract preservation in error-backend stubs).
intel352 added a commit that referenced this pull request May 13, 2026
…EKS strip) (#661)

Scored 5 design + 6 plan adversarial-review findings (all resolved upfront);
7 gate misses with specific plan/design checklist fix ideas. Pattern strength
sufficient to ship 2 plugin-level follow-ups (lint/line-hygiene on derived
test files — 3rd occurrence; branch-rebased-on-base check at PR creation —
1st occurrence with clear cause); 2 more waiting for one additional retro
(dead-helper sweep; method-contract preservation in error-backend stubs).
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