Skip to content

fix(wfctl): validate resolves local plugin.json manifests (#756)#757

Merged
intel352 merged 1 commit into
mainfrom
fix/756-validate-local-plugin-manifests
May 23, 2026
Merged

fix(wfctl): validate resolves local plugin.json manifests (#756)#757
intel352 merged 1 commit into
mainfrom
fix/756-validate-local-plugin-manifests

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

Closes #756.

wfctl validate previously required referenced plugin types to already be installed in the active plugin registry. Scenario/sample apps that bundle or sit beside plugin sources (e.g. workflow-compute-scenarios) could not be validated from a clean checkout — compute.provider_catalog and similar declared module types were reported as unknown.

This change makes validate manifest-aware in two complementary ways:

  • --plugin-manifest <path> (repeatable): accepts a plugin.json file, a directory containing one, or a directory of plugin subdirs. Declared types and step schemas are registered before validation. Missing paths surface as errors so typos don't silently degrade to a half-loaded validation context.
  • Auto-resolution of requires.plugins[]: each declared plugin name is searched at <cfgDir>/<name>/plugin.json, <cfgDir>/plugins/<name>/plugin.json, and <cfgDir>/providers/<name>/plugin.json, walking up to three parent directories. Hidden / underscored / vendor / node_modules / _worktrees dirs are skipped. --no-resolve-plugins opts out.

Schema package extracts the shared manifest-parsing path in LoadPluginTypesFromDir into a reusable registerPluginManifestTypes helper and adds the corresponding single-manifest entry points (LoadPluginTypesFromManifest, LoadPluginStepSchemasFromManifest). No config-schema changes, so lockfile / install / migrate surfaces remain untouched.

Reproduction (verified)

Against the issue's workflow-compute-scenarios sample, before fix:

$ wfctl validate --allow-no-entry-points apps/edge-risk-workflow/workflow.yaml
error: 1 config(s) failed validation: - modules[2].type: unknown module type "compute.provider_catalog"

After fix, zero flags:

$ wfctl validate --allow-no-entry-points apps/edge-risk-workflow/workflow.yaml
  Auto-resolved plugin workflow-plugin-compute from /Users/jon/workspace/workflow-plugin-compute/plugin.json
  Auto-resolved plugin workflow-plugin-edge-compute from /Users/jon/workspace/workflow-plugin-edge-compute/plugin.json
  Auto-resolved plugin workflow-plugin-edge-risk from /Users/jon/workspace/workflow-compute-scenarios/providers/workflow-plugin-edge-risk/plugin.json
  PASS apps/edge-risk-workflow/workflow.yaml (3 modules, 0 workflows, 0 triggers)

Test plan

  • 8 new table-driven tests in cmd/wfctl/validate_local_manifests_test.go covering: baseline failure pin, --plugin-manifest pointing at file/dir, repeatable flag, missing-path error, sibling auto-resolve, providers/ subdir auto-resolve, workspace-sibling layout auto-resolve
  • go test ./cmd/wfctl/ ./schema/ -count=1 green
  • go test ./... -count=1 green (no regressions across full suite)
  • gofmt clean
  • Live verification against issue's reproduction scenario above

Files

  • cmd/wfctl/validate.go — add --plugin-manifest flag, --no-resolve-plugins, thread autoResolve into validateFile
  • cmd/wfctl/validate_plugin_manifests.go (new) — loadPluginManifestPath and autoResolveRequiredPlugins helpers
  • cmd/wfctl/validate_local_manifests_test.go (new) — full test coverage
  • schema/schema.go — extract registerPluginManifestTypes; add LoadPluginTypesFromManifest
  • schema/step_schema.go — extract registerPluginManifestStepSchemas; add LoadPluginStepSchemasFromManifest
  • docs/WFCTL.md — document new flags and auto-resolution
  • 3 test files (legacy_aws_types_removed_test.go, legacy_do_types_removed_test.go, main_test.go) — update validateFile callers for the new arg

🤖 Generated with Claude Code

wfctl validate previously required referenced plugin types to already be
installed in the active plugin registry. Scenario/sample apps that bundle
or sit beside plugin sources (e.g. workflow-compute-scenarios) could not
be validated from a clean checkout — `compute.provider_catalog` and
similar declared module types were reported as unknown.

This change makes validate manifest-aware in two complementary ways:

* `--plugin-manifest <path>`: repeatable. Accepts a plugin.json file, a
  directory containing one, or a directory of plugin subdirs. The
  declared module/step/trigger/workflow/resource types and step schemas
  are registered before validation. Missing paths surface as errors so
  typos don't silently degrade to a half-loaded validation context.

* Auto-resolution of `requires.plugins[]`: each declared plugin name is
  searched at `<cfgDir>/<name>/plugin.json`,
  `<cfgDir>/plugins/<name>/plugin.json`, and
  `<cfgDir>/providers/<name>/plugin.json`, walking up to three parent
  directories. Hidden, underscored, vendor/node_modules/_worktrees dirs
  are skipped. `--no-resolve-plugins` opts out.

Implementation extracts the shared manifest-parsing path in
`schema.LoadPluginTypesFromDir` into a reusable
`registerPluginManifestTypes` helper and adds the corresponding
single-manifest entry points (`LoadPluginTypesFromManifest`,
`LoadPluginStepSchemasFromManifest`). No config schema changes.

Verified against the issue's reproduction: the edge-risk-workflow scenario
now passes with zero flags, auto-resolving compute, edge-compute, and
edge-risk plugins from their checked-out locations.

Refs #756
@codecov
Copy link
Copy Markdown

codecov Bot commented May 23, 2026

Codecov Report

❌ Patch coverage is 69.17293% with 41 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cmd/wfctl/validate_plugin_manifests.go 62.90% 14 Missing and 9 partials ⚠️
schema/schema.go 71.79% 9 Missing and 2 partials ⚠️
schema/step_schema.go 53.33% 6 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:276: parsing iteration count: invalid syntax
baseline-bench.txt:341260: parsing iteration count: invalid syntax
baseline-bench.txt:693575: parsing iteration count: invalid syntax
baseline-bench.txt:1019397: parsing iteration count: invalid syntax
baseline-bench.txt:1361302: parsing iteration count: invalid syntax
baseline-bench.txt:1649618: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:376189: parsing iteration count: invalid syntax
benchmark-results.txt:741518: parsing iteration count: invalid syntax
benchmark-results.txt:1038762: parsing iteration count: invalid syntax
benchmark-results.txt:1609453: parsing iteration count: invalid syntax
benchmark-results.txt:1977977: 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 │
                            │       sec/op       │
InterpreterCreation-4               7.827m ± 62%
ComponentLoad-4                     3.494m ±  0%
ComponentExecute-4                  1.812µ ±  1%
PoolContention/workers-1-4          1.020µ ±  1%
PoolContention/workers-2-4          1.015µ ±  2%
PoolContention/workers-4-4          1.012µ ±  1%
PoolContention/workers-8-4          1.018µ ±  1%
PoolContention/workers-16-4         1.012µ ±  1%
ComponentLifecycle-4                3.542m ±  1%
SourceValidation-4                  2.111µ ±  1%
RegistryConcurrent-4                730.2n ±  3%
LoaderLoadFromString-4              3.563m ±  0%
geomean                             17.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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  6.988m ± 57%
ComponentLoad-4                        3.372m ±  0%
ComponentExecute-4                     1.831µ ±  1%
PoolContention/workers-1-4             1.163µ ±  1%
PoolContention/workers-2-4             1.168µ ±  3%
PoolContention/workers-4-4             1.174µ ±  2%
PoolContention/workers-8-4             1.189µ ±  1%
PoolContention/workers-16-4            1.169µ ±  1%
ComponentLifecycle-4                   3.403m ±  1%
SourceValidation-4                     2.225µ ±  1%
RegistryConcurrent-4                   891.6n ±  7%
LoaderLoadFromString-4                 3.462m ±  1%
geomean                                19.01µ

                            │ 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

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  296.6n ± 4%
CircuitBreakerExecution_Success-4          22.67n ± 0%
CircuitBreakerExecution_Failure-4          70.94n ± 0%
geomean                                    78.13n

                                  │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     445.7n ± 0%
CircuitBreakerExecution_Success-4             59.72n ± 0%
CircuitBreakerExecution_Failure-4             64.88n ± 0%
geomean                                       120.0n

                                  │ 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

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              296.7n ± 26%
IaCStateBackend_GRPC-4                   10.24m ±  1%
JQTransform_Simple-4                     633.2n ± 34%
JQTransform_ObjectConstruction-4         1.424µ ±  1%
JQTransform_ArraySelect-4                3.455µ ±  1%
JQTransform_Complex-4                    42.11µ ±  1%
JQTransform_Throughput-4                 1.766µ ±  1%
SSEPublishDelivery-4                     63.91n ±  0%
geomean                                  3.816µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4              416.0 ± 0%
IaCStateBackend_GRPC-4                 5.958Mi ± 7%
JQTransform_Simple-4                   1.273Ki ± 0%
JQTransform_ObjectConstruction-4       1.773Ki ± 0%
JQTransform_ArraySelect-4              2.625Ki ± 0%
JQTransform_Complex-4                  16.22Ki ± 0%
JQTransform_Throughput-4               1.984Ki ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │
                                 │     allocs/op      │
IaCStateBackend_InProcess-4              2.000 ± 0%
IaCStateBackend_GRPC-4                  6.859k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    324.0 ± 0%
JQTransform_Throughput-4                 17.00 ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 349.3n ± 30%
IaCStateBackend_GRPC-4                      9.597m ±  1%
JQTransform_Simple-4                        664.9n ± 35%
JQTransform_ObjectConstruction-4            1.478µ ±  1%
JQTransform_ArraySelect-4                   3.195µ ±  1%
JQTransform_Complex-4                       35.27µ ±  0%
JQTransform_Throughput-4                    1.802µ ±  0%
SSEPublishDelivery-4                        76.09n ±  1%
geomean                                     3.876µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                 416.0 ± 0%
IaCStateBackend_GRPC-4                    5.576Mi ± 9%
JQTransform_Simple-4                      1.273Ki ± 0%
JQTransform_ObjectConstruction-4          1.773Ki ± 0%
JQTransform_ArraySelect-4                 2.625Ki ± 0%
JQTransform_Complex-4                     16.22Ki ± 0%
JQTransform_Throughput-4                  1.984Ki ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                 │ benchmark-results.txt │
                                 │       allocs/op       │
IaCStateBackend_InProcess-4                 2.000 ± 0%
IaCStateBackend_GRPC-4                     6.871k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       324.0 ± 0%
JQTransform_Throughput-4                    17.00 ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.073µ ± 25%
SchemaValidation_AllFields-4                1.646µ ±  4%
SchemaValidation_FormatValidation-4         1.566µ ±  3%
SchemaValidation_ManySchemas-4              1.597µ ±  1%
geomean                                     1.449µ

                                    │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.020µ ± 38%
SchemaValidation_AllFields-4                   1.521µ ±  1%
SchemaValidation_FormatValidation-4            1.497µ ±  1%
SchemaValidation_ManySchemas-4                 1.527µ ±  4%
geomean                                        1.372µ

                                    │ 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

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.034µ ± 27%
EventStoreAppend_SQLite-4                  1.045m ±  4%
GetTimeline_InMemory/events-10-4           13.34µ ±  3%
GetTimeline_InMemory/events-50-4           73.86µ ±  2%
GetTimeline_InMemory/events-100-4          119.8µ ± 22%
GetTimeline_InMemory/events-500-4          616.1µ ±  1%
GetTimeline_InMemory/events-1000-4         1.253m ±  1%
GetTimeline_SQLite/events-10-4             89.61µ ±  1%
GetTimeline_SQLite/events-50-4             235.8µ ±  1%
GetTimeline_SQLite/events-100-4            409.9µ ±  3%
GetTimeline_SQLite/events-500-4            1.779m ±  3%
GetTimeline_SQLite/events-1000-4           3.451m ± 16%
geomean                                    204.1µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                 749.5 ± 16%
EventStoreAppend_SQLite-4                 1.983Ki ±  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.05Ki

                                   │ 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

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.129µ ± 15%
EventStoreAppend_SQLite-4                     905.7µ ±  2%
GetTimeline_InMemory/events-10-4              13.68µ ±  4%
GetTimeline_InMemory/events-50-4              74.32µ ±  3%
GetTimeline_InMemory/events-100-4             150.0µ ±  2%
GetTimeline_InMemory/events-500-4             588.9µ ± 30%
GetTimeline_InMemory/events-1000-4            1.197m ±  1%
GetTimeline_SQLite/events-10-4                78.83µ ±  2%
GetTimeline_SQLite/events-50-4                228.2µ ±  2%
GetTimeline_SQLite/events-100-4               412.2µ ±  2%
GetTimeline_SQLite/events-500-4               1.860m ±  2%
GetTimeline_SQLite/events-1000-4              3.652m ±  2%
geomean                                       205.1µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     781.5 ± 9%
EventStoreAppend_SQLite-4                     1.985Ki ± 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.29Ki

                                   │ 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

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

@intel352 intel352 merged commit df48927 into main May 23, 2026
22 checks passed
@intel352 intel352 deleted the fix/756-validate-local-plugin-manifests branch May 23, 2026 14:55
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.

wfctl validate cannot resolve local plugin manifests for type validation

1 participant