"""Repro: downstream workflow nodes still run after an upstream node fails. Two bound functions are chained: `first` -> `second`. `first` always raises, so `second` should never run. Instead, `second` executes with `None` as its input: the canvas shows "got: None" on the node, and the server log prints "second() called with None". """ import gradio as gr def first(x: str) -> str: raise ValueError("boom") def second(x: str) -> str: print(f"second() called with {x!r}") return f"got: {x}" wf = gr.Workflow( graph="workflow.json", bind={"first": first, "second": second}, edges=[("first", "second")], ) if __name__ == "__main__": wf.launch()