{
  "contract": "sourcey.site-record/v1alpha1",
  "release_id": "sha256:1042b2f7b6130b564b0059e00560960c50db2d7578dfa5178d401e5d14d9b11f",
  "snapshot_id": "sha256:696d9730d13ebc723115e4a92f695a0f26345d4350d440a417805b69d1b209e4",
  "artifact_sha256": "sha256:a695609a4d6872bd447e3125d912e7f84e605d0f064df0b08e62a9f24d9d2e80",
  "data": {
    "entity_id": "ent_01kyh8fpe29kn3bm05h7kyqyka",
    "entity_slug": "digitalocean",
    "profile": {
      "projection_contract": "sourcey.agent-readiness-projection/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"
      },
      "surface_catalog": {
        "participants": [
          {
            "participant_id": "digitalocean",
            "roles": [
              "access_operator",
              "identity_provider",
              "operations_provider",
              "payment_provider",
              "provisioning_provider",
              "subject"
            ],
            "identity": {
              "entity_id": "ent_01kyh8fpe29kn3bm05h7kyqyka"
            }
          }
        ],
        "resources": [
          {
            "resource_id": "api-overview",
            "uri": "https://docs.digitalocean.com/reference/api/",
            "roles": [
              "discovery",
              "documentation",
              "operations"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "api-reference",
            "uri": "https://docs.digitalocean.com/reference/api/reference/public-apis/",
            "roles": [
              "documentation",
              "operations",
              "recovery",
              "status"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "cloud-signup",
            "uri": "https://cloud.digitalocean.com/registrations/new",
            "roles": [
              "checkout",
              "provisioning",
              "sign_up"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "droplet-provisioning",
            "uri": "https://docs.digitalocean.com/products/droplets/how-to/create/",
            "roles": [
              "documentation",
              "operations",
              "provisioning",
              "status"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "personal-access-tokens",
            "uri": "https://docs.digitalocean.com/reference/api/create-personal-access-token/",
            "roles": [
              "descriptor",
              "documentation",
              "provisioning"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "pricing",
            "uri": "https://www.digitalocean.com/pricing",
            "roles": [
              "pricing"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "service-terms",
            "uri": "https://www.digitalocean.com/legal/terms-of-service-agreement",
            "roles": [
              "terms"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "resource_id": "support",
            "uri": "https://docs.digitalocean.com/support/",
            "roles": [
              "documentation",
              "recovery"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          }
        ],
        "endpoints": [
          {
            "endpoint_id": "digitalocean-api",
            "uri": "https://api.digitalocean.com/v2",
            "transport": "http",
            "roles": [
              "service",
              "status"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          }
        ],
        "interfaces": [
          {
            "interface_id": "api-authentication",
            "capabilities": [
              "authentication"
            ],
            "endpoint_ids": [],
            "resource_ids": [
              "personal-access-tokens"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          },
          {
            "interface_id": "resource-api",
            "capabilities": [
              "api",
              "tools"
            ],
            "endpoint_ids": [
              "digitalocean-api"
            ],
            "resource_ids": [
              "api-overview",
              "api-reference",
              "droplet-provisioning"
            ],
            "operated_by_participant_id": "digitalocean",
            "standard_bindings": []
          }
        ],
        "relations": [
          {
            "relation_id": "authentication-authenticates-api",
            "kind": "authenticates",
            "from": {
              "node_kind": "interface",
              "node_id": "api-authentication"
            },
            "to": {
              "node_kind": "interface",
              "node_id": "resource-api"
            }
          },
          {
            "relation_id": "overview-describes-api",
            "kind": "describes",
            "from": {
              "node_kind": "resource",
              "node_id": "api-overview"
            },
            "to": {
              "node_kind": "interface",
              "node_id": "resource-api"
            }
          },
          {
            "relation_id": "provisioning-describes-api",
            "kind": "describes",
            "from": {
              "node_kind": "resource",
              "node_id": "droplet-provisioning"
            },
            "to": {
              "node_kind": "interface",
              "node_id": "resource-api"
            }
          },
          {
            "relation_id": "signup-precedes-authentication",
            "kind": "precedes",
            "from": {
              "node_kind": "resource",
              "node_id": "cloud-signup"
            },
            "to": {
              "node_kind": "interface",
              "node_id": "api-authentication"
            }
          }
        ]
      },
      "lifecycle": "active",
      "effective_from": "2026-08-08T02:06:58.382Z",
      "revision_digest": "sha256:1b76dd7061ce83f496786b743aaba9d9d84e116e600075efb94a32e85dfb4363",
      "policy_digest": "sha256:334e56852b5c38e178fcea839cfba680fb82dd96693842d933776baed21d63df",
      "policy_version": "service-lifecycle-2026-08-08-calibrated",
      "policy_as_of": "2026-08-06T00:00:00Z",
      "overall_outcome": "constrained",
      "public_state": "limited",
      "state_label": "Limited",
      "grade": "B+",
      "grade_derivation": {
        "label": "Agent Readiness service-use grade",
        "explanation": "Complete, fresh evidence for the core service lifecycle first applies hard stage severity, then grades the share of applicable evidenced signals that are constrained. Optional blocker probes affect the grade when established and remain visible as unknown when public evidence cannot establish them.",
        "coverage_rule": "Any incomplete, contradictory, unsupported, or non-fresh required evidence produces an unrated profile.",
        "outcome_rule": "A failed Evaluate, Sign up, or Pay stage derives D; a failed Provision or Operate stage derives F; otherwise constrained-signal ratio derives A+ through C."
      },
      "publication": {
        "visibility": "discoverable",
        "reasons": []
      },
      "first_autonomy_break": {
        "stage": "evaluate",
        "stage_label": "Evaluate",
        "public_state": "limited",
        "finding": {
          "signal_code": "structured_terms",
          "condition": "Structured terms limited",
          "finding": "Only part of the applicable terms is machine-readable."
        }
      },
      "stages": [
        {
          "stage": "evaluate",
          "stage_label": "Evaluate",
          "outcome": "constrained",
          "public_state": "limited",
          "state_label": "Limited",
          "primary_finding": {
            "signal_code": "structured_terms",
            "condition": "Structured terms limited",
            "finding": "Only part of the applicable terms is machine-readable."
          },
          "secondary_context": [
            {
              "signal_code": "ard_declaration",
              "condition": "ARD declaration unknown",
              "finding": "An ARD declaration has not been established."
            },
            {
              "signal_code": "machine_discovery",
              "condition": "Machine discovery",
              "finding": "An agent can discover the product and funnel from the tested public entrypoints."
            },
            {
              "signal_code": "decidable_eligibility",
              "condition": "Decidable eligibility",
              "finding": "Eligibility can be decided from explicit public criteria."
            },
            {
              "signal_code": "readable_pricing",
              "condition": "Readable pricing",
              "finding": "Pricing or the absence of a charge is explicit and machine-readable."
            }
          ],
          "signals": [
            {
              "signal_code": "ard_declaration",
              "evaluation_role": "informational",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "ARD declaration unknown",
              "finding": "An ARD declaration has not been established.",
              "evidence_status": "missing",
              "freshness": "unknown",
              "tested_surfaces": []
            },
            {
              "signal_code": "decidable_eligibility",
              "evaluation_role": "graded",
              "required": false,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Decidable eligibility",
              "finding": "Eligibility can be decided from explicit public criteria.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "machine_discovery",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Machine discovery",
              "finding": "An agent can discover the product and funnel from the tested public entrypoints.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "readable_pricing",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Readable pricing",
              "finding": "Pricing or the absence of a charge is explicit and machine-readable.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "structured_terms",
              "evaluation_role": "graded",
              "required": true,
              "value": "partial",
              "value_label": "Limited",
              "outcome": "constrained",
              "public_state": "limited",
              "condition": "Structured terms limited",
              "finding": "Only part of the applicable terms is machine-readable.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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.",
              "remediation": {
                "signal_code": "structured_terms",
                "code": "improve.evaluate.structured_terms",
                "instruction": "Publish complete applicable terms in a stable machine-readable document."
              }
            }
          ],
          "blockers": [],
          "remediations": [
            {
              "signal_code": "structured_terms",
              "code": "improve.evaluate.structured_terms",
              "instruction": "Publish complete applicable terms in a stable machine-readable document."
            }
          ]
        },
        {
          "stage": "sign_up",
          "stage_label": "Sign up",
          "outcome": "pass",
          "public_state": "ready",
          "state_label": "Ready",
          "primary_finding": {
            "signal_code": "stable_entrypoint",
            "condition": "Stable signup entrypoint",
            "finding": "A stable signup entrypoint is available."
          },
          "secondary_context": [
            {
              "signal_code": "machine_operable_form",
              "condition": "Machine-operable signup unknown",
              "finding": "Machine-operable signup has not been established."
            },
            {
              "signal_code": "captcha_free",
              "condition": "CAPTCHA-free signup unknown",
              "finding": "Whether CAPTCHA blocks signup has not been established."
            },
            {
              "signal_code": "phone_verification_free",
              "condition": "Phone-free signup unknown",
              "finding": "Whether phone verification is required has not been established."
            },
            {
              "signal_code": "supported_identity_flow",
              "condition": "Supported identity flow",
              "finding": "A scoped, revocable machine identity flow is documented, including explicit human authorization boundaries."
            }
          ],
          "signals": [
            {
              "signal_code": "captcha_free",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "CAPTCHA-free signup unknown",
              "finding": "Whether CAPTCHA blocks signup has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "machine_operable_form",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Machine-operable signup unknown",
              "finding": "Machine-operable signup has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "phone_verification_free",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Phone-free signup unknown",
              "finding": "Whether phone verification is required has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "stable_entrypoint",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Stable signup entrypoint",
              "finding": "A stable signup entrypoint is available.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "supported_identity_flow",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Supported identity flow",
              "finding": "A scoped, revocable machine identity flow is documented, including explicit human authorization boundaries.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            }
          ],
          "blockers": [],
          "remediations": []
        },
        {
          "stage": "pay",
          "stage_label": "Pay",
          "outcome": "pass",
          "public_state": "ready",
          "state_label": "Ready",
          "primary_finding": {
            "signal_code": "explicit_price",
            "condition": "Explicit price",
            "finding": "The required price or no-charge status is explicit before commitment."
          },
          "secondary_context": [
            {
              "signal_code": "machine_operable_checkout",
              "condition": "Machine-operable checkout unknown",
              "finding": "Machine-operable checkout has not been established."
            },
            {
              "signal_code": "supported_payment_rail",
              "condition": "Supported payment rail unknown",
              "finding": "A supported payment rail has not been established."
            },
            {
              "signal_code": "sales_intervention_free",
              "condition": "Sales-free purchase unknown",
              "finding": "Whether sales intervention is required has not been established."
            }
          ],
          "signals": [
            {
              "signal_code": "explicit_price",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Explicit price",
              "finding": "The required price or no-charge status is explicit before commitment.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "machine_operable_checkout",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Machine-operable checkout unknown",
              "finding": "Machine-operable checkout has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "sales_intervention_free",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Sales-free purchase unknown",
              "finding": "Whether sales intervention is required has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "supported_payment_rail",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Supported payment rail unknown",
              "finding": "A supported payment rail has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            }
          ],
          "blockers": [],
          "remediations": []
        },
        {
          "stage": "provision",
          "stage_label": "Provision",
          "outcome": "pass",
          "public_state": "ready",
          "state_label": "Ready",
          "primary_finding": {
            "signal_code": "automatic_activation",
            "condition": "Automatic activation",
            "finding": "Successful onboarding automatically activates usable access."
          },
          "secondary_context": [
            {
              "signal_code": "bounded_delay",
              "condition": "Bounded provisioning delay unknown",
              "finding": "A bounded provisioning delay has not been established."
            },
            {
              "signal_code": "credential_delivery",
              "condition": "Credential delivery",
              "finding": "Usable credentials or delegated access are delivered through a documented flow."
            },
            {
              "signal_code": "machine_readable_status",
              "condition": "Machine-readable provisioning status",
              "finding": "Provisioning exposes machine-readable progress, terminal states, and reconciliation."
            }
          ],
          "signals": [
            {
              "signal_code": "automatic_activation",
              "evaluation_role": "graded",
              "required": false,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Automatic activation",
              "finding": "Successful onboarding automatically activates usable access.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "bounded_delay",
              "evaluation_role": "graded",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Bounded provisioning delay unknown",
              "finding": "A bounded provisioning delay has not been established.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "credential_delivery",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Credential delivery",
              "finding": "Usable credentials or delegated access are delivered through a documented flow.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "machine_readable_status",
              "evaluation_role": "graded",
              "required": false,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Machine-readable provisioning status",
              "finding": "Provisioning exposes machine-readable progress, terminal states, and reconciliation.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            }
          ],
          "blockers": [],
          "remediations": []
        },
        {
          "stage": "operate",
          "stage_label": "Operate",
          "outcome": "pass",
          "public_state": "ready",
          "state_label": "Ready",
          "primary_finding": {
            "signal_code": "api_tool_access",
            "condition": "API or tool access",
            "finding": "A documented API or tool interface is available for operation."
          },
          "secondary_context": [
            {
              "signal_code": "agent_protocol_interface",
              "condition": "Agent protocol interface unknown",
              "finding": "An agent protocol interface has not been established."
            },
            {
              "signal_code": "usable_authentication",
              "condition": "Usable authentication",
              "finding": "Authentication is documented and usable within an agent authorization boundary."
            },
            {
              "signal_code": "documented_limits_errors",
              "condition": "Documented limits and errors",
              "finding": "Limits, structured errors, retry behavior, and idempotency semantics are documented where applicable."
            },
            {
              "signal_code": "delegated_recovery",
              "condition": "Delegated recovery",
              "finding": "Credential rotation, revocation, retry, and recovery paths are documented within delegated authority."
            }
          ],
          "signals": [
            {
              "signal_code": "agent_protocol_interface",
              "evaluation_role": "informational",
              "required": false,
              "value": "unknown",
              "value_label": "Unknown",
              "outcome": "unknown",
              "public_state": "unknown",
              "condition": "Agent protocol interface unknown",
              "finding": "An agent protocol interface has not been established.",
              "evidence_status": "missing",
              "freshness": "unknown",
              "tested_surfaces": []
            },
            {
              "signal_code": "api_tool_access",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "API or tool access",
              "finding": "A documented API or tool interface is available for operation.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "delegated_recovery",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Delegated recovery",
              "finding": "Credential rotation, revocation, retry, and recovery paths are documented within delegated authority.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "documented_limits_errors",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Documented limits and errors",
              "finding": "Limits, structured errors, retry behavior, and idempotency semantics are documented where applicable.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            },
            {
              "signal_code": "usable_authentication",
              "evaluation_role": "graded",
              "required": true,
              "value": "yes",
              "value_label": "Ready",
              "outcome": "pass",
              "public_state": "ready",
              "condition": "Usable authentication",
              "finding": "Authentication is documented and usable within an agent authorization boundary.",
              "evidence_status": "supported",
              "freshness": "fresh",
              "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."
            }
          ],
          "blockers": [],
          "remediations": []
        }
      ],
      "coverage": {
        "status": "complete",
        "required_signals": 11,
        "covered_signals": 11,
        "ratio": 1
      },
      "last_tested_at": "2026-08-07T21:54:14.060Z",
      "freshness": "fresh",
      "provenance": {
        "tier": "observed",
        "freshness": "fresh",
        "dispute": "none",
        "coverage_policy_digest": "sha256:334e56852b5c38e178fcea839cfba680fb82dd96693842d933776baed21d63df",
        "freshness_policy_digest": "sha256:f4e31a29c2ce994bb8c3009207294ffa086e82b8e0d695abc95d6d6bdb30c2e5",
        "basis_event_ids": [
          "sha256:040dd5d91f9f5e8996cdc9a9b8177d7006655987a7b18f217fe8876512ae7d3b",
          "sha256:0749d3013996846ffb3aa5453b47371f97e1b2c931163b4c7a76d01335cc9eb1",
          "sha256:159c92e95f011dc81a4d93077fffae6b2a55ccc3038185882ffc3f751c61231c",
          "sha256:1def5e12b768d5b960c0038f5b70e5ce0029e318fb3429af9e2a1a858f22c49f",
          "sha256:2169508368f7395879a79a9fe973e8fc58b4f3b86a0eebeeb8313364fa452708",
          "sha256:380a09fe047dee7ad89a4ec666f4a7fee22f73a411085c28882a314a675612ca",
          "sha256:3cb2143413ea93c6a2c2f4116c4c7738c5b7c12d2e351ca9bf43b7b4b3f040da",
          "sha256:69a345dbf8e0634d26b15b2b207ae5d916c49a04c9d8321810d7999801a4d228",
          "sha256:73492dfbc271a6619f5a64b5b6fa51f835777f8e33b09393ef36aac722c0df88",
          "sha256:781842a2fa2473b6219dbd11dff3384d2cb1e65f092fe7df2fb62dedb60df64e",
          "sha256:7a27507639dfaf186c824f3fb1ee852acc84337334f4946b2ef6de8658b0347a",
          "sha256:810c4eb41be35d937b07cd516965920f980b1fd6c75c979cb6ecd61e5bcf2c5d",
          "sha256:8345bd21b2b0cedac6b918dd80333ee780a7a5a6e974ba195722fba7428049e3",
          "sha256:8a41a786e088208ad083b1d1269b2a4f1f1d4fa0c7024e57545d9c8c7978492b",
          "sha256:91f78fac62dec06d92317a240dec50ab8c5e865b8f2862fd459508ee31f38ec2",
          "sha256:b4a2515b795ee276b28f4e23cc99e56a136ca53fdc68ea0e0c44ea98aafa5edf",
          "sha256:bfa49aea3f33bb171595130e1da13e555b53315ca81533d88b4712a7253fcbf9",
          "sha256:e9ea71a32d6fd58ce13684a3847776c5b0b0c169fd670378b6756bbfc9367b32",
          "sha256:f16ed2ac549699a7d52f3a7e12c8f3411088edab2e23463c7569bee2e6958167",
          "sha256:f5672affb640071fa6de623ce5ec9b06e10d6597d4fafccc3f4c629a79cbc040",
          "sha256:ff4e388b5e2d6776af29766509b3ce7bced318138c80dddeb28d4b816e4b330e"
        ],
        "fields": [
          {
            "path": "/signals/0",
            "supporting_event_ids": [
              "sha256:7a27507639dfaf186c824f3fb1ee852acc84337334f4946b2ef6de8658b0347a"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:09.570Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/1",
            "supporting_event_ids": [
              "sha256:8345bd21b2b0cedac6b918dd80333ee780a7a5a6e974ba195722fba7428049e3"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:12.068Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/2",
            "supporting_event_ids": [
              "sha256:040dd5d91f9f5e8996cdc9a9b8177d7006655987a7b18f217fe8876512ae7d3b"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:13.464Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/3",
            "supporting_event_ids": [
              "sha256:ff4e388b5e2d6776af29766509b3ce7bced318138c80dddeb28d4b816e4b330e"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:09.570Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/4",
            "supporting_event_ids": [
              "sha256:bfa49aea3f33bb171595130e1da13e555b53315ca81533d88b4712a7253fcbf9"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/5",
            "supporting_event_ids": [
              "sha256:f5672affb640071fa6de623ce5ec9b06e10d6597d4fafccc3f4c629a79cbc040"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/6",
            "supporting_event_ids": [
              "sha256:b4a2515b795ee276b28f4e23cc99e56a136ca53fdc68ea0e0c44ea98aafa5edf"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/7",
            "supporting_event_ids": [
              "sha256:781842a2fa2473b6219dbd11dff3384d2cb1e65f092fe7df2fb62dedb60df64e"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:33.752Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/8",
            "supporting_event_ids": [
              "sha256:2169508368f7395879a79a9fe973e8fc58b4f3b86a0eebeeb8313364fa452708"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:32.553Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/9",
            "supporting_event_ids": [
              "sha256:810c4eb41be35d937b07cd516965920f980b1fd6c75c979cb6ecd61e5bcf2c5d"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:13.464Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/10",
            "supporting_event_ids": [
              "sha256:73492dfbc271a6619f5a64b5b6fa51f835777f8e33b09393ef36aac722c0df88"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/11",
            "supporting_event_ids": [
              "sha256:8a41a786e088208ad083b1d1269b2a4f1f1d4fa0c7024e57545d9c8c7978492b"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/12",
            "supporting_event_ids": [
              "sha256:380a09fe047dee7ad89a4ec666f4a7fee22f73a411085c28882a314a675612ca"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:54:14.060Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/13",
            "supporting_event_ids": [
              "sha256:91f78fac62dec06d92317a240dec50ab8c5e865b8f2862fd459508ee31f38ec2"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:26.614Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/14",
            "supporting_event_ids": [
              "sha256:69a345dbf8e0634d26b15b2b207ae5d916c49a04c9d8321810d7999801a4d228"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:16.924Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/15",
            "supporting_event_ids": [
              "sha256:0749d3013996846ffb3aa5453b47371f97e1b2c931163b4c7a76d01335cc9eb1"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:32.553Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/16",
            "supporting_event_ids": [
              "sha256:e9ea71a32d6fd58ce13684a3847776c5b0b0c169fd670378b6756bbfc9367b32"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:16.924Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/17",
            "supporting_event_ids": [
              "sha256:159c92e95f011dc81a4d93077fffae6b2a55ccc3038185882ffc3f751c61231c"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:12.068Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/18",
            "supporting_event_ids": [
              "sha256:3cb2143413ea93c6a2c2f4116c4c7738c5b7c12d2e351ca9bf43b7b4b3f040da"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:15.259Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/19",
            "supporting_event_ids": [
              "sha256:1def5e12b768d5b960c0038f5b70e5ce0029e318fb3429af9e2a1a858f22c49f"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:16.924Z",
            "freshness": "fresh"
          },
          {
            "path": "/signals/20",
            "supporting_event_ids": [
              "sha256:f16ed2ac549699a7d52f3a7e12c8f3411088edab2e23463c7569bee2e6958167"
            ],
            "contradicting_event_ids": [],
            "accepted_proof_kinds": [
              "observed"
            ],
            "evidence_proof_kinds": [
              "observed"
            ],
            "latest_observation_at": "2026-08-07T21:13:18.779Z",
            "freshness": "fresh"
          }
        ]
      },
      "canonical_url": "https://sourcey.com/agent-readiness/digitalocean/digitalocean-cloud/api-resource-management",
      "projection_digest": "sha256:3614e6de2bb9afaf4539446c8aeaca6c079a25d575479bcb6ed8468453ef8efc"
    }
  }
}
