Skip to content

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

@intel352

Description

@intel352

Summary

Scenario 90 exploratory QA found that inline HTTP-triggered Workflow pipelines repeatedly log event-recorder warnings even though the request pipelines complete successfully.

The server wires an EventRecorder / EventStoreRecorder, but these inline pipeline executions have an empty Pipeline.ExecutionID, so the event recorder attempts to persist events with an empty execution ID and logs warnings like:

level=WARN source=.../module/pipeline_executor.go:79 msg="Failed to record execution event" event_type=execution.started execution_id="" error="parse execution ID \"\": invalid UUID length: 0"

Reproduction

From workflow-scenarios Scenario 90 on origin/main (fb5071c), using released admin/authz UI plugin tags:

cd scenarios/90-admin-tailnet-demo
PLUGIN_ADMIN_REPO=/Users/jon/workspace/workflow-plugin-admin/.worktrees/qa-v1.1.9 \
PLUGIN_AUTHZ_UI_REPO=/Users/jon/workspace/workflow-plugin-authz-ui/.worktrees/qa-v1.0.6 \
./seed/seed.sh

cd .build/playwright-cli-qa
BASE=http://127.0.0.1:18080 npx playwright test exploratory-admin.spec.mjs --reporter=list --workers=1

cd ../..
docker compose logs app | rg -i 'Failed to record execution event|invalid UUID length'

Observed during successful request pipelines such as list-admin-contributions and authz-capabilities.

Expected

When event recording is wired, inline HTTP-triggered pipelines should either:

  • receive/generate a valid execution ID before recording events, or
  • skip event recording for executions that intentionally do not participate in execution tracking.

They should not emit repeated warnings on successful request paths.

Impact

The auth/authz UI behavior itself passed exploratory QA, but runtime-launch validation log scraping flags this as a failure signature. It also makes production logs noisy and can hide real event-recording failures.

Notes

Relevant code paths found during triage:

  • module/pipeline_executor.go records via p.EventRecorder.RecordEvent(ctx, p.ExecutionID, ...).
  • module/execution_tracker.go assigns ExecutionID when running through the tracker path.
  • cmd/server/main.go wires EventRecorder / EventStoreRecorder broadly, so inline HTTP pipelines can record without a tracker-generated execution ID.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions