{
  "tool_id": "art-520-operator-exit-data-portability",
  "tool_version": "1.0.0",
  "display_name": "Operator Exit & Data Portability",
  "mcp_name": "check_operator_exit_portability",
  "mandate_type": "attestation_mandate",
  "wave": 80,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-520-operator-exit-data-portability.html",
  "description": "Evaluates a caller-declared operator-exit and data-portability posture: per data category, whether an export path exists and whether its format is open or proprietary, producing a stranded-category list rather than a coverage ratio. Checks declared operator- versus supplier-control of named components and flags a contractual-operator claim unsupported by that declared control, single-supplier dependencies with no declared substitute, escrow arrangements, and notice period / transition-assistance terms. Undeclared is a distinct, non-failing state from an explicit negative declaration throughout. Evaluates declarations only -- never a supplier audit, vendor rating, or enforceability opinion, and no output names or characterises a supplier. Region-portable: every fact is a caller-declared input, with no country, currency, scheme or supplier hardcoded. Deterministic arithmetic only. Zero network, zero PII.",
  "input_schema_ref": "chaingraph/art-520-operator-exit-data-portability.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:f788f6feb29648cf1c09156f55bc79fa0da7511e5ce55547e00b893c8f6e826b",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-01"
    }
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "D4Ix0Ycz0uf2uWpls4oOriPBYLK9tSxFvSfbPnmaw2UqbdD5FZyONaf2mgyqNdEcTw9RNZxMte09fvpUORkWtQZWOKLuLNWrCR93+OB/xxwuGNLtY00k7ei8UrpbsYxYCTCrVUUjfCwMruIZpl8GRlg3I6A0I6Zd1ovovbweB4sPS6GOvhWQIgPVsUsUXqrqbjyo+wKhWxedolQo6v+YsRsB1Qo14Kbv4D30gJhoSjgM8XFl6yqAHiT5iRgmRkm6DNmv9WGRY7LLZocnCo0SuT4XOBID+VnMarVVjme99SYJvvZ3fnMGQjZJ3F2FigJBxCYcicSAV0EjHljJvM3ldA==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:f788f6feb29648cf1c09156f55bc79fa0da7511e5ce55547e00b893c8f6e826b",
      "output": {
        "as_of": "2026-08-01",
        "categories": [
          {
            "category": "transaction_ledger",
            "export_cadence": "daily",
            "export_exists": "true",
            "format": "csv",
            "format_open": "true",
            "last_successful_export": "2026-07-31",
            "verdict": "PORTABLE"
          },
          {
            "category": "customer_account_master",
            "export_cadence": "weekly",
            "export_exists": "true",
            "format": "json",
            "format_open": "true",
            "last_successful_export": "2026-07-28",
            "verdict": "PORTABLE"
          }
        ],
        "category_count": 2,
        "components": [
          {
            "controlled_by": "operator",
            "name": "core_ledger_engine"
          },
          {
            "controlled_by": "operator",
            "name": "reporting_warehouse"
          }
        ],
        "contractual_operator": "true",
        "declared_component_count": 2,
        "dependencies": [
          {
            "name": "clearing_network_access",
            "single_supplier": "false",
            "substitutable": "true"
          }
        ],
        "escrow_description": "source escrow held by a third-party agent",
        "escrow_exists": "true",
        "exit_readiness_exceptions": [],
        "note": "Deterministic evaluation of a caller-declared operator-exit and data-portability posture: per-category export/format portability with a stranded-category list, declared operator- vs supplier-control of named components (with an unsupported-operator-claim check), single-supplier dependencies with no declared substitute, escrow declaration, and notice/transition terms. Evaluates declarations only -- never a supplier audit, rating, or enforceability opinion.",
        "notice_period_days": 180,
        "notice_period_declared": true,
        "operator_claim_unsupported": false,
        "operator_control_ratio_declared": "2/2",
        "operator_controlled_count": 2,
        "portable": true,
        "proprietary_format_categories": [],
        "rationale": [
          "2 declared data categories: 0 stranded (no export path), 0 portable in a proprietary format, 0 with export status or format openness undeclared.",
          "No stranded categories declared.",
          "Operator-control ratio as declared: 2/2 of definitively-declared components (0 undeclared).",
          "Escrow arrangement declared.",
          "This evaluates the declared exit posture only. It does not audit a supplier, rate a vendor, or opine on contract enforceability."
        ],
        "rejected_inputs": [],
        "single_supplier_no_substitute": [],
        "stranded_categories": [],
        "stranded_category_count": 0,
        "supplier_controlled_count": 0,
        "transition_assistance_declared": true,
        "transition_assistance_terms": "180 days of vendor-supplied migration support per the exit schedule",
        "undeclared_categories": [],
        "undeclared_component_count": 0
      }
    }
  }
}
