{
  "name": "WF-010 Parent Orchestrator Canonical",
  "description": "Selects the route and orchestrates downstream Phase-1 workflow packs.",
  "nodes": [
    {
      "parameters": {
        "path": "wf-010-parent-orchestrator",
        "httpMethod": "POST",
        "responseMode": "onReceived",
        "options": {}
      },
      "id": "wf010_trigger_node",
      "name": "Trigger Node",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        200,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const raw = $json || {};\nconst input = (raw.body && typeof raw.body === 'object') ? raw.body : raw;\nconst dossier_id = input.dossier_id || input.dossierId || input.dossier_context?.dossier_id || 'DOSSIER-UNSPECIFIED';\nconst route_id = input.route_id || input.routeId || 'ROUTE_PHASE1_STANDARD';\nconst user_mode = input.user_mode || input.userMode || 'operator';\nconst intent_id = input.intent_id || input.intentId || 'unknown';\nconst user_message = input.user_message || input.userMessage || '';\nreturn [{ json: { ...input, ...$json, dossier_id, route_id, user_mode, intent_id, user_message, dossier_context: { dossier_id, route_id, loaded_at: new Date().toISOString() } } }];"
      },
      "id": "wf010_dossier_load_node",
      "name": "Dossier Load Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        420,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "return [{ json: { ...$json, registry_lookup: { workflow_registry: 'registries/workflow_registry.yaml', route_registry: 'registries/route_registry.yaml', skill_registry: 'registries/skill_registry.yaml', provider_registry: 'registries/provider_registry.yaml' } } }];"
      },
      "id": "wf010_registry_lookup_node",
      "name": "Registry Lookup Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        640,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const routeId = $json.route_id || 'ROUTE_PHASE1_STANDARD';\nlet nextWorkflow = 'WF-100';\nlet orchestration_decision = 'STANDARD_PATH';\nconst routeMap = {\n  'ROUTE_PHASE1_STANDARD': { next: 'CWF-110', pack: 'WF-100', decision: 'STANDARD_TOPIC_INTELLIGENCE' },\n  'ROUTE_PHASE1_FAST': { next: 'CWF-110', pack: 'WF-100', decision: 'FAST_PATH_TOPIC_INTELLIGENCE' },\n  'ROUTE_PHASE1_REPLAY': { next: $json.replay_target_workflow || 'CWF-110', pack: 'WF-100', decision: 'REPLAY_ROUTE_SELECTED' }\n};\nconst routeConfig = routeMap[routeId] || routeMap['ROUTE_PHASE1_STANDARD'];\nnextWorkflow = routeConfig.next;\norchestration_decision = routeConfig.decision;\nreturn [{\n  json: {\n    ...$json,\n    orchestration_decision: {\n      route_selected: routeId,\n      next_workflow: nextWorkflow,\n      next_pack: routeConfig.pack,\n      decision: orchestration_decision,\n      repo_present: true,\n      approval_gates_pending: ['topic_research_gate', 'script_approval_gate']\n    }\n  }\n}];"
      },
      "id": "wf010_route_selection_node",
      "name": "Route Selection Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        860,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "try {\n  const decision = $json.orchestration_decision;\n  if (!decision || !decision.route_selected || !decision.next_workflow) {\n    throw new Error('missing orchestration decision fields');\n  }\n  return [{ json: { ...$json, validation_status: 'SUCCESS', route_to_error: false } }];\n} catch (error) {\n  return [{ json: { ...$json, validation_status: 'FAILED', route_to_error: true, validation_error: String(error.message || error) } }];\n}"
      },
      "id": "wf010_orchestration_validation_node",
      "name": "Orchestration Validation Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1080,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "if ($json.route_to_error) return [];\nconst fs = require('fs');\nconst path = require('path');\n\nconst now = new Date().toISOString();\nconst dossierId = $json.dossier_id || ($json.dossier_context && $json.dossier_context.dossier_id) || 'DOSSIER-UNSPECIFIED';\nconst routeSelected = ($json.orchestration_decision && $json.orchestration_decision.route_selected) || $json.route_id || 'ROUTE_PHASE1_STANDARD';\n\nconst repoRoot = 'C:/ShadowEmpire-Git';\nconst dossiersDir = path.join(repoRoot, 'dossiers');\nconst dataDir = path.join(repoRoot, 'data');\nconst dossierPath = path.join(dossiersDir, dossierId + '.json');\nconst indexPath = path.join(dataDir, 'se_dossier_index.json');\n\nif (!fs.existsSync(dossiersDir)) fs.mkdirSync(dossiersDir, { recursive: true });\nif (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });\n\nlet dossier = {\n  dossier_id: dossierId,\n  route_id: routeSelected,\n  created_at: now,\n  status: 'active',\n  namespaces: {},\n  _version: 0,\n  _created_at: now,\n  _audit_trail: []\n};\nif (fs.existsSync(dossierPath)) {\n  try {\n    const parsed = JSON.parse(fs.readFileSync(dossierPath, 'utf8'));\n    dossier = {\n      ...dossier,\n      ...parsed,\n      namespaces: typeof parsed.namespaces === 'object' && parsed.namespaces ? parsed.namespaces : {},\n      _audit_trail: Array.isArray(parsed._audit_trail) ? parsed._audit_trail : []\n    };\n  } catch (e) {\n    throw new Error('WF-010 persistence failed: dossier parse error: ' + e.message);\n  }\n}\n\nconst runtimeNs = (dossier.namespaces.runtime && typeof dossier.namespaces.runtime === 'object') ? dossier.namespaces.runtime : {};\nconst runs = Array.isArray(runtimeNs.orchestration_runs) ? runtimeNs.orchestration_runs : [];\nruns.push({\n  timestamp: now,\n  workflow_id: 'WF-010',\n  route_selected: routeSelected,\n  decision: ($json.orchestration_decision && $json.orchestration_decision.decision) || 'STANDARD_PATH'\n});\nruntimeNs.orchestration_runs = runs;\nruntimeNs.last_orchestration_status = 'ORCHESTRATION_COMPLETE';\nruntimeNs.last_orchestration_at = now;\ndossier.namespaces.runtime = runtimeNs;\ndossier.current_workflow = 'WF-010';\ndossier.last_updated = now;\ndossier.status = 'ORCHESTRATION_COMPLETE';\ndossier._version = Number(dossier._version || 0) + 1;\ndossier._last_updated_at = now;\ndossier._audit_trail.push({\n  timestamp: now,\n  workflow_id: 'WF-010',\n  operation: 'ORCHESTRATION_UPDATE',\n  route_selected: routeSelected,\n  notes: 'append orchestration runtime state'\n});\n\nfs.writeFileSync(dossierPath, JSON.stringify(dossier, null, 2), 'utf8');\n\nlet index = {\n  table: 'se_dossier_index',\n  description: 'Index of all dossiers; updated by WF-001 and dossier_writer.',\n  records: [],\n  created_at: now,\n  last_updated: now\n};\nif (fs.existsSync(indexPath)) {\n  index = JSON.parse(fs.readFileSync(indexPath, 'utf8'));\n  index.records = Array.isArray(index.records) ? index.records : [];\n} else {\n  index.records = [];\n}\nconst existing = index.records.find((r) => r && r.dossier_id === dossierId);\nif (existing) {\n  existing.updated_at = now;\n  existing.status = 'active';\n  existing.route_id = routeSelected;\n  existing.source_workflow = 'WF-010 Parent Orchestrator Canonical';\n} else {\n  index.records.push({\n    dossier_id: dossierId,\n    status: 'active',\n    created_at: now,\n    updated_at: now,\n    route_id: routeSelected,\n    source_workflow: 'WF-010 Parent Orchestrator Canonical'\n  });\n}\nindex.last_updated = now;\nfs.writeFileSync(indexPath, JSON.stringify(index, null, 2), 'utf8');\n\nreturn [{\n  json: {\n    ...$json,\n    persistence: {\n      wf: 'WF-010',\n      dossier_path: dossierPath,\n      dossier_index_path: indexPath,\n      dossier_version: dossier._version,\n      persisted_at: now\n    },\n    dossier_write: {\n      mutation_type: 'update_status',\n      target: 'dossier.runtime',\n      timestamp: now,\n      writer_id: 'WF-010',\n      instance_id: dossierId,\n      new_status: 'ORCHESTRATION_COMPLETE',\n      audit_entry: 'route-selection and orchestration from WF-010'\n    }\n  }\n}];"
      },
      "id": "wf010_dossier_write_node",
      "name": "Dossier Update Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1300,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "if ($json.route_to_error) return [];\nreturn [{\n  json: {\n    ...$json,\n    se_route_runs_write: {\n      operation: 'record_workflow_execution',\n      workflow_id: 'WF-010',\n      dossier_id: $json.dossier_id,\n      route_id: $json.orchestration_decision.route_selected,\n      orchestration_decision: $json.orchestration_decision.decision,\n      execution_timestamp: new Date().toISOString(),\n      status: 'COMPLETED'\n    }\n  }\n}];"
      },
      "id": "wf010_route_runs_write_node",
      "name": "se_route_runs Write Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1520,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "dew5Cgkwi8MUtAH7",
          "mode": "id",
          "cachedResultName": "WF-100 Topic Intelligence Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf100_node",
      "name": "Execute WF-100 Topic Intelligence",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        1740,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf100_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\n\nacc[\"wf100_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf100_node",
      "name": "Capture WF-100 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1990,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "2lhY0gkl83tII3CI",
          "mode": "id",
          "cachedResultName": "WF-200 Script Intelligence Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf200_node",
      "name": "Execute WF-200 Script Intelligence",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        2240,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf200_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\nacc[\"wf200_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf200_node",
      "name": "Capture WF-200 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2490,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "xriY2ZiZST6jybeX",
          "mode": "id",
          "cachedResultName": "WF-300 Context Engineering Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf300_node",
      "name": "Execute WF-300 Context Engineering",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        2740,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf300_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-200 Result').first(); if (c) acc[\"wf200_result\"] = c.json[\"wf200_result\"] || c.json; } catch(e) {}\nacc[\"wf300_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf300_node",
      "name": "Capture WF-300 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2990,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "kL9mZo3pQ2xJ5nBv",
          "mode": "id",
          "cachedResultName": "WF-400 Media Production Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf400_node",
      "name": "Execute WF-400 Media Production",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        3240,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf400_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-200 Result').first(); if (c) acc[\"wf200_result\"] = c.json[\"wf200_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-300 Result').first(); if (c) acc[\"wf300_result\"] = c.json[\"wf300_result\"] || c.json; } catch(e) {}\nacc[\"wf400_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf400_node",
      "name": "Capture WF-400 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3490,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "aB2cD4eF6gH8iJ0k",
          "mode": "id",
          "cachedResultName": "WF-500 Publishing Distribution Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf500_node",
      "name": "Execute WF-500 Publishing Distribution",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        3740,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf500_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-200 Result').first(); if (c) acc[\"wf200_result\"] = c.json[\"wf200_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-300 Result').first(); if (c) acc[\"wf300_result\"] = c.json[\"wf300_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-400 Result').first(); if (c) acc[\"wf400_result\"] = c.json[\"wf400_result\"] || c.json; } catch(e) {}\nacc[\"wf500_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf500_node",
      "name": "Capture WF-500 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3990,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "xOeKLfjudlc8OFiB",
          "mode": "id",
          "cachedResultName": "WF-020 Final Approval Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf020_node",
      "name": "Execute WF-020 Final Approval",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        4490,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf020_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-200 Result').first(); if (c) acc[\"wf200_result\"] = c.json[\"wf200_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-300 Result').first(); if (c) acc[\"wf300_result\"] = c.json[\"wf300_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-400 Result').first(); if (c) acc[\"wf400_result\"] = c.json[\"wf400_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-500 Result').first(); if (c) acc[\"wf500_result\"] = c.json[\"wf500_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-600 Result').first(); if (c) acc[\"wf600_result\"] = c.json[\"wf600_result\"] || c.json; } catch(e) {}\nacc[\"wf020_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf020_node",
      "name": "Capture WF-020 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        4740,
        300
      ]
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "fXNkWYfVX214QC87",
          "mode": "id",
          "cachedResultName": "WF-600 Analytics Evolution Pack Canonical"
        },
        "mode": "each",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "wf010_execute_wf600_node",
      "name": "Execute WF-600 Analytics Evolution",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        4240,
        300
      ],
      "alwaysOutputData": true,
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "// Capture wf600_result\nconst subOutput = $json || {};\nlet parentCtx = {};\ntry { parentCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst acc = { ...parentCtx, dossier_id: dossierCtx.dossier_id || parentCtx.dossier_id };\ntry { const c = $('Capture WF-100 Result').first(); if (c) acc[\"wf100_result\"] = c.json[\"wf100_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-200 Result').first(); if (c) acc[\"wf200_result\"] = c.json[\"wf200_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-300 Result').first(); if (c) acc[\"wf300_result\"] = c.json[\"wf300_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-400 Result').first(); if (c) acc[\"wf400_result\"] = c.json[\"wf400_result\"] || c.json; } catch(e) {}\ntry { const c = $('Capture WF-500 Result').first(); if (c) acc[\"wf500_result\"] = c.json[\"wf500_result\"] || c.json; } catch(e) {}\nacc[\"wf600_result\"] = {\n  status: (() => { const s = (subOutput.execution_status || subOutput.status || (subOutput.error ? 'ERROR' : '') || '').toString().toUpperCase(); return s || 'SUCCESS'; })(),\n  payload: subOutput.completion_packet || subOutput.payload || subOutput,\n  captured_at: new Date().toISOString()\n};\nreturn [{ json: acc }];"
      },
      "id": "wf010_capture_wf600_node",
      "name": "Capture WF-600 Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        4490,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "if ($json.route_to_error) return [];\n// After full chain, build orchestration completion packet aggregating all pack results.\nlet plannerCtx = {};\ntry { plannerCtx = $('Route Selection Node').first().json || {}; } catch(e) {}\nlet dossierCtx = {};\ntry { dossierCtx = $('Dossier Load Node').first().json || {}; } catch(e) {}\nconst orchDecision = plannerCtx.orchestration_decision || {};\nconst dossierId = dossierCtx.dossier_id || plannerCtx.dossier_id || $json.dossier_id || 'DOSSIER-UNSPECIFIED';\nconst aggregated = $json || {};\nconst now = new Date().toISOString();\n\nconst completion_packet = {\n  instance_id: 'WF-010-COMP-' + Date.now(),\n  artifact_family: 'orchestration_decision',\n  schema_version: '1.0.0',\n  producer_workflow: 'WF-010',\n  dossier_ref: dossierId,\n  created_at: now,\n  status: 'CREATED',\n  payload: {\n    route_selected: orchDecision.route_selected || 'ROUTE_PHASE1_STANDARD',\n    next_workflow: orchDecision.next_workflow || 'WF-100',\n    orchestration_decision: orchDecision.decision || 'STANDARD_PATH',\n    approval_gates_pending: orchDecision.approval_gates_pending || [],\n    route_to_wf900: 'WF-900',\n    chain_results: {\n      wf100: aggregated.wf100_result || null,\n      wf200: aggregated.wf200_result || null,\n      wf300: aggregated.wf300_result || null,\n      wf020: aggregated.wf020_result || null,\n      wf600: aggregated.wf600_result || null\n    }\n  }\n};\n\nconst fs = require('fs');\nconst path = require('path');\nconst repoRoot = 'C:/ShadowEmpire-Git';\nconst dataDir = path.join(repoRoot, 'data');\nconst packetIndexPath = path.join(dataDir, 'se_packet_index.json');\nif (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });\n\nlet index = { entries: [], total_entries: 0, last_updated: now };\nif (fs.existsSync(packetIndexPath)) {\n  const parsed = JSON.parse(fs.readFileSync(packetIndexPath, 'utf8'));\n  index = {\n    ...index,\n    ...parsed,\n    entries: Array.isArray(parsed.entries)\n      ? parsed.entries\n      : (Array.isArray(parsed.packets) ? parsed.packets : [])\n  };\n}\n\nindex.entries.push({\n  packet_id: completion_packet.instance_id,\n  instance_id: completion_packet.instance_id,\n  artifact_family: completion_packet.artifact_family,\n  schema_version: completion_packet.schema_version,\n  producer_workflow: completion_packet.producer_workflow,\n  dossier_ref: completion_packet.dossier_ref,\n  created_at: completion_packet.created_at,\n  status: completion_packet.status,\n  payload: completion_packet.payload\n});\nindex.total_entries = index.entries.length;\nindex.last_updated = now;\nfs.writeFileSync(packetIndexPath, JSON.stringify(index, null, 2), 'utf8');\n\nreturn [{\n  json: {\n    workflow_id: 'WF-010',\n    execution_status: 'SUCCESS',\n    completion_packet,\n    packet_persistence: {\n      packet_index_path: packetIndexPath,\n      packet_entries: index.entries.length,\n      persisted_at: now\n    }\n  }\n}];"
      },
      "id": "wf010_completion_packet_emission_node",
      "name": "Completion Packet Emission Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        4590,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "if (!$json.route_to_error) return [];\nreturn [{\n  json: {\n    workflow_id: 'WF-010',\n    routing_decision: 'ERROR',\n    route_to_workflow: 'WF-900',\n    error_message: $json.validation_error || 'Orchestration validation failed',\n    closure: $json.parent_status_closure || null,\n    failure_packet: $json.orchestration_decision || null\n  }\n}];"
      },
      "id": "wf010_error_routing_node",
      "name": "Error Routing WF-900 Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1080,
        500
      ]
    },
    {
      "parameters": {
        "jsCode": "const statusOf = (v) => String(v || '').toUpperCase();\nconst normalize = (r) => statusOf(r?.status || r?.execution_status || (r?.error ? 'ERROR' : ''));\nconst required = {\n  wf100: $json.wf100_result || null,\n  wf200: $json.wf200_result || null,\n  wf300: $json.wf300_result || null,\n  wf020: $json.wf020_result || null,\n};\nconst optional = {\n  wf600: $json.wf600_result || null,\n};\nconst failedRequired = Object.entries(required)\n  .map(([k,v]) => ({ pack:k, status: normalize(v) || 'MISSING' }))\n  .filter((x) => !['SUCCESS','COMPLETED'].includes(x.status));\nconst failedOptional = Object.entries(optional)\n  .map(([k,v]) => ({ pack:k, status: normalize(v) || 'MISSING' }))\n  .filter((x) => x.status !== 'MISSING' && !['SUCCESS','COMPLETED'].includes(x.status));\nconst failed = [...failedRequired, ...failedOptional];\nconst routeToError = failed.length > 0;\nreturn [{\n  json: {\n    ...$json,\n    parent_status_closure: {\n      workflow_id: 'WF-010',\n      closure_status: routeToError ? 'FAILED' : 'SUCCESS',\n      checked_at: new Date().toISOString(),\n      required_checks: Object.keys(required),\n      optional_checks: Object.keys(optional),\n      failed_packs: failed\n    },\n    route_to_error: routeToError,\n    validation_error: routeToError ? ('Downstream pack status mismatch: ' + failed.map(f => f.pack + ':' + f.status).join(',')) : null\n  }\n}];"
      },
      "id": "wf010_parent_status_closure_node",
      "name": "Parent Status Closure Node",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        4320,
        300
      ]
    }
  ],
  "connections": {
    "Trigger Node": {
      "main": [
        [
          {
            "node": "Dossier Load Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dossier Load Node": {
      "main": [
        [
          {
            "node": "Registry Lookup Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Registry Lookup Node": {
      "main": [
        [
          {
            "node": "Route Selection Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Selection Node": {
      "main": [
        [
          {
            "node": "Orchestration Validation Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Orchestration Validation Node": {
      "main": [
        [
          {
            "node": "Dossier Update Node",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Error Routing WF-900 Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dossier Update Node": {
      "main": [
        [
          {
            "node": "se_route_runs Write Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "se_route_runs Write Node": {
      "main": [
        [
          {
            "node": "Execute WF-100 Topic Intelligence",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-100 Topic Intelligence": {
      "main": [
        [
          {
            "node": "Capture WF-100 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-100 Result": {
      "main": [
        [
          {
            "node": "Execute WF-200 Script Intelligence",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-200 Script Intelligence": {
      "main": [
        [
          {
            "node": "Capture WF-200 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-200 Result": {
      "main": [
        [
          {
            "node": "Execute WF-300 Context Engineering",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-300 Context Engineering": {
      "main": [
        [
          {
            "node": "Capture WF-300 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-300 Result": {
      "main": [
        [
          {
            "node": "Execute WF-400 Media Production",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-400 Media Production": {
      "main": [
        [
          {
            "node": "Capture WF-400 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-400 Result": {
      "main": [
        [
          {
            "node": "Execute WF-500 Publishing Distribution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-500 Publishing Distribution": {
      "main": [
        [
          {
            "node": "Capture WF-500 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-500 Result": {
      "main": [
        [
          {
            "node": "Execute WF-600 Analytics Evolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-600 Analytics Evolution": {
      "main": [
        [
          {
            "node": "Capture WF-600 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-600 Result": {
      "main": [
        [
          {
            "node": "Execute WF-020 Final Approval",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute WF-020 Final Approval": {
      "main": [
        [
          {
            "node": "Capture WF-020 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture WF-020 Result": {
      "main": [
        [
          {
            "node": "Parent Status Closure Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Completion Packet Emission Node": {
      "main": [
        []
      ]
    },
    "Error Routing WF-900 Node": {
      "main": [
        []
      ]
    },
    "Parent Status Closure Node": {
      "main": [
        [
          {
            "node": "Completion Packet Emission Node",
            "type": "main",
            "index": 0
          },
          {
            "node": "Error Routing WF-900 Node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "meta": {
    "workflow_id": "WF-010",
    "phase": "phase1",
    "vein": "orchestration_vein",
    "purpose": "Parent orchestrator routing through stage packs.",
    "implementation_depth": "production_grade",
    "owner_director": "narada",
    "next_workflow": "WF-100",
    "canonical_file": "n8n/workflows/WF-010.json",
    "wf900_error_route": "WF-900",
    "phase2_chaining": {
      "applied_at": "2026-04-29",
      "pattern": "orchestrator_full_chain",
      "chain": [
        {
          "name": "WF-100 Topic Intelligence Pack Canonical",
          "live_id": "dew5Cgkwi8MUtAH7",
          "capture_field": "wf100_result"
        },
        {
          "name": "WF-200 Script Intelligence Pack Canonical",
          "live_id": "2lhY0gkl83tII3CI",
          "capture_field": "wf200_result"
        },
        {
          "name": "WF-300 Context Engineering Pack Canonical",
          "live_id": "xriY2ZiZST6jybeX",
          "capture_field": "wf300_result"
        },
        {
          "name": "WF-400 Media Production Pack Canonical",
          "live_id": "kL9mZo3pQ2xJ5nBv",
          "capture_field": "wf400_result"
        },
        {
          "name": "WF-500 Publishing Distribution Pack Canonical",
          "live_id": "aB2cD4eF6gH8iJ0k",
          "capture_field": "wf500_result"
        },
        {
          "name": "WF-600 Analytics Evolution Pack Canonical",
          "live_id": "fXNkWYfVX214QC87",
          "capture_field": "wf600_result"
        },
        {
          "name": "WF-020 Final Approval Canonical",
          "live_id": "xOeKLfjudlc8OFiB",
          "capture_field": "wf020_result"
        }
      ],
      "notes": "WF-010 ingress webhook now fires the full Phase-1 chain through n8n executeWorkflow nodes."
    }
  },
  "active": true
}