{
  "experimentId": "n8n-cli-observability-signals",
  "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-23T08:15:46.660Z",
  "completedAt": "2026-07-23T08:19:39.011Z",
  "totalRuns": 60,
  "expectedSuccessRuns": 30,
  "expectedFailureRuns": 30,
  "detectors": {
    "exitCode": {
      "correct": 60,
      "total": 60,
      "accuracy": 1,
      "falseFailures": 0,
      "missedFailures": 0
    },
    "rawFailureWord": {
      "correct": 30,
      "total": 60,
      "accuracy": 0.5,
      "falseFailures": 30,
      "missedFailures": 0
    },
    "exactFailureToken": {
      "correct": 60,
      "total": 60,
      "accuracy": 1,
      "falseFailures": 0,
      "missedFailures": 0
    },
    "structuredExecutionStatus": {
      "correct": 60,
      "total": 60,
      "accuracy": 1,
      "falseFailures": 0,
      "missedFailures": 0
    }
  },
  "structuredFailureTokenMatches": 30,
  "conclusion": "Use the process exit code for a binary CLI health signal and parse structured execution JSON for classification. Do not classify raw output with generic failure words because routine warnings can contain words such as Failed on successful executions.",
  "limitations": [
    "The workflow alternates deterministic synthetic success and failure; it does not call a third-party API.",
    "The result covers n8n CLI execute --rawOutput on n8n 2.30.5 only.",
    "The experiment evaluates classification signals, not retries, queue mode, webhooks, or external observability products."
  ]
}
