{
  "api_contract": "sourcey.catalog-api/v1",
  "release_id": "sha256:f94358e3c57b6e575ca58c8031b9b7552cbfdb411f937b8ecdc3b042c4980a77",
  "artifact_sha256": "sha256:7472396c2449279d33e7a0fb2426f02a89991501262d1db8c04c81d57bdf9021",
  "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:cad9f851ab1bb553246eb2fb2b2803a4741814a33ccf28997014247439b9013d",
      "entity_revision_digest": "sha256:ae848b42b55678a40e1d909ec75667458026e40dffc7076f7915db2281bfd38a"
    },
    "declaration_revision_digest": "sha256:ec84b3e7f119c2b117abff158cc1820dfd054cceafe2b1e9875474505a61e347",
    "declaration": {
      "declaration_id": "declaration_digitalocean_api_resource_management",
      "provenance": {
        "repository": "sourcey/agent-ready-services",
        "commit": "62b512f0c49352e55a399ba53866a5effa431d71",
        "path": "vendors/di/digitalocean.yaml",
        "git_blob_oid": "95356d66f9bab01aa3b8bed56ccdd73b7a121a3f",
        "blob_digest": "sha256:75034ceaee567f1ad8fa8609d45fab7e73409f97a8e8578bff92efb33f6ca418"
      },
      "status": "community_declared"
    },
    "lifecycle": "active",
    "effective_from": "2026-08-20T14:33:24.000Z",
    "signals": [
      {
        "stage": "evaluate",
        "signal_code": "eligibility_decidability",
        "selector_group_id": "eligibility_decidability-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:18.008Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "service-terms"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:03288e55261871b415ce55a9448d791d0de6998b18200b960c03bd7e93f85882",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
              "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
              "sha256:dc2f9ca7b8174c216a1a6cab6cf8c553492dafbdfdf303fcd57448c2b4c073b0",
              "sha256:dfb65800a4beb7d30ba279473faf813b6a6cfb3f02eb488b029a4a65ce8a9406"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "service-terms"
            },
            "locators": [
              {
                "artifact_digest": "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
                "start_byte": 11680,
                "end_byte": 12473,
                "value_digest": "sha256:0606021edad9b53baad07d3e02496330f69023006b00c56ea94c21680064ec63"
              },
              {
                "artifact_digest": "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
                "start_byte": 7639,
                "end_byte": 8485,
                "value_digest": "sha256:78b7de19695ed2852173eaa287e4c0d8a45f1ff8882beee1fed6f7d99a4efcbc"
              }
            ]
          }
        ],
        "note": "DigitalOcean's Terms of Service explicitly outline material eligibility conditions prior to commitment: users must be at least 18 years old (or have sufficient legal consent/capacity), agree to the TOS directly or represent an entity with authority to bind it, and create an account with required information such as name, email address, and a valid form of payment."
      },
      {
        "stage": "evaluate",
        "signal_code": "pricing_decidability",
        "selector_group_id": "pricing_decidability-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:36.992Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "pricing"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:82b22c0c8f9de1c6e2341c8aaa85cb5aa8ca5b33ca335087a5958537457798bd",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:1445123d77919b8ca5954823bfd658093ec0cdc539896f1161f9e17b3eba71bd",
              "sha256:46b41c4db6c66974e17d88d3a37871b29d01a4356506512ed1d4621b57b7cb84",
              "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
              "sha256:ff02fdb915f3b2d24d774e0b4eb296f13d17133437c16a7f999fe27fa7929b85"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "pricing"
            },
            "locators": [
              {
                "artifact_digest": "sha256:1445123d77919b8ca5954823bfd658093ec0cdc539896f1161f9e17b3eba71bd",
                "start_byte": 9431,
                "end_byte": 10208,
                "value_digest": "sha256:d3d2a27603cdcbf7488e5707f6fd573319b7430c8ed0d0264d2dcd2ba878c043"
              },
              {
                "artifact_digest": "sha256:1445123d77919b8ca5954823bfd658093ec0cdc539896f1161f9e17b3eba71bd",
                "start_byte": 7854,
                "end_byte": 8637,
                "value_digest": "sha256:f1607aedde4767c9bc4eae43ae18e55928e53127123edd01ea5c6daa0869f098"
              }
            ]
          }
        ],
        "note": "DigitalOcean provides explicit pricing details for its cloud solutions before commitment, including AI/ML inference starting at $0.05/M tokens, GPU Droplets starting at $1.91/GPU/hour (or $0.76/GPU/hour on-demand), App Platform starting at $0/month, and Droplets starting at $4/month with per-second billing ($0.01 minimum)."
      },
      {
        "stage": "evaluate",
        "signal_code": "service_discovery",
        "selector_group_id": "service_discovery-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:09.061Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "api-overview"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:a349a32f6962634055a3567f56d4c88210d99ec372b44d396cf3a92f1cf907ef",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:024b3f515afb76d49ce37841132e90b992a0c22bd8faa78826462cd1dd026e75",
              "sha256:19a3865a93c26d52ba8abc67c7c1b60d9554233dc666be527a22ec00770f036f",
              "sha256:35059511542f2f4c80292a93cc1e3c012aa38e8fe74c657e69d4930f6d4444ae",
              "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-overview"
            },
            "locators": [
              {
                "artifact_digest": "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
                "start_byte": 141105,
                "end_byte": 141892,
                "value_digest": "sha256:362b8ee33090aa543f38cc7ada3d5dfaedc158a07dcb4a7b384e52454eb12c38"
              },
              {
                "artifact_digest": "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
                "start_byte": 0,
                "end_byte": 577,
                "value_digest": "sha256:63da2609ea3d7fccd5624c1c96611efba060a7d57dcfabc30a534b46dd4215ec"
              }
            ]
          }
        ],
        "note": "DigitalOcean's API documentation provides stable public routes and entrypoints to programmatically manage Droplets, Spaces, and other cloud infrastructure resources using conventional RESTful HTTP requests, doctl CLI commands, and inference APIs."
      },
      {
        "stage": "evaluate",
        "signal_code": "terms_access",
        "selector_group_id": "terms_access-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:18.008Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "service-terms"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:03288e55261871b415ce55a9448d791d0de6998b18200b960c03bd7e93f85882",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
              "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
              "sha256:dfb65800a4beb7d30ba279473faf813b6a6cfb3f02eb488b029a4a65ce8a9406",
              "sha256:e0360b18bf86c70adea54d571bd47cb0677262a552765120e3f3f9dc7459adc5"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "service-terms"
            },
            "locators": [
              {
                "artifact_digest": "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
                "start_byte": 9292,
                "end_byte": 10094,
                "value_digest": "sha256:5901d0c129f109c43c7dd33e54a452d213a9d8a4bd4919f0fd8c712a5ad9d1ee"
              },
              {
                "artifact_digest": "sha256:580095c03910b3d9eff87929632476bc56d846b5d5828cb820a9fee2a5e02c70",
                "start_byte": 6834,
                "end_byte": 7638,
                "value_digest": "sha256:fed3c9365728c35075c2af423c5132943e3175f9ac6d1df8138c62595796a47a"
              }
            ]
          }
        ],
        "note": "DigitalOcean's legal Terms of Service Agreement is publicly retrievable, readable, and incorporates related terms by reference, including the Data Processing Agreement, Acceptable Use Policy, Privacy Policy, and Service Terms."
      },
      {
        "stage": "sign_up",
        "signal_code": "access_control_operability",
        "selector_group_id": "access_control_operability-primary",
        "value": "unknown",
        "observed_at": "2026-08-20T15:56:01.685Z",
        "tested_surfaces": [
          {
            "node_kind": "endpoint",
            "node_id": "registration"
          }
        ],
        "assessment_method": {
          "name": "bounded-headless-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f1212e8cd082308cfde3c097bc933c4a4b72046b1f242205c3e27a3b020b3311"
        },
        "determination_bases": [],
        "note": "The capture for the signup endpoint returned a 403 HTTP response from Cloudflare ('Sorry, you have been blocked'). Current admissible evidence does not resolve access control operability."
      },
      {
        "stage": "sign_up",
        "signal_code": "access_entrypoint_stability",
        "selector_group_id": "access_entrypoint_stability-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:57:09.445Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "account-access-guide"
          },
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "bounded-headless-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f1212e8cd082308cfde3c097bc933c4a4b72046b1f242205c3e27a3b020b3311"
        },
        "determination_bases": [
          {
            "kind": "direct_observation",
            "captures": [
              {
                "retained_capture_digest": "sha256:d663ca2009c051e78812f868fb68bc8af8e57d135ec1dea1c9fd773fab226adb",
                "capture_rung": "headless"
              }
            ],
            "artifact_digests": [
              "sha256:25b6d01ee23e67b4ff5eca17fa9854c51b1d2e6d940c12d5919a612765c53d19",
              "sha256:2a5da500aa008dcabcecfb6de91e4cf5ecd15f1ddbb6b46d70e498a393aff6ef",
              "sha256:360ab59b9366bd9d0c6c8c6ca39780964456d737d4b55d65c94bb0590acab997",
              "sha256:381bd178f117409e51da17313d2b73ec64b59766ba11f365161ce14836815e15",
              "sha256:44f67bad854c47dcd59da01b92061355e554575dbb5b6ec5f7537ff2b05ac3c5",
              "sha256:8b5d9f0067d1dacb9c66bc52296863e7a0a87800d2f78fa83bb2440214c4e540"
            ],
            "locators": [
              {
                "artifact_digest": "sha256:2a5da500aa008dcabcecfb6de91e4cf5ecd15f1ddbb6b46d70e498a393aff6ef",
                "start_byte": 10345,
                "end_byte": 11135,
                "value_digest": "sha256:3ae3d99ab4b50d27e411a26898a48e589f5b9506d3bf332ce70af41aea4a64d7"
              },
              {
                "artifact_digest": "sha256:2a5da500aa008dcabcecfb6de91e4cf5ecd15f1ddbb6b46d70e498a393aff6ef",
                "start_byte": 13524,
                "end_byte": 14325,
                "value_digest": "sha256:1356fdfccbb0704f1732a694de54d653752b7d25012ab68b28025feda4c06db6"
              }
            ]
          }
        ],
        "note": "DigitalOcean documentation provides a stable canonical route to begin obtaining service access by directing users to sign up and log in to the Control Panel."
      },
      {
        "stage": "sign_up",
        "signal_code": "captcha_compatible_access",
        "selector_group_id": "captcha_compatible_access-primary",
        "value": "unknown",
        "observed_at": "2026-08-20T15:57:09.445Z",
        "tested_surfaces": [
          {
            "node_kind": "endpoint",
            "node_id": "registration"
          },
          {
            "node_kind": "resource",
            "node_id": "account-access-guide"
          },
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "bounded-headless-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f1212e8cd082308cfde3c097bc933c4a4b72046b1f242205c3e27a3b020b3311"
        },
        "determination_bases": [],
        "note": "Target registration endpoint captures resulted in HTTP 403 Cloudflare block pages, and the documentation page does not explicitly declare CAPTCHA requirements or alternative agent boundaries."
      },
      {
        "stage": "sign_up",
        "signal_code": "delegated_identity_access",
        "selector_group_id": "delegated_identity_access-primary",
        "value": "partial",
        "observed_at": "2026-08-20T15:57:05.010Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:8250b12ba6ca21e5eabc1c1401b5a0156b0a5a33207d3e07e79e8d7a8abcd68e",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:3803155d3179173f1929df85c9ab01dbf2af49f477258c5ba98ae16b35bd29f6",
              "sha256:8c8a45f9a09ab1da2d8d73a407dea95c4bc6abd89cae6d01829397557e3011d9",
              "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
              "sha256:fb4485edfb5ff7613c3213c7882fce6cdd20cd14848243387d473808549667ed"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "personal-access-tokens"
            },
            "locators": [
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 166473,
                "end_byte": 167275,
                "value_digest": "sha256:d110492be7e796c038718d53d8d76136d9193beee9602e2eef42de128c536820"
              },
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 168052,
                "end_byte": 168848,
                "value_digest": "sha256:7a84f3dec1889e406d27659026e4088c9f4ac771a0c2bd7e4ef0c965cd5fc9b0"
              }
            ]
          }
        ],
        "note": "DigitalOcean documentation details personal access tokens that provide scoped, revocable machine credentials with customizable expiration and scopes, but token generation requires manual steps in the Control Panel."
      },
      {
        "stage": "sign_up",
        "signal_code": "phone_verification_compatible",
        "selector_group_id": "phone_verification_compatible-primary",
        "value": "unknown",
        "observed_at": "2026-08-20T15:57:09.445Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "account-access-guide"
          },
          {
            "node_kind": "resource",
            "node_id": "cloud-signup"
          }
        ],
        "assessment_method": {
          "name": "bounded-headless-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f1212e8cd082308cfde3c097bc933c4a4b72046b1f242205c3e27a3b020b3311"
        },
        "determination_bases": [],
        "note": "The registration endpoints resulted in HTTP 403 blocks and the guide evidence does not address phone verification requirements or safe explicit handoffs."
      },
      {
        "stage": "pay",
        "signal_code": "checkout_operability",
        "selector_group_id": "checkout_operability-primary",
        "value": "unknown",
        "observed_at": "2026-08-20T15:56:58.107Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "billing-checkout"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [],
        "note": "The retained evidence describes accepted payment methods and steps for adding a payment method on DigitalOcean, but it does not establish a complete end-to-end checkout flow supporting deterministic construction, approval handoff, and safe resumption."
      },
      {
        "stage": "pay",
        "signal_code": "commitment_disclosure",
        "selector_group_id": "commitment_disclosure-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:36.992Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "pricing"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:82b22c0c8f9de1c6e2341c8aaa85cb5aa8ca5b33ca335087a5958537457798bd",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:1445123d77919b8ca5954823bfd658093ec0cdc539896f1161f9e17b3eba71bd",
              "sha256:1a294426dc1018d5af2f0cf9da5b8d3df3159a2a07c3ef8125a48bd0540277ec",
              "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
              "sha256:ff02fdb915f3b2d24d774e0b4eb296f13d17133437c16a7f999fe27fa7929b85"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "pricing"
            },
            "locators": [
              {
                "artifact_digest": "sha256:1445123d77919b8ca5954823bfd658093ec0cdc539896f1161f9e17b3eba71bd",
                "start_byte": 7854,
                "end_byte": 8637,
                "value_digest": "sha256:f1607aedde4767c9bc4eae43ae18e55928e53127123edd01ea5c6daa0869f098"
              }
            ]
          }
        ],
        "note": "DigitalOcean discloses its pricing structure with monthly caps and flat rates, including specific starting rates such as $0.05 per million tokens for Inference or $0.76/GPU/hour on-demand ($1.91/GPU/hour on multi-month commitment)."
      },
      {
        "stage": "pay",
        "signal_code": "payment_authorization",
        "selector_group_id": "payment_authorization-primary",
        "value": "unknown",
        "observed_at": "2026-08-20T15:56:58.107Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "billing-checkout"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [],
        "note": "The retained evidence details adding credit cards, PayPal, Google Pay, Alipay, Link, crypto wallets, and ACH direct debit, including temporary authorization charges, but does not state a delegated authorization rail or human-confirmed approval with receipt mechanics."
      },
      {
        "stage": "pay",
        "signal_code": "self_service_purchase",
        "selector_group_id": "self_service_purchase-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:56:58.107Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "billing-checkout"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:afbf8cc21f82f7e81365ae4d3da81a31415df9bccde2b3f221c0c72d0607ef88",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:0fb3639f8a65c3eed15f754ca293770866cabe83505557a7f2efc6516e4a0486",
              "sha256:13b5f2e0ba63caa1a8b99e3040fb10ca6f07cbdd1887d21a1b4f46b34d21481b",
              "sha256:82d696cfb84dc3cdc0732e1da9cfba565d9bc0e8b9085e9c3b8f64524b2752a5",
              "sha256:cfdb6df1209ae58ae3fbc4c89c29ad2aba93888350262da1d147efc4c2abcbfd"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "billing-checkout"
            },
            "locators": [
              {
                "artifact_digest": "sha256:cfdb6df1209ae58ae3fbc4c89c29ad2aba93888350262da1d147efc4c2abcbfd",
                "start_byte": 34487,
                "end_byte": 35287,
                "value_digest": "sha256:b91499ac640ab31a0ea63e7741c2cafa08a280cd23ad8dffc448e5ef4a7c3f57"
              }
            ]
          }
        ],
        "note": "DigitalOcean documentation explicitly states that users can navigate to the Billing tab in the Control Panel and add a payment method to create resources or invite team members directly without a vendor decision point."
      },
      {
        "stage": "provision",
        "signal_code": "access_material_delivery",
        "selector_group_id": "access_material_delivery-primary",
        "value": "partial",
        "observed_at": "2026-08-20T15:57:05.010Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:8250b12ba6ca21e5eabc1c1401b5a0156b0a5a33207d3e07e79e8d7a8abcd68e",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:760a66b7eb10b4d8232f6e7bec3ae5b8bde558c05169ac2809c0b848086e2b18",
              "sha256:8c8a45f9a09ab1da2d8d73a407dea95c4bc6abd89cae6d01829397557e3011d9",
              "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
              "sha256:fb4485edfb5ff7613c3213c7882fce6cdd20cd14848243387d473808549667ed"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "personal-access-tokens"
            },
            "locators": [
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 169647,
                "end_byte": 170446,
                "value_digest": "sha256:fcc1df8b085c4c42ca70d3cbeed8de22335390c99cf32e46729cd6a421a37225"
              },
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 170447,
                "end_byte": 171232,
                "value_digest": "sha256:d25992fdc99cb55d3688b428a0f023554fd28ec2443326fb1612ac0267665c09"
              }
            ]
          }
        ],
        "note": "When creating a personal access token in the Control Panel, DigitalOcean displays the secret key only once upon generation and directs the user to save it. Custom scope details are displayed and managing actions like rename, regenerate, or delete are available, but delivery requires manual user transfer of the single-display secret."
      },
      {
        "stage": "provision",
        "signal_code": "provisioning_completion",
        "selector_group_id": "provisioning_completion-primary",
        "value": "partial",
        "observed_at": "2026-08-20T15:56:06.398Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bfc61cf692c08ddd7e80af7ad1c550f184736144811e09cbc054f51358d88003",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:3f19ca3dba73576eaf84a4b6534e854d1d85f6a34383960279f6deaa6ac76ddb",
              "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
              "sha256:67299375fe77a9832582956167d20f5ef02741a1f547b8817b41ef320913b992",
              "sha256:9e68c42b893acc34e7af0d05b573e412eeafab8232fbed1c6f63e6aa7ab6a150"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "droplet-provisioning"
            },
            "locators": [
              {
                "artifact_digest": "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
                "start_byte": 23644,
                "end_byte": 24441,
                "value_digest": "sha256:c74902d11ae0137b981ff7dbc232b61cb30642de9805272e4ee3df962223d255"
              }
            ]
          }
        ],
        "note": "When creating a Droplet in the Control Panel, a progress bar displays how close the Droplet is to being ready, and once fully set up, the Control Panel displays its IP address. However, the evidence does not establish asynchronous failure reconciliation, retry bounds, or failure state contracts."
      },
      {
        "stage": "provision",
        "signal_code": "provisioning_operability",
        "selector_group_id": "provisioning_operability-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:57:05.010Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "droplet-provisioning"
          },
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bfc61cf692c08ddd7e80af7ad1c550f184736144811e09cbc054f51358d88003",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:3f19ca3dba73576eaf84a4b6534e854d1d85f6a34383960279f6deaa6ac76ddb",
              "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
              "sha256:8346cb2ce4eb82a660851fc783aa8dc6b8ea0c452288fb31ad08e270da4c1e58",
              "sha256:9e68c42b893acc34e7af0d05b573e412eeafab8232fbed1c6f63e6aa7ab6a150"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "droplet-provisioning"
            },
            "locators": [
              {
                "artifact_digest": "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
                "start_byte": 26034,
                "end_byte": 26714,
                "value_digest": "sha256:217aa3dfbb0684e718f91c2c1ddb44be95c59b78e78dc1d63c47e6da5b207bc3"
              }
            ]
          },
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:8250b12ba6ca21e5eabc1c1401b5a0156b0a5a33207d3e07e79e8d7a8abcd68e",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:8c8a45f9a09ab1da2d8d73a407dea95c4bc6abd89cae6d01829397557e3011d9",
              "sha256:984f556aad596b41c3cb3e98cbba01d87361c161b1e177a9f180ebe7205434d2",
              "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
              "sha256:fb4485edfb5ff7613c3213c7882fce6cdd20cd14848243387d473808549667ed"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "personal-access-tokens"
            },
            "locators": [
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 155284,
                "end_byte": 156084,
                "value_digest": "sha256:d258973ef8dd46dfb31883bcf082ad085bef9e97253713f4494b5306508bb7ff"
              }
            ]
          }
        ],
        "note": "Droplet provisioning can be initiated programmatically within supported agent authority by sending a POST request to https://api.digitalocean.com/v2/droplets or using API client libraries such as PyDo droplets.create()."
      },
      {
        "stage": "operate",
        "signal_code": "credential_lifecycle",
        "selector_group_id": "credential_lifecycle-primary",
        "value": "partial",
        "observed_at": "2026-08-20T15:57:05.010Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:8250b12ba6ca21e5eabc1c1401b5a0156b0a5a33207d3e07e79e8d7a8abcd68e",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:063e35ae1472dfa4eae47d241785cf55b53bac6d67cf99fdfcf29627b21e5d5b",
              "sha256:8c8a45f9a09ab1da2d8d73a407dea95c4bc6abd89cae6d01829397557e3011d9",
              "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
              "sha256:fb4485edfb5ff7613c3213c7882fce6cdd20cd14848243387d473808549667ed"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "personal-access-tokens"
            },
            "locators": [
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 166473,
                "end_byte": 167275,
                "value_digest": "sha256:d110492be7e796c038718d53d8d76136d9193beee9602e2eef42de128c536820"
              }
            ]
          }
        ],
        "note": "DigitalOcean documentation explicitly states that if a personal access token becomes compromised, deleting it will revoke that token's access, and notes that tokens should be rotated rather than hard coded. However, the evidence does not detail full programmatic credential recovery or rotation lifecycle mechanisms."
      },
      {
        "stage": "operate",
        "signal_code": "failure_contract",
        "selector_group_id": "failure_contract-primary",
        "value": "partial",
        "observed_at": "2026-08-20T15:57:02.125Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "api-reference"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bbef4b1363d03a721f2c9152d987ae27012156459dfc5b989c03d3d744973958",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
              "sha256:2b777fe95bfaa9387646d1aec67c385c6c3a1fef19697e5e9adb9a28d65617c1",
              "sha256:66054a6f391a97e87fe779916bf00a8a1d7fa96ab6673a300c43218a60ab35d7",
              "sha256:726e9340931236aabb4fc9baacafb1cee74923be4e10bd9c719e0a156889314f"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-reference"
            },
            "locators": [
              {
                "artifact_digest": "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
                "start_byte": 171825,
                "end_byte": 172624,
                "value_digest": "sha256:4e05301f16a2be013f5d35fb230c4d62727d1c552d16e940978d0e6ce96d3761"
              },
              {
                "artifact_digest": "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
                "start_byte": 177425,
                "end_byte": 178223,
                "value_digest": "sha256:14b56efb49224651664d3ee62e152b19e3823557ab2d3f9409f9a9d0bb3e2983"
              }
            ]
          }
        ],
        "note": "DigitalOcean API documentation specifies HTTP status codes (200, 400, and 500 ranges), JSON error response structure (id, message, request_id), rate limits, and the retry-after header for burst limits. It also specifies DELETE idempotency, but omits complete cancellation and reconciliation semantics."
      },
      {
        "stage": "operate",
        "signal_code": "operation_authentication",
        "selector_group_id": "operation_authentication-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:57:05.010Z",
        "tested_surfaces": [
          {
            "node_kind": "resource",
            "node_id": "personal-access-tokens"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:8250b12ba6ca21e5eabc1c1401b5a0156b0a5a33207d3e07e79e8d7a8abcd68e",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:063e35ae1472dfa4eae47d241785cf55b53bac6d67cf99fdfcf29627b21e5d5b",
              "sha256:8c8a45f9a09ab1da2d8d73a407dea95c4bc6abd89cae6d01829397557e3011d9",
              "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
              "sha256:fb4485edfb5ff7613c3213c7882fce6cdd20cd14848243387d473808549667ed"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "personal-access-tokens"
            },
            "locators": [
              {
                "artifact_digest": "sha256:dbac6c7f7aae30ebc112f89d03f7aab6b93d2403f3a7a09698d64ddc82541ade",
                "start_byte": 166473,
                "end_byte": 167275,
                "value_digest": "sha256:d110492be7e796c038718d53d8d76136d9193beee9602e2eef42de128c536820"
              }
            ]
          }
        ],
        "note": "DigitalOcean API authentication is documented using personal access tokens sent in a bearer-type Authorization header, supporting custom scopes for specific permissions."
      },
      {
        "stage": "operate",
        "signal_code": "operation_contract",
        "selector_group_id": "operation_contract-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:57:02.125Z",
        "tested_surfaces": [
          {
            "node_kind": "interface",
            "node_id": "resource-api"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:a349a32f6962634055a3567f56d4c88210d99ec372b44d396cf3a92f1cf907ef",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:024b3f515afb76d49ce37841132e90b992a0c22bd8faa78826462cd1dd026e75",
              "sha256:19a3865a93c26d52ba8abc67c7c1b60d9554233dc666be527a22ec00770f036f",
              "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
              "sha256:e92ab171b760265cec6229963048eb505248b7f2a06e411e7b29dafc1b44a0a9"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-overview"
            },
            "locators": [
              {
                "artifact_digest": "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
                "start_byte": 0,
                "end_byte": 577,
                "value_digest": "sha256:63da2609ea3d7fccd5624c1c96611efba060a7d57dcfabc30a534b46dd4215ec"
              }
            ]
          },
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bfc61cf692c08ddd7e80af7ad1c550f184736144811e09cbc054f51358d88003",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:3f19ca3dba73576eaf84a4b6534e854d1d85f6a34383960279f6deaa6ac76ddb",
              "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
              "sha256:8346cb2ce4eb82a660851fc783aa8dc6b8ea0c452288fb31ad08e270da4c1e58",
              "sha256:9e68c42b893acc34e7af0d05b573e412eeafab8232fbed1c6f63e6aa7ab6a150"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "droplet-provisioning"
            },
            "locators": [
              {
                "artifact_digest": "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
                "start_byte": 26034,
                "end_byte": 26714,
                "value_digest": "sha256:217aa3dfbb0684e718f91c2c1ddb44be95c59b78e78dc1d63c47e6da5b207bc3"
              }
            ]
          },
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bbef4b1363d03a721f2c9152d987ae27012156459dfc5b989c03d3d744973958",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
              "sha256:2b777fe95bfaa9387646d1aec67c385c6c3a1fef19697e5e9adb9a28d65617c1",
              "sha256:2d820016f2e234cb53962f7b942f26b41f77639b14918bc4842b2564073480b2",
              "sha256:66054a6f391a97e87fe779916bf00a8a1d7fa96ab6673a300c43218a60ab35d7"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-reference"
            },
            "locators": [
              {
                "artifact_digest": "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
                "start_byte": 170235,
                "end_byte": 171026,
                "value_digest": "sha256:ffeb543c1d03af986fb86adda8e68bc23d8a0960915ae84d39207fc256af0158"
              }
            ]
          }
        ],
        "note": "DigitalOcean API and Droplet documentation specify essential operations, HTTP methods (GET, DELETE, PUT, HEAD), request parameters, JSON responses, idempotency semantics, and explicit POST requests to endpoints like /v2/droplets with defined body schemas."
      },
      {
        "stage": "operate",
        "signal_code": "target_interface_access",
        "selector_group_id": "target_interface_access-primary",
        "value": "yes",
        "observed_at": "2026-08-20T15:57:02.125Z",
        "tested_surfaces": [
          {
            "node_kind": "interface",
            "node_id": "resource-api"
          }
        ],
        "assessment_method": {
          "name": "public-http-semantic-assessment",
          "version": "2026-08-20",
          "method_digest": "sha256:f7c4219d9b75928a6bcff8d125dc30bbc718673e579a66f00d832172e8c9d43d"
        },
        "determination_bases": [
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bbef4b1363d03a721f2c9152d987ae27012156459dfc5b989c03d3d744973958",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
              "sha256:2b777fe95bfaa9387646d1aec67c385c6c3a1fef19697e5e9adb9a28d65617c1",
              "sha256:66054a6f391a97e87fe779916bf00a8a1d7fa96ab6673a300c43218a60ab35d7",
              "sha256:94068432e9db76ebfcf5a993d78eab0039033bd5ac731102bdeac1e12d7b8bfa"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-reference"
            },
            "locators": [
              {
                "artifact_digest": "sha256:220869f9cc1ba302e52b30b0c9adc06684b1ffd159d3971fec454232540199df",
                "start_byte": 169437,
                "end_byte": 170234,
                "value_digest": "sha256:170c1efa674ab9d92c38ff204e32937368be9b61c91c8e4ed4e9746f5b72365c"
              }
            ]
          },
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:bfc61cf692c08ddd7e80af7ad1c550f184736144811e09cbc054f51358d88003",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:3f19ca3dba73576eaf84a4b6534e854d1d85f6a34383960279f6deaa6ac76ddb",
              "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
              "sha256:8346cb2ce4eb82a660851fc783aa8dc6b8ea0c452288fb31ad08e270da4c1e58",
              "sha256:9e68c42b893acc34e7af0d05b573e412eeafab8232fbed1c6f63e6aa7ab6a150"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "droplet-provisioning"
            },
            "locators": [
              {
                "artifact_digest": "sha256:40d4274df3d7386dd856d32a8f25e67dcfab5612c86d31f831fccfd9410813a7",
                "start_byte": 26034,
                "end_byte": 26714,
                "value_digest": "sha256:217aa3dfbb0684e718f91c2c1ddb44be95c59b78e78dc1d63c47e6da5b207bc3"
              }
            ]
          },
          {
            "kind": "explicit_first_party_declaration",
            "captures": [
              {
                "retained_capture_digest": "sha256:a349a32f6962634055a3567f56d4c88210d99ec372b44d396cf3a92f1cf907ef",
                "capture_rung": "http"
              }
            ],
            "artifact_digests": [
              "sha256:024b3f515afb76d49ce37841132e90b992a0c22bd8faa78826462cd1dd026e75",
              "sha256:19a3865a93c26d52ba8abc67c7c1b60d9554233dc666be527a22ec00770f036f",
              "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
              "sha256:ff7a73966f910f063a52ca61a7013d026be951c461eecf532a2fb508e3ffb420"
            ],
            "source_surface": {
              "node_kind": "resource",
              "node_id": "api-overview"
            },
            "locators": [
              {
                "artifact_digest": "sha256:9d10ebc45df5e71df32d3f92ee0b0cb60ba54e6117760880c7694c1d69f33a98",
                "start_byte": 167020,
                "end_byte": 167822,
                "value_digest": "sha256:e6b8704e7d9ff731c42cc80354f971347c0d50692e5f8ff43fa8e1620c621691"
              }
            ]
          }
        ],
        "note": "Every essential target is accessible through stable, documented agent-usable interfaces including the DigitalOcean REST API (via HTTP/cURL) and the doctl CLI, as well as SDKs like godo (Go) and pydo (Python)."
      }
    ],
    "revision_digest": "sha256:f3dc9be655c53ad792dc8fc3553746239289c051cedf9de9cd24c815d6f4d5c0"
  }
}
