{
  "catalog_policy": "source catalog contains source metadata, validation state, hashes, event counts, and backlog counts only; no raw provider content",
  "consumer_guidance": {
    "current_reviewed_feed": "Use apw remote latest --ref main or data/feeds/latest.json on the main branch for the freshest reviewed feed.",
    "immutable_feed": "Use signed data-YYYY.MM.DD tags for immutable reviewed snapshots.",
    "installed_package_snapshot": "Use apw latest for the reviewed snapshot bundled into the installed Python package.",
    "review_boundary": "Source fetches and generated candidates are review inputs only; publication requires reviewed ProviderEvent records."
  },
  "generated_at": "2026-06-19T20:41:56Z",
  "generated_by": "ai-provider-watch 0.1.18",
  "package_version": "0.1.18",
  "providers": [
    {
      "aliases": [
        "Claude",
        "Claude API"
      ],
      "cadences": [
        "daily",
        "hourly"
      ],
      "candidate_backlog_count": 0,
      "display_name": "Anthropic",
      "enabled_deterministic_source_count": 4,
      "event_kind_counts": {
        "model_launch": 3,
        "model_retirement": 2,
        "status_incident": 2,
        "subscription_change": 1,
        "token_accounting_change": 2,
        "workflow_behavior_change": 1
      },
      "homepage_url": "https://www.anthropic.com/",
      "impact_hints": [
        "api_contract_change",
        "caching_change",
        "model_deprecation",
        "model_launch",
        "model_retirement",
        "pricing_change",
        "status_incident",
        "status_recovery",
        "token_accounting_change",
        "workflow_behavior_change"
      ],
      "latest_event_date": "2026-06-15",
      "provider_kind": "foundation_model_provider",
      "provider_ref": "provider:anthropic",
      "reviewed_event_count": 11,
      "source_count": 4,
      "source_types": [
        "blog",
        "docs_page",
        "pricing_page",
        "status_page"
      ],
      "sources": [
        "anthropic.news",
        "anthropic.pricing",
        "anthropic.release_notes",
        "anthropic.status"
      ],
      "surfaces": [
        {
          "display_name": "Anthropic API",
          "id": "anthropic/api",
          "kind": "api",
          "url": "https://docs.anthropic.com/"
        },
        {
          "display_name": "Anthropic Status",
          "id": "anthropic/status",
          "kind": "status_page",
          "url": "https://status.anthropic.com/"
        }
      ],
      "validated_source_count": 4
    },
    {
      "aliases": [
        "Amazon Bedrock",
        "Bedrock"
      ],
      "cadences": [
        "daily"
      ],
      "candidate_backlog_count": 0,
      "display_name": "AWS Bedrock",
      "enabled_deterministic_source_count": 3,
      "event_kind_counts": {
        "api_contract_change": 4,
        "billing_channel_change": 1,
        "caching_change": 1,
        "model_launch": 6,
        "workflow_behavior_change": 3
      },
      "homepage_url": "https://aws.amazon.com/bedrock/",
      "impact_hints": [
        "caching_change",
        "model_deprecation",
        "model_launch",
        "pricing_change",
        "regional_availability_change",
        "token_accounting_change"
      ],
      "latest_event_date": "2026-06-16",
      "provider_kind": "cloud_provider",
      "provider_ref": "provider:aws-bedrock",
      "reviewed_event_count": 15,
      "source_count": 3,
      "source_types": [
        "docs_page",
        "pricing_page",
        "rss_feed"
      ],
      "sources": [
        "aws_bedrock.docs",
        "aws_bedrock.pricing",
        "aws_bedrock.whats_new"
      ],
      "surfaces": [
        {
          "display_name": "Amazon Bedrock API",
          "id": "aws-bedrock/api",
          "kind": "api",
          "url": "https://docs.aws.amazon.com/bedrock/"
        },
        {
          "display_name": "Amazon Bedrock Managed Agents",
          "id": "aws-bedrock/managed-agents",
          "kind": "managed_agent",
          "url": "https://aws.amazon.com/bedrock/"
        }
      ],
      "validated_source_count": 3
    },
    {
      "aliases": [
        "Azure AI Foundry OpenAI",
        "Azure OpenAI Service"
      ],
      "cadences": [
        "daily"
      ],
      "candidate_backlog_count": 0,
      "display_name": "Azure OpenAI",
      "enabled_deterministic_source_count": 4,
      "event_kind_counts": {
        "model_launch": 6,
        "model_retirement": 2
      },
      "homepage_url": "https://azure.microsoft.com/products/ai-services/openai-service",
      "impact_hints": [
        "api_contract_change",
        "model_deprecation",
        "model_launch",
        "model_retirement",
        "pricing_change",
        "regional_availability_change",
        "workflow_behavior_change"
      ],
      "latest_event_date": "2026-05-01",
      "provider_kind": "cloud_provider",
      "provider_ref": "provider:azure-openai",
      "reviewed_event_count": 8,
      "source_count": 4,
      "source_types": [
        "docs_page",
        "pricing_page"
      ],
      "sources": [
        "azure_openai.docs",
        "azure_openai.legacy_models",
        "azure_openai.pricing",
        "azure_openai.whats_new"
      ],
      "surfaces": [
        {
          "display_name": "Azure OpenAI API",
          "id": "azure-openai/api",
          "kind": "api",
          "url": "https://learn.microsoft.com/azure/ai-services/openai/"
        }
      ],
      "validated_source_count": 4
    },
    {
      "aliases": [
        "Gemini",
        "Vertex AI",
        "Google AI"
      ],
      "cadences": [
        "daily"
      ],
      "candidate_backlog_count": 0,
      "display_name": "Google Gemini / Vertex AI",
      "enabled_deterministic_source_count": 4,
      "event_kind_counts": {
        "api_contract_change": 1,
        "model_deprecation": 2,
        "model_launch": 2,
        "model_retirement": 3
      },
      "homepage_url": "https://ai.google.dev/",
      "impact_hints": [
        "api_contract_change",
        "model_deprecation",
        "model_launch",
        "model_retirement",
        "pricing_change",
        "quota_change",
        "regional_availability_change",
        "token_accounting_change"
      ],
      "latest_event_date": "2026-06-10",
      "provider_kind": "foundation_model_provider",
      "provider_ref": "provider:google",
      "reviewed_event_count": 8,
      "source_count": 4,
      "source_types": [
        "docs_page",
        "pricing_page"
      ],
      "sources": [
        "google.ai_docs",
        "google.gemini_changelog",
        "google.vertex_model_versions",
        "google.vertex_pricing"
      ],
      "surfaces": [
        {
          "display_name": "Gemini API",
          "id": "google/gemini-api",
          "kind": "api",
          "url": "https://ai.google.dev/gemini-api/docs"
        },
        {
          "display_name": "Vertex AI",
          "id": "google/vertex-ai",
          "kind": "cloud_marketplace",
          "url": "https://cloud.google.com/vertex-ai/generative-ai/docs"
        }
      ],
      "validated_source_count": 4
    },
    {
      "aliases": [
        "OpenAI API",
        "ChatGPT"
      ],
      "cadences": [
        "daily",
        "hourly"
      ],
      "candidate_backlog_count": 0,
      "display_name": "OpenAI",
      "enabled_deterministic_source_count": 6,
      "event_kind_counts": {
        "api_contract_change": 3,
        "billing_channel_change": 2,
        "default_model_change": 2,
        "model_deprecation": 1,
        "model_launch": 4,
        "model_retirement": 2,
        "rate_limit_change": 1,
        "regional_availability_change": 1,
        "status_incident": 2,
        "token_accounting_change": 1,
        "workflow_behavior_change": 8
      },
      "homepage_url": "https://openai.com/",
      "impact_hints": [
        "api_contract_change",
        "billing_channel_change",
        "model_deprecation",
        "model_launch",
        "model_retirement",
        "pricing_change",
        "sdk_behavior_change",
        "status_incident",
        "status_recovery",
        "subscription_change",
        "token_accounting_change",
        "workflow_behavior_change"
      ],
      "latest_event_date": "2026-06-16",
      "provider_kind": "foundation_model_provider",
      "provider_ref": "provider:openai",
      "reviewed_event_count": 27,
      "source_count": 6,
      "source_types": [
        "atom_feed",
        "docs_page",
        "pricing_page",
        "rss_feed"
      ],
      "sources": [
        "openai.api_changelog",
        "openai.codex_docs",
        "openai.deprecations",
        "openai.news",
        "openai.pricing",
        "openai.status"
      ],
      "surfaces": [
        {
          "display_name": "OpenAI API",
          "id": "openai/api",
          "kind": "api",
          "url": "https://platform.openai.com/docs"
        },
        {
          "display_name": "OpenAI Realtime API",
          "id": "openai/realtime-api",
          "kind": "api",
          "url": "https://platform.openai.com/docs/guides/realtime"
        },
        {
          "display_name": "OpenAI Status",
          "id": "openai/status",
          "kind": "status_page",
          "url": "https://status.openai.com/"
        }
      ],
      "validated_source_count": 6
    }
  ],
  "schema_version": "apw.source_catalog.v0",
  "sources": [
    {
      "authority": "official_blog",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official Anthropic news index parser emits dated announcement candidates with article URLs, title/link hashes, and bounded Claude/model/workflow subjects only.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "workflow_behavior_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "anthropic.news",
      "last_validated_at": "2026-06-17T02:16:58Z",
      "latest_event_date": "2026-06-09",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "anthropic_news_index",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:anthropic"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 4,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash news links; emit bounded dates, subjects, and article URLs only",
      "source_state": {
        "content_sha256": "ecfbfed6876ec60291b9ea2b2915d3bb6ac8bf4924617a886809afa068a441ff",
        "final_url": "https://www.anthropic.com/news",
        "fingerprint": "b7028cc76b0234d1e5a9c886462786e215698e62a058ae1181e3f7e44db84f29",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:16:58Z"
      },
      "source_type": "blog",
      "url": "https://www.anthropic.com/news",
      "validation_status": "validated"
    },
    {
      "authority": "official_pricing",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed pricing parser emits bounded pricing, cache, and model signals for deterministic daily refresh.",
      "impact_hints": [
        "pricing_change",
        "token_accounting_change",
        "caching_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "anthropic.pricing",
      "last_validated_at": "2026-06-17T02:17:01Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "anthropic_pricing",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:anthropic"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "5cfa6da144a794cb2e91cd97bc548151e7b614280351320409ecb890ee58f235",
        "final_url": "https://platform.claude.com/docs/en/about-claude/pricing",
        "fingerprint": "a68390986bb025b075276e03fb8f0494c4b9ef60502dcdc69b81bf57c4f9372c",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:01Z"
      },
      "source_type": "pricing_page",
      "url": "https://platform.claude.com/docs/en/about-claude/pricing",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official Claude Platform release-note parser emits dated section candidates from bounded list items/paragraphs with source-page evidence and hashed text only. Event promotion remains source-owner reviewed.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "model_retirement",
        "token_accounting_change",
        "api_contract_change",
        "workflow_behavior_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "anthropic.release_notes",
      "last_validated_at": "2026-06-17T02:17:02Z",
      "latest_event_date": "2026-06-15",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "anthropic_release_notes",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:anthropic"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 5,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash parsed dated sections; emit bounded dates, subjects, and source-page URL only",
      "source_state": {
        "content_sha256": "e9de4e04a4e337722f8558767c7b22a5b4495717334b737eeec576667aeb01a8",
        "final_url": "https://platform.claude.com/docs/en/release-notes/overview",
        "fingerprint": "d31061b7f92d0897b0abe7723a51ea629b9a630baaa13dc0fe9e876e7048bde5",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:02Z"
      },
      "source_type": "docs_page",
      "url": "https://platform.claude.com/docs/en/release-notes/overview",
      "validation_status": "validated"
    },
    {
      "authority": "official_status",
      "automation_status": "enabled_deterministic",
      "cadence": "hourly",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed Statuspage parser hashes incident links and preserves only bounded timestamps.",
      "impact_hints": [
        "status_incident",
        "status_recovery"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "anthropic.status",
      "last_validated_at": "2026-06-17T02:17:03Z",
      "latest_event_date": "2026-06-03",
      "license_note": "Use source URL and factual incident metadata only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "statuspage_html",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:anthropic"
      ],
      "rate_limit": "polite hourly fetch",
      "reviewed_event_count": 2,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash status incident links; emit RFC3339 timestamps only",
      "source_state": {
        "content_sha256": "20264ecc32d27d399bcbf13387bc625f93d406fe57da06fb305b9bdf541db312",
        "final_url": "https://status.claude.com/",
        "fingerprint": "ee100fdbb94f40adb1f70700502cbaeda687e3c525f5613a2423e2cf5f84892e",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:03Z"
      },
      "source_type": "status_page",
      "url": "https://status.claude.com/",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed model-card parser extracts bounded visible model display names without copying docs text.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "regional_availability_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "aws_bedrock.docs",
      "last_validated_at": "2026-06-17T02:17:03Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "aws_bedrock_model_cards",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:aws-bedrock"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded model display signals only",
      "source_state": {
        "content_sha256": "ab75f8145be6669929cc36129b7387ac38ab4532db7b4672757bb624eb4bb5af",
        "final_url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-cards.html",
        "fingerprint": "1f16cee3f1d4a80d7587cb4932ff97cbf26deb4d6c9df86a1750569ade6705ca",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:03Z"
      },
      "source_type": "docs_page",
      "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-cards.html",
      "validation_status": "validated"
    },
    {
      "authority": "official_pricing",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed pricing parser emits bounded pricing, model, and regional signals for deterministic daily refresh.",
      "impact_hints": [
        "pricing_change",
        "regional_availability_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "aws_bedrock.pricing",
      "last_validated_at": "2026-06-17T02:17:04Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "aws_bedrock_pricing",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:aws-bedrock"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "67c4c7534af07964f177d40dd98a054fda49e1c032e9366a94b9473e8b7d5bb6",
        "final_url": "https://aws.amazon.com/bedrock/pricing/",
        "fingerprint": "2af4ebe9f7261c2cbcb49f1a032c4990526c1a1c18f94f20edd5e350aebb7695",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:04Z"
      },
      "source_type": "pricing_page",
      "url": "https://aws.amazon.com/bedrock/pricing/",
      "validation_status": "validated"
    },
    {
      "authority": "official_blog",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official AWS What's New RSS parser filters Bedrock-related entries and emits bounded dated candidates with article URLs and title/link hashes only.",
      "impact_hints": [
        "model_launch",
        "regional_availability_change",
        "caching_change",
        "token_accounting_change",
        "pricing_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "aws_bedrock.whats_new",
      "last_validated_at": "2026-06-17T02:17:05Z",
      "latest_event_date": "2026-06-16",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "aws_bedrock_whats_new_feed",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:aws-bedrock"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 13,
      "robots_policy_note": "Fetch official RSS feed only; respect provider robots and cache headers.",
      "snapshot_policy": "hash feed entries; emit bounded Bedrock-related dates, subjects, and article URLs only",
      "source_state": {
        "content_sha256": "96fe6009fc0e3548cbce7266df4c49b50443c2a8adb0e5297ed39478f37f2ff5",
        "final_url": "https://aws.amazon.com/about-aws/whats-new/recent/feed/",
        "fingerprint": "078024f2c47c55b2e7eae3058830e08f383c68fe65901462d4b5efe9057e23ea",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:05Z"
      },
      "source_type": "rss_feed",
      "url": "https://aws.amazon.com/about-aws/whats-new/recent/feed/",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed model-doc parser extracts bounded Azure OpenAI model identifiers from code tokens.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "api_contract_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "azure_openai.docs",
      "last_validated_at": "2026-06-17T02:17:05Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "azure_openai_models",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:azure-openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; do not publish raw page",
      "source_state": {
        "content_sha256": "646b5d358160a905a64de48ae28d78706644643ac3e621fd86684cbffa3f0ac1",
        "final_url": "https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure?pivots=azure-openai",
        "fingerprint": "53fba51b5d5da1f5e87b4a27b31e2e1cc71d9b0052c8451028045a9c76e53c67",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:05Z"
      },
      "source_type": "docs_page",
      "url": "https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure?pivots=azure-openai",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "2026-06-09 live smoke followed the official retired-models redirect, returned HTTP 200, emitted 120 bounded items and 8 row-scoped lifecycle candidates, and produced no parser errors.",
      "impact_hints": [
        "model_deprecation",
        "model_retirement"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "azure_openai.legacy_models",
      "last_validated_at": "2026-06-17T02:17:06Z",
      "latest_event_date": "2025-01-27",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "azure_openai_legacy_models",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:azure-openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 2,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash scoped lifecycle table rows; emit bounded model/date rows only",
      "source_state": {
        "content_sha256": "96128b3b0fa185975647c778aaae5da6e50478a5c4c8b687168ba6af12707dd7",
        "final_url": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models",
        "fingerprint": "682e7e429aa9e6a30e5993626b8387cfa659afe5502483270c6252af0a0fb654",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:06Z"
      },
      "source_type": "docs_page",
      "url": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/legacy-models",
      "validation_status": "validated"
    },
    {
      "authority": "official_pricing",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed pricing parser emits bounded pricing, model, and regional signals for deterministic daily refresh.",
      "impact_hints": [
        "pricing_change",
        "regional_availability_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "azure_openai.pricing",
      "last_validated_at": "2026-06-17T02:17:06Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "azure_openai_pricing",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:azure-openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "e4bda052086dd7a822e1a6df75acd8ef93fefc53c1d858af94f64f8db9782ec1",
        "final_url": "https://azure.microsoft.com/en-us/pricing/details/azure-openai/",
        "fingerprint": "b8f1ceb1106b1ecef79da5cc834e80881b62b5f1d1117bf4520d8113ee33c8f3",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:06Z"
      },
      "source_type": "pricing_page",
      "url": "https://azure.microsoft.com/en-us/pricing/details/azure-openai/",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official Azure OpenAI What's New parser emits bounded dated release-note candidates with model/API subjects and source-page evidence only.",
      "impact_hints": [
        "model_launch",
        "regional_availability_change",
        "api_contract_change",
        "workflow_behavior_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "azure_openai.whats_new",
      "last_validated_at": "2026-06-17T02:17:21Z",
      "latest_event_date": "2026-05-01",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "azure_openai_whats_new",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:azure-openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 6,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash dated What's New sections; emit bounded dates, subjects, and source URL only",
      "source_state": {
        "content_sha256": "0a84a41be394a5382b166f40d9893a7cbf2600844878cb70730a5d87905eab06",
        "final_url": "https://learn.microsoft.com/en-us/azure/foundry-classic/openai/whats-new",
        "fingerprint": "7cac4640c7da7e35923846bf1cca4f9a6df24fb6ad883b6341fc8f0a9a904fe8",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:21Z"
      },
      "source_type": "docs_page",
      "url": "https://learn.microsoft.com/en-us/azure/ai-services/openai/whats-new",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed model-doc parser extracts bounded Gemini model identifiers from code and model links.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "api_contract_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "google.ai_docs",
      "last_validated_at": "2026-06-17T02:17:22Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "google_ai_models",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:google"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; do not publish raw page",
      "source_state": {
        "content_sha256": "d566d356c42e48e8453123bd4b553d7ac02c8bb9bf0e8458e45dd352193fe44a",
        "final_url": "https://ai.google.dev/gemini-api/docs/models",
        "fingerprint": "f6efa00dfec3d4f35b10f99a751935ba95728066ea736fddebbeb58e20d2d173",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:22Z"
      },
      "source_type": "docs_page",
      "url": "https://ai.google.dev/gemini-api/docs/models",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official Gemini API changelog parser emits dated release-note candidates with bounded date, model/API subject, and source-page evidence only.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "model_retirement",
        "api_contract_change",
        "token_accounting_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "google.gemini_changelog",
      "last_validated_at": "2026-06-17T02:17:23Z",
      "latest_event_date": "2026-06-01",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "google_gemini_changelog",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:google"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 6,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash dated changelog sections; emit bounded dates, subjects, and source URL only",
      "source_state": {
        "content_sha256": "9a8946eabcf05013bae7f32c31b6bf0ae3dd570df68971bab6f25a6a789c046b",
        "final_url": "https://ai.google.dev/gemini-api/docs/changelog",
        "fingerprint": "7102dc5b078d6d9a0a48845d1756f89b6ae0797c78977ce69c80a9e9cd7d731d",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:23Z"
      },
      "source_type": "docs_page",
      "url": "https://ai.google.dev/gemini-api/docs/changelog",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "2026-06-09 live smoke followed the official docs.cloud.google.com redirect, returned HTTP 200, emitted 65 bounded items and 8 row-scoped lifecycle candidates, and produced no parser errors.",
      "impact_hints": [
        "model_launch",
        "model_deprecation",
        "model_retirement"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "google.vertex_model_versions",
      "last_validated_at": "2026-06-17T02:17:24Z",
      "latest_event_date": "2026-06-10",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "google_vertex_model_versions",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:google"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 2,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash scoped lifecycle table rows; emit bounded model/date rows only",
      "source_state": {
        "content_sha256": "a036dfe1224bb1d594c2fcd478941af93bfab870dfe1dc56b16e519be6b7039b",
        "final_url": "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/model-versions",
        "fingerprint": "cf0ad59d261b93b9b8b38f319b029bb6265868b7e4fd8f1ea489493dae21bb5b",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:24Z"
      },
      "source_type": "docs_page",
      "url": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
      "validation_status": "validated"
    },
    {
      "authority": "official_pricing",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed pricing parser emits bounded pricing, model, quota, and regional signals for deterministic daily refresh.",
      "impact_hints": [
        "pricing_change",
        "quota_change",
        "regional_availability_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "google.vertex_pricing",
      "last_validated_at": "2026-06-17T02:17:26Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "google_vertex_pricing",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:google"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "6cc899c0ecc0c0184aaf59806dc1950f0d0b15134fec09b3f0bc0c6358288d09",
        "final_url": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
        "fingerprint": "f05a55e0acb2941e267fcb2c95069f3f4ddfb4eb0c3031e61e8581cc6dfca5ad",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:26Z"
      },
      "source_type": "pricing_page",
      "url": "https://cloud.google.com/vertex-ai/generative-ai/pricing",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official OpenAI API changelog parser emits dated entry candidates with bounded dates, subjects, selectors, and source-page evidence only.",
      "impact_hints": [
        "billing_channel_change",
        "pricing_change",
        "token_accounting_change",
        "model_launch",
        "api_contract_change",
        "workflow_behavior_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.api_changelog",
      "last_validated_at": "2026-06-17T02:17:28Z",
      "latest_event_date": "2026-06-04",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "openai_api_changelog",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 6,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash dated changelog entries; emit bounded dates, subjects, and source URL only",
      "source_state": {
        "content_sha256": "40bb1c4aac3ccedbd512520db3cfa510327417be479fcaf811b55d093a7e930d",
        "final_url": "https://developers.openai.com/api/docs/changelog",
        "fingerprint": "6d73e63db4ed164c94bd20dae308ab394a78921261a9dce5c96850686c5cc048",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:28Z"
      },
      "source_type": "docs_page",
      "url": "https://developers.openai.com/api/docs/changelog",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Graduated from broad manual Codex docs to the official dated Codex changelog. The parser emits only dates, bounded subjects, entry hashes, and review-only candidate claims.",
      "impact_hints": [
        "workflow_behavior_change",
        "sdk_behavior_change",
        "subscription_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.codex_docs",
      "last_validated_at": "2026-06-17T02:17:28Z",
      "latest_event_date": "2026-06-16",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "openai_codex_changelog",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 10,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash dated changelog entries; emit bounded dates, subjects, and source URL only",
      "source_state": {
        "content_sha256": "70471a77fe26cbf26530f255ece6cd9a8eeab0067957c684074ccda4383c1d83",
        "final_url": "https://developers.openai.com/codex/changelog",
        "fingerprint": "796e7a6c6f35af4dbe4b549822fb1b59d4ebc538108112ed47e456ac3fb2d462",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:28Z"
      },
      "source_type": "docs_page",
      "url": "https://developers.openai.com/codex/changelog",
      "validation_status": "validated"
    },
    {
      "authority": "official_docs",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Graduated after synthetic fixtures and a 2026-06-09 live smoke confirmed the redirected docs page still has a bounded Deprecations range. Row-scoped claims stay review-only.",
      "impact_hints": [
        "model_deprecation",
        "model_retirement",
        "api_contract_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.deprecations",
      "last_validated_at": "2026-06-17T02:17:29Z",
      "latest_event_date": "2026-06-02",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "openai_deprecations",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 3,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash source page during human review; do not publish raw page",
      "source_state": {
        "content_sha256": "aa60ae1c4096793dc406f50c21ed5a05bd6ba79ccb1bec7d8847ae482e03b3a8",
        "final_url": "https://developers.openai.com/api/docs/deprecations",
        "fingerprint": "f2f785edd904552c152b89ba84de2e14aaf3449c0d6ba3c5bb73c5a725b8a8c7",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:29Z"
      },
      "source_type": "docs_page",
      "url": "https://platform.openai.com/docs/deprecations",
      "validation_status": "validated"
    },
    {
      "authority": "official_blog",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Official OpenAI news RSS parser emits dated announcement candidates with article URLs, title/link hashes, and bounded provider-surface/model subjects only.",
      "impact_hints": [
        "model_launch",
        "billing_channel_change",
        "workflow_behavior_change",
        "subscription_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.news",
      "last_validated_at": "2026-06-17T02:17:30Z",
      "latest_event_date": "2026-06-02",
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "openai_news_feed",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 7,
      "robots_policy_note": "Fetch official RSS feed only; respect provider robots and cache headers.",
      "snapshot_policy": "hash feed entries; emit bounded dates, subjects, and article URLs only",
      "source_state": {
        "content_sha256": "6ea289de362eb2bf5223d03e1e6bc52179959e12be09526585622bd06fa405b1",
        "final_url": "https://openai.com/news/rss.xml",
        "fingerprint": "7426dcce24d1147cde3a9ce6040db259435a2dac4471c86b9aa88228a72520ec",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:30Z"
      },
      "source_type": "rss_feed",
      "url": "https://openai.com/news/rss.xml",
      "validation_status": "validated"
    },
    {
      "authority": "official_pricing",
      "automation_status": "enabled_deterministic",
      "cadence": "daily",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed pricing parser emits bounded pricing and model signals for deterministic daily refresh.",
      "impact_hints": [
        "pricing_change",
        "token_accounting_change"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.pricing",
      "last_validated_at": "2026-06-17T02:17:31Z",
      "latest_event_date": null,
      "license_note": "Use source URL and factual extracted fields only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "openai_pricing",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite daily fetch",
      "reviewed_event_count": 0,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "6ba74c5187649bac53dc83573b266fa65095f617a479388383e31a4a4a6ba97e",
        "final_url": "https://developers.openai.com/api/docs/pricing",
        "fingerprint": "1e99361410e81957658a2246b24df813c51e28f9c9f2756eba643b0d55c04b08",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:31Z"
      },
      "source_type": "pricing_page",
      "url": "https://developers.openai.com/api/docs/pricing",
      "validation_status": "validated"
    },
    {
      "authority": "official_status",
      "automation_status": "enabled_deterministic",
      "cadence": "hourly",
      "candidate_backlog_count": 0,
      "enabled": true,
      "graduation_blockers": [],
      "graduation_notes": "Fixture-backed Atom parser hashes incident metadata and emits no copied status text.",
      "impact_hints": [
        "status_incident",
        "status_recovery"
      ],
      "introduced_at": null,
      "introduced_ref": null,
      "key": "openai.status",
      "last_validated_at": "2026-06-17T02:17:31Z",
      "latest_event_date": "2026-06-04",
      "license_note": "Use source URL and factual incident metadata only.",
      "maintainers": [
        "apw-data-maintainers"
      ],
      "parser": "atom_status",
      "parser_fixture_count": 1,
      "provider_refs": [
        "provider:openai"
      ],
      "rate_limit": "polite hourly fetch",
      "reviewed_event_count": 2,
      "robots_policy_note": "Fetch feed only.",
      "snapshot_policy": "hash feed items; do not publish raw feed body",
      "source_state": {
        "content_sha256": "169e6157c2b91bf66ec629198e0203c1e99154c2a524f56eb37525de8babe723",
        "final_url": "https://status.openai.com/feed.atom",
        "fingerprint": "8139f9ee876defd6b6edbed509c34974071e50a624b7b9dfc06834cb337c1aa9",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-06-17T02:17:31Z"
      },
      "source_type": "atom_feed",
      "url": "https://status.openai.com/feed.atom",
      "validation_status": "validated"
    }
  ],
  "summary": {
    "cadence_counts": {
      "daily": 19,
      "hourly": 2
    },
    "candidate_backlog_count": 0,
    "enabled_deterministic_source_count": 21,
    "event_kind_counts": {
      "api_contract_change": 8,
      "billing_channel_change": 2,
      "caching_change": 1,
      "default_model_change": 2,
      "model_deprecation": 3,
      "model_launch": 20,
      "model_retirement": 9,
      "rate_limit_change": 1,
      "regional_availability_change": 1,
      "status_incident": 4,
      "subscription_change": 1,
      "token_accounting_change": 3,
      "workflow_behavior_change": 12
    },
    "latest_event_date": "2026-06-16",
    "provider_count": 5,
    "reviewed_event_count": 67,
    "source_count": 21,
    "source_state_latest_retrieved_at": "2026-06-17T02:17:31Z",
    "source_type_counts": {
      "atom_feed": 1,
      "blog": 1,
      "docs_page": 11,
      "pricing_page": 5,
      "rss_feed": 2,
      "status_page": 1
    },
    "validated_source_count": 21,
    "validation_status_counts": {
      "validated": 21
    }
  }
}
