{
  "api_contract": "sourcey.catalog-api/v1",
  "release_id": "sha256:1042b2f7b6130b564b0059e00560960c50db2d7578dfa5178d401e5d14d9b11f",
  "artifact_sha256": "sha256:a695609a4d6872bd447e3125d912e7f84e605d0f064df0b08e62a9f24d9d2e80",
  "data": {
    "revision_contract": "sourcey.agent-readiness-revision/v1alpha1",
    "agent_readiness_profile_id": "arp_01kzf0m4x8r3etq6ck2b79hsw5",
    "entity_id": "ent_01kyh8fpe29kn3bm05h7kyqyka",
    "scope": {
      "product": {
        "key": "digitalocean-cloud",
        "name": "DigitalOcean Cloud"
      },
      "funnel": {
        "key": "api-resource-management",
        "name": "API resource management"
      }
    },
    "catalog_binding": {
      "base_release_id": "sha256:5082ec07047a2324648f569d234cc64342ce2707b2f3d77fde8fc06af517cee6",
      "entity_revision_digest": "sha256:ae848b42b55678a40e1d909ec75667458026e40dffc7076f7915db2281bfd38a"
    },
    "declaration_revision_digest": "sha256:f96f94a4ef3c176750872585dc6dd5716bc23ea85916714d7b92e68ba810cb1b",
    "declaration": {
      "declaration_id": "declaration_digitalocean_api_resource_management",
      "provenance": {
        "repository": "sourcey/agent-ready-services",
        "commit": "00f00edd170194cc1cf3081b97b218474537ffdb",
        "path": "vendors/di/digitalocean.yaml",
        "git_blob_oid": "c0800c4cd323b103d8ada16be7068a01da2df33e",
        "blob_digest": "sha256:5072fdc599a14d6c4ac55bb294f4f6664f026001a9c9ee2d53f132accaebcaff"
      },
      "status": "community_declared"
    },
    "lifecycle": "active",
    "effective_from": "2026-08-08T02:06:58.382Z",
    "signals": [
      {
        "stage": "evaluate",
        "signal_code": "decidable_eligibility",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:09.570Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "service-terms"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean sets clear eligibility requirements, such as requiring users to be 18 years or older and in compliance with applicable local and international laws."
      },
      {
        "stage": "evaluate",
        "signal_code": "machine_discovery",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:12.068Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "api-overview"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean provides machine-discoverable REST API references and OpenAPI-compatible endpoints across its cloud services."
      },
      {
        "stage": "evaluate",
        "signal_code": "readable_pricing",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:13.464Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "pricing"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean provides explicit, machine-readable pricing structures with clear hourly and monthly starting costs across its product catalog."
      },
      {
        "stage": "evaluate",
        "signal_code": "structured_terms",
        "value": "partial",
        "observed_at": "2026-08-07T21:13:09.570Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "service-terms"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "negative_coverage": {
          "kind": "complete-response-inspection",
          "scope": "exact-resource",
          "covered_surfaces": [
            {
              "node_kind": "resource",
              "node_id": "service-terms"
            }
          ]
        },
        "note": "Terms of service are available as publicly accessible HTML documents, but are not provided as a structured machine-readable schema."
      },
      {
        "stage": "sign_up",
        "signal_code": "captcha_free",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The retained signup page headless capture contains minimal content metadata and does not conclusively demonstrate the presence or absence of a CAPTCHA."
      },
      {
        "stage": "sign_up",
        "signal_code": "machine_operable_form",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The retained page evidence for the signup path does not provide sufficient form DOM elements to verify machine-operable input controls."
      },
      {
        "stage": "sign_up",
        "signal_code": "phone_verification_free",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The available signup flow captures do not contain explicit evidence regarding whether phone or SMS verification is required."
      },
      {
        "stage": "sign_up",
        "signal_code": "stable_entrypoint",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:33.752Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "The cloud registration HTTP entrypoint is available and resolves successfully with valid page metadata."
      },
      {
        "stage": "sign_up",
        "signal_code": "supported_identity_flow",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:32.553Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "DigitalOcean documentation establishes a supported machine identity flow using Personal Access Tokens with explicit token scopes."
      },
      {
        "stage": "pay",
        "signal_code": "explicit_price",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:13.464Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "pricing"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean provides explicit starting rates and usage-based pricing on its pricing page for cloud products such as Droplets, Kubernetes, and databases before commitment."
      },
      {
        "stage": "pay",
        "signal_code": "machine_operable_checkout",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The retained evidence from the cloud registration page does not contain sufficient details to determine machine-operable checkout support."
      },
      {
        "stage": "pay",
        "signal_code": "sales_intervention_free",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The registration page evidence lacks details to verify whether the purchase path requires sales intervention."
      },
      {
        "stage": "pay",
        "signal_code": "supported_payment_rail",
        "value": "unknown",
        "observed_at": "2026-08-07T21:54:14.060Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "The headless evidence for cloud signup does not detail payment rail support during the account checkout process."
      },
      {
        "stage": "provision",
        "signal_code": "automatic_activation",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:26.614Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "DigitalOcean automatically provisions and activates Droplets upon submitting a request via the Control Panel, CLI (doctl), or API, displaying progress and making the resource accessible via IP/SSH upon completion without requiring manual vendor intervention."
      },
      {
        "stage": "provision",
        "signal_code": "bounded_delay",
        "value": "unknown",
        "observed_at": "2026-08-07T21:13:16.924Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "While a progress bar is shown during creation, the documentation does not state a strict bounded delay or completion time guarantee for Droplet provisioning."
      },
      {
        "stage": "provision",
        "signal_code": "credential_delivery",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:32.553Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "headless",
          "version": "1",
          "method_digest": "sha256:5c58a6d3f59d1910064324a215209f16f177b8021442dcbf1465f4c3ccd78ed1"
        },
        "note": "Personal access tokens can be created through a documented flow for API access and authentication."
      },
      {
        "stage": "provision",
        "signal_code": "machine_readable_status",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:16.924Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "Droplet provisioning status is accessible via the API and CLI, exposing machine-readable actions and progress state."
      },
      {
        "stage": "operate",
        "signal_code": "api_tool_access",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:12.068Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "api-overview"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean provides documented HTTP REST APIs, CLI tools (doctl), and SDKs (PyDo, Godo) to programmatically manage cloud resources."
      },
      {
        "stage": "operate",
        "signal_code": "delegated_recovery",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:15.259Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "api-reference"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean documents recovery, credential revocation, and rotation paths via API endpoints and tools, such as token management and resource destroy/rebuild methods."
      },
      {
        "stage": "operate",
        "signal_code": "documented_limits_errors",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:16.924Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "DigitalOcean documents resource provisioning parameters, limits, and API requirements for creating Droplets and managing configurations."
      },
      {
        "stage": "operate",
        "signal_code": "usable_authentication",
        "value": "yes",
        "observed_at": "2026-08-07T21:13:18.779Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "http",
          "version": "1",
          "method_digest": "sha256:2d2f445064222c234cbaf541a627226a2c4be06a90e226b98a4389cb49e2d66b"
        },
        "note": "Personal access tokens can be created and passed via Bearer authentication in standard HTTP headers for programmatic API authorization."
      }
    ],
    "revision_digest": "sha256:1b76dd7061ce83f496786b743aaba9d9d84e116e600075efb94a32e85dfb4363"
  }
}
