{
  "name": "OSuite enterprise action governance for marketplace operations",
  "tags": [
    {
      "name": "osuite"
    },
    {
      "name": "agent-governance"
    },
    {
      "name": "marketplace-operations"
    },
    {
      "name": "enterprise-workflow"
    }
  ],
  "nodes": [
    {
      "id": "c40a681b-a5a1-4c75-b291-1a9063fa42a2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1888,
        -240
      ],
      "parameters": {
        "width": 480,
        "height": 784,
        "content": "## OSuite enterprise action governance for marketplace operations\n\n### How it works\n\nThis workflow governs an enterprise marketplace operations support action through OSuite approval controls. It starts from a manual intake, validates the request locally, runs OSuite exposure and planned-work checks, and then branches based on whether the action is blocked or approved. Approved actions generate a safe internal recommendation and record the final outcome, while failed, blocked, or pending actions stop with structured status information.\n\n### Setup steps\n\n- Configure the OSuite credentials used by all OSuite nodes.\n- Review the initial Set node values for case_id, action_title, requester, and business_goal so they match the intended support action.\n- Verify the local preflight code enforces the required intake rules for your organization.\n- Confirm the OSuite approval, blocking, replay URL, and final outcome fields match your OSuite tenant schema.\n\n### Customization\n\nCustomize the intake fields, preflight validation rules, approval packet contents, and final recommendation text to match the marketplace operation being governed."
      },
      "typeVersion": 1
    },
    {
      "id": "89b04689-bfee-44b0-85e7-41e5ef5de55e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 320,
        "content": "## Start action intake\n\nStarts the workflow manually and creates the initial enterprise support action payload with the case, requester, title, and business goal."
      },
      "typeVersion": 1
    },
    {
      "id": "3d7fc384-9dab-46ff-8ba8-f4f72d35fe08",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -704,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 512,
        "content": "## Validate intake request\n\nRuns a local preflight check, decides whether the request is usable, and stops with intake-fix guidance if required fields or validation checks fail."
      },
      "typeVersion": 1
    },
    {
      "id": "17abc47f-b88f-4b3e-8cce-5d605ab455af",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 480,
        "content": "## Review OSuite exposure\n\nSends usable requests through OSuite runtime exposure and planned-work review checks before an operator approval packet is assembled."
      },
      "typeVersion": 1
    },
    {
      "id": "114633ad-261a-46b9-b3b2-a9939ef6d727",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -208
      ],
      "parameters": {
        "color": 7,
        "width": 832,
        "height": 544,
        "content": "## Gate blocked actions\n\nBuilds the approval packet, checks whether OSuite has blocked the proposed action, stops blocked actions with a reason, or continues to check approval status."
      },
      "typeVersion": 1
    },
    {
      "id": "23d19ad2-a0ef-494e-8fff-627b96cb434d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1536,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 576,
        "content": "## Handle approval outcome\n\nEvaluates whether OSuite approval has been granted, either producing a safe internal recommendation draft or stopping while the action waits for approval."
      },
      "typeVersion": 1
    },
    {
      "id": "afb8e2d1-a142-4995-a313-6726ed8ff2f1",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2160,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 368,
        "content": "## Record final outcome\n\nRecords the completed approved recommendation outcome back into OSuite for governance and audit tracking."
      },
      "typeVersion": 1
    },
    {
      "id": "manual-trigger",
      "name": "Start Manual Process",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1280,
        80
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "prepare-enterprise-action",
      "name": "Set Enterprise Action Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -980,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "case-id",
              "name": "case_id",
              "type": "string",
              "value": "DEMO-CASE-1042"
            },
            {
              "id": "action-title",
              "name": "action_title",
              "type": "string",
              "value": "High-value refund recommendation"
            },
            {
              "id": "requester",
              "name": "requester",
              "type": "string",
              "value": "marketplace-support-ops"
            },
            {
              "id": "business-goal",
              "name": "business_goal",
              "type": "string",
              "value": "Review a high-value refund request and prepare an internal recommendation before customer-facing or ledger action."
            },
            {
              "id": "proposed-action",
              "name": "proposed_action",
              "type": "string",
              "value": "Read synthetic support/order context, draft a refund-risk recommendation, and prepare an internal Slack approval summary."
            },
            {
              "id": "action-kind",
              "name": "action_kind",
              "type": "string",
              "value": "data_access"
            },
            {
              "id": "systems-touched",
              "name": "systems_touched",
              "type": "string",
              "value": "support workspace, order context, Slack"
            },
            {
              "id": "data-classification",
              "name": "data_classification",
              "type": "string",
              "value": "customer support context, order metadata, refund-risk notes"
            },
            {
              "id": "destination-boundary",
              "name": "destination_boundary",
              "type": "string",
              "value": "internal Slack approval channel"
            },
            {
              "id": "expected-side-effects",
              "name": "expected_side_effects",
              "type": "string",
              "value": "draft internal recommendation only; no refund issued"
            },
            {
              "id": "customer-impact",
              "name": "customer_impact",
              "type": "string",
              "value": "may influence refund handling for a high-value support case"
            },
            {
              "id": "policy-posture",
              "name": "policy_posture",
              "type": "string",
              "value": "strict"
            },
            {
              "id": "approval-channel",
              "name": "approval_channel",
              "type": "string",
              "value": "support-risk-approvals"
            },
            {
              "id": "risk-level",
              "name": "risk_level",
              "type": "number",
              "value": 72
            },
            {
              "id": "reversible",
              "name": "reversible",
              "type": "boolean",
              "value": false
            },
            {
              "id": "decision-context",
              "name": "decision_context",
              "type": "string",
              "value": "Synthetic demo action. OSuite should bind approval to this exact action before any external message, refund update, or production side effect occurs."
            },
            {
              "id": "demo-data-only",
              "name": "demo_data_only",
              "type": "boolean",
              "value": true
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "local-enterprise-preflight",
      "name": "Execute Preflight Checks",
      "type": "n8n-nodes-base.code",
      "position": [
        -660,
        80
      ],
      "parameters": {
        "jsCode": "const input = $input.first().json;\nconst s = (value) => String(value ?? '').trim();\nconst lower = (value) => s(value).toLowerCase();\n\nconst title = s(input.action_title);\nconst goal = s(input.business_goal);\nconst action = s(input.proposed_action);\nconst systems = s(input.systems_touched);\nconst dataClass = s(input.data_classification) || 'unspecified';\nconst destination = s(input.destination_boundary) || 'unspecified';\nconst sideEffects = s(input.expected_side_effects) || 'unspecified';\nconst impact = s(input.customer_impact) || 'unspecified';\nconst posture = lower(input.policy_posture) || 'standard';\nconst reversibleText = lower(input.reversible) || 'unknown';\nlet risk = Number(input.risk_level ?? 0);\nif (!Number.isFinite(risk)) risk = 0;\nrisk = Math.max(0, Math.min(100, Math.round(risk)));\n\nconst combined = [action, systems, dataClass, destination, sideEffects, impact].join(' ').toLowerCase();\nconst writeWords = ['send', 'publish', 'update', 'refund', 'delete', 'export', 'sync', 'write', 'notify', 'post', 'create'];\nconst dataWords = ['customer', 'personal', 'pii', 'account', 'payment', 'support', 'ticket', 'order', 'email'];\nconst externalWords = ['external', 'public', 'customer', 'vendor', 'partner', 'slack', 'email', 'webhook', 'api'];\n\nconst hasSideEffect = writeWords.some((word) => combined.includes(word)) || sideEffects !== 'unspecified';\nconst touchesSensitiveData = dataWords.some((word) => combined.includes(word));\nconst crossesBoundary = externalWords.some((word) => destination.toLowerCase().includes(word));\nconst reversible = ['true', 'yes', 'y', '1'].includes(reversibleText);\n\nconst blockers = [];\nconst warnings = [];\nif (!title) blockers.push('missing action title');\nif (!goal) blockers.push('missing business goal');\nif (!action) blockers.push('missing proposed action');\nif (!systems) blockers.push('missing systems touched');\nif (dataClass === 'unspecified') warnings.push('data classification was not provided');\nif (destination === 'unspecified') warnings.push('destination/boundary was not provided');\n\nlet exposureLevel = 'low';\nif (risk >= 70 || (touchesSensitiveData && hasSideEffect && !reversible)) exposureLevel = 'high';\nelse if (risk >= 40 || touchesSensitiveData || hasSideEffect || crossesBoundary) exposureLevel = 'medium';\n\nlet recommendedControl = 'log_only';\nif (blockers.length) recommendedControl = 'fix_intake';\nelse if (exposureLevel === 'high' || ['strict', 'regulated', 'approval-first'].includes(posture)) recommendedControl = 'require_approval';\nelse if (exposureLevel === 'medium') recommendedControl = 'review_or_approve';\n\nconst blastRadius = [];\nif (touchesSensitiveData) blastRadius.push('customer/support data');\nif (hasSideEffect) blastRadius.push('operational side effects');\nif (crossesBoundary) blastRadius.push('external or cross-system boundary');\nif (!blastRadius.length) blastRadius.push('read-only or internal analysis');\n\nconst usable = blockers.length === 0;\nconst preflightEnvelope = {\n  requester: s(input.requester) || 'unspecified',\n  policy_posture: posture,\n  approval_channel: s(input.approval_channel) || 'unspecified',\n  data_classification: dataClass,\n  destination_boundary: destination,\n  expected_side_effects: sideEffects,\n  customer_impact: impact,\n  normalized_risk: risk,\n  reversible,\n  touches_sensitive_data: touchesSensitiveData,\n  has_side_effect: hasSideEffect,\n  crosses_boundary: crossesBoundary,\n  exposure_level: exposureLevel,\n  recommended_control: recommendedControl,\n  blast_radius: blastRadius,\n  warnings,\n  blockers,\n};\nconst preflightSummary = `usable=${usable}; normalized_risk=${risk}; exposure_level=${exposureLevel}; recommended_control=${recommendedControl}; data_classification=${dataClass}; destination_boundary=${destination}; side_effects=${sideEffects}; blast_radius=${blastRadius.join(', ')}; warnings=${warnings.join('; ') || 'none'}; blockers=${blockers.join('; ') || 'none'}`;\n\nreturn [{\n  json: {\n    ...input,\n    usable,\n    normalized_risk: risk,\n    exposure_level: exposureLevel,\n    recommended_control: recommendedControl,\n    blast_radius: blastRadius.join(', '),\n    warnings: warnings.join('; ') || 'none',\n    blockers: blockers.join('; ') || 'none',\n    preflight_summary: preflightSummary,\n    preflight_envelope: preflightEnvelope,\n    preflight_envelope_json: JSON.stringify(preflightEnvelope, null, 2),\n  },\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "request-usable-gate",
      "name": "If Request Is Usable",
      "type": "n8n-nodes-base.if",
      "position": [
        -360,
        80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "request-usable-gate-condition",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.usable }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "stop-fix-intake",
      "name": "Prepare Fix Intake Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -40,
        300
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fix-status",
              "name": "status",
              "type": "string",
              "value": "needs_intake_fix"
            },
            {
              "id": "fix-blockers",
              "name": "blockers",
              "type": "string",
              "value": "={{ $('Execute Preflight Checks').item.json.blockers }}"
            },
            {
              "id": "fix-warnings",
              "name": "warnings",
              "type": "string",
              "value": "={{ $('Execute Preflight Checks').item.json.warnings }}"
            },
            {
              "id": "fix-message",
              "name": "message",
              "type": "string",
              "value": "Add action title, business goal, proposed action, systems touched, data classification, destination/boundary, expected side effects, and reversibility before OSuite review."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "runtime-exposure-snapshot",
      "name": "Capture Runtime Exposure Snapshot",
      "type": "n8n-nodes-osuite.osuite",
      "position": [
        192,
        -80
      ],
      "parameters": {
        "operation": "summarizeRuntimeExposure"
      },
      "typeVersion": 1
    },
    {
      "id": "osuite-review-planned-work",
      "name": "Analyze Planned Work",
      "type": "n8n-nodes-osuite.osuite",
      "position": [
        480,
        80
      ],
      "parameters": {
        "goal": "={{ $('Set Enterprise Action Data').item.json.business_goal }}",
        "advanced": {
          "nodeId": "osuite-review-planned-work",
          "agentId": "n8n-marketplace-support-guardrail",
          "agentName": "n8n marketplace support guardrail",
          "workflowId": "osuite-enterprise-action-governance-template"
        },
        "operation": "reviewPlannedWork",
        "riskLevel": "={{ $('Execute Preflight Checks').item.json.normalized_risk }}",
        "actionKind": "={{ $('Set Enterprise Action Data').item.json.action_kind }}",
        "reversible": "={{ $('Set Enterprise Action Data').item.json.reversible }}",
        "toolInputJson": "={{ JSON.stringify({ scenario: 'enterprise_marketplace_support_action_governance', case_id: $('Set Enterprise Action Data').item.json.case_id, action_title: $('Set Enterprise Action Data').item.json.action_title, requester: $('Set Enterprise Action Data').item.json.requester, business_goal: $('Set Enterprise Action Data').item.json.business_goal, proposed_action: $('Set Enterprise Action Data').item.json.proposed_action, action_kind: $('Set Enterprise Action Data').item.json.action_kind, systems_touched: $('Set Enterprise Action Data').item.json.systems_touched, data_classification: $('Set Enterprise Action Data').item.json.data_classification, destination_boundary: $('Set Enterprise Action Data').item.json.destination_boundary, expected_side_effects: $('Set Enterprise Action Data').item.json.expected_side_effects, customer_impact: $('Set Enterprise Action Data').item.json.customer_impact, policy_posture: $('Set Enterprise Action Data').item.json.policy_posture, approval_channel: $('Set Enterprise Action Data').item.json.approval_channel, local_preflight: $('Execute Preflight Checks').item.json.preflight_envelope, runtime_exposure: $('Capture Runtime Exposure Snapshot').item.json, demo_data_only: true }, null, 2) }}",
        "proposedAction": "={{ $('Set Enterprise Action Data').item.json.proposed_action }}",
        "systemsTouched": "={{ $('Set Enterprise Action Data').item.json.systems_touched }}",
        "decisionContext": "={{ $('Execute Preflight Checks').item.json.preflight_summary + '\\n\\nOperator context: ' + $('Set Enterprise Action Data').item.json.decision_context }}"
      },
      "typeVersion": 1
    },
    {
      "id": "build-approval-packet",
      "name": "Build Approval Packet",
      "type": "n8n-nodes-base.set",
      "position": [
        720,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "packet-status",
              "name": "status",
              "type": "string",
              "value": "reviewed_by_osuite"
            },
            {
              "id": "packet-action-id",
              "name": "action_id",
              "type": "string",
              "value": "={{ $('Analyze Planned Work').item.json.action_id }}"
            },
            {
              "id": "packet-blocked",
              "name": "blocked",
              "type": "boolean",
              "value": "={{ $('Analyze Planned Work').item.json.blocked }}"
            },
            {
              "id": "packet-approval-required",
              "name": "approval_required",
              "type": "boolean",
              "value": "={{ $('Analyze Planned Work').item.json.approval_required }}"
            },
            {
              "id": "packet-replay-url",
              "name": "replay_url",
              "type": "string",
              "value": "={{ $('Analyze Planned Work').item.json.replay_url }}"
            },
            {
              "id": "packet-risk-score",
              "name": "risk_score",
              "type": "string",
              "value": "={{ $('Analyze Planned Work').item.json.risk_score }}"
            },
            {
              "id": "packet-policy-reason",
              "name": "policy_reason",
              "type": "string",
              "value": "={{ $('Analyze Planned Work').item.json.policy_reason }}"
            },
            {
              "id": "packet-summary",
              "name": "approval_packet",
              "type": "string",
              "value": "={{ 'Preflight: ' + $('Execute Preflight Checks').item.json.preflight_summary + '\\nOSuite action: ' + $('Analyze Planned Work').item.json.action_id + '\\nReplay: ' + $('Analyze Planned Work').item.json.replay_url + '\\nOperator checklist: confirm goal, destination, side effects, and approve this exact action only.' }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "blocked-gate",
      "name": "Check OSuite Block Status",
      "type": "n8n-nodes-base.if",
      "position": [
        1040,
        80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "blocked-gate-condition",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.blocked }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "stop-blocked",
      "name": "Log OSuite Block Details",
      "type": "n8n-nodes-base.set",
      "position": [
        1360,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "blocked-status",
              "name": "status",
              "type": "string",
              "value": "blocked_by_osuite"
            },
            {
              "id": "blocked-action-id",
              "name": "action_id",
              "type": "string",
              "value": "={{ $('Build Approval Packet').item.json.action_id }}"
            },
            {
              "id": "blocked-packet",
              "name": "approval_packet",
              "type": "string",
              "value": "={{ $('Build Approval Packet').item.json.approval_packet }}"
            },
            {
              "id": "blocked-reason",
              "name": "reason",
              "type": "string",
              "value": "OSuite blocked this planned enterprise action before execution."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "osuite-check-if-approved",
      "name": "Verify OSuite Approval",
      "type": "n8n-nodes-osuite.osuite",
      "position": [
        1360,
        160
      ],
      "parameters": {
        "actionId": "={{ $('Build Approval Packet').item.json.action_id }}",
        "operation": "checkIfApproved"
      },
      "typeVersion": 1
    },
    {
      "id": "approved-gate",
      "name": "Check OSuite Approval Status",
      "type": "n8n-nodes-base.if",
      "position": [
        1584,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "approved-gate-condition",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "stop-waiting",
      "name": "Log Approval Wait Details",
      "type": "n8n-nodes-base.set",
      "position": [
        1904,
        336
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "waiting-status",
              "name": "status",
              "type": "string",
              "value": "waiting_for_osuite_approval"
            },
            {
              "id": "waiting-action-id",
              "name": "action_id",
              "type": "string",
              "value": "={{ $('Build Approval Packet').item.json.action_id }}"
            },
            {
              "id": "waiting-replay-url",
              "name": "replay_url",
              "type": "string",
              "value": "={{ $('Build Approval Packet').item.json.replay_url }}"
            },
            {
              "id": "waiting-packet",
              "name": "approval_packet",
              "type": "string",
              "value": "={{ $('Build Approval Packet').item.json.approval_packet }}"
            },
            {
              "id": "waiting-message",
              "name": "message",
              "type": "string",
              "value": "Approve this exact action in OSuite Studio, then run Check If Approved again."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "safe-internal-recommendation",
      "name": "Draft Internal Recommendation",
      "type": "n8n-nodes-base.set",
      "position": [
        1904,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "action-performed",
              "name": "action_performed",
              "type": "string",
              "value": "Prepared internal refund-risk recommendation"
            },
            {
              "id": "recommendation",
              "name": "recommendation",
              "type": "string",
              "value": "={{ 'Recommend manual review before any refund. Evidence boundary: synthetic support/order context only. Customer-facing message: not generated. Refund action: not executed. Approval action ID: ' + $('Build Approval Packet').item.json.action_id }}"
            },
            {
              "id": "destination",
              "name": "destination",
              "type": "string",
              "value": "demo-internal-approval-channel"
            },
            {
              "id": "records-processed",
              "name": "records_processed",
              "type": "number",
              "value": 1
            },
            {
              "id": "status",
              "name": "status",
              "type": "string",
              "value": "completed"
            },
            {
              "id": "external-side-effects",
              "name": "external_side_effects",
              "type": "string",
              "value": "none in template; internal draft only"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "osuite-record-final-outcome",
      "name": "Record Final Outcome in OSuite",
      "type": "n8n-nodes-osuite.osuite",
      "position": [
        2200,
        80
      ],
      "parameters": {
        "outcome": "completed",
        "summary": "={{ 'n8n generated a safe internal recommendation after OSuite approval was verified. Preflight: ' + $('Execute Preflight Checks').item.json.preflight_summary + '\\nApproval packet: ' + $('Build Approval Packet').item.json.approval_packet + '\\nRecommendation: ' + $('Draft Internal Recommendation').item.json.recommendation }}",
        "actionId": "={{ $('Build Approval Packet').item.json.action_id }}",
        "operation": "recordFinalOutcome",
        "sideEffects": "internal recommendation drafted only; no external side effects; no production mutations",
        "artifactsCreated": "n8n execution record, OSuite replay record, operator approval packet"
      },
      "typeVersion": 1
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "osuite-enterprise-action-governance-v2-annotated",
  "connections": {
    "Analyze Planned Work": {
      "main": [
        [
          {
            "node": "Build Approval Packet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If Request Is Usable": {
      "main": [
        [
          {
            "node": "Capture Runtime Exposure Snapshot",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Fix Intake Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Manual Process": {
      "main": [
        [
          {
            "node": "Set Enterprise Action Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Approval Packet": {
      "main": [
        [
          {
            "node": "Check OSuite Block Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify OSuite Approval": {
      "main": [
        [
          {
            "node": "Check OSuite Approval Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Preflight Checks": {
      "main": [
        [
          {
            "node": "If Request Is Usable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check OSuite Block Status": {
      "main": [
        [
          {
            "node": "Log OSuite Block Details",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Verify OSuite Approval",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Enterprise Action Data": {
      "main": [
        [
          {
            "node": "Execute Preflight Checks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check OSuite Approval Status": {
      "main": [
        [
          {
            "node": "Draft Internal Recommendation",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Approval Wait Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Draft Internal Recommendation": {
      "main": [
        [
          {
            "node": "Record Final Outcome in OSuite",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture Runtime Exposure Snapshot": {
      "main": [
        [
          {
            "node": "Analyze Planned Work",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}