describe_interface rejects workflows with input-passthrough outputs ("output does not contain step selector")
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.5k
- Forks
- 319
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 133
Description
Summary
POST /workflows/describe_interface throws WorkflowDefinitionError for any workflow whose outputs include a selector pointing at an input ($inputs.<name>) — a construct the execution engine runs fine and the workflow editor lets users build. The error context is describing_workflow_outputs.
Minimal repro (hosted serverless, engine 1.5.1 — reproduces on both roboflow.one and roboflow.com deployments)
{
"version": "1.0",
"inputs": [{ "type": "WorkflowImage", "name": "image" }],
"steps": [{ "type": "roboflow_core/image_blur@v1", "name": "blur", "image": "$inputs.image", "blur_type": "gaussian", "kernel_size": 21 }],
"outputs": [
{ "type": "JsonField", "name": "input_image", "coordinates_system": "own", "selector": "$inputs.image" },
{ "type": "JsonField", "name": "blurred", "coordinates_system": "own", "selector": "$steps.blur.image" }
]
}
Response (400):
{"message":"Workflow definition invalid - output does not contain step selector.","error_type":"WorkflowDefinitionError","context":"describing_workflow_outputs","inner_error_type":null,"inner_error_message":"None"}
Removing the input_image output makes the same spec describe successfully. The same workflow executes correctly (the passthrough output appears in run results), so this is specific to interface description, not compilation/execution.
Compounding: surfaces through inner_workflow as "step misconfigured"
When such a workflow is referenced by roboflow_core/inner_workflow@v1, describing the outer workflow fails with Workflow definition invalid - step \` misconfigured. See details in inner error.` — the inner error being this same rejection of the nested workflow's input-passthrough output. The detail is not surfaced in the response, which made this expensive to diagnose.
Impact
Any product surface that relies on describe_interface to enumerate output kinds silently mis-handles legal workflows containing input-passthrough outputs. Hit in production by a video-processing customer whose workflows (editor-built) include input_image ← $inputs.image; the platform now falls back to static spec analysis (roboflow/roboflow#14841, #14844), but describe gives richer answers and should work for legal specs.
Suggested fix
describing_workflow_outputs should resolve input-selecting outputs to the declared input's kind (e.g. WorkflowImage → image) instead of requiring a step selector; and inner_workflow compile errors should propagate inner_error_message.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the POST /workflows/describe_interface entry point and trace the describing_workflow_outputs context for outputs selecting $inputs. Check how inner_workflow propagates nested errors. Done means input-passthrough outputs resolve to their declared input kind, while inner_workflow exposes the inner error message and the provided reproduction succeeds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend-api-design
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100