Skip to content

refactor: Phase B core deletion — drop in-core spaces/s3 + rewrite AWS resolvers SDK-free#687

Merged
intel352 merged 6 commits into
mainfrom
feat/phase-b-core-deletion
May 15, 2026
Merged

refactor: Phase B core deletion — drop in-core spaces/s3 + rewrite AWS resolvers SDK-free#687
intel352 merged 6 commits into
mainfrom
feat/phase-b-core-deletion

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

Plan-2 Phase B core deletion: removes in-core duplicates of code now plugin-served by workflow-plugin-aws v1.1.0 + workflow-plugin-digitalocean v1.1.0. Both plugin releases are live (verified: aws v1.1.0 latest with 7 assets; DO v1.1.0 latest with 5 assets).

5 commits, one per task:

  • Task 12 (862a24de): delete dead module/cloud_account_aws.go (zero consumers post-Audit AWS SDK usage in workflow core (RBAC/secrets/artifact stay; IaC drivers reviewed for plugin move) #653)
  • Task 13 (ca917337): rewrite awsProfileResolver + awsRoleARNResolver SDK-free — declare-don't-resolve + record Extra["credential_source"] = "profile"|"role_arn" markers + log warning. The aws plugin's awscreds.BuildAWSConfig (already shipped via workflow-plugin-aws v1.1.0) handles marker resolution in-plugin.
  • Task 14 (ef951021): delete module/iac_state_spaces.go + strip case "spaces": from iac_module.go + drop cmd/wfctl/ consumer (spacesWfctlStateStore + resolveSpacesStateStore). spaces backend now plugin-served via workflow-plugin-digitalocean v1.1.0.
  • Task 15 (3e88b2fe): delete module/s3_storage.go + module/pipeline_step_s3_upload.go + drop built-in registrations from plugins/storage/plugin.go + plugins/pipelinesteps/plugin.go + DOCUMENTATION.md update. storage.s3 + step.s3_upload now plugin-served via workflow-plugin-aws v1.1.0.
  • Task 16 (68d1e99a): go mod tidy (no-op; aws-sdk-go-v2 stays for out-of-scope provider/aws/, plugin/rbac/aws.go, iam/aws.go, artifact/s3.go) + arm .phase-b-complete marker → audit-cloud-symbols.sh --check enforcement enabled + Phase B migration doc at docs/migrations/2026-05-15-plugin-modules-on-iac.md.

Breaking change

Workflow ≥ v0.53.0 (carries plan-2 PR 1 SDK extension #683). Operators using `backend: spaces`, `backend: s3`, `storage.s3`, or `step.s3_upload` MUST install the corresponding plugin (workflow-plugin-aws v1.1.0 or workflow-plugin-digitalocean v1.1.0) — see migration doc for full instructions.

Rollback

Revert PR 4 → in-core spaces/s3 storage + step + SDK-bearing resolvers restore. spaces clean-break + DO v1.1.0 release roll back as MATCHED PAIR.

Test plan

  • `audit-cloud-symbols.sh --check` returns OK in enforcing mode
  • `go build ./... && go test ./...` PASS on every commit
  • Symbol-level grep verification: zero refs to deleted types across all .go files
  • Runtime-launch validation: server boots, lifecycle ticks, clean exit; key signals captured (init / Start-Stop / Shutdown / exit=0)

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings May 15, 2026 21:57
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 completes “Plan-2 Phase B” core deletions by removing in-core S3/Spaces storage + state implementations and making AWS credential resolvers SDK-free, shifting those responsibilities to provider plugins (workflow-plugin-aws / workflow-plugin-digitalocean).

Changes:

  • Removed in-core storage.s3 module and step.s3_upload pipeline step (plus core plugin registrations/tests/docs).
  • Removed in-core DigitalOcean Spaces IaC state backend (and wfctl direct-path Spaces backend support), relying on plugin-served backends instead.
  • Reworked AWS profile / role_arn credential resolvers to “declare, don’t resolve” via credential_source markers, adding focused unit tests and a Phase B migration doc.

Reviewed changes

Copilot reviewed 19 out of 20 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
plugins/storage/plugin.go Drops storage.s3 from manifest, factories, and module schemas.
plugins/storage/plugin_test.go Updates manifest/schema/factory expectations after storage.s3 removal.
plugins/pipelinesteps/plugin.go Removes step.s3_upload from manifest and step factory registrations.
plugins/pipelinesteps/plugin_test.go Updates step factory expectations after step.s3_upload removal.
module/s3_storage.go Deletes in-core S3 storage module implementation.
module/s3_storage_test.go Deletes tests for the removed in-core S3 storage module.
module/pipeline_step_s3_upload.go Deletes in-core S3 upload pipeline step implementation.
module/pipeline_step_s3_upload_test.go Deletes tests for the removed S3 upload step.
module/iac_state_spaces.go Deletes in-core Spaces (S3-compatible) IaC state store implementation.
module/iac_state_spaces_test.go Deletes tests for the removed Spaces IaC state store.
module/iac_module.go Removes in-core spaces backend and updates error/help text to point to plugins.
module/cloud_account_integration_test.go Removes AWS SDK-dependent integration tests tied to deleted/changed AWS surfaces.
module/cloud_account_aws.go Deletes unused in-core AWS SDK AWSConfigProvider/ValidateCredentials implementation.
module/cloud_account_aws_creds.go Makes AWS profile/role_arn resolvers SDK-free by writing credential_source markers + warning log.
module/cloud_account_aws_creds_test.go Adds tests asserting marker behavior + warning logs for AWS profile/role_arn.
DOCUMENTATION.md Removes storage.s3 and step.s3_upload entries from module/step tables.
docs/migrations/2026-05-15-plugin-modules-on-iac.md Adds Phase B migration guide for plugin cutover + coordinated upgrade requirements.
cmd/wfctl/state_compat_test.go Updates doc comment references after Spaces backend removal from wfctl direct-path.
cmd/wfctl/infra_state_store.go Removes wfctl direct-path Spaces backend implementation.
.phase-b-complete Adds marker file to enable/enforce audit checks for Phase B completion.

Comment on lines +79 to 81
m.creds.Extra["credential_source"] = "profile"
logCredentialSourceMarker("aws", "profile")
return nil
Comment thread module/cloud_account_aws_creds.go Outdated
Comment on lines +116 to +122
// logCredentialSourceMarker emits a single warning line when a deferred
// credential_source marker is recorded. The warning matters during the gap
// window where an old plugin version may see a marker it doesn't yet
// understand — the message tells operators where the resolution moved.
func logCredentialSourceMarker(provider, source string) {
log.Printf("workflow: %s credential_source=%q recorded; resolution deferred to plugin (decisions/0036+0038)", provider, source)
}
| `iac.state` `backend: s3` | (already moved in v0.53.0; no in-core impl since then) | plugin-served by [`workflow-plugin-aws`](https://github.com/GoCodeAlone/workflow-plugin-aws) `>= v1.1.0` |
| `storage.s3` module | in-core `module.S3Storage` (registered by `plugins/storage`) | plugin-native in `workflow-plugin-aws >= v1.1.0` |
| `step.s3_upload` pipeline step | in-core `module.S3UploadStep` (registered by `plugins/pipelinesteps`) | plugin-native in `workflow-plugin-aws >= v1.1.0` |
| `cloud.account` `provider: aws` + `credentialType: profile` or `role_arn` | SDK-bearing resolver loaded the profile / called `sts:AssumeRole` in-core | core records a `credential_source` marker only; the aws plugin performs SDK resolution via `awscreds.BuildAWSConfig` (decisions/0036 + 0038) |
Comment on lines +73 to +88
### `cloud.account provider: aws` with `credentialType: profile` or `role_arn`

Core no longer resolves the profile or calls `sts:AssumeRole`. Instead the
resolver records `Extra["credential_source"] = "profile"` or `"role_arn"`
(plus `Extra["profile"]` / `m.creds.RoleARN` + `Extra["external_id"]`) and
logs a `workflow: aws credential_source=…` warning.

The aws plugin's `awscreds.BuildAWSConfig` consumes the marker at the point of
need and performs the SDK-bearing resolution in-plugin. This is a
**co-deploy** requirement: core `>= v0.53.0` AND `workflow-plugin-aws
>= v1.1.0` must be deployed together. Mixing an old plugin against new core
results in a `credential_source` marker the plugin can't interpret — the core
warning is what tells operators which side to upgrade.

`credentialType: static` and `credentialType: env` are unaffected — those
have always been SDK-free.
Comment on lines 82 to 87
}
return &fsWfctlStateStore{dir: dir}, nil

case "spaces":
return resolveSpacesStateStore(cfg)

case "postgres":
return resolvePostgresStateStore(cfg)

@codecov
Copy link
Copy Markdown

codecov Bot commented May 15, 2026

Codecov Report

❌ Patch coverage is 66.66667% with 7 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cmd/wfctl/infra_state_store.go 0.00% 5 Missing ⚠️
module/pipeline_step_cloud_validate.go 71.42% 1 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 15, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:276: parsing iteration count: invalid syntax
baseline-bench.txt:375409: parsing iteration count: invalid syntax
baseline-bench.txt:786398: parsing iteration count: invalid syntax
baseline-bench.txt:1346238: parsing iteration count: invalid syntax
baseline-bench.txt:1976197: parsing iteration count: invalid syntax
baseline-bench.txt:2365175: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:273679: parsing iteration count: invalid syntax
benchmark-results.txt:585695: parsing iteration count: invalid syntax
benchmark-results.txt:931431: parsing iteration count: invalid syntax
benchmark-results.txt:1254274: parsing iteration count: invalid syntax
benchmark-results.txt:1551701: 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               2.708m ± 64%    6.258m ± 56%        ~ (p=0.093 n=6)
ComponentLoad-4                     2.691m ±  7%    3.501m ±  1%  +30.09% (p=0.002 n=6)
ComponentExecute-4                  1.417µ ±  1%    1.828µ ±  2%  +28.96% (p=0.002 n=6)
PoolContention/workers-1-4          802.5n ±  2%   1013.5n ±  1%  +26.30% (p=0.002 n=6)
PoolContention/workers-2-4          778.5n ±  3%   1015.0n ±  1%  +30.37% (p=0.002 n=6)
PoolContention/workers-4-4          778.4n ±  1%   1006.5n ±  1%  +29.31% (p=0.002 n=6)
PoolContention/workers-8-4          785.2n ±  0%   1009.0n ±  1%  +28.50% (p=0.002 n=6)
PoolContention/workers-16-4         789.7n ±  6%   1009.0n ±  1%  +27.77% (p=0.002 n=6)
ComponentLifecycle-4                2.831m ±  1%    3.516m ±  1%  +24.19% (p=0.002 n=6)
SourceValidation-4                  1.705µ ±  1%    2.083µ ±  2%  +22.17% (p=0.002 n=6)
RegistryConcurrent-4                619.8n ±  4%    737.6n ±  2%  +19.01% (p=0.002 n=6)
LoaderLoadFromString-4              2.756m ±  1%    3.562m ±  1%  +29.25% (p=0.002 n=6)
geomean                             13.11µ          17.48µ        +33.35%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.143 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.626 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.911 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.128 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                  230.0n ± 4%   298.3n ± 8%  +29.72% (p=0.002 n=6)
CircuitBreakerExecution_Success-4          17.61n ± 2%   22.65n ± 0%  +28.62% (p=0.002 n=6)
CircuitBreakerExecution_Failure-4          55.42n ± 1%   71.14n ± 0%  +28.37% (p=0.002 n=6)
geomean                                    60.77n        78.34n       +28.90%

                                  │ 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              219.7n ± 26%   288.2n ± 30%  +31.16% (p=0.002 n=6)
IaCStateBackend_GRPC-4                   7.632m ±  2%   9.871m ±  3%  +29.33% (p=0.002 n=6)
JQTransform_Simple-4                     501.0n ± 16%   676.8n ± 26%  +35.10% (p=0.002 n=6)
JQTransform_ObjectConstruction-4         1.066µ ±  0%   1.462µ ±  3%  +37.17% (p=0.002 n=6)
JQTransform_ArraySelect-4                2.626µ ±  2%   3.428µ ±  4%  +30.55% (p=0.002 n=6)
JQTransform_Complex-4                    32.16µ ±  1%   41.47µ ±  2%  +28.94% (p=0.002 n=6)
JQTransform_Throughput-4                 1.356µ ±  9%   1.757µ ±  1%  +29.54% (p=0.002 n=6)
SSEPublishDelivery-4                     50.50n ±  1%   63.14n ±  1%  +25.04% (p=0.002 n=6)
geomean                                  2.912µ         3.810µ        +30.81%

                                 │ 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.664Mi ± 12%     5.704Mi ± 13%       ~ (p=1.000 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.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.09%               ²
¹ 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.861k ± 0%     6.858k ± 0%       ~ (p=0.468 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                    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                    841.5n ± 4%   1071.5n ±  1%  +27.33% (p=0.002 n=6)
SchemaValidation_AllFields-4                 1.260µ ± 1%    1.628µ ± 11%  +29.22% (p=0.002 n=6)
SchemaValidation_FormatValidation-4          1.227µ ± 2%    1.570µ ±  3%  +27.97% (p=0.002 n=6)
SchemaValidation_ManySchemas-4               1.240µ ± 3%    1.598µ ±  3%  +28.92% (p=0.002 n=6)
geomean                                      1.127µ         1.446µ        +28.36%

                                    │ 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               746.1n ±   6%   1041.0n ± 16%  +39.52% (p=0.002 n=6)
EventStoreAppend_SQLite-4                 2.192m ± 233%    1.110m ±  7%  -49.37% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4          9.904µ ±   4%   12.956µ ±  2%  +30.82% (p=0.002 n=6)
GetTimeline_InMemory/events-50-4          54.73µ ±  10%    73.06µ ± 21%  +33.50% (p=0.002 n=6)
GetTimeline_InMemory/events-100-4         86.75µ ±   3%   115.65µ ±  1%  +33.31% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4         436.1µ ±   1%    592.0µ ±  2%  +35.74% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4        892.2µ ±   2%   1219.2µ ±  1%  +36.65% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4            64.54µ ±   3%    88.73µ ±  1%  +37.48% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4            169.2µ ±   2%    233.5µ ±  2%  +38.02% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4           295.9µ ±   0%    411.7µ ±  2%  +39.12% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4           1.298m ±   2%    1.758m ±  2%  +35.42% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4          2.519m ±   3%    3.428m ±  1%  +36.07% (p=0.002 n=6)
geomean                                   161.6µ           202.3µ        +25.20%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                 845.5 ± 11%     804.5 ± 8%       ~ (p=0.225 n=6)
EventStoreAppend_SQLite-4                 1.985Ki ±  1%   1.983Ki ± 2%       ~ (p=0.799 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=0.545 n=6)
GetTimeline_InMemory/events-1000-4        944.3Ki ±  0%   944.3Ki ± 0%       ~ (p=0.232 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=0.420 n=6)
geomean                                   67.73Ki         67.44Ki       -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 ± 2%    53.00 ± 0%       ~ (p=0.455 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.

…+ migration doc credentials.type + wfctl actionable spaces/s3 errors
@intel352 intel352 merged commit b861bf0 into main May 15, 2026
24 checks passed
@intel352 intel352 deleted the feat/phase-b-core-deletion branch May 15, 2026 22:30
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