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.

  1. 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.
  2. 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.
  3. 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.
  4. 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]"