{
  "name": "Delivery Reconciliation Reporter v0.1.0",
  "nodes": [
    {
      "id": "wf013-manual",
      "name": "Manual test",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "parameters": {},
      "position": [
        0,
        0
      ]
    },
    {
      "id": "wf013-fixture",
      "name": "Fictional demonstration only",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "parameters": {
        "jsCode": "// Fictional metadata only; no real evidence, credentials, pinned output or embedded files.\nreturn [{json:{\n  \"content_id\": \"demo-001\",\n  \"slug\": \"demo-article\",\n  \"request_id\": \"demo-request\",\n  \"source_sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n  \"receipt\": {\n    \"content_id\": \"demo-001\",\n    \"slug\": \"demo-article\",\n    \"request_id\": \"demo-request\",\n    \"branch\": \"editorial/auto-demo-article\",\n    \"article_sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n    \"delivered_markdown_sha256\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n    \"state\": \"awaiting_merge\"\n  },\n  \"observed\": {\n    \"read_error\": false,\n    \"content_id\": \"demo-001\",\n    \"slug\": \"demo-article\",\n    \"request_id\": \"demo-request\",\n    \"source_sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n    \"branch\": \"editorial/auto-demo-article\",\n    \"branch_exists\": true,\n    \"pr_state\": \"open\",\n    \"pr_merged\": false,\n    \"pr_number\": 17\n  }\n}}];"
      },
      "position": [
        280,
        0
      ]
    },
    {
      "id": "wf013-check",
      "name": "Offline advisory result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "parameters": {
        "jsCode": "function reconcileDelivery(input) {\n  const object = v => v !== null && typeof v === 'object' && !Array.isArray(v);\n  const exact = (v, re, max) => typeof v === 'string' && v.length <= max && re.test(v) && !/[\\r\\n]/.test(v);\n  const id = v => exact(v, /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/, 100);\n  const slug = v => exact(v, /^[a-z0-9]+(?:-[a-z0-9]+)*$/, 180);\n  const hash = v => exact(v, /^[a-f0-9]{64}$/, 64);\n  const sha = v => exact(v, /^[a-f0-9]{40}$/, 40);\n  const cleanURL = v => exact(v, /^https:\\/\\/[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?\\.[a-z]{2,}\\/[^?#%\\s]*$/, 500) && !v.includes('/../') && !v.includes('/./');\n  const base = { retry_allowed: false, publication_verified: false, indexing_status: 'unknown', observations_authenticated: false, release_approved: false };\n  const result = (status, next_action, reason) => {\n    if (status === 'merged_unverified' && input.receipt.state === 'published') return {...base, status:'unknown', next_action:'reconcile_evidence_manually', reason:'published_receipt_without_matching_proof'};\n    return {...base, status, next_action, reason};\n  };\n  const unknown = reason => result('unknown', 'reconcile_evidence_manually', reason);\n  if (!object(input) || !id(input.content_id) || !slug(input.slug) || !hash(input.source_sha256) || !id(input.request_id)) return unknown('invalid_or_missing_content_identity');\n  const r = input.receipt, o = input.observed;\n  if (!object(o)) return unknown('missing_observations');\n  if (o.read_error !== false) return unknown('read_not_confirmed_successful');\n  if (![true, false, 'unknown'].includes(o.branch_exists) || !['none','open','closed','unknown'].includes(o.pr_state) || ![true,false,'unknown'].includes(o.pr_merged)) return unknown('invalid_observation_state');\n  const branch = 'editorial/auto-' + input.slug;\n  // Exact absence requires a successful, explicit snapshot and no receipt, PR or commit evidence.\n  if (r === null && o.branch_exists === false && o.pr_state === 'none' && o.pr_merged === false && o.branch === branch && o.content_id === input.content_id && o.slug === input.slug && o.source_sha256 === input.source_sha256 && o.request_id === input.request_id && o.pr_number === undefined && o.merge_commit_sha === undefined && o.deployment === undefined && o.production_url === undefined) return result('missing', 'confirm_delivery_plan_manually', 'explicit_absence_snapshot');\n  if (!object(r)) return unknown('missing_receipt');\n  if (r.content_id !== input.content_id || r.slug !== input.slug || r.request_id !== input.request_id || r.branch !== branch || r.article_sha256 !== input.source_sha256 || !hash(r.delivered_markdown_sha256)) return unknown('receipt_identity_mismatch');\n  if (!['awaiting_merge','partial_delivery','review_closed','merged','published'].includes(r.state)) return unknown('invalid_receipt_state');\n  if (o.content_id !== input.content_id || o.slug !== input.slug || o.request_id !== input.request_id || o.source_sha256 !== input.source_sha256 || o.branch !== branch) return unknown('observation_identity_mismatch');\n  if (o.branch_exists === 'unknown' || o.pr_state === 'unknown' || o.pr_merged === 'unknown') return unknown('incomplete_observations');\n  if (o.pr_state === 'none') {\n    if (r.pr_number !== undefined) return unknown('receipt_pr_without_observed_pr');\n    if (o.pr_merged || o.pr_number !== undefined || o.merge_commit_sha !== undefined || o.deployment !== undefined || o.production_url !== undefined || ['review_closed','merged','published'].includes(r.state)) return unknown('contradictory_pr_evidence');\n    return o.branch_exists ? result('partial_delivery','inspect_branch_manually','branch_without_pr') : unknown('receipt_without_delivery');\n  }\n  if (!Number.isSafeInteger(o.pr_number) || o.pr_number < 1 || o.pr_number > 1000000000) return unknown('missing_pr_identity');\n  if (r.pr_number !== undefined && r.pr_number !== o.pr_number) return unknown('receipt_pr_mismatch');\n  if (o.pr_state === 'open') {\n    if (o.pr_merged || o.branch_exists !== true || o.merge_commit_sha !== undefined || o.deployment !== undefined || o.production_url !== undefined || ['review_closed','merged','published'].includes(r.state)) return unknown('contradictory_open_pr');\n    return result('awaiting_review','review_existing_pr','open_unmerged_pr');\n  }\n  if (!o.pr_merged) {\n    if (o.merge_commit_sha !== undefined || o.deployment !== undefined || o.production_url !== undefined || ['merged','published'].includes(r.state)) return unknown('contradictory_closed_pr');\n    return result('review_closed','review_closed_pr_manually','closed_without_merge');\n  }\n  if (r.state === 'review_closed' || !sha(o.merge_commit_sha)) return unknown('missing_or_conflicting_merge_identity');\n  const d = o.deployment;\n  if (d === undefined || d === null) return result('merged_unverified','verify_exact_deployment_and_url','no_deployment_proof');\n  if (!object(d) || !['unknown','pending','failed','success'].includes(d.status)) return unknown('invalid_deployment_observation');\n  if (d.status !== 'success') return result('merged_unverified','verify_exact_deployment_and_url','deployment_not_successful');\n  if (!id(d.deployment_id) || d.commit_sha !== o.merge_commit_sha || d.source_sha256 !== input.source_sha256 || d.content_id !== input.content_id || d.slug !== input.slug || !cleanURL(input.expected_production_url) || d.production_url !== input.expected_production_url || d.environment !== 'production') return unknown('deployment_identity_mismatch');\n  const u = o.production_url;\n  if (!object(u) || u.url !== input.expected_production_url || u.deployment_id !== d.deployment_id || u.commit_sha !== o.merge_commit_sha || u.source_sha256 !== input.source_sha256 || u.content_id !== input.content_id || u.slug !== input.slug || u.delivered_markdown_sha256 !== r.delivered_markdown_sha256 || u.http_status !== 200 || u.content_matches !== true) return result('merged_unverified','verify_exact_deployment_and_url','missing_exact_url_content_proof');\n  // Even this outcome reports snapshot consistency only; no live request, indexing claim or approval.\n  return {...result('published','review_indexing_separately','matching_supplied_production_evidence'), publication_verified:true};\n}\nreturn $input.all().map((item,index)=>({json:reconcileDelivery(item.json),pairedItem:{item:index}}));"
      },
      "position": [
        560,
        0
      ]
    }
  ],
  "connections": {
    "Manual test": {
      "main": [
        [
          {
            "node": "Fictional demonstration only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fictional demonstration only": {
      "main": [
        [
          {
            "node": "Offline advisory result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1",
    "timezone": "Africa/Luanda",
    "saveDataSuccessExecution": "none",
    "saveDataErrorExecution": "none",
    "saveManualExecutions": false
  },
  "tags": []
}
