{
  "experimentId": "n8n-batch-item-failure",
  "protocolVersion": "1.0.0",
  "n8nImage": "n8nio/n8n:2.30.5",
  "n8nImageDigest": "n8nio/n8n@sha256:450853cd21a2ce36587c4c860eb26927c1ceba9496bf55f4c213b5d3a6dc8c6f",
  "runtime": {
    "platform": "darwin",
    "architecture": "arm64",
    "dockerServerVersion": "28.3.3"
  },
  "startedAt": "2026-07-24T09:08:31.606Z",
  "completedAt": "2026-07-24T09:10:50.716Z",
  "workflowRuns": 40,
  "itemsPerWorkflow": 5,
  "repetitionsPerScenario": 5,
  "requestRecords": 200,
  "validationFailures": [],
  "scenarios": {
    "no_failure": {
      "stop_on_error": {
        "workflowRuns": 5,
        "executionSuccesses": 5,
        "executionFailures": 0,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 5,
        "cliDurationMs": {
          "min": 3048.67,
          "p50": 3876.62,
          "p95": 4410.25,
          "max": 4410.25
        }
      },
      "continue_on_fail": {
        "workflowRuns": 5,
        "executionSuccesses": 5,
        "executionFailures": 0,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 5,
        "cliDurationMs": {
          "min": 3197.47,
          "p50": 3285.01,
          "p95": 3600.7,
          "max": 3600.7
        }
      }
    },
    "fail_first": {
      "stop_on_error": {
        "workflowRuns": 5,
        "executionSuccesses": 0,
        "executionFailures": 5,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 0,
        "cliDurationMs": {
          "min": 2945.83,
          "p50": 3272.89,
          "p95": 3452.13,
          "max": 3452.13
        }
      },
      "continue_on_fail": {
        "workflowRuns": 5,
        "executionSuccesses": 5,
        "executionFailures": 0,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 5,
        "cliDurationMs": {
          "min": 2986.84,
          "p50": 3359.74,
          "p95": 3611.67,
          "max": 3611.67
        }
      }
    },
    "fail_middle": {
      "stop_on_error": {
        "workflowRuns": 5,
        "executionSuccesses": 0,
        "executionFailures": 5,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 0,
        "cliDurationMs": {
          "min": 2895.29,
          "p50": 3139.42,
          "p95": 3816.73,
          "max": 3816.73
        }
      },
      "continue_on_fail": {
        "workflowRuns": 5,
        "executionSuccesses": 5,
        "executionFailures": 0,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 5,
        "cliDurationMs": {
          "min": 2979.44,
          "p50": 3154.49,
          "p95": 3456.65,
          "max": 3456.65
        }
      }
    },
    "fail_last": {
      "stop_on_error": {
        "workflowRuns": 5,
        "executionSuccesses": 0,
        "executionFailures": 5,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 0,
        "cliDurationMs": {
          "min": 2929.89,
          "p50": 3252.3,
          "p95": 3547.23,
          "max": 3547.23
        }
      },
      "continue_on_fail": {
        "workflowRuns": 5,
        "executionSuccesses": 5,
        "executionFailures": 0,
        "totalRequests": 25,
        "requestedItemSets": [
          "1|2|3|4|5"
        ],
        "downstreamRuns": 5,
        "cliDurationMs": {
          "min": 2922.41,
          "p50": 3048.54,
          "p95": 3602.96,
          "max": 3602.96
        }
      }
    }
  },
  "conclusion": "In this five-item protocol, both strategies sent all five HTTP requests even when item 1 or 3 failed. Stop-on-error marked the execution failed and skipped the downstream node only after the batch node finished; continue-on-fail marked the execution successful and ran downstream with five outputs, so explicit error-item handling remained necessary.",
  "limitations": [
    "The fixture is local and deterministic; it does not model network latency, parallel workers, rate limits, or vendor-side retries.",
    "The result covers the n8n HTTP Request node in n8n 2.30.5 with five input items and one controlled HTTP 500.",
    "The experiment records requests, not real payments, messages, inventory changes, or database transactions.",
    "Continue-on-fail behavior must be paired with explicit error routing or counting; this protocol does not prove a specific production design is sufficient."
  ]
}
