Skip to content

fix: skip event recording without execution id#828

Merged
intel352 merged 2 commits into
mainfrom
issue-822-event-recorder-id
Jun 2, 2026
Merged

fix: skip event recording without execution id#828
intel352 merged 2 commits into
mainfrom
issue-822-event-recorder-id

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 2, 2026

Summary

  • skip best-effort pipeline event recording when a recorder is wired but the pipeline has no ExecutionID
  • add regression coverage for inline/untracked pipelines so they still execute successfully without recorder calls

Fixes #822

Verification

  • With fix reverted: GOWORK=off go test ./module -run TestPipeline_EventRecorder_EmptyExecutionIDSkipsRecording -count=1 failed with recorder calls using execution_id="" and parse execution ID "": invalid UUID length: 0 warnings.
  • With fix restored: GOWORK=off go test ./module -run TestPipeline_EventRecorder_EmptyExecutionIDSkipsRecording -count=1 passed.
  • GOWORK=off go test ./module -count=1
  • git diff --check

Copilot AI review requested due to automatic review settings June 2, 2026 00:00
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

Skips best-effort pipeline event recording when a pipeline is executed without an ExecutionID, preventing noisy warnings for inline/untracked pipeline executions while keeping pipeline execution behavior unchanged.

Changes:

  • Guard Pipeline.recordEvent to return early when ExecutionID == "" (in addition to EventRecorder == nil).
  • Add regression test coverage ensuring pipelines still execute successfully and do not attempt recorder calls when ExecutionID is empty.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
module/pipeline_executor.go Skips event recording when the pipeline has no ExecutionID.
module/pipeline_event_recording_test.go Adds regression test for empty ExecutionID to ensure no recorder calls occur and execution still succeeds.

Comment thread module/pipeline_executor.go
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:306: parsing iteration count: invalid syntax
baseline-bench.txt:283687: parsing iteration count: invalid syntax
baseline-bench.txt:592724: parsing iteration count: invalid syntax
baseline-bench.txt:900528: parsing iteration count: invalid syntax
baseline-bench.txt:1237144: parsing iteration count: invalid syntax
baseline-bench.txt:1602323: parsing iteration count: invalid syntax
benchmark-results.txt:306: parsing iteration count: invalid syntax
benchmark-results.txt:348724: parsing iteration count: invalid syntax
benchmark-results.txt:685874: parsing iteration count: invalid syntax
benchmark-results.txt:1014966: parsing iteration count: invalid syntax
benchmark-results.txt:1296940: parsing iteration count: invalid syntax
benchmark-results.txt:1640867: 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 │
                            │       sec/op       │
InterpreterCreation-4               9.475m ± 66%
ComponentLoad-4                     3.551m ±  7%
ComponentExecute-4                  1.928µ ±  2%
PoolContention/workers-1-4          1.096µ ±  2%
PoolContention/workers-2-4          1.093µ ±  2%
PoolContention/workers-4-4          1.083µ ±  1%
PoolContention/workers-8-4          1.081µ ±  2%
PoolContention/workers-16-4         1.088µ ±  2%
ComponentLifecycle-4                3.562m ±  0%
SourceValidation-4                  2.315µ ±  0%
RegistryConcurrent-4                793.1n ±  3%
LoaderLoadFromString-4              3.572m ±  0%
geomean                             19.07µ

                            │ 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: AMD EPYC 9V74 80-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  9.410m ± 68%
ComponentLoad-4                        3.514m ±  6%
ComponentExecute-4                     1.814µ ±  2%
PoolContention/workers-1-4             1.018µ ±  2%
PoolContention/workers-2-4             1.014µ ±  3%
PoolContention/workers-4-4             1.011µ ±  1%
PoolContention/workers-8-4             1.019µ ±  1%
PoolContention/workers-16-4            1.018µ ±  1%
ComponentLifecycle-4                   3.499m ±  1%
SourceValidation-4                     2.074µ ±  0%
RegistryConcurrent-4                   739.8n ±  7%
LoaderLoadFromString-4                 3.543m ±  1%
geomean                                18.10µ

                            │ 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 7763 64-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  283.9n ± 2%
CircuitBreakerExecution_Success-4          21.46n ± 0%
CircuitBreakerExecution_Failure-4          66.08n ± 0%
geomean                                    73.84n

                                  │ 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: AMD EPYC 9V74 80-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     301.6n ± 3%
CircuitBreakerExecution_Success-4             22.69n ± 0%
CircuitBreakerExecution_Failure-4             71.16n ± 3%
geomean                                       78.68n

                                  │ 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 7763 64-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              355.0n ± 13%
IaCStateBackend_GRPC-4                   9.395m ±  3%
JQTransform_Simple-4                     673.2n ± 30%
JQTransform_ObjectConstruction-4         1.440µ ±  0%
JQTransform_ArraySelect-4                3.266µ ±  0%
JQTransform_Complex-4                    37.89µ ±  0%
JQTransform_Throughput-4                 1.747µ ±  2%
SSEPublishDelivery-4                     65.17n ±  1%
geomean                                  3.822µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4             416.0 ±  0%
IaCStateBackend_GRPC-4                5.849Mi ± 12%
JQTransform_Simple-4                  1.273Ki ±  0%
JQTransform_ObjectConstruction-4      1.773Ki ±  0%
JQTransform_ArraySelect-4             2.625Ki ±  0%
JQTransform_Complex-4                 16.31Ki ±  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.835k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    328.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                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 286.6n ± 28%
IaCStateBackend_GRPC-4                      10.15m ± 17%
JQTransform_Simple-4                        655.9n ± 23%
JQTransform_ObjectConstruction-4            1.369µ ±  1%
JQTransform_ArraySelect-4                   3.333µ ±  0%
JQTransform_Complex-4                       41.25µ ±  0%
JQTransform_Throughput-4                    1.671µ ±  1%
SSEPublishDelivery-4                        65.02n ±  2%
geomean                                     3.749µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                416.0 ±  0%
IaCStateBackend_GRPC-4                   5.776Mi ± 12%
JQTransform_Simple-4                     1.273Ki ±  0%
JQTransform_ObjectConstruction-4         1.773Ki ±  0%
JQTransform_ArraySelect-4                2.625Ki ±  0%
JQTransform_Complex-4                    16.31Ki ±  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.854k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       328.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                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                    1.094µ ± 5%
SchemaValidation_AllFields-4                 1.689µ ± 3%
SchemaValidation_FormatValidation-4          1.582µ ± 1%
SchemaValidation_ManySchemas-4               1.856µ ± 3%
geomean                                      1.526µ

                                    │ 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: AMD EPYC 9V74 80-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.081µ ± 15%
SchemaValidation_AllFields-4                   1.625µ ±  6%
SchemaValidation_FormatValidation-4            1.563µ ±  2%
SchemaValidation_ManySchemas-4                 1.593µ ±  1%
geomean                                        1.446µ

                                    │ 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 7763 64-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.168µ ± 22%
EventStoreAppend_SQLite-4                  1.233m ±  1%
GetTimeline_InMemory/events-10-4           14.04µ ±  2%
GetTimeline_InMemory/events-50-4           78.58µ ±  1%
GetTimeline_InMemory/events-100-4          158.3µ ± 21%
GetTimeline_InMemory/events-500-4          625.8µ ±  3%
GetTimeline_InMemory/events-1000-4         1.289m ±  2%
GetTimeline_SQLite/events-10-4             103.1µ ±  3%
GetTimeline_SQLite/events-50-4             240.2µ ±  2%
GetTimeline_SQLite/events-100-4            407.9µ ±  2%
GetTimeline_SQLite/events-500-4            1.775m ±  1%
GetTimeline_SQLite/events-1000-4           3.447m ±  2%
geomean                                    219.5µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  765.5 ± 8%
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.17Ki

                                   │ 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: AMD EPYC 9V74 80-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.104µ ± 12%
EventStoreAppend_SQLite-4                     1.033m ±  5%
GetTimeline_InMemory/events-10-4              12.94µ ±  6%
GetTimeline_InMemory/events-50-4              73.04µ ±  2%
GetTimeline_InMemory/events-100-4             109.9µ ± 32%
GetTimeline_InMemory/events-500-4             559.5µ ±  0%
GetTimeline_InMemory/events-1000-4            1.134m ±  3%
GetTimeline_SQLite/events-10-4                83.84µ ±  1%
GetTimeline_SQLite/events-50-4                218.1µ ±  0%
GetTimeline_SQLite/events-100-4               381.2µ ±  1%
GetTimeline_SQLite/events-500-4               1.667m ±  1%
GetTimeline_SQLite/events-1000-4              3.246m ±  1%
geomean                                       194.0µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                    747.5 ± 15%
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.03Ki

                                   │ 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.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@intel352 intel352 merged commit 922d3de into main Jun 2, 2026
22 checks passed
@intel352 intel352 deleted the issue-822-event-recorder-id branch June 2, 2026 00:15
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.

Inline HTTP pipelines warn on empty execution ID when event recorder is wired

2 participants