Skip to content

fix: wfctl list_step_types missing 51 built-in step types#306

Merged
intel352 merged 6 commits intomainfrom
copilot/fix-wfctl-list-step-types
Mar 12, 2026
Merged

fix: wfctl list_step_types missing 51 built-in step types#306
intel352 merged 6 commits intomainfrom
copilot/fix-wfctl-list-step-types

Conversation

Copy link
Contributor

Copilot AI commented Mar 12, 2026

KnownStepTypes() in cmd/wfctl/type_registry.go is a hardcoded static map that was never updated as new step types were added to plugins. This caused wfctl list_step_types (and MCP discovery) to silently omit registered steps, breaking IDE completions and config validation for types that work fine at runtime.

Changes

cmd/wfctl/type_registry.go

Added all missing step types with correct config keys, by plugin:

  • pipelinesteps: step.json_parse, step.raw_response, step.auth_validate, step.authz_check, step.hash, step.regex_match, step.parallel, step.field_reencrypt, step.token_revoke, step.sandbox_exec, step.ui_scaffold, step.ui_scaffold_analyze
  • actors: step.actor_send, step.actor_ask
  • secrets: step.secret_rotate
  • platform: step.platform_template; step.k8s_plan/apply/status/destroy; step.scaling_* ×4; step.iac_* ×5; step.dns_*, step.network_*, step.apigw_*, step.ecs_* ×3–4 each; step.app_deploy/status/rollback
  • cicd: step.git_clone, step.git_commit, step.git_push, step.git_tag, step.git_checkout

Also corrected inaccurate ConfigKeys for step.scaling_plan and step.scaling_apply (both only accept scaling), and added the missing fail_on_error key to step.sandbox_exec.

cmd/wfctl/type_registry_test.go

  • Expanded TestKnownStepTypesPopulated to cover all newly added step types including the three called out in the issue
  • Replaced the brittle numeric TestStepTypeCount threshold with a new TestKnownStepTypesCoverAllPlugins test that loads all DefaultPlugins() via plugin.PluginLoader and asserts every registered step factory is present in KnownStepTypes() — deterministically catching any future omissions
Original prompt

This section details on the original issue you should resolve

<issue_title>wfctl list_step_types missing step.json_parse, step.auth_validate, step.raw_response</issue_title>
<issue_description>## Summary

wfctl list_step_types (via MCP) returns 75 step types but is missing at least 3 that are registered by built-in plugins:

  1. step.json_parse — Added in v0.3.33 (pgx JSON double-encoding fix). Not listed.
  2. step.auth_validate — Registered by the auth plugin (JWT validation via auth.m2m). Not listed, though step.auth_required is.
  3. step.raw_response — Registered by the http plugin (non-JSON HTTP responses, e.g. TwiML XML). Not listed, though step.json_response is.

Expected Behavior

All step types registered by built-in plugins should appear in list_step_types output, since the tool description says "Returns built-in steps plus steps from installed plugins."

Steps to Reproduce

wfctl list-step-types  # or via MCP: list_step_types
# Search output for json_parse, auth_validate, raw_response — none found

Context

These steps are actively used in production YAML configs and work at runtime. The issue is only with the wfctl/MCP discovery tooling not listing them, which affects IDE completions and config validation.

Environment

  • workflow v0.3.33
  • wfctl (latest as of 2026-03-12)</issue_description>

<agent_instructions>Make sure the types are valid and exist in workflow. Ensure no additional step types are missing. Then also make sure that we have tests to avoid things being dropped/forgotten going forward, so that we can try to keep everything in sync.</agent_instructions>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Co-authored-by: intel352 <77607+intel352@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix wfctl list_step_types to include missing step types fix: wfctl list_step_types missing 47 built-in step types Mar 12, 2026
@intel352 intel352 marked this pull request as ready for review March 12, 2026 11:50
Copilot AI review requested due to automatic review settings March 12, 2026 11:50
Copy link
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 updates wfctl list-step-types / MCP discovery by expanding the hardcoded KnownStepTypes() registry to include step types that are already registered by built-in plugins at runtime, improving IDE completions and config validation accuracy.

Changes:

  • Added the previously omitted built-in step types to KnownStepTypes() (by plugin).
  • Expanded TestKnownStepTypesPopulated to assert presence of the newly added step types.
  • Increased the minimum step-type count threshold to reduce the chance of future silent omissions.

Reviewed changes

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

File Description
cmd/wfctl/type_registry.go Extends the static step-type registry with additional built-in step types and their config keys.
cmd/wfctl/type_registry_test.go Updates tests to cover newly added step types and raises the step-count regression threshold.
cmd/wfctl/main.go Formatting/alignment changes to the CLI command map.

Comment on lines 188 to 195
func TestStepTypeCount(t *testing.T) {
types := KnownStepTypes()
// We should have a substantial number of step types
if len(types) < 20 {
t.Errorf("expected at least 20 step types, got %d", len(types))
// We should have a substantial number of step types — all built-in plugin steps.
// This threshold guards against accidental removal; update it when new steps are added.
if len(types) < 120 {
t.Errorf("expected at least 120 step types, got %d — some step types may have been dropped", len(types))
}
}
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

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

The regression guard in TestStepTypeCount is still weak against future omissions: it can pass even if specific built-in step types are missing (as long as the total stays >= 120). Since the goal of this PR is to keep KnownStepTypes() in sync with built-in plugins, consider asserting that every step type returned by plugins/all.DefaultPlugins() (via p.StepFactories() keys or p.EngineManifest().StepTypes) exists in KnownStepTypes(). That will deterministically catch any dropped/forgotten step types without relying on a brittle numeric threshold.

Copilot generated this review using guidance from organization custom instructions.
@github-actions
Copy link

github-actions bot commented Mar 12, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:244: parsing iteration count: invalid syntax
baseline-bench.txt:306365: parsing iteration count: invalid syntax
baseline-bench.txt:577797: parsing iteration count: invalid syntax
baseline-bench.txt:870229: parsing iteration count: invalid syntax
baseline-bench.txt:1165838: parsing iteration count: invalid syntax
baseline-bench.txt:1449918: parsing iteration count: invalid syntax
benchmark-results.txt:244: parsing iteration count: invalid syntax
benchmark-results.txt:312641: parsing iteration count: invalid syntax
benchmark-results.txt:616929: parsing iteration count: invalid syntax
benchmark-results.txt:894088: parsing iteration count: invalid syntax
benchmark-results.txt:1191287: parsing iteration count: invalid syntax
benchmark-results.txt:1464468: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  7.351m ± 59%
ComponentLoad-4                        3.575m ±  2%
ComponentExecute-4                     2.035µ ±  3%
PoolContention/workers-1-4             1.105µ ±  3%
PoolContention/workers-2-4             1.091µ ±  1%
PoolContention/workers-4-4             1.101µ ±  1%
PoolContention/workers-8-4             1.095µ ±  3%
PoolContention/workers-16-4            1.094µ ±  1%
ComponentLifecycle-4                   3.496m ±  0%
SourceValidation-4                     2.306µ ±  1%
RegistryConcurrent-4                   756.0n ±  1%
LoaderLoadFromString-4                 3.526m ±  1%
geomean                                18.70µ

                            │ benchmark-results.txt │
                            │         B/op          │
InterpreterCreation-4                  1.944Mi ± 0%
ComponentLoad-4                        2.097Mi ± 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.099Mi ± 0%
SourceValidation-4                     1.984Ki ± 0%
RegistryConcurrent-4                   1.133Ki ± 0%
LoaderLoadFromString-4                 2.099Mi ± 0%
geomean                                15.05Ki

                            │ benchmark-results.txt │
                            │       allocs/op       │
InterpreterCreation-4                   15.09k ± 0%
ComponentLoad-4                         17.43k ± 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                    17.48k ± 0%
SourceValidation-4                       32.00 ± 0%
RegistryConcurrent-4                     2.000 ± 0%
LoaderLoadFromString-4                  17.47k ± 0%
geomean                                  181.2

cpu: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4               6.393m ± 63%
ComponentLoad-4                     3.411m ±  1%
ComponentExecute-4                  1.907µ ±  3%
PoolContention/workers-1-4          1.049µ ±  2%
PoolContention/workers-2-4          1.041µ ±  1%
PoolContention/workers-4-4          1.053µ ±  1%
PoolContention/workers-8-4          1.049µ ±  1%
PoolContention/workers-16-4         1.043µ ±  1%
ComponentLifecycle-4                3.472m ±  2%
SourceValidation-4                  2.075µ ±  1%
RegistryConcurrent-4                762.4n ±  1%
LoaderLoadFromString-4              3.558m ±  1%
geomean                             17.81µ

                            │ baseline-bench.txt │
                            │        B/op        │
InterpreterCreation-4               1.944Mi ± 0%
ComponentLoad-4                     2.097Mi ± 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.099Mi ± 0%
SourceValidation-4                  1.984Ki ± 0%
RegistryConcurrent-4                1.133Ki ± 0%
LoaderLoadFromString-4              2.099Mi ± 0%
geomean                             15.05Ki

                            │ baseline-bench.txt │
                            │     allocs/op      │
InterpreterCreation-4                15.09k ± 0%
ComponentLoad-4                      17.43k ± 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                 17.48k ± 0%
SourceValidation-4                    32.00 ± 0%
RegistryConcurrent-4                  2.000 ± 0%
LoaderLoadFromString-4               17.47k ± 0%
geomean                               181.2

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 7763 64-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     295.2n ± 2%
CircuitBreakerExecution_Success-4             22.57n ± 2%
CircuitBreakerExecution_Failure-4             65.43n ± 0%
geomean                                       75.81n

                                  │ benchmark-results.txt │
                                  │         B/op          │
CircuitBreakerDetection-4                    144.0 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                  │ benchmark-results.txt │
                                  │       allocs/op       │
CircuitBreakerDetection-4                    1.000 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  297.2n ± 1%
CircuitBreakerExecution_Success-4          22.69n ± 0%
CircuitBreakerExecution_Failure-4          70.42n ± 1%
geomean                                    78.02n

                                  │ baseline-bench.txt │
                                  │        B/op        │
CircuitBreakerDetection-4                 144.0 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │
                                  │     allocs/op      │
CircuitBreakerDetection-4                 1.000 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 7763 64-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
JQTransform_Simple-4                        985.4n ± 13%
JQTransform_ObjectConstruction-4            1.464µ ±  1%
JQTransform_ArraySelect-4                   3.285µ ±  1%
JQTransform_Complex-4                       37.88µ ±  1%
JQTransform_Throughput-4                    1.779µ ±  2%
SSEPublishDelivery-4                        60.97n ±  1%
geomean                                     1.640µ

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

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

cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
JQTransform_Simple-4                     835.6n ± 32%
JQTransform_ObjectConstruction-4         1.412µ ± 26%
JQTransform_ArraySelect-4                3.405µ ±  3%
JQTransform_Complex-4                    41.77µ ±  3%
JQTransform_Throughput-4                 1.741µ ±  1%
SSEPublishDelivery-4                     56.49n ±  1%
geomean                                  1.596µ

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

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

pkg: github.com/GoCodeAlone/workflow/schema
cpu: AMD EPYC 7763 64-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                       1.186µ ± 5%
SchemaValidation_AllFields-4                    1.762µ ± 5%
SchemaValidation_FormatValidation-4             1.707µ ± 9%
SchemaValidation_ManySchemas-4                  1.917µ ± 3%
geomean                                         1.617µ

                                    │ benchmark-results.txt │
                                    │         B/op          │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

                                    │ benchmark-results.txt │
                                    │       allocs/op       │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                    1.084µ ± 6%
SchemaValidation_AllFields-4                 1.631µ ± 5%
SchemaValidation_FormatValidation-4          1.567µ ± 5%
SchemaValidation_ManySchemas-4               1.581µ ± 2%
geomean                                      1.446µ

                                    │ baseline-bench.txt │
                                    │        B/op        │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │
                                    │     allocs/op      │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.293µ ± 32%
EventStoreAppend_SQLite-4                     1.305m ±  3%
GetTimeline_InMemory/events-10-4              14.26µ ±  4%
GetTimeline_InMemory/events-50-4              69.44µ ± 13%
GetTimeline_InMemory/events-100-4             125.1µ ±  0%
GetTimeline_InMemory/events-500-4             643.9µ ±  1%
GetTimeline_InMemory/events-1000-4            1.310m ±  1%
GetTimeline_SQLite/events-10-4                111.8µ ±  1%
GetTimeline_SQLite/events-50-4                255.4µ ±  0%
GetTimeline_SQLite/events-100-4               427.1µ ±  1%
GetTimeline_SQLite/events-500-4               1.796m ±  0%
GetTimeline_SQLite/events-1000-4              3.499m ±  1%
geomean                                       220.9µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     784.5 ± 7%
EventStoreAppend_SQLite-4                     1.982Ki ± 3%
GetTimeline_InMemory/events-10-4              7.953Ki ± 0%
GetTimeline_InMemory/events-50-4              46.62Ki ± 0%
GetTimeline_InMemory/events-100-4             94.48Ki ± 0%
GetTimeline_InMemory/events-500-4             472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4            944.3Ki ± 0%
GetTimeline_SQLite/events-10-4                16.74Ki ± 0%
GetTimeline_SQLite/events-50-4                87.14Ki ± 0%
GetTimeline_SQLite/events-100-4               175.4Ki ± 0%
GetTimeline_SQLite/events-500-4               846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4              1.639Mi ± 0%
geomean                                       67.30Ki

                                   │ benchmark-results.txt │
                                   │       allocs/op       │
EventStoreAppend_InMemory-4                     7.000 ± 0%
EventStoreAppend_SQLite-4                       53.00 ± 0%
GetTimeline_InMemory/events-10-4                125.0 ± 0%
GetTimeline_InMemory/events-50-4                653.0 ± 0%
GetTimeline_InMemory/events-100-4              1.306k ± 0%
GetTimeline_InMemory/events-500-4              6.514k ± 0%
GetTimeline_InMemory/events-1000-4             13.02k ± 0%
GetTimeline_SQLite/events-10-4                  382.0 ± 0%
GetTimeline_SQLite/events-50-4                 1.852k ± 0%
GetTimeline_SQLite/events-100-4                3.681k ± 0%
GetTimeline_SQLite/events-500-4                18.54k ± 0%
GetTimeline_SQLite/events-1000-4               37.29k ± 0%
geomean                                        1.162k

cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.189µ ± 12%
EventStoreAppend_SQLite-4                  1.134m ± 10%
GetTimeline_InMemory/events-10-4           12.59µ ±  3%
GetTimeline_InMemory/events-50-4           55.96µ ± 29%
GetTimeline_InMemory/events-100-4          111.8µ ±  1%
GetTimeline_InMemory/events-500-4          567.2µ ±  1%
GetTimeline_InMemory/events-1000-4         1.155m ±  1%
GetTimeline_SQLite/events-10-4             90.19µ ±  1%
GetTimeline_SQLite/events-50-4             227.7µ ±  1%
GetTimeline_SQLite/events-100-4            394.9µ ±  2%
GetTimeline_SQLite/events-500-4            1.717m ±  1%
GetTimeline_SQLite/events-1000-4           3.364m ±  1%
geomean                                    196.2µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  754.0 ± 8%
EventStoreAppend_SQLite-4                  1.983Ki ± 1%
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.08Ki

                                   │ baseline-bench.txt │
                                   │     allocs/op      │
EventStoreAppend_InMemory-4                  7.000 ± 0%
EventStoreAppend_SQLite-4                    53.00 ± 0%
GetTimeline_InMemory/events-10-4             125.0 ± 0%
GetTimeline_InMemory/events-50-4             653.0 ± 0%
GetTimeline_InMemory/events-100-4           1.306k ± 0%
GetTimeline_InMemory/events-500-4           6.514k ± 0%
GetTimeline_InMemory/events-1000-4          13.02k ± 0%
GetTimeline_SQLite/events-10-4               382.0 ± 0%
GetTimeline_SQLite/events-50-4              1.852k ± 0%
GetTimeline_SQLite/events-100-4             3.681k ± 0%
GetTimeline_SQLite/events-500-4             18.54k ± 0%
GetTimeline_SQLite/events-1000-4            37.29k ± 0%
geomean                                     1.162k

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

@intel352
Copy link
Contributor

@copilot apply changes based on the comments in this thread

Also address the failing linter

…teps, replace count guard with plugin cross-check test

Co-authored-by: intel352 <77607+intel352@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 12, 2026

@copilot apply changes based on the comments in this thread

Also address the failing linter

Done in d578ef8:

  1. Fixed step.scaling_plan and step.scaling_apply ConfigKeys — both factories only accept scaling, removed the extra phantom keys.
  2. Added fail_on_error to step.sandbox_exec ConfigKeys.
  3. Replaced the weak numeric threshold in TestStepTypeCount with a new TestKnownStepTypesCoverAllPlugins test that loads all DefaultPlugins() via plugin.PluginLoader, collects every registered step factory, and asserts each one is present in KnownStepTypes(). This deterministically catches future omissions. The new test also found 4 additional missing k8s steps (step.k8s_plan/apply/status/destroy) which are now added as well.

Copilot AI changed the title fix: wfctl list_step_types missing 47 built-in step types fix: wfctl list_step_types missing 51 built-in step types Mar 12, 2026
@intel352
Copy link
Contributor

@copilot Ensure tests and linter are passing

… test)

Co-authored-by: intel352 <77607+intel352@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 12, 2026

@copilot Ensure tests and linter are passing

Tests and linter are now passing. The cross-check test (TestKnownStepTypesCoverAllPlugins) caught one more missing entry — step.graphql — which was added in da1020f. Linter reports 0 issues.

@intel352 intel352 merged commit de3f13f into main Mar 12, 2026
11 checks passed
@intel352 intel352 deleted the copilot/fix-wfctl-list-step-types branch March 12, 2026 16:14
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 list_step_types missing step.json_parse, step.auth_validate, step.raw_response

3 participants