PM-301f · Module 3
Handling Incomplete Sub-Outputs
4 min read
In production pipelines, sub-tasks fail. The question is not how to prevent all failures — it is how to design the pipeline so that partial failures produce useful degraded output rather than complete pipeline failure.
- Classify Sub-Outputs as Blocking or Non-Blocking Blocking sub-outputs: required by downstream sub-tasks or by the assembly prompt. If they fail, dependent steps cannot proceed. Non-blocking sub-outputs: contribute to the final output but their absence does not prevent the pipeline from completing. Classify every sub-output before building the pipeline.
- Define Partial Output Standards Every sub-prompt must specify what to return when it cannot complete fully. A partial output standard defines: which fields are required even on failure, which fields can be omitted with a noted absence, and what error format to use. Partial output is not "nothing" — it is a degraded but structured response.
- Error Propagation When a sub-task fails and produces partial output, that failure must propagate to downstream steps and to the assembly prompt. Define how: include an "errors" array in every intermediate output schema. The assembly prompt checks for errors before assembling and notes them in the final output rather than silently omitting failed sections.
- Fallback Prompts For critical blocking sub-tasks, define a fallback prompt — a simpler version of the sub-task that requires less context or produces less detailed output but is more likely to succeed. The fallback runs only when the primary sub-task fails and its output is blocking.
# Standard sub-task output schema with error support
Every sub-task output MUST include:
{
"status": "complete" | "partial" | "failed",
"errors": [
{
"step": "string — which operation failed",
"reason": "string — why it failed",
"impact": "blocking" | "non-blocking"
}
],
"outputs": {
// ... task-specific output fields here
}
}
Assembly prompt handling:
- status = "complete": use outputs normally
- status = "partial": use available outputs; note gaps in final report
- status = "failed" + impact = "blocking": halt assembly, report failure
- status = "failed" + impact = "non-blocking": assemble without this section,
include note: "[Section X unavailable — see error log]"