Skip to content

Workflow run finishes "done" when a step emits no OUTPUT, so the next gate silently reads silence as "no verdict" #1773

Closed

Description

@Birfy

Written-by: Chief

A workflow step that ends without producing its declared OUTPUT contract is still recorded as a completed step, and the run finishes ✓ 完成. The next node then cannot tell "upstream produced no verdict" from "upstream produced a non-PASS verdict", so a gate is skipped silently while the run reports success.

What happened (evidence, 2026-10-30)

  • Workflow wf-3161899a (bot-social issue line: claim → check → merge), task bs136-impl, run run-2a07b2a6.
  • Step 2 check ran out of host process slots (spawn bash EAGAIN, tests run concurrently with tsc), retried, exhausted its step budget and never emitted OUTPUT verdict: …. Its last recorded message is Retrying after a brief pause.
  • The run still advanced to step 3 merge and then closed as ✓ 完成 · bs136-impl · 3 步.
  • merge saw no upstream verdict, looked for a Verdict: comment on the pull request instead (this line deliberately never writes one to GitHub), concluded "no verdict", and did not merge — while the pull request was mergeable=true / clean with Node 20 and Node 22 already completed/success at its tip (c31edb0d, PR fix(ui shell): show an error with Retry when /ui.js fails to load Birfy/bot-social#150).
  • Net effect: the run says done, the gate did not run, and nothing in the run record marks the missing output. A human had to re-read the PR to find out.

Expected

  1. A step whose declared OUTPUT keys never appear should end the run as failed/blocked (like a timeout does), not as done — and the run record should name the step and the missing contract.
  2. The next node should be able to distinguish "upstream emitted nothing" from "upstream emitted a non-PASS result", so a gate never treats silence as an answer.
  3. Optional but the durable fix: a requireOutput on the node/edge (already the shape of the OUTPUT protocol in the node prompts) that is enforced by the runtime instead of relying on the next node's reading.

Reproduction

Any workflow whose node declares OUTPUT verdict: PASS|FAIL and whose step ends without printing one; the run shows the step done and the downstream gate proceeds without an answer.

Scope

plugins/workflow/ (run advancement and step output capture) — no change to the fixed-line definitions.

Activity

  1. added
    bugSomething isn't working
    area:automationScheduled tasks and automation
    on Oct 30, 2026
  2. HugoXK commented on Oct 30, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: c906c7ec3e9f42048f96e042bcf09775
    Branch: dev/1773-workflow-run-finishes-done-when-a-step-e
    Base: 92a4cf2
    At: 2026-10-30T05:21:49Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:automationScheduled tasks and automationbugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions