{
  "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-10-16T02:38:27Z",
  "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,
        "quota_change": 1,
        "rate_limit_change": 1,
        "regional_availability_change": 1,
        "status_incident": 2,
        "token_accounting_change": 1,
        "workflow_behavior_change": 9
      },
      "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-07-12",
      "provider_kind": "foundation_model_provider",
      "provider_ref": "provider:openai",
      "reviewed_event_count": 29,
      "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 Codex Docs",
          "id": "openai/codex",
          "kind": "docs",
          "url": "https://learn.chatgpt.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-07-20T19:46:30Z",
      "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": "889b47da98bb6000d0b93fadbae3752b189812d6e935b078fa3ca3b0cef83a1c",
        "final_url": "https://www.anthropic.com/news",
        "fingerprint": "a8096b61d7f0739640ec9597222024f787685e0d3a5b9932160eccc0c0167e54",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:30Z"
      },
      "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-07-20T19:46:37Z",
      "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": "ea6fbf48cb03b679e7e6c56f557c5eca608264c18688f819615f46bc705cdffd",
        "final_url": "https://platform.claude.com/docs/en/about-claude/pricing",
        "fingerprint": "7547e97a1c0648a5c0a8b0ffe87e806196e68fbe46bfd0be00f3fcefc4446bae",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:37Z"
      },
      "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-07-20T19:46:37Z",
      "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": "6e42e9c4c837ef2d4094314a66db1912653998a85323341a96b30a023d4d389e",
        "final_url": "https://platform.claude.com/docs/en/release-notes/overview",
        "fingerprint": "d1d181985980460a7d8818e2b83e8978cb2588b2adec905ab7c2d33295f37538",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:37Z"
      },
      "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-07-20T19:46:39Z",
      "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": "36811ec4b59e330d842a41003bbc591d7774d82e0c26c659dcd00890e97912f8",
        "final_url": "https://status.claude.com/",
        "fingerprint": "4120d50b3f308626fa60a348265033c89c8727d4d4e7803958e71be43ecce16b",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:39Z"
      },
      "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-07-20T19:46:39Z",
      "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": "0a88bb06226191a2fa1903f4060f21b91ae9ad8b983357b7eec16f8853639a24",
        "final_url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-cards.html",
        "fingerprint": "af321e7d6c3d660745f2d7863fa494cc3024879a862505b69e28fd0fefd1a849",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:39Z"
      },
      "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-07-20T19:46:39Z",
      "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": "993be104801c613532a42edbfcea507a9b1bf8882ea17470c6804ac1120ec825",
        "final_url": "https://aws.amazon.com/bedrock/pricing/",
        "fingerprint": "2af4ebe9f7261c2cbcb49f1a032c4990526c1a1c18f94f20edd5e350aebb7695",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:39Z"
      },
      "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-07-20T19:46:40Z",
      "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": "8e8ef0a4180c1eb37f6177ded682741f6a6c3f04187d1c9ee82e51362577039b",
        "final_url": "https://aws.amazon.com/about-aws/whats-new/recent/feed/",
        "fingerprint": "b01993f5348460c8d6e733dac03b8910a0181bc57cd232cd3c9714172034158e",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:40Z"
      },
      "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-07-20T19:46:41Z",
      "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": "bed74cacc85fc779ff6724112dd08ff5121b842602045952ea6a569e448f5098",
        "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-07-20T19:46:41Z"
      },
      "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-07-20T19:46:41Z",
      "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": "cf1b878a3ef707e045a99db6750dce5a1ffd79b11132958641fc5707a18bc581",
        "final_url": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models",
        "fingerprint": "682e7e429aa9e6a30e5993626b8387cfa659afe5502483270c6252af0a0fb654",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:41Z"
      },
      "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-07-20T19:46:42Z",
      "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": "66f5c3c536dab402758b61ad3ade5e51a192a9f348ae5b678e6941bb12e8979c",
        "final_url": "https://azure.microsoft.com/en-us/pricing/details/azure-openai/",
        "fingerprint": "b8f1ceb1106b1ecef79da5cc834e80881b62b5f1d1117bf4520d8113ee33c8f3",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:42Z"
      },
      "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-07-20T19:46:59Z",
      "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": "b6d18e6d4013a17ff233114ab5c217717bbea717684e8ea099dcfebc603cbc0b",
        "final_url": "https://learn.microsoft.com/en-us/azure/foundry-classic/openai/whats-new",
        "fingerprint": "7cac4640c7da7e35923846bf1cca4f9a6df24fb6ad883b6341fc8f0a9a904fe8",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:59Z"
      },
      "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-07-20T19:46:59Z",
      "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": "63f96b2952a9b25041697367c1741a27404b634e4dcf12b67f2958e3f8065af6",
        "final_url": "https://ai.google.dev/gemini-api/docs/models",
        "fingerprint": "d21f4ea684a3cc5498174ce77e55181b58b365a9739b30c4dd0707b6db783d05",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:46:59Z"
      },
      "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-07-20T19:47:00Z",
      "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": "766eaa0ba26026759d4e17e272df6558fc30866614ab3f20ad1155a1cd1e86ae",
        "final_url": "https://ai.google.dev/gemini-api/docs/changelog",
        "fingerprint": "ede655e0586039b8a6f73a845ae45666b97d17bd1b4436a12311abc862289056",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:00Z"
      },
      "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-07-20T19:47:01Z",
      "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": "22d7b0772474ba73973ac1a073c47e340ff32b2a0c41054b3eeca163c5a91010",
        "final_url": "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/model-versions",
        "fingerprint": "2dd449e4081c32cc8e2c4240106a22ce5184f2e0671a9b9597618985cf3a262a",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:01Z"
      },
      "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-07-20T19:47:03Z",
      "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": "c2a1d6039c518abaf909fc27e8144343689851a4244214a2ea66dc858dde2c33",
        "final_url": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
        "fingerprint": "f05a55e0acb2941e267fcb2c95069f3f4ddfb4eb0c3031e61e8581cc6dfca5ad",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:03Z"
      },
      "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-07-20T19:47:05Z",
      "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": "1c9866a9598b0010ef8af1bf5cd132ff0341d10f1cf40564641f493fa463c6ce",
        "final_url": "https://developers.openai.com/api/docs/changelog",
        "fingerprint": "f4c292081e19c2e31e8e0e0481f8db46d945e462e44c80ac35d24d14c97fda6c",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:05Z"
      },
      "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-07-20T19:47:06Z",
      "latest_event_date": "2026-07-09",
      "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": 11,
      "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": "d83b07d530a30c16bde666ca78ed0c230912565dd63211f3a4fa6029909866d1",
        "final_url": "https://learn.chatgpt.com/docs/changelog",
        "fingerprint": "6d035f468372195c568722d951c8bd32f0115256965d33b6e4cd90de5b11fce3",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:06Z"
      },
      "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-07-20T19:47:06Z",
      "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": "642712a3151dca32b4af85707c8f61a15e6c9d2b5e789bcc0ab85e8492575b64",
        "final_url": "https://developers.openai.com/api/docs/deprecations",
        "fingerprint": "f2f785edd904552c152b89ba84de2e14aaf3449c0d6ba3c5bb73c5a725b8a8c7",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:06Z"
      },
      "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-07-20T19:47:07Z",
      "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": "3b79d6f993ded2c3d1f95c2d56df73d0b3347b98cd0e9aea31d52e5795a4feca",
        "final_url": "https://openai.com/news/rss.xml",
        "fingerprint": "48cdc86364910a4974dcb825707759b3e71516ee7f1be99c1f4cf2c444780c2d",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:07Z"
      },
      "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-07-20T19:47:08Z",
      "latest_event_date": "2026-07-12",
      "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": 2,
      "robots_policy_note": "Respect provider robots and cache headers.",
      "snapshot_policy": "hash normalized text; emit bounded pricing/model signals only",
      "source_state": {
        "content_sha256": "07dac628b4ce1c9f5ec231d2d89ecf8bed646fff77b051a00f1cc58007eb0fe9",
        "final_url": "https://developers.openai.com/api/docs/pricing",
        "fingerprint": "52a90857dbf15f19def1a2b752e4d79481888c21bf307ab98196d40dd901c25a",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:08Z"
      },
      "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-07-20T19:47:08Z",
      "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": "d61eb9a2be781946efb7adea51c1d56d0e50c9cccc81f1ebd225b18cc19efbd3",
        "final_url": "https://status.openai.com/feed.atom",
        "fingerprint": "0e3b33f108135250f5284ba9a0322a787d194645a5d8172ae6dc2c51689bb946",
        "http_status": 200,
        "present": true,
        "retrieved_at": "2026-07-20T19:47:08Z"
      },
      "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,
      "quota_change": 1,
      "rate_limit_change": 1,
      "regional_availability_change": 1,
      "status_incident": 4,
      "subscription_change": 1,
      "token_accounting_change": 3,
      "workflow_behavior_change": 13
    },
    "latest_event_date": "2026-07-12",
    "provider_count": 5,
    "reviewed_event_count": 69,
    "source_count": 21,
    "source_state_latest_retrieved_at": "2026-07-20T19:47:08Z",
    "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
    }
  }
}
