{
  "lesson_id": "PLN-020",
  "evaluation_time": "2026-09-16T09:00:00Z",
  "cases": [
    {
      "case_id": "baseline_github_current",
      "platform_id": "github",
      "product_surface": "rest-api",
      "adapter_id": "gh-issues",
      "api_family": "rest",
      "api_version": "2026-03-10",
      "documented_api_version": "2026-03-10",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "issues:write",
      "permission_scope_granted": true,
      "operation_id": "create_issue",
      "endpoint": "POST /repos/{owner}/{repo}/issues",
      "request_schema_ref": "openapi://github/2026-03-10/issues-create/request",
      "response_schema_ref": "openapi://github/2026-03-10/issues-create/response",
      "policy_snapshot_id": "gh-rest-2026-03-10@2026-09-16",
      "policy_locator": "https://docs.github.com/en/rest/about-the-rest-api/api-versions",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": false,
      "sunset_state": "ACTIVE",
      "provider_response": "201",
      "provenance_ref": "src://GH-VERSION"
    },
    {
      "case_id": "missing_version_header",
      "platform_id": "github",
      "product_surface": "rest-api",
      "adapter_id": "gh-issues",
      "api_family": "rest",
      "api_version": "2026-03-10",
      "documented_api_version": "2026-03-10",
      "version_header_required": true,
      "version_header_present": false,
      "permission_scope_required": "issues:write",
      "permission_scope_granted": true,
      "operation_id": "create_issue",
      "endpoint": "POST /repos/{owner}/{repo}/issues",
      "request_schema_ref": "openapi://github/2026-03-10/issues-create/request",
      "response_schema_ref": "openapi://github/2026-03-10/issues-create/response",
      "policy_snapshot_id": "gh-rest-2026-03-10@2026-09-16",
      "policy_locator": "https://docs.github.com/en/rest/about-the-rest-api/api-versions",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": false,
      "sunset_state": "ACTIVE",
      "provider_response": "201",
      "provenance_ref": "src://GH-VERSION"
    },
    {
      "case_id": "stale_policy_snapshot",
      "platform_id": "github",
      "product_surface": "rest-api",
      "adapter_id": "gh-issues",
      "api_family": "rest",
      "api_version": "2026-03-10",
      "documented_api_version": "2026-03-10",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "issues:write",
      "permission_scope_granted": true,
      "operation_id": "create_issue",
      "endpoint": "POST /repos/{owner}/{repo}/issues",
      "request_schema_ref": "openapi://github/2026-03-10/issues-create/request",
      "response_schema_ref": "openapi://github/2026-03-10/issues-create/response",
      "policy_snapshot_id": "gh-old-snapshot",
      "policy_locator": "https://docs.github.com/en/rest/about-the-rest-api/api-versions",
      "retrieved_at": "2026-06-01T08:00:00Z",
      "review_due": "2026-07-01T00:00:00Z",
      "deprecated": false,
      "sunset_state": "ACTIVE",
      "provider_response": "201",
      "provenance_ref": "src://GH-VERSION"
    },
    {
      "case_id": "permission_scope_changed",
      "platform_id": "linkedin",
      "product_surface": "marketing-api",
      "adapter_id": "li-campaigns",
      "api_family": "rest",
      "api_version": "202608",
      "documented_api_version": "202608",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "rw_ads",
      "permission_scope_granted": false,
      "operation_id": "update_campaign",
      "endpoint": "PATCH /rest/adCampaigns/{id}",
      "request_schema_ref": "docs://linkedin/202608/adCampaigns/request",
      "response_schema_ref": "docs://linkedin/202608/adCampaigns/response",
      "policy_snapshot_id": "li-202608@2026-09-16",
      "policy_locator": "https://learn.microsoft.com/en-us/linkedin/marketing/versioning",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": false,
      "sunset_state": "ACTIVE",
      "provider_response": "200",
      "provenance_ref": "src://LI-VERSION"
    },
    {
      "case_id": "sunset_version",
      "platform_id": "linkedin",
      "product_surface": "marketing-api",
      "adapter_id": "li-old",
      "api_family": "rest",
      "api_version": "202508",
      "documented_api_version": "202508",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "rw_ads",
      "permission_scope_granted": true,
      "operation_id": "update_campaign",
      "endpoint": "PATCH /rest/adCampaigns/{id}",
      "request_schema_ref": "docs://linkedin/202508/adCampaigns/request",
      "response_schema_ref": "docs://linkedin/202508/adCampaigns/response",
      "policy_snapshot_id": "li-202508@2026-08-18",
      "policy_locator": "https://learn.microsoft.com/en-us/linkedin/marketing/integrations/migrations",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": true,
      "sunset_state": "SUNSET",
      "provider_response": "410",
      "provenance_ref": "src://LI-RECENT"
    },
    {
      "case_id": "success_without_snapshot",
      "platform_id": "provider-x",
      "product_surface": "api",
      "adapter_id": "legacy-success",
      "api_family": "rest",
      "api_version": "v1",
      "documented_api_version": "v1",
      "version_header_required": false,
      "version_header_present": false,
      "permission_scope_required": null,
      "permission_scope_granted": false,
      "operation_id": "create_post",
      "endpoint": "POST /posts",
      "request_schema_ref": null,
      "response_schema_ref": null,
      "policy_snapshot_id": null,
      "policy_locator": null,
      "retrieved_at": null,
      "review_due": null,
      "deprecated": false,
      "sunset_state": "UNKNOWN",
      "provider_response": "200",
      "provenance_ref": null
    },
    {
      "case_id": "missing_provenance",
      "platform_id": "github",
      "product_surface": "rest-api",
      "adapter_id": "gh-issues",
      "api_family": "rest",
      "api_version": "2026-03-10",
      "documented_api_version": "2026-03-10",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "issues:write",
      "permission_scope_granted": true,
      "operation_id": "create_issue",
      "endpoint": "POST /repos/{owner}/{repo}/issues",
      "request_schema_ref": "openapi://github/2026-03-10/issues-create/request",
      "response_schema_ref": "openapi://github/2026-03-10/issues-create/response",
      "policy_snapshot_id": "gh-rest-2026-03-10@2026-09-16",
      "policy_locator": "https://docs.github.com/en/rest/about-the-rest-api/api-versions",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": false,
      "sunset_state": "ACTIVE",
      "provider_response": "201",
      "provenance_ref": null
    },
    {
      "case_id": "transfer_linkedin_scope_deprecation",
      "platform_id": "linkedin",
      "product_surface": "marketing-api",
      "adapter_id": "li-transfer",
      "api_family": "rest",
      "api_version": "202608",
      "documented_api_version": "202608",
      "version_header_required": true,
      "version_header_present": true,
      "permission_scope_required": "rw_ads",
      "permission_scope_granted": true,
      "operation_id": "update_campaign",
      "endpoint": "PATCH /rest/adCampaigns/{id}",
      "request_schema_ref": "docs://linkedin/202608/adCampaigns/request",
      "response_schema_ref": "docs://linkedin/202608/adCampaigns/response",
      "policy_snapshot_id": "li-202608@2026-09-16",
      "policy_locator": "https://learn.microsoft.com/en-us/linkedin/marketing/integrations/recent-changes",
      "retrieved_at": "2026-09-16T08:00:00Z",
      "review_due": "2026-10-17T00:00:00Z",
      "deprecated": true,
      "sunset_state": "ACTIVE_DEPRECATION",
      "provider_response": "200",
      "provenance_ref": "src://LI-RECENT"
    }
  ]
}
