{
  "schemaVersion": "office-map.v1",
  "title": "Office",
  "subtitle": "PMF cloud control hub and operations map.",
  "updatedAt": "2026-05-24T00:00:00Z",
  "indexSlug": "stability",
  "notes": [
    "The public Office page is stakeholder-safe and read-only.",
    "Operator controls are safe triggers routed through office-api.",
    "Office never stores private keys, signer material, wallet secrets, or Polymarket credentials."
  ],
  "networks": [
    {
      "id": "polygon-mainnet",
      "label": "Polygon Mainnet",
      "chainId": 137,
      "explorerBaseUrl": "https://polygonscan.com"
    },
    {
      "id": "gcp-us-central1",
      "label": "GCP us-central1",
      "chainId": null,
      "explorerBaseUrl": "https://console.cloud.google.com"
    },
    {
      "id": "gcp-europe-west6",
      "label": "GCP europe-west6",
      "chainId": null,
      "explorerBaseUrl": "https://console.cloud.google.com"
    }
  ],
  "nodes": [
    {
      "id": "contract-oracle",
      "label": "PMFBasketOracle",
      "group": "contracts",
      "kind": "contract",
      "status": "live",
      "network": "Polygon Mainnet",
      "chainId": 137,
      "address": "0xAB2367688A0586bB1d25D4de9f574d88102A0c8C",
      "owner": "index",
      "headline": "Signed basket feed",
      "description": "Canonical on-chain Stability basket reference read by the vault and intent processor.",
      "details": [
        "Read-only Office overlay checks latestBasket and isFresh",
        "Oracle publishing remains outside public Office controls"
      ],
      "links": [
        {
          "label": "Polygonscan",
          "url": "https://polygonscan.com/address/0xAB2367688A0586bB1d25D4de9f574d88102A0c8C"
        }
      ],
      "position": { "x": 260, "y": 150 }
    },
    {
      "id": "contract-registry",
      "label": "PMFOracleRegistry",
      "group": "contracts",
      "kind": "contract",
      "status": "live",
      "network": "Polygon Mainnet",
      "chainId": 137,
      "address": "0x2A4c76Dd04dC274fA63Bf16391297D6CfC388bAE",
      "owner": "index",
      "headline": "Feed address book",
      "description": "Feed routing registry for oracle replacement and governance handoff.",
      "details": [
        "Office links and displays the configured address only"
      ],
      "position": { "x": 260, "y": 285 }
    },
    {
      "id": "contract-vault",
      "label": "PMFVault",
      "group": "contracts",
      "kind": "contract",
      "status": "live",
      "network": "Polygon Mainnet",
      "chainId": 137,
      "address": "",
      "owner": "contracts",
      "headline": "Pilot fund vault",
      "description": "pUSD vault with AP quotes, NAV reporting, mandate limits, and solver-fillable intent batches.",
      "details": [
        "Office reads activeOrderIntentBatch",
        "Live commits and solver execution are blocked from Office v1"
      ],
      "links": [
        {
          "label": "Vault Spec",
          "url": "/contracts/docs/specifications/pmf-vault.md"
        }
      ],
      "position": { "x": 260, "y": 440 }
    },
    {
      "id": "contract-pusd",
      "label": "pUSD",
      "group": "contracts",
      "kind": "token",
      "status": "external",
      "network": "Polygon Mainnet",
      "chainId": 137,
      "address": "0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB",
      "owner": "Polymarket",
      "headline": "Collateral asset",
      "description": "Polymarket USD collateral token used by the vault and solver accounts.",
      "details": [
        "Office never receives CLOB credentials"
      ],
      "position": { "x": 80, "y": 440 }
    },
    {
      "id": "contract-ctf",
      "label": "Conditional Tokens",
      "group": "contracts",
      "kind": "contract",
      "status": "external",
      "network": "Polygon Mainnet",
      "chainId": 137,
      "address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
      "owner": "Polymarket",
      "headline": "ERC-1155 positions",
      "description": "Prediction-market position custody boundary for vault and solver accounting.",
      "position": { "x": 80, "y": 575 }
    },
    {
      "id": "service-index-api",
      "label": "index-api",
      "group": "services",
      "kind": "service",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Managed index API",
      "description": "Public Cloud Run API for health, latest levels, constituents, and oracle-basket payloads.",
      "details": [
        "Stakeholder-safe public endpoint",
        "Office reads /health and /oracle-basket directly"
      ],
      "position": { "x": 610, "y": 100 }
    },
    {
      "id": "service-index-hourly",
      "label": "index-hourly",
      "group": "services",
      "kind": "job",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Hourly Cloud Run Job",
      "description": "Publishes hourly Stability records into Cloud SQL.",
      "details": [
        "Safe operator trigger may run this Cloud Run Job"
      ],
      "position": { "x": 610, "y": 230 }
    },
    {
      "id": "service-index-daily",
      "label": "index-daily",
      "group": "services",
      "kind": "job",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Daily Cloud Run Job",
      "description": "Refreshes discovery and review support data.",
      "details": [
        "Safe operator trigger may run this Cloud Run Job"
      ],
      "position": { "x": 610, "y": 360 }
    },
    {
      "id": "service-index-oracle",
      "label": "index-oracle",
      "group": "services",
      "kind": "job",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Oracle publisher job",
      "description": "Cloud Run Job for oracle publishing. Office v1 only permits dry-run execution.",
      "details": [
        "office-api verifies ORACLE_DRY_RUN=true before running this job"
      ],
      "position": { "x": 610, "y": 490 }
    },
    {
      "id": "service-oracle-fuzzy-controller",
      "label": "fuzzy oracle",
      "group": "services",
      "kind": "service",
      "status": "planned",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Private daily publish scheduler",
      "description": "Chooses one hidden US-morning publish time and runs the oracle job through Cloud Tasks.",
      "details": [
        "Scheduler tick is 12:00 UTC",
        "Private publish window is 12:15-15:55 UTC",
        "Pending exact time is not displayed in public Office"
      ],
      "position": { "x": 610, "y": 620 }
    },
    {
      "id": "service-oracle-fuzzy-tasks",
      "label": "oracle task",
      "group": "services",
      "kind": "queue",
      "status": "planned",
      "environment": "gcp-pilot",
      "owner": "index",
      "headline": "Delayed Cloud Tasks callback",
      "description": "One deterministic daily task invokes the fuzzy controller run endpoint at the chosen private time.",
      "details": [
        "Task name is idempotent by publish day",
        "Callback runs the existing index-oracle job"
      ],
      "position": { "x": 760, "y": 620 }
    },
    {
      "id": "service-ap-api",
      "label": "ap-api",
      "group": "services",
      "kind": "service",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "ap-server",
      "headline": "Authorized participant API",
      "description": "Cloud Run API for AP status, quote creation, and quote lifecycle records.",
      "details": [
        "Office API reads AP status through authenticated server-side calls",
        "AP does not hold CLOB credentials"
      ],
      "position": { "x": 915, "y": 100 }
    },
    {
      "id": "service-office-api",
      "label": "office-api",
      "group": "services",
      "kind": "service",
      "status": "planned",
      "environment": "gcp-pilot",
      "owner": "office",
      "headline": "Permissioned control API",
      "description": "Authenticated Cloud Run API that aggregates GCP, service, queue, and read-only contract status for operators.",
      "details": [
        "Public Office works without this service",
        "Safe actions require authenticated operator identity and RUN_SAFE_TRIGGER"
      ],
      "position": { "x": 915, "y": 230 }
    },
    {
      "id": "service-trading-api",
      "label": "trading-engine-api",
      "group": "services",
      "kind": "service",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "trading-engine",
      "headline": "Internal trading status API",
      "description": "Cloud Run API for health, dry-run planning, previews, and reconciliation status.",
      "details": [
        "Office v1 only permits dry-run and preview calls"
      ],
      "position": { "x": 1215, "y": 100 }
    },
    {
      "id": "service-trading-solver",
      "label": "solver-worker",
      "group": "services",
      "kind": "worker",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "trading-engine",
      "headline": "Persistent solver worker",
      "description": "Consumes committed-batch events and runs preview or paper/live modes according to deployment gates.",
      "details": [
        "Office cannot submit live CLOB orders or live solver execution"
      ],
      "position": { "x": 1215, "y": 230 }
    },
    {
      "id": "service-trading-reconciler",
      "label": "reconciliation-store",
      "group": "services",
      "kind": "store",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "trading-engine",
      "headline": "Execution records",
      "description": "Durable vault batch, attempt, report, and residual alert records.",
      "position": { "x": 1215, "y": 360 }
    },
    {
      "id": "service-europe-solver-subscription",
      "label": "Europe solver sub",
      "group": "services",
      "kind": "queue",
      "status": "live",
      "environment": "gcp-europe-west6",
      "owner": "intent-processor",
      "headline": "Dedicated Pub/Sub pull subscription",
      "description": "Independent subscription for VaultIntentBatchCommitted envelopes so the Switzerland solver can shadow every event without competing with the US worker.",
      "details": [
        "Topic remains pmf-pilot-vault-batches-committed",
        "Subscription is pmf-pilot-solver-batches-europe-west6-sub"
      ],
      "position": { "x": 1810, "y": 230 }
    },
    {
      "id": "service-europe-trading-solver",
      "label": "Zurich solver preview",
      "group": "services",
      "kind": "worker",
      "status": "live",
      "environment": "gcp-europe-west6",
      "owner": "trading-engine",
      "headline": "Cloud Run solver near England",
      "description": "Preview-only solver worker in GCP europe-west6, selected after excluding UK, Netherlands, and other restricted or high-risk nearby regions.",
      "details": [
        "TRADING_ENGINE_SOLVER_WORKER_ACTION=preview",
        "TRADING_ENGINE_LIVE_EXECUTION_ENABLED=false",
        "No solver private key or CLOB credentials are injected"
      ],
      "position": { "x": 1810, "y": 360 }
    },
    {
      "id": "service-europe-solver-store",
      "label": "Europe solver records",
      "group": "services",
      "kind": "store",
      "status": "live",
      "environment": "gcp-europe-west6",
      "owner": "trading-engine",
      "headline": "Shared reconciliation tables",
      "description": "Preview records write to the existing Cloud SQL trading reconciliation store while regional execution is evaluated.",
      "details": [
        "Regional database split remains deferred until execution behavior is proven"
      ],
      "position": { "x": 1810, "y": 490 }
    },
    {
      "id": "service-intent-webhook",
      "label": "intent-webhook",
      "group": "services",
      "kind": "function",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "intent-processor",
      "headline": "Oracle webhook receiver",
      "description": "Receives signed Web3 webhook events and normalizes BasketPublished logs.",
      "position": { "x": 1510, "y": 100 }
    },
    {
      "id": "service-intent-committer",
      "label": "intent-committer",
      "group": "services",
      "kind": "function",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "intent-processor",
      "headline": "Intent commit function",
      "description": "Queue-triggered committer. Office v1 does not invoke live commits.",
      "position": { "x": 1510, "y": 230 }
    },
    {
      "id": "service-intent-poller",
      "label": "intent-poller",
      "group": "services",
      "kind": "function",
      "status": "planned",
      "environment": "gcp-pilot",
      "owner": "intent-processor",
      "headline": "Fallback event poller",
      "description": "Manual or fallback backfill path. Office only allows dry-run invocation.",
      "details": [
        "office-api verifies INTENT_DRY_RUN=true before invoking"
      ],
      "position": { "x": 1510, "y": 360 }
    },
    {
      "id": "service-intent-queue",
      "label": "intent queue",
      "group": "services",
      "kind": "queue",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "intent-processor",
      "headline": "Intent commit requests",
      "description": "Pub/Sub topic for VaultIntentCommitRequested envelopes.",
      "position": { "x": 1510, "y": 490 }
    },
    {
      "id": "service-vault-batches-topic",
      "label": "batch topic",
      "group": "services",
      "kind": "queue",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "intent-processor",
      "headline": "Committed batch events",
      "description": "Pub/Sub topic for VaultIntentBatchCommitted envelopes consumed by solver workers.",
      "position": { "x": 1215, "y": 490 }
    },
    {
      "id": "service-cloud-sql",
      "label": "Cloud SQL",
      "group": "services",
      "kind": "database",
      "status": "live",
      "environment": "gcp-pilot",
      "owner": "platform",
      "headline": "PostgreSQL persistence",
      "description": "Durable stores for index, AP quote/audit, intent, and trading reconciliation data.",
      "position": { "x": 915, "y": 490 }
    },
    {
      "id": "param-oracle-feed",
      "label": "Oracle Feed",
      "group": "parameters",
      "kind": "parameter",
      "status": "live",
      "owner": "index",
      "headline": "Feed ID, round, and freshness",
      "description": "Office overlays the latest round, hash, valid-until, and freshness state.",
      "position": { "x": 260, "y": 660 }
    },
    {
      "id": "param-ap-policy",
      "label": "AP Policy",
      "group": "parameters",
      "kind": "parameter",
      "status": "live",
      "owner": "ap-server",
      "headline": "Fees, spreads, TTL, and supply controls",
      "description": "AP status exposes sanitized policy and product readiness.",
      "position": { "x": 915, "y": 660 }
    },
    {
      "id": "param-trading-risk",
      "label": "Trading Risk",
      "group": "parameters",
      "kind": "parameter",
      "status": "live",
      "owner": "trading-engine",
      "headline": "Solver risk limits",
      "description": "Trading status exposes dry-run, preview, and solver risk controls.",
      "position": { "x": 1215, "y": 660 }
    },
    {
      "id": "param-solver-wallet",
      "label": "Solver Readiness",
      "group": "parameters",
      "kind": "parameter",
      "status": "planned",
      "owner": "trading-engine",
      "headline": "Private solver boundary",
      "description": "Wallet and CLOB secrets stay in solver deployment secrets and are never returned to Office.",
      "position": { "x": 1510, "y": 660 }
    },
    {
      "id": "external-gcp",
      "label": "Google Cloud",
      "group": "external",
      "kind": "platform",
      "status": "external",
      "owner": "platform",
      "headline": "Cloud control plane",
      "description": "Cloud Run, Cloud Run Jobs, Cloud Functions, Pub/Sub, Cloud SQL, IAM, and logging.",
      "position": { "x": 915, "y": 820 }
    },
    {
      "id": "external-gcp-europe",
      "label": "GCP Zurich",
      "group": "external",
      "kind": "platform",
      "status": "live",
      "owner": "platform",
      "headline": "European solver region",
      "description": "europe-west6 Cloud Run runtime for the low-latency solver preview near England while avoiding restricted nearby Polymarket jurisdictions.",
      "position": { "x": 1810, "y": 820 }
    },
    {
      "id": "external-polygon-rpc",
      "label": "Polygon RPC",
      "group": "external",
      "kind": "dependency",
      "status": "external",
      "owner": "chain",
      "headline": "Read-only contract calls",
      "description": "office-api uses eth_call for oracle and vault summaries.",
      "position": { "x": 80, "y": 285 }
    },
    {
      "id": "external-polymarket",
      "label": "Polymarket",
      "group": "external",
      "kind": "dependency",
      "status": "external",
      "owner": "Polymarket",
      "headline": "Market data and CLOB",
      "description": "Used by index and solver services. Office never receives CLOB credentials.",
      "position": { "x": 1510, "y": 820 }
    },
    {
      "id": "action-refresh",
      "label": "Refresh Status",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office",
      "headline": "Public read refresh",
      "description": "Refreshes public Index API and read-only Office overlays.",
      "position": { "x": 610, "y": 940 }
    },
    {
      "id": "action-ap-status",
      "label": "AP Status",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Refresh AP status",
      "description": "Authenticated safe trigger that reads AP status only.",
      "position": { "x": 800, "y": 940 }
    },
    {
      "id": "action-index-hourly",
      "label": "Run Hourly",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Run index-hourly",
      "description": "Authenticated safe trigger for the GCP hourly job.",
      "position": { "x": 980, "y": 940 }
    },
    {
      "id": "action-index-daily",
      "label": "Run Daily",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Run index-daily",
      "description": "Authenticated safe trigger for the GCP daily job.",
      "position": { "x": 1160, "y": 940 }
    },
    {
      "id": "action-index-oracle-dry-run",
      "label": "Oracle Dry-Run",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Run dry-run oracle job",
      "description": "Runs only when office-api confirms ORACLE_DRY_RUN=true.",
      "position": { "x": 1340, "y": 940 }
    },
    {
      "id": "action-intent-poller-dry-run",
      "label": "Poller Dry-Run",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Run dry-run intent poller",
      "description": "Runs only when office-api confirms INTENT_DRY_RUN=true.",
      "position": { "x": 1520, "y": 940 }
    },
    {
      "id": "action-trading-dry-run",
      "label": "Trading Dry-Run",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Run trading dry-run",
      "description": "Posts latest basket to trading dry-run without live execution.",
      "position": { "x": 1160, "y": 1000 }
    },
    {
      "id": "action-vault-preview",
      "label": "Vault Preview",
      "group": "actions",
      "kind": "action",
      "status": "direct",
      "owner": "office-api",
      "headline": "Preview active vault batch",
      "description": "Previews active vault intents without live CLOB submission or vault fulfillment.",
      "position": { "x": 1340, "y": 1000 }
    },
    {
      "id": "action-dry-run",
      "label": "Local Dry-Run",
      "group": "actions",
      "kind": "action",
      "status": "disabled",
      "owner": "office-dev",
      "headline": "Development-only local dry-run",
      "description": "Hidden in the public cloud build; retained for local dev compatibility.",
      "position": { "x": 980, "y": 1000 }
    },
    {
      "id": "action-local-checks",
      "label": "Local Checks",
      "group": "actions",
      "kind": "action",
      "status": "disabled",
      "owner": "office-dev",
      "headline": "Development-only checks",
      "description": "Hidden in the public cloud build; validates checked-in Office manifests locally.",
      "position": { "x": 800, "y": 1000 }
    },
    {
      "id": "action-solver-live",
      "label": "Solver Execute",
      "group": "actions",
      "kind": "action",
      "status": "disabled",
      "owner": "trading-engine",
      "headline": "Live execution blocked",
      "description": "Office v1 cannot submit live CLOB orders or live vault fulfillment.",
      "position": { "x": 1520, "y": 1000 }
    }
  ],
  "edges": [
    { "source": "service-index-hourly", "target": "service-index-api", "label": "publishes", "type": "data" },
    { "source": "service-index-daily", "target": "service-index-hourly", "label": "refreshes inputs", "type": "data" },
    { "source": "service-index-api", "target": "service-index-oracle", "label": "oracle-basket", "type": "data" },
    { "source": "service-index-api", "target": "service-oracle-fuzzy-controller", "label": "freshness check", "type": "read" },
    { "source": "external-gcp", "target": "service-oracle-fuzzy-controller", "label": "12:00 UTC tick", "type": "platform" },
    { "source": "service-oracle-fuzzy-controller", "target": "service-oracle-fuzzy-tasks", "label": "private delay", "type": "event" },
    { "source": "service-oracle-fuzzy-tasks", "target": "service-index-oracle", "label": "run job", "type": "action" },
    { "source": "service-oracle-fuzzy-controller", "target": "service-cloud-sql", "label": "schedule row", "type": "data" },
    { "source": "service-index-oracle", "target": "contract-oracle", "label": "signs + submits", "type": "write" },
    { "source": "contract-registry", "target": "contract-oracle", "label": "feed route", "type": "reference" },
    { "source": "contract-oracle", "target": "contract-vault", "label": "trusted basket", "type": "read" },
    { "source": "contract-pusd", "target": "contract-vault", "label": "asset", "type": "asset" },
    { "source": "contract-ctf", "target": "contract-vault", "label": "positions", "type": "asset" },
    { "source": "service-index-api", "target": "service-ap-api", "label": "NAV input", "type": "data" },
    { "source": "service-index-api", "target": "service-trading-api", "label": "basket input", "type": "data" },
    { "source": "service-office-api", "target": "service-ap-api", "label": "read status", "type": "read" },
    { "source": "service-office-api", "target": "service-trading-api", "label": "dry-run + preview", "type": "action" },
    { "source": "service-office-api", "target": "external-gcp", "label": "safe triggers", "type": "action" },
    { "source": "external-polygon-rpc", "target": "contract-oracle", "label": "eth_call", "type": "read" },
    { "source": "external-polygon-rpc", "target": "contract-vault", "label": "eth_call", "type": "read" },
    { "source": "service-intent-webhook", "target": "service-intent-queue", "label": "enqueues", "type": "event" },
    { "source": "service-intent-queue", "target": "service-intent-committer", "label": "triggers", "type": "event" },
    { "source": "service-intent-committer", "target": "contract-vault", "label": "commit when live", "type": "write" },
    { "source": "service-intent-committer", "target": "service-vault-batches-topic", "label": "publishes", "type": "event" },
    { "source": "service-vault-batches-topic", "target": "service-trading-solver", "label": "consumes", "type": "event" },
    { "source": "service-vault-batches-topic", "target": "service-europe-solver-subscription", "label": "dedicated sub", "type": "event" },
    { "source": "service-europe-solver-subscription", "target": "service-europe-trading-solver", "label": "consumes preview", "type": "event" },
    { "source": "service-europe-trading-solver", "target": "service-europe-solver-store", "label": "records preview", "type": "data" },
    { "source": "service-europe-trading-solver", "target": "external-polymarket", "label": "near CLOB venue", "type": "external" },
    { "source": "service-europe-trading-solver", "target": "contract-vault", "label": "read-only preview", "type": "read" },
    { "source": "external-gcp-europe", "target": "service-europe-trading-solver", "label": "hosts", "type": "platform" },
    { "source": "external-gcp-europe", "target": "service-europe-solver-subscription", "label": "Pub/Sub", "type": "platform" },
    { "source": "service-cloud-sql", "target": "service-europe-solver-store", "label": "stores", "type": "data" },
    { "source": "service-trading-solver", "target": "external-polymarket", "label": "CLOB only in solver", "type": "external" },
    { "source": "service-trading-solver", "target": "service-trading-reconciler", "label": "reports", "type": "data" },
    { "source": "service-cloud-sql", "target": "service-index-api", "label": "stores", "type": "data" },
    { "source": "service-cloud-sql", "target": "service-ap-api", "label": "stores", "type": "data" },
    { "source": "service-cloud-sql", "target": "service-trading-reconciler", "label": "stores", "type": "data" },
    { "source": "action-refresh", "target": "service-index-api", "label": "GET", "type": "action" },
    { "source": "action-ap-status", "target": "service-ap-api", "label": "GET status", "type": "action" },
    { "source": "action-index-hourly", "target": "service-index-hourly", "label": "run job", "type": "action" },
    { "source": "action-index-daily", "target": "service-index-daily", "label": "run job", "type": "action" },
    { "source": "action-index-oracle-dry-run", "target": "service-index-oracle", "label": "dry-run only", "type": "action" },
    { "source": "action-intent-poller-dry-run", "target": "service-intent-poller", "label": "dry-run only", "type": "action" },
    { "source": "action-trading-dry-run", "target": "service-trading-api", "label": "POST dry-run", "type": "action" },
    { "source": "action-vault-preview", "target": "service-trading-api", "label": "POST preview", "type": "action" },
    { "source": "action-solver-live", "target": "service-trading-solver", "label": "blocked", "type": "action" }
  ]
}
