{
  "title": "enjoythai.land source registry",
  "description": "Canonical source registry for the Thailand signal graph, normalized from the public atlas into graph roles, automation policies, and decision feeds.",
  "generated_from": "/data/free-thailand-data-sources.json",
  "updated": "2026-05-11",
  "metrics": {
    "source_count": 369,
    "category_count": 21,
    "access_class_counts": {
      "public": 276,
      "public-automation-unclear": 12,
      "free-registration": 20,
      "commercial": 45,
      "restricted": 15,
      "reference-only": 1
    },
    "automation_policy_counts": {
      "primary-ingest": 276,
      "cautious-ingest": 12,
      "registered-ingest": 20,
      "optional-enrichment": 45,
      "metadata-only": 15,
      "reference-context": 1
    },
    "runtime_role_counts": {
      "catalog-only": 311,
      "health-checked": 10,
      "entity-registry": 0,
      "observation-driving": 0,
      "signal-driving": 0,
      "decision-driving": 47,
      "reference-only": 1
    },
    "layer_counts": {
      "source_health": 46,
      "observation_ingest": 47,
      "signal_compute": 47,
      "decision_compute": 47,
      "page_reference_only": 312
    },
    "production_ready_count": 57,
    "cadence_counts": {
      "live": 100,
      "daily": 35,
      "scheduled": 155,
      "variable": 79
    },
    "graph_class_counts": {
      "registry": 4,
      "observations": 45,
      "baselines": 38,
      "mixed": 151,
      "entities": 118,
      "rules": 13
    }
  },
  "access_classes": [
    {
      "key": "public",
      "label": "Public",
      "detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints."
    },
    {
      "key": "public-automation-unclear",
      "label": "Public, automation terms unclear",
      "detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer."
    },
    {
      "key": "free-registration",
      "label": "Free registration",
      "detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist."
    },
    {
      "key": "commercial",
      "label": "Commercial",
      "detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access."
    },
    {
      "key": "restricted",
      "label": "Restricted",
      "detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion."
    },
    {
      "key": "reference-only",
      "label": "Reference only",
      "detail": "Standards, laws, manuals, or context. Useful for interpretation rather than observations."
    }
  ],
  "automation_policies": [
    {
      "key": "primary-ingest",
      "label": "Primary ingest layer",
      "detail": "Safe target for regular automation, within source cadence and license constraints."
    },
    {
      "key": "cautious-ingest",
      "label": "Cautious ingest / manual verification",
      "detail": "Use for low-frequency checks, verification, or only after reviewing automation terms."
    },
    {
      "key": "registered-ingest",
      "label": "Primary or secondary ingest with registration",
      "detail": "Use once keys, accounts, quota tracking, and auth status are configured."
    },
    {
      "key": "optional-enrichment",
      "label": "Optional enrichment",
      "detail": "Use only where paid, partner, or operator access exists."
    },
    {
      "key": "metadata-only",
      "label": "Metadata only",
      "detail": "Represent the system or source in the graph, but do not ingest operational records."
    },
    {
      "key": "reference-context",
      "label": "Explanation / standards only",
      "detail": "Use for standards, laws, thresholds, and definitions rather than measurements."
    }
  ],
  "runtime_roles": [
    {
      "key": "catalog-only",
      "label": "Catalog only",
      "detail": "Profiled in the atlas, but not yet wired into source health or live graph computation."
    },
    {
      "key": "health-checked",
      "label": "Health checked",
      "detail": "A connector exists and source health probes it, but it does not yet feed the live graph."
    },
    {
      "key": "entity-registry",
      "label": "Entity registry",
      "detail": "The source currently populates or validates graph entities, but does not yet drive live observations."
    },
    {
      "key": "observation-driving",
      "label": "Observation driving",
      "detail": "The source feeds normalized observation rows, but not active signal or decision layers yet."
    },
    {
      "key": "signal-driving",
      "label": "Signal driving",
      "detail": "The source feeds active signal computation, but not traveler-facing decisions yet."
    },
    {
      "key": "decision-driving",
      "label": "Decision driving",
      "detail": "The source currently influences live traveler-facing decisions through the graph engine."
    },
    {
      "key": "reference-only",
      "label": "Reference only",
      "detail": "Used for standards or explanatory context, not live runtime ingestion."
    }
  ],
  "cadence_bands": [
    {
      "key": "live",
      "label": "Live",
      "detail": "minute, hourly, near-real-time, event, warning, operational"
    },
    {
      "key": "daily",
      "label": "Daily",
      "detail": "daily, regular, current-report cadence"
    },
    {
      "key": "scheduled",
      "label": "Scheduled",
      "detail": "monthly, quarterly, annual, seasonal, official publication"
    },
    {
      "key": "variable",
      "label": "Variable",
      "detail": "catalog, agency, publisher, and project-dependent updates"
    }
  ],
  "categories": [
    {
      "category": "Catalogs and discovery",
      "slug": "catalogs-and-discovery",
      "source_count": 4,
      "graph_role": "Source discovery layer",
      "graph_class": "registry"
    },
    {
      "category": "Cities and civic",
      "slug": "cities-and-civic",
      "source_count": 3,
      "graph_role": "Local condition layer",
      "graph_class": "observations"
    },
    {
      "category": "Energy and agriculture",
      "slug": "energy-and-agriculture",
      "source_count": 8,
      "graph_role": "Rural and commodity baseline",
      "graph_class": "baselines"
    },
    {
      "category": "Fuel, gas stations, and energy prices",
      "slug": "fuel-gas-stations-and-energy-prices",
      "source_count": 17,
      "graph_role": "Road-trip utility layer",
      "graph_class": "mixed"
    },
    {
      "category": "Geospatial and satellite",
      "slug": "geospatial-and-satellite",
      "source_count": 17,
      "graph_role": "Location backbone",
      "graph_class": "entities"
    },
    {
      "category": "Humanitarian and international baselines",
      "slug": "humanitarian-and-international-baselines",
      "source_count": 12,
      "graph_role": "Global comparison layer",
      "graph_class": "baselines"
    },
    {
      "category": "Justice and legal access",
      "slug": "justice-and-legal-access",
      "source_count": 21,
      "graph_role": "Public-service and safety support layer",
      "graph_class": "entities"
    },
    {
      "category": "Labour, health, and education",
      "slug": "labour-health-and-education",
      "source_count": 16,
      "graph_role": "Long-stay and public-service layer",
      "graph_class": "mixed"
    },
    {
      "category": "Land and property",
      "slug": "land-and-property",
      "source_count": 1,
      "graph_role": "Place value and long-stay layer",
      "graph_class": "baselines"
    },
    {
      "category": "Law, politics, and civic",
      "slug": "law-politics-and-civic",
      "source_count": 10,
      "graph_role": "Public-record change layer",
      "graph_class": "rules"
    },
    {
      "category": "Museums and learning sites",
      "slug": "museums-and-learning-sites",
      "source_count": 16,
      "graph_role": "Indoor fallback layer",
      "graph_class": "entities"
    },
    {
      "category": "News and government information",
      "slug": "news-and-government-information",
      "source_count": 3,
      "graph_role": "Alert and official context layer",
      "graph_class": "rules"
    },
    {
      "category": "Precious metals, gems, and jewelry",
      "slug": "precious-metals-gems-and-jewelry",
      "source_count": 23,
      "graph_role": "Market-reference and niche commercial layer",
      "graph_class": "mixed"
    },
    {
      "category": "Religion, culture, and heritage",
      "slug": "religion-culture-and-heritage",
      "source_count": 12,
      "graph_role": "Temple and cultural entity layer",
      "graph_class": "entities"
    },
    {
      "category": "Restaurants, nightlife, and wellness",
      "slug": "restaurants-nightlife-and-wellness",
      "source_count": 9,
      "graph_role": "Daily experience layer",
      "graph_class": "entities"
    },
    {
      "category": "Statistics, economy, and finance",
      "slug": "statistics-economy-and-finance",
      "source_count": 17,
      "graph_role": "Baseline macro layer",
      "graph_class": "baselines"
    },
    {
      "category": "Stores, retail, and shopping",
      "slug": "stores-retail-and-shopping",
      "source_count": 31,
      "graph_role": "Urban utility and commerce layer",
      "graph_class": "entities"
    },
    {
      "category": "Tourism and travel",
      "slug": "tourism-and-travel",
      "source_count": 12,
      "graph_role": "Destination and attraction layer",
      "graph_class": "entities"
    },
    {
      "category": "Transport",
      "slug": "transport",
      "source_count": 95,
      "graph_role": "Movement and friction layer",
      "graph_class": "mixed"
    },
    {
      "category": "Water and hydrology",
      "slug": "water-and-hydrology",
      "source_count": 19,
      "graph_role": "Environmental quality and flood layer",
      "graph_class": "observations"
    },
    {
      "category": "Weather, environment, and disasters",
      "slug": "weather-environment-and-disasters",
      "source_count": 23,
      "graph_role": "Live risk layer",
      "graph_class": "observations"
    }
  ],
  "sources": [
    {
      "source_id": "data-go-th-ckan-api",
      "registry_position": 2,
      "name": "data.go.th CKAN API",
      "domain": "Catalogs and discovery",
      "category_slug": "catalogs-and-discovery",
      "source_kind": "catalog",
      "graph_class": "registry",
      "graph_role": "Source discovery layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "source",
        "dataset"
      ],
      "feeds_signals": [
        "source_coverage"
      ],
      "feeds_decisions": [
        "source_research"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CKAN API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public read access",
      "cadence_declared": "Catalog updates as agencies publish",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.go.th/api/3/action/package_search",
      "host": "data.go.th",
      "notes": "Use package_search, package_show, resource_show, and resource URLs.",
      "source_profile_url": "/data/sources/data-go-th-ckan-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "government-data-catalog",
      "registry_position": 3,
      "name": "Government Data Catalog",
      "domain": "Catalogs and discovery",
      "category_slug": "catalogs-and-discovery",
      "source_kind": "catalog",
      "graph_class": "registry",
      "graph_role": "Source discovery layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "source",
        "dataset"
      ],
      "feeds_signals": [
        "source_coverage"
      ],
      "feeds_decisions": [
        "source_research"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog/API",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public metadata and public datasets",
      "cadence_declared": "Varies by agency",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://gdcatalog.go.th/",
      "host": "gdcatalog.go.th",
      "notes": "Cross-agency discovery surface for statistical, record, API, and geospatial datasets.",
      "source_profile_url": "/data/sources/government-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-government-data-of-thailand",
      "registry_position": 1,
      "name": "Open Government Data of Thailand",
      "domain": "Catalogs and discovery",
      "category_slug": "catalogs-and-discovery",
      "source_kind": "catalog",
      "graph_class": "registry",
      "graph_role": "Source discovery layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "source",
        "dataset"
      ],
      "feeds_signals": [
        "source_coverage"
      ],
      "feeds_decisions": [
        "source_research"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API, CSV, XLS, JSON, geospatial files",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public; some actions may require account/API key",
      "cadence_declared": "Varies by agency",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.go.th/",
      "host": "data.go.th",
      "notes": "Primary national open-data portal and first crawl target.",
      "source_profile_url": "/data/sources/open-government-data-of-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-gdc-open-d-agency-catalogs",
      "registry_position": 4,
      "name": "Thai-GDC / Open-D agency catalogs",
      "domain": "Catalogs and discovery",
      "category_slug": "catalogs-and-discovery",
      "source_kind": "catalog",
      "graph_class": "registry",
      "graph_role": "Source discovery layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "source",
        "dataset"
      ],
      "feeds_signals": [
        "source_coverage"
      ],
      "feeds_decisions": [
        "source_research"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/DataStore",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where agency catalog exposes public resources",
      "cadence_declared": "Varies by agency",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://gdcatalog.go.th/",
      "host": "gdcatalog.go.th",
      "notes": "Many Thai agency portals share the same CKAN/Open-D patterns.",
      "source_profile_url": "/data/sources/thai-gdc-open-d-agency-catalogs/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bangkok-flood-monitoring-system",
      "registry_position": 10,
      "name": "Bangkok Flood Monitoring System",
      "domain": "Cities and civic",
      "category_slug": "cities-and-civic",
      "source_kind": "tourism",
      "graph_class": "observations",
      "graph_role": "Local condition layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "district",
        "street",
        "transport_zone",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "civic_friction",
        "local_issue_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "district",
        "street",
        "transport_zone",
        "hotel_area",
        "attraction",
        "route"
      ],
      "observation_scope": [
        "bangkok_flood_current_event_count",
        "bangkok_flood_max_level_cm"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bangkok-flood-monitoring-system",
          "name": "Bangkok flood-monitoring current-event surface",
          "kind": "entity-observation",
          "cadence": "Operational / event-driven"
        }
      ],
      "current_signal_types": [
        "bangkok_flood_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public dashboard plus public API endpoints exposed by the city flood web app",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Operational / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://flood.bangkok.go.th/",
      "host": "flood.bangkok.go.th",
      "notes": "Bangkok drainage and flood-monitoring surface with current flood-event, rainfall, canal-water, threshold, and forecast API routes exposed by the public app bundle. Useful for Bangkok-only route and city-friction context, not as a nationwide flood service.",
      "source_profile_url": "/data/sources/bangkok-flood-monitoring-system/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bangkok-open-data",
      "registry_position": 9,
      "name": "Bangkok Open Data",
      "domain": "Cities and civic",
      "category_slug": "cities-and-civic",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Local condition layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "district",
        "street",
        "transport_zone",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "civic_friction",
        "local_issue_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "district",
        "street",
        "transport_zone",
        "dataset",
        "source"
      ],
      "observation_scope": [
        "civic_monthly_complaint_count",
        "civic_monthly_resolution_rate",
        "civic_star_average"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "bangkok-civic-complaint-stats",
          "name": "Bangkok civic complaint stats",
          "kind": "entity-observation",
          "cadence": "Monthly / district statistical update"
        }
      ],
      "current_signal_types": [
        "civic_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "CKAN/API, CSV, JSON",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.bangkok.go.th/",
      "host": "data.bangkok.go.th",
      "notes": "Bangkok city data, including urban services and local datasets.",
      "source_profile_url": "/data/sources/bangkok-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "traffy-fondue-public-datasets",
      "registry_position": 11,
      "name": "Traffy Fondue public datasets",
      "domain": "Cities and civic",
      "category_slug": "cities-and-civic",
      "source_kind": "complaint",
      "graph_class": "observations",
      "graph_role": "Local condition layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "district",
        "street",
        "transport_zone",
        "service_area"
      ],
      "feeds_signals": [
        "civic_friction",
        "local_issue_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/JSON/API where exposed through public catalogs",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where released",
      "cadence_declared": "Operational / frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.traffy.in.th/",
      "host": "traffy.in.th",
      "notes": "Civic complaint/problem reports such as flooding, potholes, garbage, lights, and local service issues.",
      "source_profile_url": "/data/sources/traffy-fondue-public-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-agricultural-extension-data-catalog",
      "registry_position": 60,
      "name": "Department of Agricultural Extension Data Catalog",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://catalog.doae.go.th/",
      "host": "catalog.doae.go.th",
      "notes": "Agricultural extension datasets.",
      "source_profile_url": "/data/sources/department-of-agricultural-extension-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-fisheries-data-catalog",
      "registry_position": 62,
      "name": "Department of Fisheries Data Catalog",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CKAN/API",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://catalog.fisheries.go.th/",
      "host": "catalog.fisheries.go.th",
      "notes": "Fisheries open-data catalog.",
      "source_profile_url": "/data/sources/department-of-fisheries-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-livestock-development-data-services",
      "registry_position": 61,
      "name": "Department of Livestock Development data services",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "food",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "restaurant_zone",
        "destination"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Data hub/catalog where public",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://dld.go.th/",
      "host": "dld.go.th",
      "notes": "Livestock, farms, farmer, and animal-movement/registration-related public datasets where released.",
      "source_profile_url": "/data/sources/department-of-livestock-development-data-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "energy-policy-and-planning-office",
      "registry_position": 56,
      "name": "Energy Policy and Planning Office",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "fuel",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/dashboard/RSS/downloads",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Daily/monthly depending on series",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.eppo.go.th/",
      "host": "eppo.go.th",
      "notes": "Oil, gas, petroleum prices, coal/lignite, electricity, emissions, and energy statistics.",
      "source_profile_url": "/data/sources/energy-policy-and-planning-office/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-energy-open-data",
      "registry_position": 57,
      "name": "Ministry of Energy Open Data",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "food",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "restaurant_zone",
        "destination"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Portal/dashboard/downloads",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://energy.go.th/",
      "host": "energy.go.th",
      "notes": "Energy datasets and live electricity-volume information where published.",
      "source_profile_url": "/data/sources/ministry-of-energy-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "national-agricultural-big-data-center",
      "registry_position": 59,
      "name": "National Agricultural Big Data Center",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "food",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "restaurant_zone",
        "destination"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/data service",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.nabc.go.th/",
      "host": "nabc.go.th",
      "notes": "Agriculture production, prices, price/production indexes, import/export, land, and household datasets.",
      "source_profile_url": "/data/sources/national-agricultural-big-data-center/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "office-of-agricultural-economics",
      "registry_position": 58,
      "name": "Office of Agricultural Economics",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "country"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog/API/downloads",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / seasonal / annual",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.oae.go.th/",
      "host": "oae.go.th",
      "notes": "Agricultural economic indexes, crop statistics, and agriculture datasets.",
      "source_profile_url": "/data/sources/office-of-agricultural-economics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pea-and-mea-power-outage-announcements",
      "registry_position": 368,
      "name": "PEA and MEA power outage announcements",
      "domain": "Energy and agriculture",
      "category_slug": "energy-and-agriculture",
      "source_kind": "geospatial",
      "graph_class": "baselines",
      "graph_role": "Rural and commodity baseline",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "province",
        "region",
        "market",
        "boundary",
        "destination",
        "district",
        "station"
      ],
      "feeds_signals": [
        "commodity_context"
      ],
      "feeds_decisions": [
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public planned-outage announcement pages and utility app/website notices; no clean national bulk outage API verified",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Event-driven / as scheduled maintenance notices are published",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.mea.or.th/en/public-relations/power-outage-notifications",
      "host": "mea.or.th",
      "notes": "Utility-risk context for Bangkok, Nonthaburi, Samut Prakan, and provincial destinations when planned maintenance outages are announced. Treat as announcement support only; do not imply live grid status, restoration ETA, customer account status, or outage-map completeness.",
      "source_profile_url": "/data/sources/pea-and-mea-power-outage-announcements/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bangchak-oil-price-widget-and-historical-prices",
      "registry_position": 301,
      "name": "Bangchak oil price widget and historical prices",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public oil price pages, widget/iframe surfaces, historical price page, and API-like widget endpoint",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing; confirm reuse terms for automated or commercial use",
      "cadence_declared": "Every 5-15 minutes for current price monitoring; historical archive daily",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.bangchak.co.th/th/oilprice/historical",
      "host": "bangchak.co.th",
      "notes": "Bangchak current and historical retail fuel prices for brand-level Thai fuel price comparison. Treat as operator/brand reference pricing, not a guaranteed per-station price.",
      "source_profile_url": "/data/sources/bangchak-oil-price-widget-and-historical-prices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caltex-thailand-fuel-prices",
      "registry_position": 302,
      "name": "Caltex Thailand fuel prices",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public web price page and station-finder links",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing; no public bulk API verified",
      "cadence_declared": "Intraday or on brand price update; check every 15-60 minutes",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.caltex.com/th/motorists/products-and-services/fuel-prices.html",
      "host": "caltex.com",
      "notes": "Current Caltex retail fuel prices for Bangkok, Nonthaburi, Pathum Thani, and Samut Prakan. Page explicitly notes prices exclude local maintenance tax, so store price scope and tax caveat.",
      "source_profile_url": "/data/sources/caltex-thailand-fuel-prices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "doeb-fuel-sales-and-petroleum-statistics-datasets",
      "registry_position": 307,
      "name": "DOEB fuel sales and petroleum statistics datasets",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official DOEB catalog resources, CSV/XLS/XLSX/API-style downloads where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Daily, monthly, quarterly, or annual depending dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/doeb",
      "host": "data.go.th",
      "notes": "Fuel sales, usage, quality-inspection, trader, depot, and provincial volume datasets for petroleum products, LPG, NGV, and station/service branches. Use for demand and supply context, not live station inventory.",
      "source_profile_url": "/data/sources/doeb-fuel-sales-and-petroleum-statistics-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "doeb-lpg-station-licenses-and-establishments",
      "registry_position": 305,
      "name": "DOEB LPG station licenses and establishments",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official DOEB catalog resources for LPG station/business establishments and LPG storage/depot datasets",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/doeb",
      "host": "data.go.th",
      "notes": "Official LPG station and liquefied-petroleum-gas business establishment records. Use for LPG station registry and safety/licensing context, separate from petrol/diesel and NGV station records.",
      "source_profile_url": "/data/sources/doeb-lpg-station-licenses-and-establishments/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "doeb-ngv-station-license-datasets",
      "registry_position": 306,
      "name": "DOEB NGV station license datasets",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official DOEB catalog resources for NGV station license records",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/doeb",
      "host": "data.go.th",
      "notes": "NGV station license data can include license number, station type, station name, station location, area, and licensee. Use as official NGV station spine, not realtime gas quantity.",
      "source_profile_url": "/data/sources/doeb-ngv-station-license-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "doeb-oil-trader-and-fuel-station-registry",
      "registry_position": 304,
      "name": "DOEB oil trader and fuel station registry",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official data.go.th organization catalog, CKAN-style resources, CSV/XLS/XLSX, JSON/XML/Data API where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Monthly and on registry update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/doeb",
      "host": "data.go.th",
      "notes": "Department of Energy Business source for Section 11 oil-trader registration and station registry records, including registration number, trader name, station location, new/change/termination records, and official station/legal-status context.",
      "source_profile_url": "/data/sources/doeb-oil-trader-and-fuel-station-registry/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "eppo-petroleum-prices-and-api-documentation",
      "registry_position": 299,
      "name": "EPPO petroleum prices and API documentation",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public API documentation, petroleum price tables, statistics pages, and request/registration-style API surfaces",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free public where open; API use may require registration or approval",
      "cadence_declared": "Daily, weekly, monthly, and on price-structure update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://apidoc.eppo.go.th/",
      "host": "apidoc.eppo.go.th",
      "notes": "Energy Policy and Planning Office source for official petroleum prices, Bangkok retail prices, wholesale/refinery prices, Oil Fund levies, LPG/NGV price structure, exchange-rate context, and petroleum statistics. Use as national price/statistics backbone, not per-station pump price.",
      "source_profile_url": "/data/sources/eppo-petroleum-prices-and-api-documentation/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "foursquare-gas-station-poi-enrichment",
      "registry_position": 313,
      "name": "Foursquare gas station POI enrichment",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial Places API for POI metadata, categories, photos, tips, ratings, and hours where available",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial API; trial/allowance depends on account",
      "cadence_declared": "Monthly or on demand for POI enrichment",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://location.foursquare.com/products/places-api/",
      "host": "location.foursquare.com",
      "notes": "Use as commercial enrichment for gas station POI matching, categories, hours, photos, popularity, and review-style context. Not an official Thai station registry or pump-price source.",
      "source_profile_url": "/data/sources/foursquare-gas-station-poi-enrichment/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fuel-brand-station-locators-and-amenity-pages",
      "registry_position": 314,
      "name": "Fuel brand station locators and amenity pages",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public brand websites, station locators, app surfaces, and service/amenity pages",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing; reuse and automated access terms vary by brand",
      "cadence_declared": "Weekly/monthly for station amenities; intraday/on-change for brand price pages",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.pttor.com/th/oil_price",
      "host": "pttor.com",
      "notes": "PTT, Bangchak, Shell, Caltex, PT/PTG, Susco, LPG/NGV operators, and convenience/cafe sub-brands can expose station amenities, products, service centers, opening context, and station-search pages. Brand locators are siloed and should not be treated as national coverage.",
      "source_profile_url": "/data/sources/fuel-brand-station-locators-and-amenity-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fuel-now-doeb-station-fuel-availability",
      "registry_position": 308,
      "name": "Fuel Now DOEB station fuel availability",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public web app/dashboard; no clean documented public bulk API verified",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; seek permission or partner access for automated production ingestion",
      "cadence_declared": "Near real time where stations report; status can be delayed or unspecified",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://fuel-now.doeb.go.th/",
      "host": "fuel-now.doeb.go.th",
      "notes": "Department of Energy Business fuel-availability map for station status such as normal, out of stock, and unspecified, with filters by location, brand, radius, and fuel type. It is availability/status data, not a price feed.",
      "source_profile_url": "/data/sources/fuel-now-doeb-station-fuel-availability/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-fueloptions-for-gas-stations",
      "registry_position": 311,
      "name": "Google Places fuelOptions for gas stations",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places API with field-mask controlled place details and fuelOptions/fuelPrices where available",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Paid/commercial API; limited free credits may apply by account",
      "cadence_declared": "On demand; weekly for key station enrichment; open-now on user request",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places",
      "host": "developers.google.com",
      "notes": "Google Places can expose gas station fuelOptions, last-known fuelPrices, update time, opening hours, EV charge options, reviews, ratings, photos, phone, website, and operational status. Licensing and field-mask pricing are critical.",
      "source_profile_url": "/data/sources/google-places-fueloptions-for-gas-stations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "here-and-tomtom-commercial-fuel-price-apis",
      "registry_position": 315,
      "name": "HERE and TomTom commercial fuel price APIs",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial automotive/location APIs for station fuel-price products where market coverage is available",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial or restricted access; request/contract required",
      "cadence_declared": "On request; vendor-dependent refresh",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://docs.here.com/fuel-prices/docs/get-started",
      "host": "docs.here.com",
      "notes": "HERE and TomTom publish fuel-price API products for station-level fuel price and station search use cases in supported markets. Use only after confirming Thailand coverage, licensing, and redistribution terms.",
      "source_profile_url": "/data/sources/here-and-tomtom-commercial-fuel-price-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nostra-fuel-price-by-point-and-administrative-apis",
      "registry_position": 310,
      "name": "NOSTRA fuel price by point and administrative APIs",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer platform APIs for fuel price by point and fuel price by administrative area",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/freemium developer access; API key/account required",
      "cadence_declared": "On request or contract-dependent",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.nostramap.com/en/developmentplatform/",
      "host": "nostramap.com",
      "notes": "NOSTRA developer platform lists fuel price by coordinate and by administrative area. Useful for location-based station/brand price lookup, but treat as commercial enrichment rather than open canonical data.",
      "source_profile_url": "/data/sources/nostra-fuel-price-by-point-and-administrative-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-fuel-station-pois",
      "registry_position": 312,
      "name": "OpenStreetMap Thailand fuel station POIs",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and extracts using amenity=fuel and fuel:* tags",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly nationally; daily/weekly for high-traffic corridors",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:amenity=fuel",
      "host": "wiki.openstreetmap.org",
      "notes": "Crowdsourced station geography for amenity=fuel, brand, operator, opening_hours, fuel:diesel, fuel:lpg, fuel:cng, fuel:e20/e85, payment, toilets, convenience shop, phone, website, and station polygons. Coverage is uneven and prices are not reliable.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-fuel-station-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ptt-ngv-station-finder-and-gas-quantity-status",
      "registry_position": 309,
      "name": "PTT NGV station finder and gas quantity status",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public NGV station search web app; no clean public bulk API verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; partner/permission needed for production realtime ingestion",
      "cadence_declared": "On request for station search and gas-quantity status; 5-30 minutes if authorized",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://pttngv.pttplc.com/ngvstation/",
      "host": "pttngv.pttplc.com",
      "notes": "PTT NGV station finder supports station search by name, region, province, district, near-me location, and gas quantity/status. Keep separate from DOEB NGV license records and petrol/diesel pricing.",
      "source_profile_url": "/data/sources/ptt-ngv-station-finder-and-gas-quantity-status/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ptt-or-oilprice-soap-service",
      "registry_position": 300,
      "name": "PTT OR OilPrice SOAP service",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public SOAP web service with current and historical oil price operations",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public endpoint; confirm production terms/SLA before commercial dependency",
      "cadence_declared": "Every 5-15 minutes for current price monitoring; daily for archive",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://orapiweb.pttor.com/oilservice/OilPrice.asmx",
      "host": "orapiweb.pttor.com",
      "notes": "PTT OR SOAP operations include CurrentOilPrice, CurrentOilPriceProvincial, GetOilPrice, and GetOilPriceProvincial. Best public operator-level Thailand fuel price API, but SOAP/XML rather than JSON REST.",
      "source_profile_url": "/data/sources/ptt-or-oilprice-soap-service/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "shell-thailand-fuel-prices",
      "registry_position": 303,
      "name": "Shell Thailand fuel prices",
      "domain": "Fuel, gas stations, and energy prices",
      "category_slug": "fuel-gas-stations-and-energy-prices",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Road-trip utility layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "fuel_station",
        "route",
        "destination"
      ],
      "feeds_signals": [
        "fuel_price_context",
        "fuel_availability_context",
        "movement_friction"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "road_trip_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public web fuel price page and station/service pages",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing; no public bulk API verified",
      "cadence_declared": "Intraday or on brand price update; check every 15-60 minutes",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.shell.co.th/th_th/motorists/shell-fuels/fuel-price/app-fuel-prices.html",
      "host": "shell.co.th",
      "notes": "Shell Thailand current fuel price page with product-level price context and effective-date caveats. Use as brand-level price evidence, not a universal national or per-station feed.",
      "source_profile_url": "/data/sources/shell-thailand-fuel-prices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "copernicus-marine-ocean-color",
      "registry_position": 358,
      "name": "Copernicus Marine ocean color",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Product documentation and data portal for high-resolution ocean-colour products such as chlorophyll, turbidity, and suspended matter",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free registration for many data products; commercial or reuse terms depend on service rules",
      "cadence_declared": "Daily / near real time depending product family",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://help.marine.copernicus.eu/en/articles/5194057-introduction-to-ocean-colour-sentinel-2-high-resolution-products",
      "host": "help.marine.copernicus.eu",
      "notes": "Global and coastal ocean-colour products useful for turbidity, suspended matter, and chlorophyll proxies around Thailand. Satellite proxies support water-quality interpretation but do not prove microbiological safety.",
      "source_profile_url": "/data/sources/copernicus-marine-ocean-color/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dnp-wildfire-data",
      "registry_position": 204,
      "name": "DNP wildfire data",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "safety",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public geospatial dashboard and hotspot layers",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Daily to near real time during wildfire season",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://dnp.gistda.or.th/",
      "host": "dnp.gistda.or.th",
      "notes": "Department of National Parks wildfire and hotspot geospatial layer with fire-related overlays and protected-area wildfire context. Useful for smoke, forest-fire, and conservation-area safety overlays.",
      "source_profile_url": "/data/sources/dnp-wildfire-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "geofabrik-thailand-osm-extract",
      "registry_position": 35,
      "name": "Geofabrik Thailand OSM Extract",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "PBF/SHP",
      "access_modes": [
        "geo"
      ],
      "access_mode_labels": [
        "Geo layers"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Daily",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://download.geofabrik.de/asia/thailand.html",
      "host": "download.geofabrik.de",
      "notes": "OpenStreetMap extract for Thailand.",
      "source_profile_url": "/data/sources/geofabrik-thailand-osm-extract/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gistda-ocean-color",
      "registry_position": 357,
      "name": "GISTDA ocean color",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Marine GI portal, daily service pages, maps, and satellite-derived marine analysis products",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public portal access",
      "cadence_declared": "Daily to near daily depending product",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://ocean.gistda.or.th/",
      "host": "ocean.gistda.or.th",
      "notes": "Satellite proxy layer for chlorophyll-a, sea-surface temperature, and marine-condition monitoring. Useful for bloom, sediment, and coastal-condition context, but not a substitute for bacteria sampling.",
      "source_profile_url": "/data/sources/gistda-ocean-color/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gistda-open-data",
      "registry_position": 12,
      "name": "GISTDA Open Data",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog, API, WMS, satellite/geospatial files",
      "access_modes": [
        "api",
        "geo",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://opendata.gistda.or.th/",
      "host": "opendata.gistda.or.th",
      "notes": "Thailand geospatial and satellite data catalog.",
      "source_profile_url": "/data/sources/gistda-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-earth-engine-public-catalog",
      "registry_position": 258,
      "name": "Google Earth Engine public catalog",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Earth Engine API",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": true,
      "free_tier": "Free for eligible noncommercial/research use",
      "cadence_declared": "Varies; many datasets update daily",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://developers.google.com/earth-engine/datasets",
      "host": "developers.google.com",
      "notes": "Satellite and geoscience datasets filterable to Thailand.",
      "source_profile_url": "/data/sources/google-earth-engine-public-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "land-development-department-soil-layers",
      "registry_position": 261,
      "name": "Land Development Department soil layers",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "SHP/downloads/catalog where open",
      "access_modes": [
        "geo",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.ldd.go.th/",
      "host": "ldd.go.th",
      "notes": "Soil series and land-resource maps.",
      "source_profile_url": "/data/sources/land-development-department-soil-layers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "national-spatial-data-infrastructure-thai-sdi",
      "registry_position": 242,
      "name": "National Spatial Data Infrastructure / Thai SDI",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OGC services such as WMS/WFS/WCS/WPS",
      "access_modes": [
        "geo"
      ],
      "access_mode_labels": [
        "Geo layers"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://nsdi.go.th/",
      "host": "nsdi.go.th",
      "notes": "National spatial-data infrastructure and OGC geospatial services.",
      "source_profile_url": "/data/sources/national-spatial-data-infrastructure-thai-sdi/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nso-gis",
      "registry_position": 42,
      "name": "NSO GIS",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "GeoJSON/CSV/dashboard",
      "access_modes": [
        "api",
        "geo",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where exposed",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://nsogis.nso.go.th/",
      "host": "nsogis.nso.go.th",
      "notes": "Statistical geospatial layers and visualizations.",
      "source_profile_url": "/data/sources/nso-gis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "onep-gis-environmental-layers",
      "registry_position": 243,
      "name": "ONEP GIS / environmental layers",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "WMS/downloads where open",
      "access_modes": [
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.onep.go.th/",
      "host": "onep.go.th",
      "notes": "Environmental layers including conservation sites, waterbirds, urban green space, watershed quality, and related datasets.",
      "source_profile_url": "/data/sources/onep-gis-environmental-layers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-development-thailand-mekong",
      "registry_position": 255,
      "name": "Open Development Thailand / Mekong",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "SHP, GeoJSON, PDF, downloads",
      "access_modes": [
        "api",
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://thailand.opendevelopmentmekong.net/",
      "host": "thailand.opendevelopmentmekong.net",
      "notes": "Boundaries, protected areas, laws, environment, and regional open-data mirrors.",
      "source_profile_url": "/data/sources/open-development-thailand-mekong/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand",
      "registry_position": 36,
      "name": "OpenStreetMap Thailand",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM API/bulk via mirrors",
      "access_modes": [
        "api",
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public under ODbL",
      "cadence_declared": "Continuous",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.openstreetmap.org/",
      "host": "openstreetmap.org",
      "notes": "Roads, buildings, POIs, land use, and map features.",
      "source_profile_url": "/data/sources/openstreetmap-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "osm-noise-barriers",
      "registry_position": 254,
      "name": "OSM noise barriers",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "noise",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary",
        "noise_station",
        "hotel_area"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OpenStreetMap Overpass API and ODbL geospatial data",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public with ODbL terms",
      "cadence_declared": "Current community-edited data",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Geospatial noise-mitigation and modeling layer for wall=noise_barrier and related barrier geometry near roads, rail lines, airports, and settlements.",
      "source_profile_url": "/data/sources/osm-noise-barriers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "osm-noise-monitoring-stations",
      "registry_position": 253,
      "name": "OSM noise monitoring stations",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "noise",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary",
        "noise_station",
        "hotel_area"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OpenStreetMap Overpass API and ODbL geospatial data",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public with ODbL terms",
      "cadence_declared": "Current community-edited data",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Geospatial enrichment for man_made=monitoring_station with monitoring:noise tagging, useful for mapping public or private noise-monitoring locations and nearby source context.",
      "source_profile_url": "/data/sources/osm-noise-monitoring-stations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "osm-thailand-emergency-poi",
      "registry_position": 207,
      "name": "OSM Thailand emergency POI",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "safety",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly nationally; daily or weekly for high-use areas",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Crowdsourced geospatial enrichment for police stations, fire stations, ambulance stations, rescue stations, AEDs, and other emergency-related POIs. Useful for map context, not official operational status.",
      "source_profile_url": "/data/sources/osm-thailand-emergency-poi/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "protected-planet-wdpa-thailand",
      "registry_position": 256,
      "name": "Protected Planet / WDPA Thailand",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "geospatial",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/SHP/downloads",
      "access_modes": [
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public with terms",
      "cadence_declared": "Regular",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.protectedplanet.net/",
      "host": "protectedplanet.net",
      "notes": "Canonical global protected-area and OECM data filterable to Thailand.",
      "source_profile_url": "/data/sources/protected-planet-wdpa-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-forest-department-data-catalog",
      "registry_position": 241,
      "name": "Royal Forest Department Data Catalog",
      "domain": "Geospatial and satellite",
      "category_slug": "geospatial-and-satellite",
      "source_kind": "catalog",
      "graph_class": "entities",
      "graph_role": "Location backbone",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "district",
        "station",
        "pier",
        "route",
        "boundary",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "geometry_confidence",
        "coverage_confidence"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "where_to_stay"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API where enabled",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.forest.go.th/",
      "host": "forest.go.th",
      "notes": "Forest-related datasets.",
      "source_profile_url": "/data/sources/royal-forest-department-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "adb-data-library-key-indicators",
      "registry_position": 269,
      "name": "ADB Data Library / Key Indicators",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/SDMX/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.adb.org/",
      "host": "data.adb.org",
      "notes": "Thailand economy, population, labour, energy, finance, trade, and debt indicators.",
      "source_profile_url": "/data/sources/adb-data-library-key-indicators/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "faostat",
      "registry_position": 271,
      "name": "FAOSTAT",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "tourism",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.fao.org/faostat/",
      "host": "fao.org",
      "notes": "Food and agriculture data filterable to Thailand.",
      "source_profile_url": "/data/sources/faostat/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "hdx-thailand",
      "registry_position": 13,
      "name": "HDX Thailand",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "geospatial",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "boundary",
        "district",
        "station"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API, CSV, GeoJSON, SHP",
      "access_modes": [
        "api",
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Varies by dataset",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.humdata.org/group/tha",
      "host": "data.humdata.org",
      "notes": "Humanitarian, boundary, crisis-response, population, and aid datasets.",
      "source_profile_url": "/data/sources/hdx-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "iati-aid-activity-data",
      "registry_position": 275,
      "name": "IATI aid activity data",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "XML/API/bulk",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Publisher-dependent",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://iatistandard.org/",
      "host": "iatistandard.org",
      "notes": "Aid activities in Thailand through IATI publishers and mirrors.",
      "source_profile_url": "/data/sources/iati-aid-activity-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ilostat-thailand",
      "registry_position": 272,
      "name": "ILOSTAT Thailand",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API, CSV, XLS",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://ilostat.ilo.org/",
      "host": "ilostat.ilo.org",
      "notes": "Labour-market statistics and Thailand country profile.",
      "source_profile_url": "/data/sources/ilostat-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "imf-data-api",
      "registry_position": 268,
      "name": "IMF Data API",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.imf.org/",
      "host": "data.imf.org",
      "notes": "Macro, fiscal, financial, BoP, inflation, and trade data filterable to Thailand.",
      "source_profile_url": "/data/sources/imf-data-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "reliefweb-api-thailand",
      "registry_position": 274,
      "name": "ReliefWeb API Thailand",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Real time as content is added",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://reliefweb.int/help/api",
      "host": "reliefweb.int",
      "notes": "Humanitarian reports, disasters, jobs, and updates filterable to Thailand.",
      "source_profile_url": "/data/sources/reliefweb-api-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "un-comtrade",
      "registry_position": 270,
      "name": "UN Comtrade",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free registration/API quota",
      "cadence_declared": "Monthly / annual",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://comtradeplus.un.org/",
      "host": "comtradeplus.un.org",
      "notes": "Official country trade data filterable to Thailand.",
      "source_profile_url": "/data/sources/un-comtrade/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "unodc-crime-and-homicide-statistics",
      "registry_position": 267,
      "name": "UNODC crime and homicide statistics",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public data portal and downloadable statistical views",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Annual or periodic statistical releases",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.unodc.org/",
      "host": "data.unodc.org",
      "notes": "United Nations Office on Drugs and Crime data portal for homicide, crime, criminal-justice, prison, and violence baselines. Useful for Thailand international comparison and long-run homicide context, not local realtime incident monitoring.",
      "source_profile_url": "/data/sources/unodc-crime-and-homicide-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "who-global-health-observatory",
      "registry_position": 273,
      "name": "WHO Global Health Observatory",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "OData/API/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.who.int/data/gho",
      "host": "who.int",
      "notes": "Health indicators, mortality, life expectancy, and health expenditure filterable to Thailand.",
      "source_profile_url": "/data/sources/who-global-health-observatory/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "world-bank-data-api-thailand",
      "registry_position": 266,
      "name": "World Bank Data API Thailand",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://api.worldbank.org/v2/country/THA",
      "host": "api.worldbank.org",
      "notes": "Country indicators for Thailand across World Bank datasets.",
      "source_profile_url": "/data/sources/world-bank-data-api-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "worldpop-thailand",
      "registry_position": 257,
      "name": "WorldPop Thailand",
      "domain": "Humanitarian and international baselines",
      "category_slug": "humanitarian-and-international-baselines",
      "source_kind": "geospatial",
      "graph_class": "baselines",
      "graph_role": "Global comparison layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "boundary",
        "district",
        "station"
      ],
      "feeds_signals": [
        "global_context",
        "conflict_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "STAC/GeoTIFF/downloads",
      "access_modes": [
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://hub.worldpop.org/",
      "host": "hub.worldpop.org",
      "notes": "High-resolution population grids and density data for Thailand.",
      "source_profile_url": "/data/sources/worldpop-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "administrative-court-offices-and-contact-pages",
      "registry_position": 95,
      "name": "Administrative Court offices and contact pages",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "complaint",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official website/contact pages and public location resources where exposed",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.admincourt.go.th/office",
      "host": "admincourt.go.th",
      "notes": "Central and regional Administrative Court contact, address, hotline, and administrative-dispute function context. Use for disputes with state agencies or administrative orders, not ordinary civil/criminal court routing.",
      "source_profile_url": "/data/sources/administrative-court-offices-and-contact-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "cifs-master-data-of-justice-apis",
      "registry_position": 111,
      "name": "CIFS Master Data of Justice APIs",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CIFS open-data/API resources",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.cifs.go.th/en/dataset/cifs_0604_001",
      "host": "opendata.cifs.go.th",
      "notes": "Central Institute of Forensic Science Master Data of Justice resources, including justice master fields and public API resources such as missing-person report office data where exposed.",
      "source_profile_url": "/data/sources/cifs-master-data-of-justice-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "courts-of-justice-court-address-dataset",
      "registry_position": 93,
      "name": "Courts of Justice court-address dataset",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "COJ data catalog, XLS resource, catalog API metadata where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resource",
      "cadence_declared": "Weekly or monthly change detection",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.coj.go.th/th/dataset/coj-division-address",
      "host": "opendata.coj.go.th",
      "notes": "Official Court of Justice address, phone, and email dataset for 277 court units. Use as the ordinary-court location/contact spine; working hours and service rules still need court/service-page enrichment.",
      "source_profile_url": "/data/sources/courts-of-justice-court-address-dataset/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "courts-of-justice-website-directory-and-jurisdiction-resources",
      "registry_position": 94,
      "name": "Courts of Justice website directory and jurisdiction resources",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official website directory, jurisdiction PDFs/search surfaces",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website resources",
      "cadence_declared": "Weekly for directory; daily or weekly for jurisdiction routing checks",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.coj.go.th/th/content/category/detail/id/6/iid/121186true",
      "host": "coj.go.th",
      "notes": "Court website links and jurisdiction-routing context. Use with the COJ address dataset to decide which court covers a province, district, case type, or filing route.",
      "source_profile_url": "/data/sources/courts-of-justice-website-directory-and-jurisdiction-resources/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-corrections-prison-and-correctional-facility-locations",
      "registry_position": 108,
      "name": "Department of Corrections prison and correctional facility locations",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Catalog, XLSX/CSV, catalog API metadata where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resource",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/dataset/gdpublish-gis-correct-01",
      "host": "gdcatalog.go.th",
      "notes": "Correctional facility and prison location/contact dataset. Use for prison/legal-visit context, correctional service points, and justice-service access, but keep visit hours and eligibility facility-specific.",
      "source_profile_url": "/data/sources/department-of-corrections-prison-and-correctional-facility-locations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-lands-office-locations-and-office-hours",
      "registry_position": 106,
      "name": "Department of Lands office locations and office hours",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official office-location pages, office-hours pages, Info.go service pages",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free public pages; parcel/title APIs are permissioned and not treated as open public feeds",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://classic.dol.go.th/Pages/Office_location.aspx",
      "host": "classic.dol.go.th",
      "notes": "Land office names, locations, contacts, office hours, and service context for land transfer, mortgage, title/legal-act registration, inheritance registration, and condominium/legal property services.",
      "source_profile_url": "/data/sources/department-of-lands-office-locations-and-office-hours/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-probation-office-pages",
      "registry_position": 110,
      "name": "Department of Probation office pages",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official website and provincial office pages",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public pages",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://probation.go.th/main",
      "host": "probation.go.th",
      "notes": "Probation office addresses, phone numbers, provincial pages, and probation-service context. No clean nationwide public office-location API was verified; use official pages and province pages for office enrichment.",
      "source_profile_url": "/data/sources/department-of-probation-office-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "djop-juvenile-justice-contact-channel-dataset",
      "registry_position": 109,
      "name": "DJOP juvenile justice contact-channel dataset",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "rail",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "station",
        "route"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DJOP data catalog, XLSX contact-channel dataset",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resource",
      "cadence_declared": "Monthly or when units notify changes",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://djop.gdcatalog.go.th/organization/djop",
      "host": "djop.gdcatalog.go.th",
      "notes": "Department of Juvenile Observation and Protection contact channels for central and regional units, juvenile observation centers, training centers, and youth/family justice processes.",
      "source_profile_url": "/data/sources/djop-juvenile-justice-contact-channel-dataset/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dopa-government-place-and-district-office-datasets",
      "registry_position": 107,
      "name": "DOPA government-place and district-office datasets",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government catalog, JSON/XLS/geospatial resources where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public/open catalog resources where published; civil-registration/person APIs are restricted",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/",
      "host": "gdcatalog.go.th",
      "notes": "District-office and government-place geospatial/admin datasets useful for civil-registration access, ID/house-registration/marriage-divorce services, and official province/district/subdistrict reconciliation.",
      "source_profile_url": "/data/sources/dopa-government-place-and-district-office-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gdc-police-station-datasets",
      "registry_position": 100,
      "name": "GDC police-station datasets",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Catalog and provincial CKAN datasets with CSV/XLSX/API-style resources where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Monthly or quarterly depending province and dataset owner",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/dataset/gdpublish-police4",
      "host": "gdcatalog.go.th",
      "notes": "Provincial and national catalog surfaces for police-station counts, names, coordinates, addresses, phones, and jurisdiction context. Coverage and schema vary by province, so harmonization is required.",
      "source_profile_url": "/data/sources/gdc-police-station-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "info-go-legal-service-procedure-pages",
      "registry_position": 103,
      "name": "Info.go legal-service procedure pages",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public service pages, procedure pages, service-point pages, PDF exports",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://info.go.th/",
      "host": "info.go.th",
      "notes": "Best public layer for function, who can use a service, eligibility, documents, fees, processing time, service channels, and common office hours. Use for legal aid, mediation, land-office services, compensation, and other public legal procedures.",
      "source_profile_url": "/data/sources/info-go-legal-service-procedure-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "lawyers-council-of-thailand-consultation-channels",
      "registry_position": 112,
      "name": "Lawyers Council of Thailand consultation channels",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "complaint",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public website/contact pages and consultation hotline information",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.lawyerscouncil.or.th/",
      "host": "lawyerscouncil.or.th",
      "notes": "Professional-body and public legal-consultation context, including central office and hotline references. No complete public API for every licensed lawyer office location was verified.",
      "source_profile_url": "/data/sources/lawyers-council-of-thailand-consultation-channels/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "legal-execution-department-office-location-and-auction-datasets",
      "registry_position": 105,
      "name": "Legal Execution Department office-location and auction datasets",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "LED open-data catalog, CSV/downloads, agency pages",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources",
      "cadence_declared": "Weekly or monthly for offices; daily or weekly for auction/event use cases",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://opendata.led.go.th/",
      "host": "opendata.led.go.th",
      "notes": "Legal Execution Department office/unit locations and contact context for civil execution, bankruptcy execution, auctions, asset seizure/sale, creditors, debtors, litigants, and bidders.",
      "source_profile_url": "/data/sources/legal-execution-department-office-location-and-auction-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "office-of-the-attorney-general-legal-aid-and-prosecutor-offices",
      "registry_position": 96,
      "name": "Office of the Attorney General legal aid and prosecutor offices",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "complaint",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public pages, regional/provincial office pages, hotline/service pages",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www3.ago.go.th/center/lawaid/",
      "host": "www3.ago.go.th",
      "notes": "Prosecutor and legal-aid context including public legal-consultation channels, central call center, and regional/provincial prosecutor-office pages. No clean nationwide public office-location API was verified.",
      "source_profile_url": "/data/sources/office-of-the-attorney-general-legal-aid-and-prosecutor-offices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-legal-service-companies",
      "registry_position": 114,
      "name": "Open DBD legal-service companies",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public company search/download/API-style surfaces where available",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public where published; some DBD/GDX APIs can be restricted",
      "cadence_declared": "Monthly or periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datawarehouse.dbd.go.th/",
      "host": "datawarehouse.dbd.go.th",
      "notes": "Private law-firm and legal-service company discovery using juristic-person records and legal-activities classifications such as TSIC 69100. Company registration is not the same as licensed lawyer verification.",
      "source_profile_url": "/data/sources/open-dbd-legal-service-companies/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-legal-offices",
      "registry_position": 113,
      "name": "OpenStreetMap Thailand legal offices",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly for national index; daily or weekly for high-use areas",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Crowdsourced enrichment for courts, police stations, government offices, prison/correctional places, office=lawyer, office=notary, names, addresses, coordinates, opening_hours, contact tags, and nearby access.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-legal-offices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "police-online-open-data",
      "registry_position": 99,
      "name": "Police Online Open Data",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN-style data catalog, API docs, and XLSX-heavy downloadable resources",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly depending dataset publication",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.thaipoliceonline.go.th/en/",
      "host": "opendata.thaipoliceonline.go.th",
      "notes": "Police Data Catalog with cybercrime and online-crime statistics such as case counts, victims, age, sex, occupation, unit, and damage value. Strong for public cybercrime statistics, not a complete national incident or dispatch feed.",
      "source_profile_url": "/data/sources/police-online-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "rights-and-liberties-protection-department-mediation-and-rights-services",
      "registry_position": 104,
      "name": "Rights and Liberties Protection Department mediation and rights services",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "legal",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official pages, eMediation/service-point pages, Info.go procedure pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.rlpd.go.th/",
      "host": "rlpd.go.th",
      "notes": "RLPD mediation, rights protection, victim/defendant compensation, legal advice, and service-point context. Useful for public legal help and mediation centers, with service hours and eligibility usually coming from Info.go.",
      "source_profile_url": "/data/sources/rights-and-liberties-protection-department-mediation-and-rights-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-thai-police-open-data",
      "registry_position": 98,
      "name": "Royal Thai Police open data",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "complaint",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public disclosure and citizen-service pages",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly for disclosure updates; emergency channels are operational",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.royalthaipolice.go.th/ita.php",
      "host": "royalthaipolice.go.th",
      "notes": "Royal Thai Police public disclosure, citizen-service, station-directory, complaint, hotline, and integrity-transparency layer. Useful as the national police public-service and disclosure backbone, not a live incident feed.",
      "source_profile_url": "/data/sources/royal-thai-police-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-thai-police-station-directory-and-provincial-datasets",
      "registry_position": 97,
      "name": "Royal Thai Police station directory and provincial datasets",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "safety",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "route",
        "hospital"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official station directory plus provincial GDC/CKAN datasets where exposed",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly or quarterly for station master; emergency channels are operational",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.royalthaipolice.go.th/station.php",
      "host": "royalthaipolice.go.th",
      "notes": "Police station names, district/subdistrict, address, coordinates, and emergency contact fields where provincial datasets expose Data API/JSON/CSV resources. Use as public legal incident and crime-reporting access points.",
      "source_profile_url": "/data/sources/royal-thai-police-station-directory-and-provincial-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tourist-police-bureau",
      "registry_position": 101,
      "name": "Tourist Police Bureau",
      "domain": "Justice and legal access",
      "category_slug": "justice-and-legal-access",
      "source_kind": "complaint",
      "graph_class": "entities",
      "graph_role": "Public-service and safety support layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "police_station",
        "legal_office",
        "court",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "safety_support",
        "service_access"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public website, station pages, hotline, and advisories",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public",
      "cadence_declared": "Daily or weekly for advisories and station-page checks",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.touristpolice.go.th/en/main",
      "host": "touristpolice.go.th",
      "notes": "Official tourist-police public layer for hotline 1155, station contacts, multilingual assistance context, tourist advisories, and public help channels. Operational incident and dispatch data remain private.",
      "source_profile_url": "/data/sources/tourist-police-bureau/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-disease-control-open-data",
      "registry_position": 236,
      "name": "Department of Disease Control Open Data",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog/downloads/API where open",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://ddc.moph.go.th/",
      "host": "ddc.moph.go.th",
      "notes": "Disease and health-hazard surveillance, screening, communicable/non-communicable disease datasets.",
      "source_profile_url": "/data/sources/department-of-disease-control-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-health-drinking-water-standards",
      "registry_position": 363,
      "name": "Department of Health drinking water standards",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "water",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "water_station",
        "river",
        "beach"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public laboratory criteria and standard tables for drinking-water quality",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "On standard or laboratory-method update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://phld.anamai.moph.go.th/en/water-quality-standards",
      "host": "phld.anamai.moph.go.th",
      "notes": "Best public standards reference for potable-water parameter thresholds such as pH, turbidity, TDS, chloride, nitrate, coliform, and metals. It is a standards layer, not a live monitoring feed.",
      "source_profile_url": "/data/sources/department-of-health-drinking-water-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-health-food-sanitation-and-san-standards",
      "registry_position": 365,
      "name": "Department of Health food sanitation and SAN standards",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "tourism",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public Department of Health food-sanitation pages and downloadable Clean Food Good Taste / SAN resources",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public web and download access where published",
      "cadence_declared": "Annual / campaign or standards update depending resource",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://foodsan.anamai.moph.go.th/en/food-sanitation/204385",
      "host": "foodsan.anamai.moph.go.th",
      "notes": "Official food-sanitation context for restaurant and food-establishment hygiene standards such as Clean Food Good Taste, CFGT Plus, SAN, and SAN Plus. Use as food-hygiene confidence where coverage is usable; do not treat it as current opening hours, menus, reviews, or live inspection status.",
      "source_profile_url": "/data/sources/department-of-health-food-sanitation-and-san-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fda-bottled-water-standards",
      "registry_position": 362,
      "name": "FDA bottled water standards",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "finance",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "country",
        "province",
        "market"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official food-law page for drinking water in sealed containers and related Ministry of Public Health notices",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "On legal or regulatory update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://food.fda.moph.go.th/food-law/f2-drinking-water/",
      "host": "food.fda.moph.go.th",
      "notes": "Official bottled-water law and standards layer for sealed drinking-water products. Use it for product-standard and compliance context, not for municipal tap-water or river quality.",
      "source_profile_url": "/data/sources/fda-bottled-water-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "hss-health-establishment-directory",
      "registry_position": 234,
      "name": "HSS Health Establishment Directory",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "water",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "water_station",
        "river",
        "beach"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "hospital",
        "school",
        "destination",
        "district",
        "water_station",
        "river",
        "beach"
      ],
      "observation_scope": [
        "spa_license_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "hss-spa-license-support",
          "name": "HSS spa-license support",
          "kind": "entity-observation",
          "cadence": "Weekly / monthly public support-surface refresh"
        }
      ],
      "current_signal_types": [
        "spa_license_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public directory and search surface; API terms and bulk access need confirmation",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public web search",
      "cadence_declared": "Operational / registry updates as published",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://esta.hss.moph.go.th/",
      "host": "esta.hss.moph.go.th",
      "notes": "Department of Health Service Support directory for licensed health establishments, including spa, massage, and related wellness businesses. Useful for license-confidence checks, not quality ranking or live appointment truth.",
      "source_profile_url": "/data/sources/hss-health-establishment-directory/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "hss-spa-premium",
      "registry_position": 235,
      "name": "HSS Spa Premium",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "water",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "water_station",
        "river",
        "beach"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "hospital",
        "school",
        "destination",
        "district",
        "water_station",
        "river",
        "beach"
      ],
      "observation_scope": [
        "spa_license_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "hss-spa-license-support",
          "name": "HSS spa-license support",
          "kind": "entity-observation",
          "cadence": "Weekly / monthly public support-surface refresh"
        }
      ],
      "current_signal_types": [
        "spa_license_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public award and directory surface",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Periodic / award cycle updates",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://premium-award.hss.moph.go.th/",
      "host": "premium-award.hss.moph.go.th",
      "notes": "Health Service Support premium-award surface for spa and wellness recognition context. Use as regulated-confidence enrichment rather than a direct quality or current-availability feed.",
      "source_profile_url": "/data/sources/hss-spa-premium/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "labour-workplace-noise-standards",
      "registry_position": 252,
      "name": "Labour workplace noise standards",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official PDF manual and e-service reporting guidance",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On legal or reporting guidance change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://eservice.labour.go.th/documents/form-doc/manual/%E0%B8%A3%E0%B8%AA%E0%B8%AA123.pdf",
      "host": "eservice.labour.go.th",
      "notes": "Department of Labour Protection and Welfare workplace-environment reporting guidance covering measured heat, lighting, and noise conditions, with occupational-noise monitoring and reporting context for establishments.",
      "source_profile_url": "/data/sources/labour-workplace-noise-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mhesi-open-data",
      "registry_position": 239,
      "name": "MHESI Open Data",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CKAN/API/visualization",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.mhesi.go.th/",
      "host": "data.mhesi.go.th",
      "notes": "Higher education, science, research, and innovation datasets.",
      "source_profile_url": "/data/sources/mhesi-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-labour-data-portal",
      "registry_position": 231,
      "name": "Ministry of Labour data portal",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/portal where open",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.mol.go.th/",
      "host": "mol.go.th",
      "notes": "Labour datasets and analytics portal resources.",
      "source_profile_url": "/data/sources/ministry-of-labour-data-portal/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-public-health-data-catalog",
      "registry_position": 232,
      "name": "Ministry of Public Health Data Catalog",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/CSV/API where public",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://data.moph.go.th/",
      "host": "data.moph.go.th",
      "notes": "Public-health datasets; excludes auth-only operational HDC APIs.",
      "source_profile_url": "/data/sources/ministry-of-public-health-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "moph-health-facility-datasets",
      "registry_position": 233,
      "name": "MOPH Health Facility Datasets",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "tourism",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "hospital",
        "school",
        "destination",
        "district",
        "hotel_area",
        "attraction",
        "route"
      ],
      "observation_scope": [
        "medical_fallback_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "moph-health-facility-support",
          "name": "MOPH health-facility support",
          "kind": "entity-observation",
          "cadence": "Weekly / monthly public support-surface refresh"
        }
      ],
      "current_signal_types": [
        "medical_fallback_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public dataset pages, CSV/JSON/API-style resources where exposed, and linked MOPH/HSS facility surfaces",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly or periodic depending on facility and service-unit dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.go.th/dataset/hospital",
      "host": "data.go.th",
      "notes": "Public-health facility, hospital, clinic, and service-unit datasets useful for traveler fallback and emergency-support context. Treat as official facility-presence support, not live bed, queue, or emergency-capacity truth.",
      "source_profile_url": "/data/sources/moph-health-facility-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "national-health-security-office-apis",
      "registry_position": 237,
      "name": "National Health Security Office APIs",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "finance",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "country",
        "province",
        "market"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API where public",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free public or registration depending on endpoint",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.nhso.go.th/",
      "host": "nhso.go.th",
      "notes": "NHSO service/API integration; include only public/free endpoints.",
      "source_profile_url": "/data/sources/national-health-security-office-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "niems-1669-items",
      "registry_position": 201,
      "name": "NIEMS 1669 ITEMS",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "complaint",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public portal with operational systems, manuals, and service pages; dispatch systems themselves are role-gated",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public portal access; operational modules require authorization",
      "cadence_declared": "Monthly or quarterly for public reports; operational systems are live internally",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www2.niems.go.th/",
      "host": "www2.niems.go.th",
      "notes": "National Institute for Emergency Medicine public layer covering hotline 1669, ITEMS 4.0, EMS data-warehouse references, ambulance standards, and emergency-medical operations context. Live patient dispatch data is restricted.",
      "source_profile_url": "/data/sources/niems-1669-items/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "office-of-the-education-council-open-data",
      "registry_position": 240,
      "name": "Office of the Education Council Open Data",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/CKAN/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.onec.go.th/",
      "host": "onec.go.th",
      "notes": "Education council statistics and reports.",
      "source_profile_url": "/data/sources/office-of-the-education-council-open-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "social-security-office-data-catalog",
      "registry_position": 230,
      "name": "Social Security Office Data Catalog",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API, CSV, PDF",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.sso.go.th/",
      "host": "sso.go.th",
      "notes": "Social-security statistics and administrative datasets.",
      "source_profile_url": "/data/sources/social-security-office-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-fda-data-catalog",
      "registry_position": 238,
      "name": "Thai FDA Data Catalog",
      "domain": "Labour, health, and education",
      "category_slug": "labour-health-and-education",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Long-stay and public-service layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "hospital",
        "school",
        "destination",
        "district",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "health_support",
        "service_support",
        "medical_fallback_support",
        "spa_license_support"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/XLSX/API where enabled",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.fda.moph.go.th/",
      "host": "fda.moph.go.th",
      "notes": "Drug, legal, product, health-product, hazardous-substance, and AMR datasets.",
      "source_profile_url": "/data/sources/thai-fda-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "treasury-department-land-valuation",
      "registry_position": 55,
      "name": "Treasury Department land valuation",
      "domain": "Land and property",
      "category_slug": "land-and-property",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Place value and long-stay layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "district",
        "subdistrict",
        "destination",
        "hotel_area",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "land_value_context",
        "area_context"
      ],
      "feeds_decisions": [
        "where_to_stay",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog/DataStore/search/downloads",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.treasury.go.th/",
      "host": "treasury.go.th",
      "notes": "Land appraisal values and property-valuation resources.",
      "source_profile_url": "/data/sources/treasury-department-land-valuation/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "acled-thailand",
      "registry_position": 34,
      "name": "ACLED Thailand",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "tourism",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API/export",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free registration for many uses",
      "cadence_declared": "Regular",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://acleddata.com/",
      "host": "acleddata.com",
      "notes": "Political violence, demonstrations, protest, and conflict-event data.",
      "source_profile_url": "/data/sources/acled-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bma-fire-station-data",
      "registry_position": 208,
      "name": "BMA fire station data",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "safety",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination",
        "route",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Bangkok open-data dataset with CSV resource, map view, and table view",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On dataset refresh; verify monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.bangkok.go.th/dataset/firestations",
      "host": "data.bangkok.go.th",
      "notes": "Bangkok Metropolitan Administration fire-station and substation location dataset for Bangkok fire and rescue access context. Useful for station master, district coverage, and city emergency-access mapping, not live dispatch or readiness.",
      "source_profile_url": "/data/sources/bma-fire-station-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "elect-election-data",
      "registry_position": 265,
      "name": "ELECT election data",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "GitHub/downloads/site datasets where public",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Election/project-dependent",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://elect.in.th/",
      "host": "elect.in.th",
      "notes": "Election-related tools and datasets.",
      "source_profile_url": "/data/sources/elect-election-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ipu-parline-thailand",
      "registry_position": 264,
      "name": "IPU Parline Thailand",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API, CSV, XLS",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.ipu.org/",
      "host": "data.ipu.org",
      "notes": "Parliamentary and member data for Thailand.",
      "source_profile_url": "/data/sources/ipu-parline-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ocpb-car-and-motorcycle-rental-contract-rules",
      "registry_position": 179,
      "name": "OCPB car and motorcycle rental contract rules",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "rental",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination",
        "route",
        "transport_zone"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public regulatory news page, contract-rule guidance, and linked legal notices",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On legal or enforcement change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.ocpb.go.th/news_view_en.php?nid=17127",
      "host": "ocpb.go.th",
      "notes": "Controlled-contract guidance for car and motorcycle rental businesses, including standard-contract expectations, fee disclosure, deposit handling, replacement-vehicle obligations, and unfair-term limits. Use for compliance scoring and contract modeling, not live supplier inventory.",
      "source_profile_url": "/data/sources/ocpb-car-and-motorcycle-rental-contract-rules/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "oic-motor-insurance-services-and-complaints",
      "registry_position": 197,
      "name": "OIC motor insurance services and complaints",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "complaint",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public insurance-service portal, complaint channels, policy search, and motor-insurance reference tools",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public portal access; some workflows require login or specific role",
      "cadence_declared": "Operational / frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://oiceservice.oic.or.th/",
      "host": "oiceservice.oic.or.th",
      "notes": "Office of Insurance Commission services for motor-insurance complaints, policy lookup, motor-insurance reference tools, and consumer-service channels. Useful for insurance and complaint context around vehicle rental, not live rental inventory.",
      "source_profile_url": "/data/sources/oic-motor-insurance-services-and-complaints/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-law-data-thailand",
      "registry_position": 31,
      "name": "Open Law Data Thailand",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Bulk/data pipeline",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Regular / daily-ish",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://github.com/tdri/Open-Law-Data",
      "host": "github.com",
      "notes": "Machine-readable Thai legal database derived from official sources.",
      "source_profile_url": "/data/sources/open-law-data-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-gazette",
      "registry_position": 32,
      "name": "Royal Gazette",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Website/PDF",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Official publication schedule",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://ratchakitcha.soc.go.th/",
      "host": "ratchakitcha.soc.go.th",
      "notes": "Official source for laws, regulations, notices, and announcements.",
      "source_profile_url": "/data/sources/royal-gazette/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-parliament-open-data-repository",
      "registry_position": 262,
      "name": "Thai Parliament open data / repository",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Portal/downloads",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.parliament.go.th/",
      "host": "parliament.go.th",
      "notes": "Legislative information and parliament open-data initiatives.",
      "source_profile_url": "/data/sources/thai-parliament-open-data-repository/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "wevis-parliament-watch",
      "registry_position": 263,
      "name": "WeVis parliament-watch",
      "domain": "Law, politics, and civic",
      "category_slug": "law-politics-and-civic",
      "source_kind": "law",
      "graph_class": "rules",
      "graph_role": "Public-record change layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "service_rule",
        "destination"
      ],
      "feeds_signals": [
        "policy_change_context"
      ],
      "feeds_decisions": [
        "safety_check",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "GitHub/bulk/site data where public",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Project-dependent",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://wevis.info/",
      "host": "wevis.info",
      "notes": "Politicians, assemblies, bills, votes, promises, and parliament-watch data.",
      "source_profile_url": "/data/sources/wevis-parliament-watch/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dasta-community-museums-and-routes-api",
      "registry_position": 123,
      "name": "DASTA community museums and routes API",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Web API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public documentation; confirm API terms before production use",
      "cadence_declared": "Weekly for attractions/routes; daily or weekly for events",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://cbtthailand.dasta.or.th/webapi/webserviceapi",
      "host": "cbtthailand.dasta.or.th",
      "notes": "Community-based tourism API for community attractions, local learning centers, cultural activities, events/festivals, accommodations, and recommended routes that can include museum-like community heritage sites.",
      "source_profile_url": "/data/sources/dasta-community-museums-and-routes-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-mineral-resources-museum-locations",
      "registry_position": 124,
      "name": "Department of Mineral Resources museum locations",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DMR catalog resources, CSV, ArcGIS REST service/API, data dictionary where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.dmr.go.th/",
      "host": "catalog.dmr.go.th",
      "notes": "Geological, mineral, and paleontology museum location/detail data under the Department of Mineral Resources, including geospatial coordinates and visitor-count resources where exposed.",
      "source_profile_url": "/data/sources/department-of-mineral-resources-museum-locations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fine-arts-national-museum-locations",
      "registry_position": 117,
      "name": "Fine Arts national museum locations",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Fine Arts data catalog, XLSX/CSV/RDF/API resources where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.finearts.go.th/dataset/",
      "host": "data.finearts.go.th",
      "notes": "Canonical national museum location layer with spatial data, images, coordinates, and learning-resource records for Fine Arts-managed national museums.",
      "source_profile_url": "/data/sources/fine-arts-national-museum-locations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fine-arts-smart-museum-and-virtual-museum",
      "registry_position": 119,
      "name": "Fine Arts Smart Museum and Virtual Museum",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public websites, virtual museum pages, Smart Museum pages, digital heritage systems",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing where published; media reuse terms vary",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.finearts.go.th/",
      "host": "finearts.go.th",
      "notes": "National museum virtual visits, 360-degree antiquities, 3D models, virtual rooms, cultural heritage GIS, museum objects, and digital learning resources.",
      "source_profile_url": "/data/sources/fine-arts-smart-museum-and-virtual-museum/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fine-arts-visitor-api",
      "registry_position": 118,
      "name": "Fine Arts Visitor API",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Fine Arts Open Data/API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Daily, weekly, or monthly depending on visitor-stat use case",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://api.finearts.go.th/opendata/",
      "host": "api.finearts.go.th",
      "notes": "Visitor statistics for Fine Arts learning sites such as historical parks, national museums, national archives, national libraries, and other learning sites. Best official visitor-count layer for Fine Arts-managed museums.",
      "source_profile_url": "/data/sources/fine-arts-visitor-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "m-culture-museum-dataset",
      "registry_position": 116,
      "name": "M-Culture museum dataset",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/DataStore-style resources, CSV/XML/PDF/Data API where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.m-culture.go.th/",
      "host": "gdcatalog.m-culture.go.th",
      "notes": "Official Ministry of Culture museum dataset collected through provincial cultural offices and the M-Culture system. Useful for listed museum registry fields, categories, and province-level reconciliation.",
      "source_profile_url": "/data/sources/m-culture-museum-dataset/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "museum-thailand-ndmi",
      "registry_position": 120,
      "name": "Museum Thailand / NDMI",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public website/app; no documented public API verified",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web/app access; confirm crawl/app terms before production ingestion",
      "cadence_declared": "Weekly for top museums and events; monthly for long-tail pages",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.museumthailand.com/",
      "host": "museumthailand.com",
      "notes": "Rich visitor-facing museum metadata: descriptions, management type, museum type, visitor/favorite counts, opening days/hours, admission, free-entry eligibility, booking notes, accessibility, facilities, directions, virtual museum links, highlights, and events.",
      "source_profile_url": "/data/sources/museum-thailand-ndmi/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "national-science-museum-and-science-center-pages",
      "registry_position": 129,
      "name": "National Science Museum and science-center pages",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public websites, booking forms, museum unit pages, education/event pages",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public pages; booking/ticket data is not an open bulk API",
      "cadence_declared": "Weekly for events/closures; monthly for static pages",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.nsm.or.th/",
      "host": "nsm.or.th",
      "notes": "Official visitor-facing context for science museums, Natural History Museum, IT Museum, Rama IX Museum, science centers, booking forms, hours, fees, education activities, and current closure/event notices.",
      "source_profile_url": "/data/sources/national-science-museum-and-science-center-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-museum-operators",
      "registry_position": 130,
      "name": "Open DBD museum operators",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public company search/download/API-style surfaces where available",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public where published; some DBD/GDX APIs can be restricted",
      "cadence_declared": "Monthly or periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datawarehouse.dbd.go.th/",
      "host": "datawarehouse.dbd.go.th",
      "notes": "Private museum, gallery, attraction, and museum-operator company discovery using juristic-person records. Business registration validates an operator entity, not visitor opening status.",
      "source_profile_url": "/data/sources/open-dbd-museum-operators/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-museum-pois",
      "registry_position": 127,
      "name": "OpenStreetMap Thailand museum POIs",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly national sync; daily or weekly for high-tourism areas",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Free geospatial enrichment for tourism=museum, museum=*, tourism=gallery, historic=*, building=museum, names, operator, opening_hours, fee, website, contact tags, wheelchair access, Wikidata/Wikipedia links, points, and polygons.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-museum-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "provincial-museum-and-cultural-learning-center-datasets",
      "registry_position": 126,
      "name": "Provincial museum and cultural learning center datasets",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Provincial GDC/CKAN resources, DataStore APIs, CSV/TSV/JSON/XML where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly or quarterly, with weekly discovery crawl",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/",
      "host": "gdcatalog.go.th",
      "notes": "Long-tail provincial museum counts, cultural learning centers, local heritage sites, community museums, tourism attractions, and cultural-economy resources.",
      "source_profile_url": "/data/sources/provincial-museum-and-cultural-learning-center-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "sac-museum-database",
      "registry_position": 115,
      "name": "SAC Museum Database",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public website and crawlable museum detail pages; no documented public API verified",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; confirm reuse terms before bulk ingestion",
      "cadence_declared": "Weekly list/status checks; weekly or monthly detail refresh",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://db.sac.or.th/museum/",
      "host": "db.sac.or.th",
      "notes": "Closest nationwide museum spine, with museum names, province/district, address, phone, opening hours, admission, website/social links, founded year, highlights, management type, content category, status, descriptions, and object/exhibit context where exposed.",
      "source_profile_url": "/data/sources/sac-museum-database/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tat-data-api-museum-place-and-event-detail",
      "registry_position": 122,
      "name": "TAT Data API museum place and event detail",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Registered TAT Data API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free registration/API terms",
      "cadence_declared": "Weekly for place detail; daily or weekly for events",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.tourismthailand.org/",
      "host": "developers.tourismthailand.org",
      "notes": "Official tourism API layer for Search Place, Attraction Detail, Event Detail, News, and Recommended Route data. Use museum/category filtering for tourist-facing museums and museum events.",
      "source_profile_url": "/data/sources/tat-data-api-museum-place-and-event-detail/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tat-museum-and-attraction-catalog",
      "registry_position": 121,
      "name": "TAT museum and attraction catalog",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "TAT/MOTS catalog resources, CSV/JSON/API-style downloads where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.mots.go.th/",
      "host": "mots.go.th",
      "notes": "Tourist-facing attraction records that can include museums, galleries, heritage learning sites, opening/closing times, contact data, locations, latitude, longitude, and tourism category context.",
      "source_profile_url": "/data/sources/tat-museum-and-attraction-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "wikidata-and-wikimedia-commons-thailand-museums",
      "registry_position": 128,
      "name": "Wikidata and Wikimedia Commons Thailand museums",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "SPARQL/API and Wikimedia Commons media",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public under Wikidata/Wikimedia terms",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://query.wikidata.org/",
      "host": "query.wikidata.org",
      "notes": "QIDs, multilingual labels, aliases, coordinates, images, Commons categories, official websites, operators, inception dates, and Wikipedia sitelinks for notable museums.",
      "source_profile_url": "/data/sources/wikidata-and-wikimedia-commons-thailand-museums/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "wisdomking-agricultural-museum-datasets",
      "registry_position": 125,
      "name": "WisdomKing Agricultural Museum datasets",
      "domain": "Museums and learning sites",
      "category_slug": "museums-and-learning-sites",
      "source_kind": "museum",
      "graph_class": "entities",
      "graph_role": "Indoor fallback layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "museum",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "indoor_backup_strength"
      ],
      "feeds_decisions": [
        "rainy_day_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/DataStore, CSV/TSV/JSON/XML where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://wisdomking.gdcatalog.go.th/",
      "host": "wisdomking.gdcatalog.go.th",
      "notes": "Agricultural museum exhibitions, online visitor statistics, network/learning-center information, sufficiency-economy agriculture content, and museum service statistics.",
      "source_profile_url": "/data/sources/wisdomking-agricultural-museum-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gdelt-thailand",
      "registry_position": 33,
      "name": "GDELT Thailand",
      "domain": "News and government information",
      "category_slug": "news-and-government-information",
      "source_kind": "tourism",
      "graph_class": "rules",
      "graph_role": "Alert and official context layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "official_advisory",
        "government_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/bulk",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "15-minute updates",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.gdeltproject.org/",
      "host": "gdeltproject.org",
      "notes": "Global event/news graph filterable to Thailand.",
      "source_profile_url": "/data/sources/gdelt-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "government-public-relations-department",
      "registry_position": 30,
      "name": "Government Public Relations Department",
      "domain": "News and government information",
      "category_slug": "news-and-government-information",
      "source_kind": "catalog",
      "graph_class": "rules",
      "graph_role": "Alert and official context layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "official_advisory",
        "government_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Website/RSS where exposed",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.prd.go.th/",
      "host": "prd.go.th",
      "notes": "Official government public-relations and news releases.",
      "source_profile_url": "/data/sources/government-public-relations-department/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thailand-go-th",
      "registry_position": 29,
      "name": "Thailand.go.th",
      "domain": "News and government information",
      "category_slug": "news-and-government-information",
      "source_kind": "tourism",
      "graph_class": "rules",
      "graph_role": "Alert and official context layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "official_advisory",
        "government_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "safety_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/RSS where exposed",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public; token may be required for API",
      "cadence_declared": "Frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.thailand.go.th/",
      "host": "thailand.go.th",
      "notes": "Government news, issues, events, services, and guidebook-style information.",
      "source_profile_url": "/data/sources/thailand-go-th/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aigs-gemstone-report-verification",
      "registry_position": 289,
      "name": "AIGS gemstone report verification",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public lab/service pages and report-specific verification where exposed",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public report check where available; testing services are transactional",
      "cadence_declared": "On demand for report verification; monthly for service-page checks",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.aigsthailand.com/",
      "host": "aigsthailand.com",
      "notes": "Asian Institute of Gemological Sciences gemstone identification, treatment/origin report context, and verification surfaces. Report verification is not a bulk open report database.",
      "source_profile_url": "/data/sources/aigs-gemstone-report-verification/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bangkok-gems-and-jewelry-fair-exhibitor-directory",
      "registry_position": 294,
      "name": "Bangkok Gems and Jewelry Fair exhibitor directory",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public web exhibitor directory and downloadable exhibitor lists where exposed",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public viewing; confirm reuse terms before bulk ingestion",
      "cadence_declared": "Per fair edition; weekly as events approach",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.bkkgems.com/exhibitor-list",
      "host": "bkkgems.com",
      "notes": "Exhibitor companies, booth information, fair edition, country, and product categories such as gemstones, diamonds, gold jewelry, pearls, lab-grown diamonds, silver, and precious metals.",
      "source_profile_url": "/data/sources/bangkok-gems-and-jewelry-fair-exhibitor-directory/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bank-of-thailand-gold-reserves-and-gold-trading-policy-context",
      "registry_position": 286,
      "name": "Bank of Thailand gold reserves and gold-trading policy context",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public statistics, policy releases, and regulatory communications",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Free public",
      "cadence_declared": "Weekly, monthly, or on policy release",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.bot.or.th/",
      "host": "bot.or.th",
      "notes": "BOT reserve statistics and gold-related policy context. Use for monetary gold/reserve treatment and online-gold-trading regulatory context, not retail shop pricing.",
      "source_profile_url": "/data/sources/bank-of-thailand-gold-reserves-and-gold-trading-policy-context/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "chanthaburi-gem-market-public-tourism-and-map-sources",
      "registry_position": 296,
      "name": "Chanthaburi gem market public tourism and map sources",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "TAT/local tourism pages, OSM, and public market descriptions",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public; data reuse depends on source",
      "cadence_declared": "Monthly, with manual validation for market hours",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.tourismthailand.org/",
      "host": "tourismthailand.org",
      "notes": "Physical gem-market context for Chanthaburi, including market location, operating-day context, trader/stone-market descriptions, nearby streets, OSM/POI enrichment, and visitor caveats.",
      "source_profile_url": "/data/sources/chanthaburi-gem-market-public-tourism-and-map-sources/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dmr-mineral-potential-and-geology-datasets",
      "registry_position": 285,
      "name": "DMR mineral potential and geology datasets",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Catalog metadata, ArcGIS REST services, GIS layers, HTML/CSV where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly or quarterly for discovery; slower for geology layers",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/dataset/gdpublish-minarea",
      "host": "gdcatalog.go.th",
      "notes": "Department of Mineral Resources mineral-potential areas, geology, mineral maps, and geospatial layers for mining/mineral-resource context. Useful for gemstone and precious-metal resource geography, not retail pricing.",
      "source_profile_url": "/data/sources/dmr-mineral-potential-and-geology-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dpim-mineral-price-royalty-and-mining-statistics",
      "registry_position": 284,
      "name": "DPIM mineral price, royalty, and mining statistics",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public reports, PDFs, datasets, and data-catalog resources where exposed",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly, quarterly, annual, and on publication",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.dpim.go.th/",
      "host": "dpim.go.th",
      "notes": "Department of Primary Industries and Mines data for annual average mineral prices, mineral royalty assessment, mineral production, domestic use, concessions, licensees, and precious-metal minerals such as gold and silver where present.",
      "source_profile_url": "/data/sources/dpim-mineral-price-royalty-and-mining-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gia-report-results-api-and-report-check",
      "registry_position": 290,
      "name": "GIA Report Results API and Report Check",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Report-specific public verification and API products for eligible integrations",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Report check is public; API/product terms vary",
      "cadence_declared": "On demand",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.gia.edu/report-check-landing",
      "host": "gia.edu",
      "notes": "GIA report verification and API-oriented report-result products for diamonds and gems. Use to verify a report number, not to bulk-harvest all lab records.",
      "source_profile_url": "/data/sources/gia-report-results-api-and-report-check/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "git-gem-and-jewelry-trade-statistics",
      "registry_position": 279,
      "name": "GIT Gem and Jewelry trade statistics",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public web tables and statistics pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly with approximately one-month customs-data lag",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.git.or.th/infocenter-stat/?Lang=EN",
      "host": "git.or.th",
      "notes": "Gem and Jewelry Institute of Thailand HS Chapter 71 import/export statistics by product and country, including pearls, diamonds, precious stones, synthetic stones, silver, gold, platinum, scrap, jewelry, wares, articles, and coins.",
      "source_profile_url": "/data/sources/git-gem-and-jewelry-trade-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "git-report-verification-and-precious-metal-testing",
      "registry_position": 280,
      "name": "GIT report verification and precious-metal testing",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Report-specific online verification and public service pages",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public report check; testing services are transactional",
      "cadence_declared": "On demand for report verification; monthly for service-page checks",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.git.or.th/OnlineVerification/default.aspx",
      "host": "git.or.th",
      "notes": "GIT verification confirms report existence for stones submitted from July 1, 2014 onward. GIT also provides gem identification, precious-metal inspection, hallmarking, and sample/status services.",
      "source_profile_url": "/data/sources/git-report-verification-and-precious-metal-testing/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "git-standards-and-jewelry-information-center",
      "registry_position": 281,
      "name": "GIT standards and jewelry information center",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public standards, annual reports, research, and information-center pages",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where published; document reuse terms vary",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.git.or.th/",
      "host": "git.or.th",
      "notes": "GIT Standard, gem/jewelry/precious-metal testing methods, market research, trade reviews, knowledge pages, and lab/industry standard context.",
      "source_profile_url": "/data/sources/git-standards-and-jewelry-information-center/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gold-traders-association-thailand-gold-prices",
      "registry_position": 276,
      "name": "Gold Traders Association Thailand gold prices",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "market",
        "district",
        "destination"
      ],
      "observation_scope": [
        "gold_bar_965_buy_baht_weight",
        "gold_bar_965_sell_baht_weight",
        "gold_ornament_965_base_baht_weight",
        "gold_ornament_965_sell_baht_weight",
        "gold_spot_reference",
        "usd_thb_reference",
        "gold_price_change_intraday",
        "gold_price_change_prev_day"
      ],
      "decision_scope": [
        "gold_buying_check"
      ],
      "observation_feeds": [
        {
          "id": "gta-gold-reference-price",
          "name": "GTA Thai gold reference price",
          "kind": "entity-observation",
          "cadence": "Intraday / market-hours publication"
        }
      ],
      "current_signal_types": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public website with a published latest-price JSON surface used by the site runtime; redistribution rights should still be reviewed separately",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access for viewing and cautious automation; redistribution rights should be reviewed separately",
      "cadence_declared": "Intraday during market hours; daily historical pages",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.goldtraders.or.th/",
      "host": "goldtraders.or.th",
      "notes": "Primary Thai domestic 96.5% gold retail reference, including bullion buy/sell, ornament sell, ornament buyback or tax-base context, announcement date or time, price-change history, member directory, holiday calendar, and calculators. The public latest-price JSON surface can support runtime observation of the national quote. Use it as the national THB-per-baht-weight reference instead of implying province-by-province official gold prices.",
      "source_profile_url": "/data/sources/gold-traders-association-thailand-gold-prices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "igi-gem-and-diamond-verification",
      "registry_position": 291,
      "name": "IGI gem and diamond verification",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Report-specific public verification and lab service pages",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public report check; testing/certification services are transactional",
      "cadence_declared": "On demand",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.igi.org/verify-your-report/",
      "host": "igi.org",
      "notes": "IGI verification for natural diamonds, lab-grown diamonds, jewelry, and gem reports. Store as report-specific authenticity enrichment only.",
      "source_profile_url": "/data/sources/igi-gem-and-diamond-verification/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "lbma-precious-metal-benchmark-prices",
      "registry_position": 287,
      "name": "LBMA precious metal benchmark prices",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public benchmark pages; redistribution and derived-data use can require licensing",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public viewing; licensed for redistribution",
      "cadence_declared": "Daily benchmark publications",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.lbma.org.uk/prices-and-data/precious-metal-prices",
      "host": "lbma.org.uk",
      "notes": "Global benchmark prices for precious metals. Use as international context and conversion baseline, not a direct Thai 96.5% gold retail price.",
      "source_profile_url": "/data/sources/lbma-precious-metal-benchmark-prices/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "moc-trade-report-api-for-hs71-gems-and-jewelry",
      "registry_position": 282,
      "name": "MOC Trade Report API for HS71 gems and jewelry",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public Trade Report pages and API Data Exchange surfaces",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public/API where exposed",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://tradereport.moc.go.th/en/searchhscode",
      "host": "tradereport.moc.go.th",
      "notes": "Ministry of Commerce trade API layer for export/import by product, harmonized code, country, Thai exporter/importer lists, and product information. Use HS Chapter 71 filters for gems, jewelry, and precious metals.",
      "source_profile_url": "/data/sources/moc-trade-report-api-for-hs71-gems-and-jewelry/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ocpb-amlo-and-consumer-aml-rules-for-gems-and-gold",
      "registry_position": 298,
      "name": "OCPB, AMLO, and consumer/AML rules for gems and gold",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public regulatory pages, notices, laws, and guidance; pair with OCPB and agency pages",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly or on regulatory update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.amlo.go.th/",
      "host": "amlo.go.th",
      "notes": "Consumer-labeling, disclosure, controlled-label, AML/CFT, reporting, KYC, record-retention, and transaction-threshold context for gold shops, jewelry businesses, gems, diamonds, precious stones, and import/export businesses.",
      "source_profile_url": "/data/sources/ocpb-amlo-and-consumer-aml-rules-for-gems-and-gold/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-gold-gem-and-jewelry-companies",
      "registry_position": 292,
      "name": "Open DBD gold, gem, and jewelry companies",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open-DBD datasets and API-style resources",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free public/open data where published; some DBD/GDX APIs can be restricted",
      "cadence_declared": "Monthly or periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.dbd.go.th/",
      "host": "opendata.dbd.go.th",
      "notes": "Juristic-person records for gold shops, jewelry manufacturers, gem dealers, exporters, and related entities. Company registration validates a legal entity, not inventory, lab quality, or retail trust.",
      "source_profile_url": "/data/sources/open-dbd-gold-gem-and-jewelry-companies/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-gold-gem-and-jewelry-pois",
      "registry_position": 295,
      "name": "OpenStreetMap Thailand gold, gem, and jewelry POIs",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "water",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination",
        "water_station",
        "river",
        "beach"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly or monthly; weekly for Bangkok/Yaowarat and Chanthaburi clusters",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Crowdsourced geospatial enrichment for shop=jewelry, shop=gold_buyer, craft=jeweller, craft=lapidary, gem markets, opening_hours, websites, phone, addresses, and map geometry.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-gold-gem-and-jewelry-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tfex-gold-futures-contract-and-market-data",
      "registry_position": 277,
      "name": "TFEX Gold Futures contract and market data",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public market pages and contract specifications; production data redistribution may require SET/TFEX licensing",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Free public viewing; commercial data terms apply",
      "cadence_declared": "Intraday and end-of-day market data; contract specs on change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.tfex.co.th/en/products/precious-metal/gold-futures/contract-specification",
      "host": "tfex.co.th",
      "notes": "Gold Futures reference 96.5% gold bullion with 10 and 50 Thai gold baht contract sizes. Use this for contract-unit, formula, settlement, and hedging context rather than as the primary Thai retail gold quote.",
      "source_profile_url": "/data/sources/tfex-gold-futures-contract-and-market-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tfex-gold-online-futures-and-micro-gold-online-futures",
      "registry_position": 278,
      "name": "TFEX Gold Online Futures and Micro Gold Online Futures",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public market pages and contract specifications; production data redistribution may require SET/TFEX licensing",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Free public viewing; commercial data terms apply",
      "cadence_declared": "Intraday and end-of-day market data; contract specs on change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.tfex.co.th/en/products/precious-metal/gold-online-futures/contract-specification",
      "host": "tfex.co.th",
      "notes": "Gold Online Futures and Micro Gold Online Futures expose international-style gold exposure and contract metadata. Keep this separate from domestic 96.5% Thai gold-baht retail pricing.",
      "source_profile_url": "/data/sources/tfex-gold-online-futures-and-micro-gold-online-futures/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tgjta-member-and-industry-resources",
      "registry_position": 293,
      "name": "TGJTA member and industry resources",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public association website, member/resources pages, news, and guidance",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public; member data reuse terms vary",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.thaigemjewelry.or.th/",
      "host": "thaigemjewelry.or.th",
      "notes": "Thai Gem and Jewelry Traders Association industry membership, news, business guidance, trade context, tax/regulatory summaries, and sector network discovery.",
      "source_profile_url": "/data/sources/tgjta-member-and-industry-resources/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-customs-hs71-import-export-statistics",
      "registry_position": 283,
      "name": "Thai Customs HS71 import-export statistics",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public customs statistics search and CSV/download surfaces",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly releases with revision risk",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.customs.go.th/",
      "host": "customs.go.th",
      "notes": "Official customs trade data by HS code, country, month/year, import/export direction, value, and quantity where available. Only detailed HS levels may expose useful quantity fields.",
      "source_profile_url": "/data/sources/thai-customs-hs71-import-export-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tisi-precious-metal-and-jewelry-standards",
      "registry_position": 297,
      "name": "TISI precious metal and jewelry standards",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public standards catalog and document pages",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public metadata; document terms vary",
      "cadence_declared": "Monthly or on standard update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.tisi.go.th/",
      "host": "tisi.go.th",
      "notes": "Thai Industrial Standards Institute standards relevant to precious-metal purity/testing, jewelry methods, and related product standards. Store standard ID, scope, material, method, and effective status.",
      "source_profile_url": "/data/sources/tisi-precious-metal-and-jewelry-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "world-gold-council-goldhub-data",
      "registry_position": 288,
      "name": "World Gold Council Goldhub data",
      "domain": "Precious metals, gems, and jewelry",
      "category_slug": "precious-metals-gems-and-jewelry",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Market-reference and niche commercial layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "market",
        "district",
        "destination"
      ],
      "feeds_signals": [
        "thai_gold_reference_price",
        "thai_gold_fx_pressure",
        "thai_gold_buying_friction"
      ],
      "feeds_decisions": [
        "gold_buying_check"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public research/data pages and downloads where available",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public with terms",
      "cadence_declared": "Monthly, quarterly, and annual",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.gold.org/goldhub/data",
      "host": "gold.org",
      "notes": "Global gold demand, supply, investment, central-bank, and market context. Useful for macro background and Thailand comparisons, not retail pricing.",
      "source_profile_url": "/data/sources/world-gold-council-goldhub-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dasta-cbt-thailand-api",
      "registry_position": 88,
      "name": "DASTA CBT Thailand API",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district",
        "hotel_area",
        "venue_zone"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Web API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public documentation; confirm API terms before production use",
      "cadence_declared": "Weekly for community attractions/routes; daily or weekly for events",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://cbtthailand.dasta.or.th/webapi/webserviceapi",
      "host": "cbtthailand.dasta.or.th",
      "notes": "Community-based tourism attractions, attraction details, events, festivals, accommodations, and recommended routes. Useful for local temple/community culture routes.",
      "source_profile_url": "/data/sources/dasta-cbt-thailand-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dopa-religious-and-important-place-geospatial-datasets",
      "registry_position": 90,
      "name": "DOPA religious and important-place geospatial datasets",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "JSON/XLS/geospatial resources where exposed through government catalogs",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/",
      "host": "gdcatalog.go.th",
      "notes": "Administrative and important-place datasets useful for province/district/subdistrict reconciliation, official place names, LAT/LONG, and ancient/religious-place context.",
      "source_profile_url": "/data/sources/dopa-religious-and-important-place-geospatial-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dra-buddhist-religious-site-list",
      "registry_position": 84,
      "name": "DRA Buddhist religious site list",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/DataStore, CSV/TSV/JSON/XML where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources",
      "cadence_declared": "Monthly or on catalog update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/en/dataset/gdpublish-dra-04-01",
      "host": "gdcatalog.go.th",
      "notes": "Department of Religious Affairs Buddhist temple list and statistics layer with region, temple name, temple type, sect, wisungkhamsima, subdistrict, district, province, and postal code fields.",
      "source_profile_url": "/data/sources/dra-buddhist-religious-site-list/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dra-non-buddhist-religious-site-datasets",
      "registry_position": 85,
      "name": "DRA non-Buddhist religious site datasets",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/DataStore, XLS/PDF/CSV where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open catalog resources where published",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.dra.go.th/",
      "host": "catalog.dra.go.th",
      "notes": "Religion-wide context for mosques, Hindu/Brahmin sites, Sikh sites, Catholic churches, and other registered religious-site datasets. Use to avoid treating every religious place as a Buddhist wat.",
      "source_profile_url": "/data/sources/dra-non-buddhist-religious-site-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fine-arts-ancient-monuments-api",
      "registry_position": 86,
      "name": "Fine Arts ancient monuments API",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open Data/API, GIS/catalog resources",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Daily or weekly; some catalog labels may say realtime",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://api.finearts.go.th/opendata/",
      "host": "api.finearts.go.th",
      "notes": "Best official source for ancient monuments, temple ruins, historical parks, registered heritage places, images, coordinates, and cultural-art context.",
      "source_profile_url": "/data/sources/fine-arts-ancient-monuments-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fine-arts-important-buddha-images-data",
      "registry_position": 87,
      "name": "Fine Arts important Buddha images data",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open Data/API/catalog resources",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://api.finearts.go.th/opendata/",
      "host": "api.finearts.go.th",
      "notes": "Important Buddha images and cultural heritage records that can enrich major temple and historical-park pages.",
      "source_profile_url": "/data/sources/fine-arts-important-buddha-images-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-culture-religious-places-datasets",
      "registry_position": 89,
      "name": "Ministry of Culture religious places datasets",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open-data/catalog/API/report surfaces where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.m-culture.go.th/",
      "host": "m-culture.go.th",
      "notes": "Cultural and religious-place datasets, central cultural data, cultural heritage, and religious-site reports. Use as narrative/cultural context rather than canonical wat identity.",
      "source_profile_url": "/data/sources/ministry-of-culture-religious-places-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "onab-temple-count-dashboard",
      "registry_position": 82,
      "name": "ONAB temple count dashboard",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public dashboard/search surface",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public dashboard",
      "cadence_declared": "Dashboard-style; snapshot daily or weekly",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://binfo.onab.go.th/",
      "host": "binfo.onab.go.th",
      "notes": "Current Buddhist temple count and classification context by sect, royal/common status, and wisungkhamsima status. Use as a count/status layer, not as a full POI record.",
      "source_profile_url": "/data/sources/onab-temple-count-dashboard/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "onab-temple-histories-and-abandoned-temple-datasets",
      "registry_position": 83,
      "name": "ONAB temple histories and abandoned temple datasets",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Catalog resources, XLSX/DOCX/PDF/CSV where exposed",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where published; check license per resource",
      "cadence_declared": "Monthly or quarterly change detection",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.onab.go.th/",
      "host": "catalog.onab.go.th",
      "notes": "Temple history corpus, abandoned temples, central religious property, geospatial religious-property records, meditation centers, and legal/procedure documents. Slow-changing but valuable for history and active/abandoned distinction.",
      "source_profile_url": "/data/sources/onab-temple-histories-and-abandoned-temple-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "onab-temple-registry",
      "registry_position": 81,
      "name": "ONAB temple registry",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "ONAB catalog/search UI, XLSX downloads, dashboard surfaces where exposed",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where published; license and reuse terms must be checked per resource",
      "cadence_declared": "Registry snapshot monthly or on catalog change; dashboard daily or weekly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.onab.go.th/",
      "host": "catalog.onab.go.th",
      "notes": "Canonical National Office of Buddhism source layer for active Buddhist temple identity: temple code, official name, type, sect, province, district, subdistrict, establishment date, and wisungkhamsima fields where exposed.",
      "source_profile_url": "/data/sources/onab-temple-registry/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-temple-pois",
      "registry_position": 91,
      "name": "OpenStreetMap Thailand temple POIs",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly for national index; daily or weekly for high-tourism areas",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Geospatial enrichment for amenity=place_of_worship, religion=buddhist, building=temple, historic=ruins, tourism=attraction, names, aliases, opening_hours, website, accessibility, polygons, and nearby access.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-temple-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "wikidata-and-wikimedia-commons-thailand-temples",
      "registry_position": 92,
      "name": "Wikidata and Wikimedia Commons Thailand temples",
      "domain": "Religion, culture, and heritage",
      "category_slug": "religion-culture-and-heritage",
      "source_kind": "temple",
      "graph_class": "entities",
      "graph_role": "Temple and cultural entity layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "temple",
        "heritage_site",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "culture_density"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "SPARQL/API and Wikimedia Commons media",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public under Wikidata/Wikimedia terms",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://query.wikidata.org/",
      "host": "query.wikidata.org",
      "notes": "QIDs, multilingual labels, aliases, images, Commons categories, coordinates, heritage links, and Wikipedia sitelinks for notable temples, ruins, shrines, and royal temples.",
      "source_profile_url": "/data/sources/wikidata-and-wikimedia-commons-thailand-temples/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-nightlife-venues",
      "registry_position": 77,
      "name": "Google Places Thailand nightlife venues",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places APIs for bars, pubs, clubs, rooftop venues, and live-music venue search plus place details",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Commercial / pay-as-you-go API",
      "cadence_declared": "On request / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.google.com/maps/documentation/places/web-service",
      "host": "developers.google.com",
      "notes": "Commercial nightlife POI enrichment for bars, pubs, clubs, hours, ratings, photos, phone, website, and business status. Useful for named-venue and district confidence, not a legal alcohol-license registry or live event feed.",
      "source_profile_url": "/data/sources/google-places-thailand-nightlife-venues/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-restaurants",
      "registry_position": 74,
      "name": "Google Places Thailand restaurants",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places APIs for restaurant place search, place details, photos, reviews, ratings, and selected business attributes",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Commercial / pay-as-you-go API",
      "cadence_declared": "On request / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.google.com/maps/documentation/places/web-service",
      "host": "developers.google.com",
      "notes": "Commercial restaurant and cafe POI enrichment for venue names, place IDs, addresses, hours, ratings, reviews, photos, phone, website, and business status. Useful for named-venue discovery and map confidence, not an official Thai food or licensing registry.",
      "source_profile_url": "/data/sources/google-places-thailand-restaurants/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-spas-and-massage",
      "registry_position": 79,
      "name": "Google Places Thailand spas and massage",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places APIs for spa, massage, and wellness venue search plus place details",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Commercial / pay-as-you-go API",
      "cadence_declared": "On request / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.google.com/maps/documentation/places/web-service",
      "host": "developers.google.com",
      "notes": "Commercial spa and massage POI enrichment for named venues, hours, ratings, reviews, photos, phone, website, and business status. Useful for hotel-adjacent recovery planning, not a medical or regulated-treatment certification layer.",
      "source_profile_url": "/data/sources/google-places-thailand-spas-and-massage/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-nightlife-venues",
      "registry_position": 78,
      "name": "OpenStreetMap Thailand nightlife venues",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using amenity=bar, amenity=pub, amenity=nightclub, amenity=music_venue, opening_hours, and contact tags where mapped",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Daily/weekly for nightlife districts; weekly nationally",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dnightclub",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free nightlife geometry and nearby fallback layer for bars, pubs, clubs, and music venues. Coverage varies sharply by city and district and is not a trust, safety, or quality guarantee.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-nightlife-venues/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-restaurants-and-cafes",
      "registry_position": 75,
      "name": "OpenStreetMap Thailand restaurants and cafes",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using amenity=restaurant, amenity=cafe, amenity=food_court, amenity=fast_food, cuisine, opening_hours, and contact tags",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Daily/weekly for Bangkok, Chiang Mai, Phuket, and tourist clusters; weekly nationally",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:amenity%3Drestaurant",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free map spine for restaurant and cafe geometry, names, categories, cuisine tags, opening_hours, and nearby fallback logic. Coverage is uneven and it does not prove food quality, licensing, or current kitchen output.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-restaurants-and-cafes/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-spas-and-massage",
      "registry_position": 80,
      "name": "OpenStreetMap Thailand spas and massage",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using shop=massage, leisure=spa, beauty=spa, opening_hours, and contact tags where mapped",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Daily/weekly for major tourist cities and resort zones; weekly nationally",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free spa and massage map spine for venue geometry, names, opening hours, and nearby fallback options. Coverage and tagging depth vary and should not be treated as treatment-quality proof.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-spas-and-massage/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tat-dining-nightlife-and-wellness-context",
      "registry_position": 72,
      "name": "TAT dining, nightlife, and wellness context",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public tourism website and destination pages for dining districts, nightlife areas, wellness, and spa context",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; reuse and automated access terms vary by page",
      "cadence_declared": "Weekly / seasonal / event-driven depending destination page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.tourismthailand.org/",
      "host": "tourismthailand.org",
      "notes": "Useful for official tourism framing around dining neighborhoods, nightlife districts, spa and wellness areas, and visitor-oriented route context. Not a canonical hours, licensing, or live-booking feed.",
      "source_profile_url": "/data/sources/tat-dining-nightlife-and-wellness-context/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-select-restaurant-certification",
      "registry_position": 73,
      "name": "Thai SELECT restaurant certification",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public certification site and restaurant directory for Thai SELECT venues and product context",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; reuse and automated access terms vary by page",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.thaiselect.com/",
      "host": "thaiselect.com",
      "notes": "Quality and recognition layer for Thai SELECT restaurants and related product branding. Useful for named-venue confidence and Thai-food discovery, not a full restaurant directory or live table-availability feed.",
      "source_profile_url": "/data/sources/thai-select-restaurant-certification/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "wongnai-restaurant-discovery-and-reviews",
      "registry_position": 76,
      "name": "Wongnai restaurant discovery and reviews",
      "domain": "Restaurants, nightlife, and wellness",
      "category_slug": "restaurants-nightlife-and-wellness",
      "source_kind": "venue",
      "graph_class": "entities",
      "graph_role": "Daily experience layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "restaurant_zone",
        "venue",
        "district",
        "destination",
        "hotel_area"
      ],
      "feeds_signals": [
        "venue_density",
        "food_route_quality",
        "nightlife_return_friction",
        "recovery_value"
      ],
      "feeds_decisions": [
        "food_route",
        "nightlife_plan",
        "where_to_stay",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public restaurant and cafe discovery website/app plus merchant and partner surfaces where authorized",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Public consumer pages; merchant or partner operations need authorization",
      "cadence_declared": "Daily / on demand for top venues and popular districts",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.wongnai.com/",
      "host": "wongnai.com",
      "notes": "Thailand-local restaurant discovery, reviews, menu snapshots, photos, and district familiarity. Useful for named-venue confidence and local food context, but it is not an open canonical bulk API or legal registry.",
      "source_profile_url": "/data/sources/wongnai-restaurant-discovery-and-reviews/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bank-of-thailand-api",
      "registry_position": 43,
      "name": "Bank of Thailand API",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "precious",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "country",
        "province",
        "destination"
      ],
      "observation_scope": [
        "usd_thb_reference"
      ],
      "decision_scope": [
        "gold_buying_check"
      ],
      "observation_feeds": [
        {
          "id": "bot-usd-thb-reference",
          "name": "BOT USD/THB daily average",
          "kind": "entity-observation",
          "cadence": "Business day / daily average publication"
        }
      ],
      "current_signal_types": [
        "thai_gold_fx_pressure"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": true,
      "access_method": "API",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": true,
      "free_tier": "Free registration/token",
      "cadence_declared": "Daily/monthly depending on series",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://apiportal.bot.or.th/",
      "host": "apiportal.bot.or.th",
      "notes": "Exchange rates, interest rates, financial markets, monetary, external, payments, public finance, loans, deposits, and NPLs. In the gold stack, this should act as THB exchange-rate context rather than the primary Thai retail gold quote.",
      "source_profile_url": "/data/sources/bank-of-thailand-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bank-of-thailand-statistics",
      "registry_position": 44,
      "name": "Bank of Thailand statistics",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Downloads, dashboards, API portal",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Daily/monthly/quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.bot.or.th/",
      "host": "bot.or.th",
      "notes": "Canonical Thai central-bank statistics.",
      "source_profile_url": "/data/sources/bank-of-thailand-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bot-auto-leasing-and-hire-purchase-supervision",
      "registry_position": 180,
      "name": "BOT auto leasing and hire-purchase supervision",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "geospatial",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "boundary",
        "district",
        "station"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public supervision page, press releases, public-hearing documents, and regulatory guidance",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On legal or supervisory change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.bot.or.th/en/financial-innovation/resilient-regulation/hire-purchase.html",
      "host": "bot.or.th",
      "notes": "Bank of Thailand supervision context for hire purchase and leasing of cars and motorcycles, especially the boundary between short-term rental and regulated financial leasing or hire-purchase businesses. Use to keep daily rental separate from long-term finance products.",
      "source_profile_url": "/data/sources/bot-auto-leasing-and-hire-purchase-supervision/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "comptroller-general-e-gp",
      "registry_position": 50,
      "name": "Comptroller General e-GP",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "RSS/API-style/scrape",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.gprocurement.go.th/",
      "host": "gprocurement.go.th",
      "notes": "Public procurement notices and contract data.",
      "source_profile_url": "/data/sources/comptroller-general-e-gp/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "excise-department-data-catalog",
      "registry_position": 53,
      "name": "Excise Department Data Catalog",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CSV/XLS/API/RDF where enabled",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://catalog.excise.go.th/",
      "host": "catalog.excise.go.th",
      "notes": "Excise tax datasets and niche categories such as alcohol, tobacco, card import/license data.",
      "source_profile_url": "/data/sources/excise-department-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "fiscal-policy-office-data-catalog",
      "registry_position": 54,
      "name": "Fiscal Policy Office Data Catalog",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CKAN/API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.fpo.go.th/",
      "host": "catalog.fpo.go.th",
      "notes": "Fiscal and macroeconomic datasets.",
      "source_profile_url": "/data/sources/fiscal-policy-office-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-commerce-trade-statistics",
      "registry_position": 47,
      "name": "Ministry of Commerce trade statistics",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Dashboard/API-style reports",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://tradereport.moc.go.th/",
      "host": "tradereport.moc.go.th",
      "notes": "Thailand import/export summaries, products, HS codes, and trade reports.",
      "source_profile_url": "/data/sources/ministry-of-commerce-trade-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "national-statistical-office-data-catalog",
      "registry_position": 40,
      "name": "National Statistical Office Data Catalog",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "CKAN/API, CSV, XLS",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://catalog.nso.go.th/",
      "host": "catalog.nso.go.th",
      "notes": "Official Thai statistical datasets.",
      "source_profile_url": "/data/sources/national-statistical-office-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nso-environment-noise-statistics",
      "registry_position": 247,
      "name": "NSO environment noise statistics",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public e-book and statistical tables",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Annual statistical publication",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.nso.go.th/public/e-book/Indicators-Environment/Environment-Indicators-2567/73/",
      "host": "nso.go.th",
      "notes": "National Statistical Office environmental-statistics publication with 24-hour average noise tables for Bangkok, vicinity stations, and some provinces, based on official monitoring summaries.",
      "source_profile_url": "/data/sources/nso-environment-noise-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nso-justice-statistics",
      "registry_position": 206,
      "name": "NSO justice statistics",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "legal",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "legal_office",
        "court",
        "police_station"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public Statistical Yearbook e-book and tables",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Annual statistical publication",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.nso.go.th/public/e-book/Statistical-Yearbook/SYB-2025/626/",
      "host": "nso.go.th",
      "notes": "National Statistical Office justice, security, political, and public-administration statistics, including criminal, court, and related official summary tables from justice-system agencies.",
      "source_profile_url": "/data/sources/nso-justice-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nso-website",
      "registry_position": 41,
      "name": "NSO website",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Reports, dashboards, downloads, RSS where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.nso.go.th/",
      "host": "nso.go.th",
      "notes": "National Statistical Office publications, surveys, and dashboards.",
      "source_profile_url": "/data/sources/nso-website/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-department-of-business-development",
      "registry_position": 49,
      "name": "Open DBD / Department of Business Development",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "store",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "store",
        "market",
        "district"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public search/download/API where available",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public for public search; some data restricted",
      "cadence_declared": "Operational / periodic",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://datawarehouse.dbd.go.th/",
      "host": "datawarehouse.dbd.go.th",
      "notes": "Juristic-person and company-registration data; keep restricted services out of free pipeline.",
      "source_profile_url": "/data/sources/open-dbd-department-of-business-development/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "public-debt-management-office",
      "registry_position": 51,
      "name": "Public Debt Management Office",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "precious",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Dashboard/downloads",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.pdmo.go.th/",
      "host": "pdmo.go.th",
      "notes": "Public debt outstanding, debt service, maturity, and debt components.",
      "source_profile_url": "/data/sources/public-debt-management-office/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "revenue-department-data-catalog",
      "registry_position": 52,
      "name": "Revenue Department Data Catalog",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "catalog",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API where enabled",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://catalog.rd.go.th/",
      "host": "catalog.rd.go.th",
      "notes": "Tax and revenue datasets; excludes restricted e-filing APIs.",
      "source_profile_url": "/data/sources/revenue-department-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "sec-market-data-and-downloads",
      "registry_position": 46,
      "name": "SEC market data and downloads",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/XLS/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.sec.or.th/",
      "host": "sec.or.th",
      "notes": "Capital-market statistical releases and open-data downloads.",
      "source_profile_url": "/data/sources/sec-market-data-and-downloads/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "sec-thailand-open-data-api-portal",
      "registry_position": 45,
      "name": "SEC Thailand Open Data / API Portal",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API/bulk/download",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free registration/API terms",
      "cadence_declared": "Daily/monthly/quarterly depending on product",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://api-portal.sec.or.th/",
      "host": "api-portal.sec.or.th",
      "notes": "Securities, funds, digital assets, licenses, filings, and market data products.",
      "source_profile_url": "/data/sources/sec-thailand-open-data-api-portal/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-customs-statistics",
      "registry_position": 48,
      "name": "Thai Customs statistics",
      "domain": "Statistics, economy, and finance",
      "category_slug": "statistics-economy-and-finance",
      "source_kind": "finance",
      "graph_class": "baselines",
      "graph_role": "Baseline macro layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "country",
        "province",
        "destination",
        "market"
      ],
      "feeds_signals": [
        "macro_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Reports/downloads/API-style resources",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where published",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.customs.go.th/",
      "host": "customs.go.th",
      "notes": "Customs import/export and logistics-related statistics.",
      "source_profile_url": "/data/sources/thai-customs-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "7-eleven-thailand-store-locator",
      "registry_position": 335,
      "name": "7-Eleven Thailand store locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public chain store locator/web surfaces; no documented bulk public API verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly for branch discovery; weekly/monthly for services and hours",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.7eleven.co.th/find-store",
      "host": "7eleven.co.th",
      "notes": "Key chain layer for Thailand convenience stores. Use as branch truth for 7-Eleven where accessible, but keep separate from CP ALL legal entity records, OSM/Google POIs, and inventory/product availability.",
      "source_profile_url": "/data/sources/7-eleven-thailand-store-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bank-of-thailand-retail-sales-index",
      "registry_position": 330,
      "name": "Bank of Thailand Retail Sales Index",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "BOT statistical releases and metadata for retail sales index categories based on Revenue Department data",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public statistical access",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.bot.or.th/",
      "host": "bot.or.th",
      "notes": "Macro retail-demand context across categories such as food stores, pharmacies/cosmetics, stalls/markets, department stores, supermarkets, general stores, and internet/mail-order retail. Not a store POI or price feed.",
      "source_profile_url": "/data/sources/bank-of-thailand-retail-sales-index/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "big-c-store-locator",
      "registry_position": 336,
      "name": "Big C store locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official Big C public locator with shop type, province, branch, address, GPS, telephone, and store hours where exposed",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly for branches; weekly/monthly for opening hours and shop formats",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://corporate.bigc.co.th/find-a-store?lang=en",
      "host": "corporate.bigc.co.th",
      "notes": "Strong chain source for Big C, Big C Market, Big C Foodplace, Big C Mini, Pure Pharmacy, Depot, and related branch formats. Branch locator is chain-specific, not national retail coverage.",
      "source_profile_url": "/data/sources/big-c-store-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "boots-thailand-store-locator",
      "registry_position": 340,
      "name": "Boots Thailand store locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Boots Thailand public store locator or branch pages; mall pages may expose branch address and opening hours",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly/monthly for branch and opening-hour validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://store.boots.co.th/",
      "host": "store.boots.co.th",
      "notes": "Health and beauty/pharmacy chain layer. Pair with Thai FDA drug-place licenses and Google/OSM for pharmacy status, hours, and POI enrichment.",
      "source_profile_url": "/data/sources/boots-thailand-store-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "central-and-mall-tenant-directories",
      "registry_position": 342,
      "name": "Central and mall tenant directories",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public mall, Central, One Bangkok, MBK, and shopping-center tenant directories, floor/category pages, and branch pages where exposed",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms vary by mall",
      "cadence_declared": "Weekly/monthly for tenant directories; weekly for major mall changes and tourist clusters",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.centralpattana.co.th/",
      "host": "centralpattana.co.th",
      "notes": "Best layer for mall units, floors, tenant categories, mall hours, and indoor shopping context. Tenant churn and individual store hours require separate validation.",
      "source_profile_url": "/data/sources/central-and-mall-tenant-directories/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dbd-gdx-juristic-person-and-commercial-registration-apis",
      "registry_position": 321,
      "name": "DBD GDX juristic person and commercial registration APIs",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Exchange API layer for DBD juristic-person data and related government data-linkage services",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Permissioned government/API access; not an unrestricted public bulk feed",
      "cadence_declared": "On demand or agency-defined; monthly validation for allowed integrations",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://kb.dga.or.th/gdx/1about/",
      "host": "kb.dga.or.th",
      "notes": "High-authority legal identity and commercial-registration context for government or approved integrations. Use separately from public POI and branch data; many fields may be restricted or require agency approval.",
      "source_profile_url": "/data/sources/dbd-gdx-juristic-person-and-commercial-registration-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-internal-trade-retail-price-and-consumer-goods-data",
      "registry_position": 327,
      "name": "Department of Internal Trade retail price and consumer goods data",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DIT data catalog, price pages, and CSV/API resources for selected consumer goods, agricultural prices, and market-price datasets",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog resources where published",
      "cadence_declared": "Daily, weekly, monthly, or annual depending dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datacatalog.dit.go.th/dataset/",
      "host": "datacatalog.dit.go.th",
      "notes": "Useful for retail price context and market trend monitoring, not exact shelf price at a specific store branch. Pair with retailer/marketplace feeds only when authorized.",
      "source_profile_url": "/data/sources/department-of-internal-trade-retail-price-and-consumer-goods-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "etda-digital-platform-registry",
      "registry_position": 324,
      "name": "ETDA digital platform registry",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "ETDA data catalog CSV datasets for registered/notified digital platform services and e-commerce related statistics",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public CSV/catalog access where published",
      "cadence_declared": "Daily/weekly for registry checks; monthly for platform ecosystem review",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.etda.or.th/th/dataset/",
      "host": "opendata.etda.or.th",
      "notes": "Identifies registered digital platforms and e-commerce platforms, not every seller on those platforms. Use for online-retail platform compliance context and join to marketplace/API layers only with authorization.",
      "source_profile_url": "/data/sources/etda-digital-platform-registry/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "excise-department-regulated-retail-license-datasets",
      "registry_position": 326,
      "name": "Excise Department regulated retail license datasets",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Excise Department public catalog/search resources for excise-controlled licenses such as liquor, tobacco, cards, and related sale/import/production permissions where published",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Public/catalog access where available; terms vary by resource",
      "cadence_declared": "Monthly or on license update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.excise.go.th/",
      "host": "excise.go.th",
      "notes": "Compliance layer for regulated retail categories. Use as a license flag and source link, not as a general store directory or recommendation source.",
      "source_profile_url": "/data/sources/excise-department-regulated-retail-license-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "farm-outlet-and-agricultural-market-datasets",
      "registry_position": 334,
      "name": "Farm Outlet and agricultural market datasets",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DIT and provincial catalog resources for agricultural central markets, farm outlet style retail, and agricultural price/market datasets",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog resources where published",
      "cadence_declared": "Monthly/quarterly for market lists; daily/weekly for price surfaces where available",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datacatalog.dit.go.th/th/dataset/",
      "host": "datacatalog.dit.go.th",
      "notes": "Useful for market and producer-retail pages, especially agricultural central markets and local product channels. Not a full consumer store directory.",
      "source_profile_url": "/data/sources/farm-outlet-and-agricultural-market-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "foursquare-retail-poi-enrichment",
      "registry_position": 346,
      "name": "Foursquare retail POI enrichment",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial Places API and data products for POI search, categories, features, hours, photos, tips, ratings, and popularity-style signals",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": true,
      "free_tier": "Commercial API; trial/allowance depends on account",
      "cadence_declared": "Monthly or on demand for POI enrichment",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://foursquare.com/products/places-api/",
      "host": "foursquare.com",
      "notes": "Commercial enrichment for store POI matching, hours, reviews, photos, categories, and popularity. It is not an official Thai legal/tax/license registry.",
      "source_profile_url": "/data/sources/foursquare-retail-poi-enrichment/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-store-pois-and-hours",
      "registry_position": 316,
      "name": "Google Places Thailand store POIs and hours",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places API with field-mask controlled place details, nearby/text search, place IDs, and commercial terms",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Paid/commercial API; account credits or trial terms may vary",
      "cadence_declared": "On request for search/open-now; weekly for key store detail refresh; monthly for place matching",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://developers.google.com/maps/documentation/places/web-service/legacy/details",
      "host": "developers.google.com",
      "notes": "Strongest commercial enrichment layer for store name, address, coordinates, business_status, opening_hours, phone, website, photos, price level, rating, reviews, and operational status. It is not a Thai legal business registry and must not be used as an open canonical database.",
      "source_profile_url": "/data/sources/google-places-thailand-store-pois-and-hours/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gs1-thailand-gtin-and-barcode-services",
      "registry_position": 331,
      "name": "GS1 Thailand GTIN and barcode services",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "GS1 Thailand membership and barcode/GTIN services for product and supply-chain identification",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Membership/service model; public informational pages",
      "cadence_declared": "On product registration or monthly master-data validation where authorized",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gs1th.org/en/get-a-barcode-en/",
      "host": "gs1th.org",
      "notes": "Best product identity layer for GTIN/EAN-13 and barcode-based product matching. It identifies products and parties, not store branch locations or live inventory.",
      "source_profile_url": "/data/sources/gs1-thailand-gtin-and-barcode-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "homepro-branch-locator",
      "registry_position": 339,
      "name": "HomePro branch locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official HomePro public branch locator and branch pages with address, phone, map, and office hours where exposed",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly/monthly for branch, phone, and opening-hour validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.homepro.co.th/store/finder.jsp",
      "host": "homepro.co.th",
      "notes": "Home improvement and household-retail branch truth. Useful for hours and maps, but inventory/service appointment availability needs retailer APIs or direct integration.",
      "source_profile_url": "/data/sources/homepro-branch-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "lazada-open-platform-thailand-sellers-and-listings",
      "registry_position": 344,
      "name": "Lazada Open Platform Thailand sellers and listings",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Lazada Open Platform partner/seller APIs for product, inventory, order, review, store decoration, logistics, and seller operations",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Partner/seller authorization required; not a public all-seller bulk feed",
      "cadence_declared": "Near real time/webhook or 5-30 minutes for authorized seller operations; daily for shop profile sync",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://open.lazada.com/doc/api.htm",
      "host": "open.lazada.com",
      "notes": "Online seller/product/inventory layer for authorized Lazada integrations. Public marketplace pages are not a clean open-data replacement.",
      "source_profile_url": "/data/sources/lazada-open-platform-thailand-sellers-and-listings/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "line-man-wongnai-merchant-ecosystem",
      "registry_position": 345,
      "name": "LINE MAN Wongnai merchant ecosystem",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Merchant app and partner ecosystem for restaurant/store information, reviews, delivery orders, CRM, and merchant operations where authorized",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Merchant/partner access; not a public all-merchant bulk API",
      "cadence_declared": "Near real time for authorized order operations; daily/weekly for merchant profile sync",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.wongnai.com/business-owners/wongnai-merchant-app",
      "host": "wongnai.com",
      "notes": "Useful for restaurant/food-shop merchant operations, delivery availability, reviews, and online/offline matching when authorized. Keep separate from public POI data and legal/tax records.",
      "source_profile_url": "/data/sources/line-man-wongnai-merchant-ecosystem/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "longdo-place-api-thailand-stores",
      "registry_position": 317,
      "name": "Longdo Place API Thailand stores",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Longdo Place API for reverse geocoding, search/suggest place, smart search, place details, Thai-local addresses, phone, website, and category data",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Developer/commercial API; plan and quota depend on Longdo account",
      "cadence_declared": "On request for search; weekly/monthly cache refresh for key store profiles",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://map.longdo.com/products/api/place",
      "host": "map.longdo.com",
      "notes": "Thailand-local POI/search layer useful for Thai names, address normalization, phone, website, place type, reverse geocoding, and place search. Use as licensed POI enrichment alongside OSM, Google, NOSTRA, and brand locators.",
      "source_profile_url": "/data/sources/longdo-place-api-thailand-stores/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "lotus-thailand-store-locator",
      "registry_position": 337,
      "name": "Lotus Thailand store locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official Lotus's public store locator for store formats, locations, and branch search",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly for branch discovery; monthly for format and service changes",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.lotuss.com/en/store-locator",
      "host": "lotuss.com",
      "notes": "Chain branch layer for Lotus's Hypermarket, Talad, Go Fresh, and related formats. Use for branch truth, then enrich hours and reviews via POI sources if allowed.",
      "source_profile_url": "/data/sources/lotus-thailand-store-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "makro-thailand-branch-locator",
      "registry_position": 338,
      "name": "Makro Thailand branch locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official Makro public branch/contact pages for wholesale and food-service branch locations and hours where exposed",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly/monthly for branch and hours validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.makro.co.th/en/contact-us-branch-makro",
      "host": "makro.co.th",
      "notes": "Warehouse/wholesale branch layer for food-service, grocery, and professional buyer use cases. Keep separate from CP/DBD legal identity and retailer-private inventory.",
      "source_profile_url": "/data/sources/makro-thailand-branch-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "moc-gisproductprice-api",
      "registry_position": 328,
      "name": "MOC GISProductPrice API",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Ministry of Commerce Open Data API endpoint for agricultural product price data by product_id and date range",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public API endpoint",
      "cadence_declared": "Daily according to MOC page metadata",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://data.moc.go.th/OpenData/GISProductPrice",
      "host": "data.moc.go.th",
      "notes": "Returns product ID/name/category/unit and date-level price_min/price_max lists and averages. Strong for product price context; not a store-specific shelf-price or inventory API.",
      "source_profile_url": "/data/sources/moc-gisproductprice-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nostra-map-api-thailand-retail-pois",
      "registry_position": 318,
      "name": "NOSTRA Map API Thailand retail POIs",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "NOSTRA Map developer platform APIs for basemap, web service APIs, POI search, geocoding, routing, and Thai location services",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/developer access; account and API key required",
      "cadence_declared": "On request for search/routing; weekly/monthly cache refresh subject to license",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.nostramap.com/developmentplatform/",
      "host": "nostramap.com",
      "notes": "Commercial Thai geospatial/POI enrichment source for store and retail places, coordinates, nearby search, category filtering, routing context, and map-quality validation.",
      "source_profile_url": "/data/sources/nostra-map-api-thailand-retail-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-retail-and-juristic-person-records",
      "registry_position": 320,
      "name": "Open DBD retail and juristic person records",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open-DBD public datasets and API-style catalog resources for juristic-person records, new registrations, dissolved businesses, status, names, capital, objectives, and address fields",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public/open data where published",
      "cadence_declared": "Monthly for active/business status; weekly/monthly for new registrations",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://opendata.dbd.go.th/",
      "host": "opendata.dbd.go.th",
      "notes": "Official legal-entity layer for checking whether a company exists and what it is registered to do. It does not prove every physical store branch, opening hours, products, reviews, or inventory.",
      "source_profile_url": "/data/sources/open-dbd-retail-and-juristic-person-records/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-shop-pois",
      "registry_position": 319,
      "name": "OpenStreetMap Thailand shop POIs",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using shop=*, amenity=marketplace, amenity=pharmacy, brand, operator, opening_hours, address, contact, and payment tags",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly nationally; daily/weekly for Bangkok, tourist zones, and fast-changing retail clusters",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Key:shop",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free geospatial store spine. Useful for shop categories, coordinates, polygons, opening_hours, brand, operator, contact tags, wheelchair/accessibility, payment hints, markets, and pharmacies. Coverage is incomplete and it is not legal/tax/license proof.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-shop-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "otop-producer-and-shop-datasets",
      "registry_position": 332,
      "name": "OTOP producer and shop datasets",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OTOP Big Data/API references, provincial GDC datasets, and public OTOP product/operator catalogs where exposed",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Public catalogs and some API/reference documents; access may vary by agency",
      "cadence_declared": "Monthly/quarterly for product/operator graph; annual for some provincial statistics",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://i-service.industry.go.th/i-data/_document/ex/ext_Otop.pdf",
      "host": "i-service.industry.go.th",
      "notes": "Community retail layer for OTOP producers, products, categories, provinces, and some shop/community datasets. Producer identity does not always equal a public retail storefront.",
      "source_profile_url": "/data/sources/otop-producer-and-shop-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "revenue-department-vat-refund-for-tourist-shops",
      "registry_position": 323,
      "name": "Revenue Department VAT Refund for Tourist shops",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Revenue Department CSV/catalog dataset and VRT store/navigation systems for approved VAT Refund for Tourist shop operators and establishment addresses",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public CSV/catalog access under Open Data Common where listed",
      "cadence_declared": "Monthly according to catalog metadata; VRT public pages/app surfaces on change",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.rd.go.th/en/dataset/vrt_taxpayeraddress_01",
      "host": "data.rd.go.th",
      "notes": "Best official layer for stores approved to sell under the VAT Refund for Tourist scheme. Pair with Revenue Department VRT rules, P.P.10 requirements, and store-level POI/hours enrichment.",
      "source_profile_url": "/data/sources/revenue-department-vat-refund-for-tourist-shops/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "revenue-department-vat-registrants",
      "registry_position": 322,
      "name": "Revenue Department VAT registrants",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Revenue Department data catalog CSV/API-style dataset for active VAT-registered operators and establishment addresses",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public CSV/catalog access under Open Data Common where listed",
      "cadence_declared": "Monthly according to catalog metadata",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.rd.go.th/dataset/?tags=vat",
      "host": "data.rd.go.th",
      "notes": "Useful for tax/VAT trust scoring and branch/address validation. A VAT branch can be a store, office, warehouse, or other establishment, so do not treat it as a public-facing retail POI without matching.",
      "source_profile_url": "/data/sources/revenue-department-vat-registrants/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "shopee-open-platform-thailand-sellers-and-listings",
      "registry_position": 343,
      "name": "Shopee Open Platform Thailand sellers and listings",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Shopee Open Platform partner/seller APIs for shop, product, order, logistics, promotion, and account operations",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Partner/seller authorization required; not a public all-seller bulk feed",
      "cadence_declared": "Near real time/webhook or 5-30 minutes for authorized seller operations; daily for shop profile sync",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://open.shopee.com/",
      "host": "open.shopee.com",
      "notes": "Online marketplace integration layer for seller-owned data. Use only for authorized shops/listings/orders/inventory; do not scrape or treat as a public national store registry.",
      "source_profile_url": "/data/sources/shopee-open-platform-thailand-sellers-and-listings/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-fda-drug-place-and-pharmacy-licenses",
      "registry_position": 325,
      "name": "Thai FDA drug place and pharmacy licenses",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Thai FDA data catalog and public search surfaces for drug-place licenses, pharmacy/shop names, province, and license details where exposed",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog/search access; license terms can vary by resource",
      "cadence_declared": "Monthly for license datasets; on request for search validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.fda.moph.go.th/dataset/cf621463-524a-4bc0-8a92-62f32e2650d4",
      "host": "catalog.fda.moph.go.th",
      "notes": "Official regulated-store layer for pharmacies and drug places. It does not reliably provide current opening hours, pharmacist schedule, product inventory, or consumer reviews.",
      "source_profile_url": "/data/sources/thai-fda-drug-place-and-pharmacy-licenses/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thong-fah-pracharat-store-data",
      "registry_position": 333,
      "name": "Thong Fah Pracharat store data",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DIT Thong Fah Pracharat app surfaces and provincial/GDC datasets for welfare-card/community store counts or store search details where exposed",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public app/catalog surfaces; automated access requires terms review",
      "cadence_declared": "Monthly for catalog counts; on request/app-defined for shop search",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://apps.apple.com/th/app/%E0%B8%98%E0%B8%87%E0%B8%9F-%E0%B8%B2%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%8A%E0%B8%B2%E0%B8%A3-%E0%B8%90/id1494655010",
      "host": "apps.apple.com",
      "notes": "Important layer for welfare-card and low-price community stores. The app describes nearby search, store name search, location, owner/shop name, address, phone, and map navigation, while many public datasets expose only counts.",
      "source_profile_url": "/data/sources/thong-fah-pracharat-store-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tpso-price-indexes-and-retail-economic-data",
      "registry_position": 329,
      "name": "TPSO price indexes and retail economic data",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Bureau of Trade and Economic Indices public index pages and downloadable statistics for CPI, PPI, CMI, EXI/IMI, consumer confidence, and related price indicators",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public web/statistical access",
      "cadence_declared": "Monthly for most index releases",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.price.moc.go.th/en/Default5.aspx",
      "host": "price.moc.go.th",
      "notes": "Retail and price-index context for consumer goods and macro retail conditions. Useful for trend pages, not branch-level store prices.",
      "source_profile_url": "/data/sources/tpso-price-indexes-and-retail-economic-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "watsons-thailand-store-locator",
      "registry_position": 341,
      "name": "Watsons Thailand store locator",
      "domain": "Stores, retail, and shopping",
      "category_slug": "stores-retail-and-shopping",
      "source_kind": "store",
      "graph_class": "entities",
      "graph_role": "Urban utility and commerce layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "store",
        "market",
        "mall",
        "destination",
        "district"
      ],
      "feeds_signals": [
        "utility_density",
        "retail_access"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Watsons Thailand public store pages/search with store address and opening hours where exposed",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access; automated reuse terms require review",
      "cadence_declared": "Weekly/monthly for branch and opening-hour validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.watsons.co.th/en/store-finder",
      "host": "watsons.co.th",
      "notes": "Health and beauty chain branch layer. Pair with FDA license data where a branch is a licensed pharmacy and with Google/OSM/Longdo for POI enrichment.",
      "source_profile_url": "/data/sources/watsons-thailand-store-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "agoda-commercial-context",
      "registry_position": 69,
      "name": "Agoda commercial context",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial booking site, app, and partner surfaces; no open public bulk API verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Public consumer site plus commercial/partner integrations",
      "cadence_declared": "On request / listing and rate updates vary",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.agoda.com/",
      "host": "agoda.com",
      "notes": "Thailand-heavy accommodation search, demand, pricing, review, and area context from Agoda consumer and partner surfaces. Useful as commercial market context and traveler-facing discovery, but structured production access depends on partnership or explicit automation permission.",
      "source_profile_url": "/data/sources/agoda-commercial-context/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "booking-accommodation-partner-data",
      "registry_position": 68,
      "name": "Booking accommodation partner data",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Partner/commercial accommodation APIs and content where authorized",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial / partner access required",
      "cadence_declared": "On request for rates, availability, policies, and content",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.booking.com/demand/docs/accommodations/overview",
      "host": "developers.booking.com",
      "notes": "Live accommodation inventory, rate, room, cancellation, payment, and content context through Booking partner surfaces where authorized. Use for booking and availability workflows only when contractual access exists.",
      "source_profile_url": "/data/sources/booking-accommodation-partner-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dbd-hotel-operators",
      "registry_position": 70,
      "name": "DBD hotel operators",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public business-search and open-data surfaces for legal-entity lookup where exposed",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where published; bulk and reuse terms vary by service",
      "cadence_declared": "Weekly or monthly for operator checks",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datawarehouse.dbd.go.th/",
      "host": "datawarehouse.dbd.go.th",
      "notes": "Department of Business Development company-discovery context for hotel, resort, serviced-apartment, and travel-accommodation operators. Useful for legal entity, company status, and registered business-objective checks, not branch-level room inventory or traveler-facing hotel quality.",
      "source_profile_url": "/data/sources/dbd-hotel-operators/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dnp-tourism-datasets",
      "registry_position": 205,
      "name": "DNP Tourism Datasets",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "tourism",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "observation_scope": [
        "park_access_context_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "dnp-park-tourism-support",
          "name": "DNP park tourism support",
          "kind": "entity-observation",
          "cadence": "Scheduled / catalog refresh"
        }
      ],
      "current_signal_types": [
        "park_access_context"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public catalog resources, CSV, and API-style downloads where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly or periodic depending on park, attraction, fee, and visitor dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://data.go.th/th/organization/dnp",
      "host": "data.go.th",
      "notes": "Department of National Parks tourism, attraction, fee, and visitor datasets useful for park-access context, seasonal closure notes, and conservation-area planning. Treat as park and attraction support data unless a stable daily operational closure feed is verified.",
      "source_profile_url": "/data/sources/dnp-tourism-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-hotels",
      "registry_position": 66,
      "name": "Google Places hotels",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Google Places APIs for place search, place details, photos, reviews, ratings, and selected accommodation attributes",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Commercial / pay-as-you-go API",
      "cadence_declared": "On request / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.google.com/maps/documentation/places/web-service",
      "host": "developers.google.com",
      "notes": "Commercial accommodation POI enrichment for hotel names, place IDs, addresses, maps, ratings, reviews, photos, phone, website, and open-status context where available. Useful for public-facing hotel discovery, not Thai legal hotel registration or live room inventory.",
      "source_profile_url": "/data/sources/google-places-hotels/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "hotel-license-data-thailand",
      "registry_position": 71,
      "name": "Hotel license data Thailand",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Reference only",
      "access_class_key": "reference-only",
      "access_class_detail": "Standards, laws, manuals, or context. Useful for interpretation rather than observations.",
      "automation_policy": "Explanation / standards only",
      "automation_policy_key": "reference-context",
      "automation_policy_detail": "Use for standards, laws, thresholds, and definitions rather than measurements.",
      "runtime_role": "Reference only",
      "runtime_role_key": "reference-only",
      "runtime_role_detail": "Used for standards or explanatory context, not live runtime ingestion.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Used for standards, laws, or explanatory context only.",
      "gated_candidate": false,
      "access_method": "Official accommodation-statistics page and licensing-related reference context; no clean national public bulk hotel-license API verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Reference context only until a stable public licensing dataset is verified",
      "cadence_declared": "Monthly or quarterly verification",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://common.mots.go.th/th/catalogs/tourism-accom-stats",
      "host": "common.mots.go.th",
      "notes": "Reference-only accommodation licensing and classification context anchored by official Ministry of Tourism and Sports accommodation statistics. Useful for province-level hotel/resort, guesthouse, room, and occupancy context plus hotel-act category interpretation, but do not treat it as a verified national open hotel-license feed.",
      "source_profile_url": "/data/sources/hotel-license-data-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "osm-thailand-accommodation",
      "registry_position": 67,
      "name": "OSM Thailand accommodation",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OpenStreetMap Overpass API and ODbL geospatial data",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Current community-edited data; daily or weekly refresh is typical",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Free accommodation map spine for tourism=hotel, tourism=guest_house, tourism=hostel, tourism=resort, tourism=apartment, tourism=camp_site, villas, and related lodging POIs. Good for coordinates, names, and map context, not official licensing or live rates.",
      "source_profile_url": "/data/sources/osm-thailand-accommodation/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "provincial-hotel-registration-gdc-cluster",
      "registry_position": 367,
      "name": "Provincial hotel registration GDC cluster",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Catalog search cluster with province-level hotel-registration and licensed-accommodation CSV/XLSX datasets",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public catalog access where provincial resources remain published",
      "cadence_declared": "Annual / provincial release schedule",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://gdcatalog.go.th/en/dataset/?tags=%E0%B9%82%E0%B8%A3%E0%B8%87%E0%B9%81%E0%B8%A3%E0%B8%A1",
      "host": "gdcatalog.go.th",
      "notes": "Fragmented provincial evidence for registered hotels and licensed accommodation counts or lists. Useful as a registered-accommodation confidence cluster, not as a single national hotel-license API, live availability feed, room inventory source, or quality rating.",
      "source_profile_url": "/data/sources/provincial-hotel-registration-gdc-cluster/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tat-accommodation-data",
      "registry_position": 65,
      "name": "TAT accommodation data",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer API portal and official tourism-data surfaces for accommodation metadata",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free registration/API terms",
      "cadence_declared": "On demand for API-backed fields; verify listing freshness weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://developers.tourismthailand.org/",
      "host": "developers.tourismthailand.org",
      "notes": "Tourism Authority of Thailand accommodation listings and tourism metadata for hotels, resorts, guesthouses, services, and nearby travel context. Useful for destination depth and accommodation-area intelligence, not live room inventory.",
      "source_profile_url": "/data/sources/tat-accommodation-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tat-tourism-data-catalog-statistics",
      "registry_position": 64,
      "name": "TAT tourism data catalog/statistics",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "catalog",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/API/CSV/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.mots.go.th/",
      "host": "mots.go.th",
      "notes": "Tourism statistics, arrivals, survey datasets, and tourism-sector resources.",
      "source_profile_url": "/data/sources/tat-tourism-data-catalog-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thailand-tourist-police-app",
      "registry_position": 102,
      "name": "Thailand Tourist Police app",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "safety",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public app-information page",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public app",
      "cadence_declared": "On app-feature or public-service update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.touristpolice.go.th/post/tpbnews2025072101",
      "host": "touristpolice.go.th",
      "notes": "Public app-information layer for the Thailand Tourist Police application, including emergency assistance, translation, location sharing, alerts, and app-based tourist support context. App-side operational data is not a public bulk API.",
      "source_profile_url": "/data/sources/thailand-tourist-police-app/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tourism-authority-of-thailand-api",
      "registry_position": 63,
      "name": "Tourism Authority of Thailand API",
      "domain": "Tourism and travel",
      "category_slug": "tourism-and-travel",
      "source_kind": "accommodation",
      "graph_class": "entities",
      "graph_role": "Destination and attraction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "attraction",
        "hotel_area",
        "route",
        "venue_zone"
      ],
      "feeds_signals": [
        "destination_fit",
        "accommodation_context",
        "attraction_density",
        "park_access_context"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "where_to_stay",
        "food_route"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free registration/API terms",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.tourismthailand.org/",
      "host": "developers.tourismthailand.org",
      "notes": "Attractions, accommodation, routes, events, and tourism services through the Tourism Authority developer surfaces. Keep the classic developer portal and newer tatdataapi.io documentation in sync before describing this as one stable API contract.",
      "source_profile_url": "/data/sources/tourism-authority-of-thailand-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ads-b-exchange-api",
      "registry_position": 150,
      "name": "ADS-B Exchange API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial live aircraft-data products and API access",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial access; subscription required for most products",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.adsbexchange.com/data-products/",
      "host": "adsbexchange.com",
      "notes": "Unfiltered ADS-B flight data products and APIs for aircraft position, hex lookup, and live tracking. Strong positional layer, not a schedule or fare source.",
      "source_profile_url": "/data/sources/ads-b-exchange-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aerothai-notam-thai",
      "registry_position": 142,
      "name": "AEROTHAI NOTAM Thai",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "aviation-publication",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "NOTAM, PIB, and chart web system with registration/login for some services",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Public/member access; some functions require account registration",
      "cadence_declared": "Operational / real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://notamthai.aerothai.aero/main.aspx",
      "host": "notamthai.aerothai.aero",
      "notes": "AEROTHAI AIS surface for NOTAM, SNOWTAM, ASHTAM, PIB, aerodrome information, and charts. Strong operational disruption layer, but account/login and usage terms matter.",
      "source_profile_url": "/data/sources/aerothai-notam-thai/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "amadeus-cars-and-transfers-apis",
      "registry_position": 188,
      "name": "Amadeus Cars and Transfers APIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer documentation for cars and transfers search, booking, and management flows",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/developer access depends on Amadeus product and authorization",
      "cadence_declared": "On request for search and booking; docs change on product revision",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.amadeus.com/self-service/apis-docs/guides/developer-guides/resources/cars-transfers/",
      "host": "developers.amadeus.com",
      "notes": "Amadeus Cars and Transfers API family for car or transfer search and related ordering flows. Use for authorized booking or transfer integrations, not as an open public inventory feed.",
      "source_profile_url": "/data/sources/amadeus-cars-and-transfers-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "amadeus-flight-apis",
      "registry_position": 152,
      "name": "Amadeus Flight APIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "store",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "store",
        "market",
        "district"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer documentation for flight offers, inspiration, routes, and booking-related flows",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Developer self-service tier exists; production/commercial use and higher volumes require credentials and contract",
      "cadence_declared": "On request for shopping and repricing; docs change on product revision",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.amadeus.com/self-service/apis-docs/guides/developer-guides/resources/flights/",
      "host": "developers.amadeus.com",
      "notes": "Flight offers search, routes, inspiration, pricing, and related airline retail APIs. Strong fare-shopping and availability layer, not an official airport or regulator source.",
      "source_profile_url": "/data/sources/amadeus-flight-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-air-transport-statistics",
      "registry_position": 137,
      "name": "AOT air transport statistics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "observation_scope": [
        "official_airport_total_movements",
        "official_airport_total_passengers",
        "official_airport_scale_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-traffic-stats",
          "name": "AOT airport traffic statistics",
          "kind": "entity-observation",
          "cadence": "Monthly / fiscal-year workbook update"
        }
      ],
      "current_signal_types": [
        "airport_scale_context"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Investor/public statistics downloads and archive pages",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly / fiscal-year updates",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://investor.airportthai.co.th/transport.html",
      "host": "investor.airportthai.co.th",
      "notes": "Passenger, aircraft, cargo, and mail statistics for Airports of Thailand airports with current fiscal-year updates and long historical archives.",
      "source_profile_url": "/data/sources/aot-air-transport-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-airport-flight-status",
      "registry_position": 138,
      "name": "AOT airport flight status",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "observation_scope": [
        "official_airport_board_surface_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-flight-board-surface",
          "name": "AOT airport flight-board surface",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_board_surface_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public airport flight-status pages and Sawasdee by AOT flight-board surfaces",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public web/app surfaces; no general documented public API was verified",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://suvarnabhumi.airportthai.co.th/flight",
      "host": "suvarnabhumi.airportthai.co.th",
      "notes": "Arrivals and departures for AOT airports with airline, flight number, status, and passenger-facing board context. Some airport/app surfaces also mention gate, check-in counter, or baggage information, but these pages should be treated as brittle public surfaces rather than a guaranteed API.",
      "source_profile_url": "/data/sources/aot-airport-flight-status/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-airport-ground-transport-pages",
      "registry_position": 139,
      "name": "AOT airport ground transport pages",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport guide and service pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://suvarnabhumi.airportthai.co.th/service/airport-guide/detail/Transportation_BKK",
      "host": "suvarnabhumi.airportthai.co.th",
      "notes": "Structured public AOT airport transport pages covering taxi rules, Grab pickup guidance, rental-counter presence, airport rail or shuttle context where published, and pickup or terminal instructions. Useful for official airport-ground-service support and pickup-rule context, not live queue length, ETA, or rental inventory.",
      "source_profile_url": "/data/sources/aot-airport-ground-transport-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-airport-noise-monitoring",
      "registry_position": 249,
      "name": "AOT airport noise monitoring",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "complaint",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public sustainability and environmental reporting page",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Quarterly or annual reporting updates",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.airportthai.co.th/home_corporation/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%88%e0%b8%b1%e0%b8%94%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%a3%e0%b8%b1%e0%b8%9e%e0%b8%a2%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%98%e0%b8%a3%e0%b8%a3%e0%b8%a1%e0%b8%8a/",
      "host": "airportthai.co.th",
      "notes": "Airports of Thailand public environmental-management page describing environmental governance across all 6 AOT airports plus public complaint and community-contact context for airport-noise and related environmental impacts. Useful as reference and disclosure context, but direct automated fetch behavior can vary and it should not be treated as a stable live measurement feed.",
      "source_profile_url": "/data/sources/aot-airport-noise-monitoring/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-annual-report-set-filing",
      "registry_position": 250,
      "name": "AOT annual report / SET filing",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "observation_scope": [
        "official_airport_environmental_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-environment-support",
          "name": "AOT airport environmental support",
          "kind": "entity-observation",
          "cadence": "Annual report publication with periodic factsheet refresh"
        }
      ],
      "current_signal_types": [
        "airport_environmental_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public SET factsheet page with linked annual report ZIP",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Annual report publication with periodic factsheet refresh",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.set.or.th/en/market/product/stock/quote/aot/factsheet",
      "host": "set.or.th",
      "notes": "SET-hosted AOT company factsheet plus public annual report ZIP link. Useful for operator-level airport disclosure, airport-network scope, environmental or community wording, and airport-noise governance context extracted from the annual report. This is official disclosure support, not live airport operations or measured sound-level truth.",
      "source_profile_url": "/data/sources/aot-annual-report-set-filing/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-chiang-mai-car-rental-services",
      "registry_position": 184,
      "name": "AOT Chiang Mai car rental services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport guide page and linked provider pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://chiangmai.airportthai.co.th/service/way-to-airport/detail/125",
      "host": "chiangmai.airportthai.co.th",
      "notes": "Official Chiang Mai Airport car-rental services page and linked provider counters. Useful for airport pickup and supplier presence, not quote or availability data.",
      "source_profile_url": "/data/sources/aot-chiang-mai-car-rental-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-don-mueang-car-rental-services",
      "registry_position": 182,
      "name": "AOT Don Mueang car rental services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport guide page and linked provider pages",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://donmueang.airportthai.co.th/service/way-to-airport/detail/127",
      "host": "donmueang.airportthai.co.th",
      "notes": "Official Don Mueang airport page for car-rental services and linked supplier counters. Useful for terminal and pickup guidance, not a live booking or stock API.",
      "source_profile_url": "/data/sources/aot-don-mueang-car-rental-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-don-mueang-grab-pickup-points",
      "registry_position": 170,
      "name": "AOT Don Mueang Grab pickup points",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport service page",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://donmueang.airportthai.co.th/service/transportation/detail/835",
      "host": "donmueang.airportthai.co.th",
      "notes": "Official Don Mueang Grab service page with terminal pickup area information and service-type context. Useful for airport ride-hailing pickup guidance, not live dispatch or fare ingestion.",
      "source_profile_url": "/data/sources/aot-don-mueang-grab-pickup-points/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-don-mueang-taxi-meter-service",
      "registry_position": 166,
      "name": "AOT Don Mueang taxi meter service",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official airport guide page",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://donmueang.airportthai.co.th/service/airport-guide/detail/SpecialAssistanceFacilitiesandServices_DMK",
      "host": "donmueang.airportthai.co.th",
      "notes": "Official Don Mueang taxi pickup-point and service guidance, including Terminal 1 Door 8 and Terminal 2 Door 15 taxi areas, 24-hour availability, and special taxi options. Use for airport pickup rules; verify baggage-fee or service-detail changes against current airport transport pages.",
      "source_profile_url": "/data/sources/aot-don-mueang-taxi-meter-service/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-phuket-car-rental-services",
      "registry_position": 183,
      "name": "AOT Phuket car rental services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport guide page and linked provider pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://phuket.airportthai.co.th/service/way-to-airport/detail/126",
      "host": "phuket.airportthai.co.th",
      "notes": "Official Phuket Airport car-rental services page with airport-level rental presence and linked provider counters. Useful for airport-counter and pickup context, not live inventory.",
      "source_profile_url": "/data/sources/aot-phuket-car-rental-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-suvarnabhumi-car-rental-services",
      "registry_position": 181,
      "name": "AOT Suvarnabhumi car rental services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport guide page and linked provider pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://suvarnabhumi.airportthai.co.th/service/airport-guide/detail/Transportation_BKK",
      "host": "suvarnabhumi.airportthai.co.th",
      "notes": "Official Suvarnabhumi airport transport guidance showing self-drive car-rental availability at Level 2, Gate 7, with linked supplier counter pages for floor, gate, hours, and contact details. Good for airport-counter truth, not live availability.",
      "source_profile_url": "/data/sources/aot-suvarnabhumi-car-rental-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-suvarnabhumi-grab-pickup-points",
      "registry_position": 169,
      "name": "AOT Suvarnabhumi Grab pickup points",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport service page",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://suvarnabhumi.airportthai.co.th/service/transportation/detail/927",
      "host": "suvarnabhumi.airportthai.co.th",
      "notes": "Official Suvarnabhumi Grab pickup and drop-off point page, including gate and level information plus airport application-pickup rules. Good for airport pickup instructions, not quote or ETA data.",
      "source_profile_url": "/data/sources/aot-suvarnabhumi-grab-pickup-points/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "aot-suvarnabhumi-public-taxi",
      "registry_position": 165,
      "name": "AOT Suvarnabhumi public taxi",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_airport_ground_service_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aot-airport-ground-services",
          "name": "AOT airport ground-service support",
          "kind": "entity-observation",
          "cadence": "On change / operational page"
        }
      ],
      "current_signal_types": [
        "airport_ground_service_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official airport transport service page",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On change / operational page",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://suvarnabhumi.airportthai.co.th/service/transportation/detail/304",
      "host": "suvarnabhumi.airportthai.co.th",
      "notes": "Official Suvarnabhumi public-taxi pickup, counter/ticket-machine, 24-hour service, surcharge, toll, baggage-fee, and taxi-category information. Use for airport pickup rules and fare caveats, not live queue length.",
      "source_profile_url": "/data/sources/aot-suvarnabhumi-public-taxi/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bangkok-motorcycle-taxi-stands-and-drivers",
      "registry_position": 171,
      "name": "Bangkok motorcycle taxi stands and drivers",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_motorcycle_taxi_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bangkok-motorcycle-taxi-support",
          "name": "Bangkok motorcycle-taxi support",
          "kind": "entity-observation",
          "cadence": "Historical / static dataset with periodic validation"
        }
      ],
      "current_signal_types": [
        "official_motorcycle_taxi_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "DLT/data.go.th dataset with downloadable resources and catalog metadata",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data",
      "cadence_declared": "Historical / static dataset; validate periodically for newer releases",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/dataset/pubmotorcycle",
      "host": "data.go.th",
      "notes": "Counts of motorcycle-taxi stands (wins) and public motorcycle drivers in Bangkok. Useful for stand and driver supply context, not exact live availability or stand coordinates.",
      "source_profile_url": "/data/sources/bangkok-motorcycle-taxi-stands-and-drivers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bmta-route-and-fare-pages",
      "registry_position": 223,
      "name": "BMTA route and fare pages",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public website/app route search; realtime app data not documented as public API",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website and app view",
      "cadence_declared": "Static crawl daily or weekly; realtime only through permission/partnership",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.bmta.co.th/",
      "host": "bmta.co.th",
      "notes": "Bangkok bus route, fare, operating-hour, depot, and route metadata. BMTA BUS app exposes realtime tracking to users, but no open public realtime API was verified.",
      "source_profile_url": "/data/sources/bmta-route-and-fare-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "booking-com-demand-api-car-rentals",
      "registry_position": 185,
      "name": "Booking.com Demand API car rentals",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Partner API documentation for content, search, redirect, booking, depots, suppliers, details, and reporting flows",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Partner authorization required; API credentials and commercial terms apply",
      "cadence_declared": "On request for quotes and availability; static docs on product change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.booking.com/demand/docs/cars/overview",
      "host": "developers.booking.com",
      "notes": "Real-time car-rental inventory, availability, pricing, depot, supplier, and booking functionality through Booking.com Demand API Cars. Use for live quote and booking flows only when authorized.",
      "source_profile_url": "/data/sources/booking-com-demand-api-car-rentals/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bts-skytrain-system-maps-and-service-pages",
      "registry_position": 213,
      "name": "BTS SkyTrain system maps and service pages",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rail",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "observation_scope": [
        "official_rapid_transit_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bangkok-rapid-transit-official-pages",
          "name": "Bangkok rapid-transit official pages",
          "kind": "entity-observation",
          "cadence": "Daily / on official route-map or service-page change"
        }
      ],
      "current_signal_types": [
        "urban_rapid_transit_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public route-map, station, fare, and service-information pages",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website",
      "cadence_declared": "Static pages with service updates as published",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.bts.co.th/eng/routemap-mb/index.html",
      "host": "bts.co.th",
      "notes": "Bangkok Mass Transit System public route maps, fares, interchange guidance, first/last train context, and station/service pages. Useful for public rail-wayfinding and base-choice logic, but no clean public bulk rail API was verified.",
      "source_profile_url": "/data/sources/bts-skytrain-system-maps-and-service-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-aip-thailand",
      "registry_position": 131,
      "name": "CAAT AIP Thailand",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "aviation-publication",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official eAIP web publication, AIRAC packages, charts, and aeronautical-document downloads",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public for individual personal, non-commercial use; business or internal commercial use needs licensing review",
      "cadence_declared": "AIRAC cycle / on publication",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://aip.caat.or.th/",
      "host": "aip.caat.or.th",
      "notes": "Official AIP Thailand and eAIP publication for GEN, ENR, AD, aerodrome, runway, procedure, communication, navigation, and chart data. Strongest official airport and airspace master-data layer, with explicit licensing constraints.",
      "source_profile_url": "/data/sources/caat-aip-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-air-transport-statistics",
      "registry_position": 134,
      "name": "CAAT air transport statistics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official publication page and linked monthly, quarterly, and annual report files",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Monthly / quarterly / annual publications",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.caat.or.th/en/publications/air-transportation-and-aircraft/air-transportation-statistics/",
      "host": "caat.or.th",
      "notes": "Official Thai aviation passenger, flight, cargo, mail, and aircraft-movement statistics reports. Useful for airport and industry trend pages, not live flight operations.",
      "source_profile_url": "/data/sources/caat-air-transport-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-aircraft-noise-standards",
      "registry_position": 248,
      "name": "CAAT aircraft noise standards",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official guidance page and linked regulation or PDF materials",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On legal or guidance update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.caat.or.th/en/certificates-licenses/aircraft/guidance-material/noise-certificate/",
      "host": "caat.or.th",
      "notes": "Civil Aviation Authority of Thailand aircraft-noise certificate guidance linked to ICAO Annex 16 and Thai aircraft environmental-protection standards such as TCAR AIR Part 34.",
      "source_profile_url": "/data/sources/caat-aircraft-noise-standards/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-aircraft-register",
      "registry_position": 132,
      "name": "CAAT aircraft register",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official publication page and linked aircraft-register PDF files",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.caat.or.th/en/publications/air-transportation-and-aircraft/aircraft-register-and-statistics/",
      "host": "caat.or.th",
      "notes": "Thailand aircraft register publication with certificate-of-registration status, registration mark, manufacturer, model, serial number, and operator fields. Useful for Thai-registered aircraft identity, not live operations.",
      "source_profile_url": "/data/sources/caat-aircraft-register/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-airport-slot-coordination",
      "registry_position": 136,
      "name": "CAAT airport slot coordination",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official slot-allocation notices, coordination parameters, NAC charts, and guidance pages",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Free public",
      "cadence_declared": "Seasonal / on coordination update",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.caat.or.th/category/data-research-en/airport-slot-allocation/",
      "host": "caat.or.th",
      "notes": "Airport slot-allocation rules, coordination guidance, Level 2 and Level 3 airport context, seasonal notices, and NAC charts for Thai airports. Useful for slot and capacity intelligence, not public airline-by-airline live slot holdings.",
      "source_profile_url": "/data/sources/caat-airport-slot-coordination/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-aoc-holders",
      "registry_position": 133,
      "name": "CAAT AOC holders",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official certificate-status page and linked operator tables",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.caat.or.th/certificates-licenses/air-operator/certificate-status-statistics/",
      "host": "caat.or.th",
      "notes": "Air Operator Certificate holders of Thailand with AOC number, operator identity, certificate status, and issue/amendment context. Use for airline and operator legality, not schedules or sales availability.",
      "source_profile_url": "/data/sources/caat-aoc-holders/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "caat-daily-airport-air-transport-statistics",
      "registry_position": 135,
      "name": "CAAT daily airport air transport statistics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "finance",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "country",
        "province",
        "market"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official dashboard/publication page",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Daily preliminary updates",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.caat.or.th/publications/air-transport-and-aircraft-statistics/air-tran-stat/air-tran-stat-daily/",
      "host": "caat.or.th",
      "notes": "Daily airport passenger and movement statistics by airport in Thailand. CAAT notes the data comes from AOT, Department of Airports, U-Tapao, and Bangkok Airways and is preliminary while airlines and AOT verify it.",
      "source_profile_url": "/data/sources/caat-daily-airport-air-transport-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "cartrawler-connect-platform-api",
      "registry_position": 189,
      "name": "CarTrawler Connect Platform API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Partner API platform and commercial integration documentation",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Partner/commercial access required",
      "cadence_declared": "On request for inventory and booking; platform details change on product revision",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://corporate.cartrawler.com/en-gb/our-proposition/connect-technology/",
      "host": "corporate.cartrawler.com",
      "notes": "CarTrawler Connect Platform powers car-rental solutions for travel brands through partner API integrations. Use as a B2B rental and mobility feed where explicit commercial access exists.",
      "source_profile_url": "/data/sources/cartrawler-connect-platform-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "cirium-flightstats-api",
      "registry_position": 146,
      "name": "Cirium FlightStats API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial API and stream product pages",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Evaluation/commercial access; credentials and contract required",
      "cadence_declared": "Operational / near real time for status; daily for schedules and archives",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.cirium.com/data/aviation-api/",
      "host": "cirium.com",
      "notes": "Cirium Sky / FlightStats aviation APIs for flight status, schedules, tracking, alerts, weather, NOTAM, and related aviation datasets. Strong enterprise layer for flight intelligence, not a free public source.",
      "source_profile_url": "/data/sources/cirium-flightstats-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-airports-data-catalog",
      "registry_position": 141,
      "name": "Department of Airports data catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Agency CKAN-style catalog, dataset pages, and API metadata",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where resources are open",
      "cadence_declared": "Varies by dataset",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://gdcatalog.airports.go.th/en/",
      "host": "gdcatalog.airports.go.th",
      "notes": "Department of Airports open-data discovery layer and catalog API metadata for airport datasets, administrative data, and published resources.",
      "source_profile_url": "/data/sources/department-of-airports-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-airports-flight-info",
      "registry_position": 140,
      "name": "Department of Airports flight info",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public flight-information web boards for DOA airports",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://tfic.airports.go.th/",
      "host": "tfic.airports.go.th",
      "notes": "Thai Flight Information boards for Department of Airports-managed airports. Useful public arrivals/departures surface, but no general documented bulk flight API was verified.",
      "source_profile_url": "/data/sources/department-of-airports-flight-info/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-highways-data-catalog",
      "registry_position": 209,
      "name": "Department of Highways Data Catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN/downloads where exposed",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.doh.go.th/",
      "host": "doh.go.th",
      "notes": "Highway and road datasets.",
      "source_profile_url": "/data/sources/department-of-highways-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-land-transport-data-catalog",
      "registry_position": 159,
      "name": "Department of Land Transport Data Catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/API/downloads",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Monthly / periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://web.dlt.go.th/statistics/",
      "host": "web.dlt.go.th",
      "notes": "Registered vehicles, licenses, and transport operator permit statistics.",
      "source_profile_url": "/data/sources/department-of-land-transport-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-rural-roads-road-and-bridge-web-services",
      "registry_position": 364,
      "name": "Department of Rural Roads road and bridge web services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "MOT Data Catalog filtered web-service datasets with JSON resources for rural-road and bridge-network layers",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog access where resources remain published",
      "cadence_declared": "Near real time according to catalog metadata for some web services; verify each resource before operational use",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://datagov.mot.go.th/en/dataset/?organization=drr&tags=API&tags=Webservice",
      "host": "datagov.mot.go.th",
      "notes": "Official DRR road and bridge network context for rural route support, bridge locations, route codes, physical attributes, and coordinates. Useful for Pai, Kanchanaburi, rural loops, and non-highway route confidence, but not live traffic, closure, or incident truth.",
      "source_profile_url": "/data/sources/department-of-rural-roads-road-and-bridge-web-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-1584-public-transport-complaints",
      "registry_position": 162,
      "name": "DLT 1584 public-transport complaints",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "complaint",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "observation_scope": [
        "official_transport_complaint_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "dlt-1584-complaint-stats",
          "name": "DLT 1584 complaint-support stats",
          "kind": "entity-observation",
          "cadence": "Monthly / fiscal-year workbook refresh"
        }
      ],
      "current_signal_types": [
        "official_transport_complaint_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "DLT/data.go.th datasets, XLS/PDF historical files, annual reports, and complaint-channel web surfaces",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public historical data and public complaint channels",
      "cadence_declared": "Annual / historical datasets with ongoing complaint-channel operations",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/en/organization/dlt",
      "host": "data.go.th",
      "notes": "Complaint statistics from the DLT passenger-protection center hotline 1584, including complaint issue types, vehicle classes, and public complaint channels. Use for safety and service-quality trend analysis, not personal complaint details.",
      "source_profile_url": "/data/sources/dlt-1584-public-transport-complaints/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-driver-license-statistics",
      "registry_position": 178,
      "name": "DLT driver license statistics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "finance",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "country",
        "province",
        "market"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "data.go.th dataset page with API, CSV, and DLT statistics metadata where exposed",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where resources are exposed",
      "cadence_declared": "Monthly according to catalog metadata",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/dataset/dataset_stat_1_005?is_fullscreen=1",
      "host": "data.go.th",
      "notes": "Valid driving-license and vehicle-crew-license statistics by license type and related demographic fields. Useful for driver-license supply and foreign-driver context, not individual renter verification.",
      "source_profile_url": "/data/sources/dlt-driver-license-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-gps-passenger-and-complaint-app",
      "registry_position": 163,
      "name": "DLT GPS passenger and complaint app",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "complaint",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "observation_scope": [
        "official_taxi_oversight_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "dlt-gps-taxi-support",
          "name": "DLT GPS and Taxi OK taxi-oversight support",
          "kind": "entity-observation",
          "cadence": "On regulatory or project-page change"
        }
      ],
      "current_signal_types": [
        "official_taxi_oversight_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public mobile-app page and GPS management-center web surfaces",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public app and web access; bulk automation terms are unclear",
      "cadence_declared": "Operational / frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://gps.dlt.go.th/?page_id=145",
      "host": "gps.dlt.go.th",
      "notes": "Passenger-facing DLT GPS application for locating DLT-registered public vehicles, filing complaints, and searching passenger stations. Useful as evidence of regulated GPS-linked taxi oversight, not a verified public bulk API.",
      "source_profile_url": "/data/sources/dlt-gps-passenger-and-complaint-app/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-ride-hailing-certification-and-public-guidance",
      "registry_position": 167,
      "name": "DLT ride-hailing certification and public guidance",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "complaint",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official government guidance page and DLT-linked public notices",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On regulatory change / monthly validation",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.thailand.go.th/public/index.php/issue-focus-detail/001_08_017",
      "host": "thailand.go.th",
      "notes": "Public guidance on legally certified ride-hailing applications, driver and vehicle requirements, complaint channels, and passenger-safety expectations. Certification status can change, so store source URL, source date, and verification date rather than hardcoding app lists.",
      "source_profile_url": "/data/sources/dlt-ride-hailing-certification-and-public-guidance/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-taxi-ok-taxi-vip-project",
      "registry_position": 164,
      "name": "DLT Taxi OK / Taxi VIP project",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "official_taxi_oversight_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "dlt-gps-taxi-support",
          "name": "DLT GPS and Taxi OK taxi-oversight support",
          "kind": "entity-observation",
          "cadence": "On regulatory or project-page change"
        }
      ],
      "current_signal_types": [
        "official_taxi_oversight_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public project page, downloadable DLT notices, and GPS management-center web surfaces",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public project page and downloadable notices; bulk automation terms are unclear",
      "cadence_declared": "On regulatory or project-page change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://gps.dlt.go.th/?page_id=337",
      "host": "gps.dlt.go.th",
      "notes": "Public DLT TAXI OK / TAXI VIP project page with downloadable rules for taxi communication centers, driver history, trip recorders, safety equipment, registration, and fare-standard context. Useful for regulated taxi-oversight support, not live dispatch or a public bulk vehicle API.",
      "source_profile_url": "/data/sources/dlt-taxi-ok-taxi-vip-project/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dlt-vehicle-registration-statistics",
      "registry_position": 177,
      "name": "DLT vehicle registration statistics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "fuel",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "fuel_station"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "data.go.th dataset page with CSV/API-style resources and DLT statistics backlinks",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where resources are exposed",
      "cadence_declared": "Monthly according to catalog metadata",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/th/dataset/gdpublish-cumulative-number-of-registered-vehicles-classified-by-vehicle-type",
      "host": "data.go.th",
      "notes": "Official counts of registered vehicles by type and related characteristics. Useful for rental-market sizing, EV/LPG/NGV context, and macro supply trends, not branch-level rental stock or live availability.",
      "source_profile_url": "/data/sources/dlt-vehicle-registration-statistics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "doh-highway-traffic",
      "registry_position": 7,
      "name": "DOH Highway Traffic",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "geospatial",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "boundary",
        "district"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "boundary",
        "district"
      ],
      "observation_scope": [
        "doh_highway_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "doh-highway-traffic-support",
          "name": "DOH highway traffic support",
          "kind": "entity-observation",
          "cadence": "Operational / support-surface refresh"
        }
      ],
      "current_signal_types": [
        "highway_transfer_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public traffic web surface, CCTV pages, travel-time context, and map overlays",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website; verify automation terms before heavy runtime scraping",
      "cadence_declared": "Operational / near realtime on the public surface",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.highwaytraffic.go.th/DOHMobile/Modules/CCTV2.aspx?group=%E0%B8%A0%E0%B8%B2%E0%B8%84%E0%B9%80%E0%B8%AB%E0%B8%99%E0%B8%B7%E0%B8%AD",
      "host": "highwaytraffic.go.th",
      "notes": "Department of Highways traffic surface for CCTV, travel-time, congestion-color, speed-flow, and roadside-facility context. Useful for road-friction and route-risk support, but do not imply a clean public nationwide machine-readable realtime API until a stable endpoint is verified.",
      "source_profile_url": "/data/sources/doh-highway-traffic/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "drivehub-thailand-car-rental-marketplace",
      "registry_position": 191,
      "name": "Drivehub Thailand car rental marketplace",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public marketplace site and app; no documented open bulk API was verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public discovery; live inventory access requires the platform or partnership",
      "cadence_declared": "Daily or weekly for public pages; live search only via authorized platform access",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://backend.drivehub.co/en",
      "host": "backend.drivehub.co",
      "notes": "Thailand car-rental marketplace for self-drive, SUVs, vans, and with-driver services with public price and benefit messaging. Use for supplier and product discovery, not open bulk inventory ingestion.",
      "source_profile_url": "/data/sources/drivehub-thailand-car-rental-marketplace/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "drivemate-thailand-car-rental-and-car-sharing",
      "registry_position": 192,
      "name": "Drivemate Thailand car rental and car sharing",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public app listing and consumer marketplace/app surfaces; no documented open bulk API was verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public discovery; live inventory access requires the platform or partnership",
      "cadence_declared": "Daily or weekly for public marketplace context; live search only via authorized platform access",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://play.google.com/store/apps/details?id=com.thaivp.drivemate.dm_app_mobile_v2",
      "host": "play.google.com",
      "notes": "Thailand car-rental and car-sharing marketplace with private-owner cars, local rental companies, global brands, airport coverage, and self-drive or with-driver options. Use for marketplace discovery and service-type context, not open bulk inventory ingestion.",
      "source_profile_url": "/data/sources/drivemate-thailand-car-rental-and-car-sharing/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "duffel-flights-api",
      "registry_position": 154,
      "name": "Duffel Flights API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "precious",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer documentation for flight search, booking, seats, baggage, ancillaries, and order management",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Developer/commercial access; account and credentials required",
      "cadence_declared": "On request for shopping, booking, and servicing",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://duffel.com/docs",
      "host": "duffel.com",
      "notes": "Modern airline-retail API for flight offers, booking, ancillaries, seat selection, and order management across participating airlines and NDC content.",
      "source_profile_url": "/data/sources/duffel-flights-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "exat-data-catalog",
      "registry_position": 6,
      "name": "EXAT Data Catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "observation_scope": [
        "exat_expressway_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "exat-expressway-support",
          "name": "EXAT expressway support",
          "kind": "entity-observation",
          "cadence": "Operational / support-surface refresh"
        }
      ],
      "current_signal_types": [
        "highway_transfer_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Catalog resources, CSV, XLS, geospatial files, and linked agency datasets where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where resources are open",
      "cadence_declared": "Varies by expressway, toll, accident, and traffic-volume dataset",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://datagov.mot.go.th/dataset/exat",
      "host": "datagov.mot.go.th",
      "notes": "Expressway Authority of Thailand catalog layer for expressway network, toll plazas, accident statistics, traffic volumes, breakdown or service-point context, and related transport metadata. Treat as official catalog and route-friction evidence unless a stable realtime public feed is verified.",
      "source_profile_url": "/data/sources/exat-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "exat-traffic-surface",
      "registry_position": 8,
      "name": "EXAT Traffic Surface",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "geospatial",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "boundary",
        "district"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "boundary",
        "district"
      ],
      "observation_scope": [
        "exat_expressway_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "exat-expressway-support",
          "name": "EXAT expressway support",
          "kind": "entity-observation",
          "cadence": "Operational / support-surface refresh"
        }
      ],
      "current_signal_types": [
        "highway_transfer_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public app and map surface; machine-readable endpoints not yet verified",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public app access",
      "cadence_declared": "Operational / near realtime on the public surface",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://apps.apple.com/th/app/exat-traffic/id1193596593",
      "host": "apps.apple.com",
      "notes": "Expressway Authority traffic and CCTV surface for Bangkok expressway congestion, incidents, toll-road context, and service-point support. Treat as public traffic evidence and health-check surface until a stable public endpoint is documented.",
      "source_profile_url": "/data/sources/exat-traffic-surface/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "expedia-rapid-car-api",
      "registry_position": 186,
      "name": "Expedia Rapid Car API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Partner API documentation for availability, details, payments, booking, retrieval, and cancellation",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Partner authorization required; beta and commercial terms apply",
      "cadence_declared": "On request for quotes and availability; static docs on product change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.expediagroup.com/docs/products/rapid/cars",
      "host": "developers.expediagroup.com",
      "notes": "End-to-end car-rental booking API powered by Expedia Group inventory with pickup/dropoff locations, vehicle details, pricing, extras, payment, booking, and cancellation. Use only through partner access.",
      "source_profile_url": "/data/sources/expedia-rapid-car-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ferry-operator-commercial-context",
      "registry_position": 219,
      "name": "Ferry operator commercial context",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial booking/search pages and operator schedule context; API or bulk access requires partnership or explicit permission",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Public consumer site plus commercial/partner integrations",
      "cadence_declared": "On request / timetable and availability change frequently",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://12go.asia/en",
      "host": "12go.asia",
      "notes": "Commercial ferry and boat-transfer context for operator discovery, route families, booking windows, last-boat risk, and cancellation-policy patterns across Thai island and coastal transfers. Useful for traveler booking reality, not an official national ferry timetable feed.",
      "source_profile_url": "/data/sources/ferry-operator-commercial-context/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "flightaware-aeroapi",
      "registry_position": 147,
      "name": "FlightAware AeroAPI",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial query API and developer portal",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Commercial usage-based API; credentials required",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.flightaware.com/commercial/aeroapi",
      "host": "flightaware.com",
      "notes": "Flight status, tracking, airport boards, historical flights, and alerting from FlightAware. Strong live-flight and airport-status layer, but commercial and usage-metered.",
      "source_profile_url": "/data/sources/flightaware-aeroapi/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "flightradar24-api",
      "registry_position": 148,
      "name": "Flightradar24 API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial REST API documentation and subscription product",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Sandbox/testing available; production access is commercial",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.flightradar24.com/blog/b2b/flightradar24-api/",
      "host": "flightradar24.com",
      "notes": "Real-time aircraft positions, flight summaries, airport and airline metadata, and historical tracks through Flightradar24's commercial API.",
      "source_profile_url": "/data/sources/flightradar24-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-taxi-pois",
      "registry_position": 173,
      "name": "Google Places Thailand taxi POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Places API search, nearby search, place details, and place types such as taxi_stand with commercial terms",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Paid/commercial API; account billing and field-mask pricing apply",
      "cadence_declared": "On demand; weekly for key taxi-stand or operator enrichment",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places",
      "host": "developers.google.com",
      "notes": "Commercial POI layer for taxi stands, operator offices, airport pickup points, opening hours, contact data, reviews, and map links. It is not a legal registry or ride-dispatch feed.",
      "source_profile_url": "/data/sources/google-places-thailand-taxi-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "google-places-thailand-vehicle-rental-pois",
      "registry_position": 194,
      "name": "Google Places Thailand vehicle rental POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Places API search, nearby search, place details, hours, ratings, photos, and business-status fields with commercial terms",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Paid/commercial API; account billing and field-mask pricing apply",
      "cadence_declared": "On demand; weekly for key airport and city branches",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places",
      "host": "developers.google.com",
      "notes": "Commercial POI layer for rental offices, motorcycle-rental shops, airport counters, business status, hours, phone numbers, reviews, and coordinates. It is not a legal company registry or live rental inventory API.",
      "source_profile_url": "/data/sources/google-places-thailand-vehicle-rental-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "grab-thailand-transport-and-ride-types",
      "registry_position": 168,
      "name": "Grab Thailand transport and ride types",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public consumer transport page",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On product or market update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.grab.com/th/en/transport/",
      "host": "grab.com",
      "notes": "Consumer-facing transport page for ride types such as taxi, car, van, and motorcycle services in Thailand. Useful for product naming and user-visible service categories, not live dispatch or public API use.",
      "source_profile_url": "/data/sources/grab-thailand-transport-and-ride-types/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "iata-one-record",
      "registry_position": 156,
      "name": "IATA ONE Record",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "finance",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "country",
        "province",
        "market"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public standard documentation, API/data-model references, and implementation resources",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Open standard; actual shipment-data exchanges require participating systems and agreements",
      "cadence_declared": "On standards release / implementation change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.iata.org/en/programs/cargo/e/one-record/",
      "host": "iata.org",
      "notes": "Air-cargo data-sharing standard with common data model and standardized secured web API concepts. Useful for cargo schema design, not a public feed of Thai cargo shipments.",
      "source_profile_url": "/data/sources/iata-one-record/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "longdo-place-api-thailand-taxi-pois",
      "registry_position": 174,
      "name": "Longdo Place API Thailand taxi POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Longdo Place API for Thai-local place search, details, reverse geocoding, phone, website, and category data",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Developer/commercial API; plan and quota depend on Longdo account",
      "cadence_declared": "On demand; weekly/monthly cache refresh for key taxi POIs",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://map.longdo.com/products/api/place",
      "host": "map.longdo.com",
      "notes": "Thailand-local POI/search layer useful for taxi stands, operator offices, Thai-language place names, address normalization, and nearby search. Use as licensed enrichment alongside OSM, Google, and airport/operator pages.",
      "source_profile_url": "/data/sources/longdo-place-api-thailand-taxi-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "longdo-place-api-thailand-vehicle-rental-pois",
      "registry_position": 195,
      "name": "Longdo Place API Thailand vehicle rental POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Longdo Place API and related map/place search services for Thai-local search, details, reverse geocoding, phone, website, and category data",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Developer/commercial API; plan, key, and quota depend on Longdo account",
      "cadence_declared": "On demand; weekly or monthly cache refresh for key rental branches",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://map.longdo.com/products/api",
      "host": "map.longdo.com",
      "notes": "Thailand-local POI and search layer useful for rental offices, Thai-language branch names, airport vicinity search, and address normalization. Use as licensed enrichment alongside OSM, Google, and airport/operator pages.",
      "source_profile_url": "/data/sources/longdo-place-api-thailand-vehicle-rental-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "marine-department-berth-status",
      "registry_position": 216,
      "name": "Marine Department Berth Status",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "observation_scope": [
        "official_berth_status_surface_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "route_check",
        "ferry_check"
      ],
      "observation_feeds": [
        {
          "id": "marine-department-berth-status",
          "name": "Marine Department berth-status surface",
          "kind": "entity-observation",
          "cadence": "Operational / event-driven"
        }
      ],
      "current_signal_types": [
        "berth_operability_context"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public berth-status and ship-visit surface",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Operational / event-driven on the public surface",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://nsw.md.go.th/msberthmanagement/PublicBerthStatus.aspx",
      "host": "nsw.md.go.th",
      "notes": "Marine Department Single Window berth-status surface exposing public port selectors and visible ship-visit rows such as arrival or departure indicators, ETB times, and vessel names. Useful as berth and movement evidence for coastal and ferry-sensitive planning, not as ferry schedule, seat, or ticket truth.",
      "source_profile_url": "/data/sources/marine-department-berth-status/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "marine-department-piers",
      "registry_position": 215,
      "name": "Marine Department piers",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "observation_scope": [
        "official_pier_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check"
      ],
      "observation_feeds": [
        {
          "id": "marine-department-pier-registry",
          "name": "Marine Department passenger-pier registry",
          "kind": "entity-observation",
          "cadence": "Weekly / monthly berth-registry update"
        }
      ],
      "current_signal_types": [
        "official_pier_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public Marine Department dataset plus site pages; berth registry JSON/CSV is publicly reachable",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public dataset and website",
      "cadence_declared": "Weekly or monthly for berth metadata; operational notices as published",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://md.gdcatalog.go.th/dataset/1a58d2ed-4d9a-41db-b59c-1a2870c23e4b",
      "host": "md.gdcatalog.go.th",
      "notes": "Marine Department berth, pier, port, terminal, navigation, and service-information context for Thai river, gulf, coastal, and border-water piers. The public berth registry is useful for official passenger-pier support, berth depth, berth length, and route-family context. It is not a verified national realtime ferry schedule, closure, queue, or seat-inventory API.",
      "source_profile_url": "/data/sources/marine-department-piers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ministry-of-transport-data-catalog",
      "registry_position": 5,
      "name": "Ministry of Transport Data Catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "API, CSV, XLS, SHP, WMS, WFS",
      "access_modes": [
        "api",
        "geo",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where resources are open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://datagov.mot.go.th/",
      "host": "datagov.mot.go.th",
      "notes": "High-value catalog for roads, rail, public transport, and transport geodata.",
      "source_profile_url": "/data/sources/ministry-of-transport-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mobility-database-transit-feed-catalog",
      "registry_position": 229,
      "name": "Mobility Database transit feed catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "GTFS/GTFS-Realtime/GBFS feed catalog",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog; check current API terms",
      "cadence_declared": "Catalog updates as feeds are discovered and monitored",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://database.mobilitydata.org/",
      "host": "database.mobilitydata.org",
      "notes": "Global transit-feed discovery layer useful for validating whether Thailand GTFS or GTFS-Realtime feeds are publicly cataloged.",
      "source_profile_url": "/data/sources/mobility-database-transit-feed-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mot-passenger-bus-terminals-dataset",
      "registry_position": 220,
      "name": "MOT passenger bus terminals dataset",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "observation_scope": [
        "official_bus_terminal_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "mot-bus-terminal-support",
          "name": "MOT official passenger bus terminals",
          "kind": "entity-observation",
          "cadence": "Weekly / monthly catalog update"
        }
      ],
      "current_signal_types": [
        "official_bus_terminal_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "MOT catalog resource, CSV/XLSX/Data API where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where MOT resource is open",
      "cadence_declared": "When updated; verify weekly or monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datagov.mot.go.th/",
      "host": "datagov.mot.go.th",
      "notes": "Official passenger bus terminal master with Thai/English names, owner, province, district, subdistrict, location text, and coordinates. Validate X/Y coordinate labels before storing.",
      "source_profile_url": "/data/sources/mot-passenger-bus-terminals-dataset/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mot-road-accident-datasets",
      "registry_position": 198,
      "name": "MOT road accident datasets",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "MOT catalog dataset with CSV/XLSX-style resources and metadata where exposed",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where resources are exposed",
      "cadence_declared": "When updated; verify monthly or on release change",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datagov.mot.go.th/dataset/roadaccident",
      "host": "datagov.mot.go.th",
      "notes": "Road-accident datasets on Ministry of Transport road networks for safety and destination-risk context. Useful for explaining why some rental routes deserve stronger caution.",
      "source_profile_url": "/data/sources/mot-road-accident-datasets/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mrt-mrta-metro-maps-and-service-pages",
      "registry_position": 214,
      "name": "MRT / MRTA metro maps and service pages",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "accommodation",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "hotel_area",
        "venue_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "hotel_area",
        "venue_zone"
      ],
      "observation_scope": [
        "official_rapid_transit_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bangkok-rapid-transit-official-pages",
          "name": "Bangkok rapid-transit official pages",
          "kind": "entity-observation",
          "cadence": "Daily / on official route-map or service-page change"
        }
      ],
      "current_signal_types": [
        "urban_rapid_transit_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public MRT route, station, and service-information pages",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website",
      "cadence_declared": "Static pages with service updates as published",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.mrta.co.th/en/mrt-route",
      "host": "mrta.co.th",
      "notes": "Mass Rapid Transit Authority public route maps, station listings, interchange notes, and service context for MRT lines in Bangkok and nearby provinces. Useful for public rail planning and station-level accommodation access, not a verified public bulk realtime feed.",
      "source_profile_url": "/data/sources/mrt-mrta-metro-maps-and-service-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "namtang-otp-transport-ecosystem",
      "registry_position": 210,
      "name": "Namtang / OTP transport ecosystem",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public app/API unclear",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public where exposed",
      "cadence_declared": "Operational",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.otp.go.th/",
      "host": "otp.go.th",
      "notes": "Bus tracking, stops, stations, and transport-planning data where publicly released.",
      "source_profile_url": "/data/sources/namtang-otp-transport-ecosystem/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "namtang-gtfs",
      "registry_position": 211,
      "name": "Namtang GTFS",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "observation_scope": [
        "transport_structure_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check",
        "food_route"
      ],
      "observation_feeds": [
        {
          "id": "namtang-transit-structure",
          "name": "Namtang transit structure",
          "kind": "entity-observation",
          "cadence": "Daily / static feed refresh"
        }
      ],
      "current_signal_types": [
        "pier_transfer_support",
        "airport_transfer_support",
        "rail_feasibility",
        "transport_friction"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "GTFS ZIP download and related static transit resources",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public; attribution required where license applies",
      "cadence_declared": "Static feed; monitor every 6-24 hours",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://namtang-api.otp.go.th/download/namtang-gtfs.zip",
      "host": "namtang-api.otp.go.th",
      "notes": "Best open Thailand multimodal public-transport spine for agencies, routes, stops, trips, stop_times, shapes, frequencies, fares, and some interchange logic across bus and rail systems. No public GTFS-Realtime endpoint was verified.",
      "source_profile_url": "/data/sources/namtang-gtfs/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "namtang-stops-stations-piers-and-park-and-ride-downloads",
      "registry_position": 212,
      "name": "Namtang stops, stations, piers, and park-and-ride downloads",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Compressed text downloads and GTFS-related static data",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where exposed by OTP/Namtang",
      "cadence_declared": "Daily or weekly static refresh",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://namtang-api.otp.go.th/download/namtang-stop.txt.gz",
      "host": "namtang-api.otp.go.th",
      "notes": "Static stop, station, pier, connected-mode, and park-and-ride context; pair with GTFS stops and OSM for station pages.",
      "source_profile_url": "/data/sources/namtang-stops-stations-piers-and-park-and-ride-downloads/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nostra-map-api-thailand-taxi-pois",
      "registry_position": 175,
      "name": "NOSTRA Map API Thailand taxi POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "NOSTRA Map developer platform APIs for POI search, geocoding, routing, and Thai location services",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/developer access; account and API key required",
      "cadence_declared": "On demand for search/routing; weekly/monthly cache refresh subject to license",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.nostramap.com/developmentplatform/",
      "host": "nostramap.com",
      "notes": "Commercial Thai location platform for taxi stands, operator offices, airport pickup points, routing, and nearby place enrichment. Treat as licensed POI and routing enrichment, not a legal taxi or dispatch API.",
      "source_profile_url": "/data/sources/nostra-map-api-thailand-taxi-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nostra-map-api-thailand-vehicle-rental-pois",
      "registry_position": 196,
      "name": "NOSTRA Map API Thailand vehicle rental POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "NOSTRA Map developer platform APIs for POI search, geocoding, routing, and Thai location services",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/developer access; account and API key required",
      "cadence_declared": "On demand for search/routing; weekly or monthly cache refresh subject to license",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.nostramap.com/developmentplatform/",
      "host": "nostramap.com",
      "notes": "Commercial Thai location platform for rental branches, airport counters, routing, and nearby place enrichment. Treat as licensed POI enrichment, not a legal company or live inventory feed.",
      "source_profile_url": "/data/sources/nostra-map-api-thailand-vehicle-rental-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "oag-flight-info-api",
      "registry_position": 145,
      "name": "OAG Flight Info API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial REST API and alerts documentation",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial or trial access; credentials and contract required",
      "cadence_declared": "Operational / near real time for status; daily or weekly for schedules",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://developers.oag.com/",
      "host": "developers.oag.com",
      "notes": "Real-time flight status, airline schedules up to two years ahead, connections, and alerting through OAG aviation APIs. Strong commercial layer for schedules and status, not a free public feed.",
      "source_profile_url": "/data/sources/oag-flight-info-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "open-dbd-vehicle-rental-and-leasing-companies",
      "registry_position": 176,
      "name": "Open DBD vehicle-rental and leasing companies",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "store",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "store",
        "market",
        "district"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DBD DataWarehouse+, public company-search/download surfaces, and API-style resources where exposed",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public where published; some DBD/GDX APIs can be restricted",
      "cadence_declared": "Monthly or periodic; weekly discovery for new registrations",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datawarehouse.dbd.go.th/index",
      "host": "datawarehouse.dbd.go.th",
      "notes": "Juristic-person registration numbers, Thai and English company names, registration dates, registered capital, business-objective fields, head-office address, and business status for vehicle-rental and leasing operators. Good for legal company identity and discovery, not branch locations or live fleet inventory.",
      "source_profile_url": "/data/sources/open-dbd-vehicle-rental-and-leasing-companies/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "opensky-network-api",
      "registry_position": 149,
      "name": "OpenSky Network API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public ADS-B state-vector and track API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public for research/non-commercial usage within project limits",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://opensky-network.org/data/api",
      "host": "opensky-network.org",
      "notes": "ADS-B state vectors, tracks, and aircraft movement data for research and non-commercial use. OpenSky explicitly does not provide commercial schedule or delay data beyond what can be derived from ADS-B.",
      "source_profile_url": "/data/sources/opensky-network-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-bus-stops-and-route-relations",
      "registry_position": 227,
      "name": "OpenStreetMap Thailand bus stops and route relations",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM/Overpass API and OSM extracts",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Daily or weekly; minutely diffs possible",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Crowdsourced highway=bus_stop, amenity=bus_station, public_transport platforms/stations, route=bus relations, route_master=bus, operator, network, ref, and stop facility hints.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-bus-stops-and-route-relations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-taxi-stands",
      "registry_position": 172,
      "name": "OpenStreetMap Thailand taxi stands",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using amenity=taxi, opening_hours, name, operator, and vehicle tags",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly nationally; daily/weekly for Bangkok and airports",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dtaxi",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free geospatial layer for taxi ranks, pickup points, and some motorcycle-taxi stands where tagged. Coverage is incomplete and informal stands often need manual validation.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-taxi-stands/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openstreetmap-thailand-vehicle-rental-pois",
      "registry_position": 193,
      "name": "OpenStreetMap Thailand vehicle rental POIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rental",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OSM extracts and Overpass API using amenity=car_rental, amenity=motorcycle_rental, bicycle_rental, and shop=rental tags",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Weekly nationally; daily or weekly for airport and tourist areas",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dcar_rental",
      "host": "wiki.openstreetmap.org",
      "notes": "Best free geospatial layer for car-rental offices, motorcycle-rental shops, mixed rental stores, names, operator tags, opening_hours, contact data, and address enrichment. Coverage is incomplete and needs validation.",
      "source_profile_url": "/data/sources/openstreetmap-thailand-vehicle-rental-pois/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "osm-thailand-piers",
      "registry_position": 218,
      "name": "OSM Thailand piers",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "OpenStreetMap Overpass API and ODbL geospatial data",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free open data under ODbL attribution/share-alike terms",
      "cadence_declared": "Current community-edited data; daily or weekly refresh is typical",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://overpass-turbo.eu/",
      "host": "overpass-turbo.eu",
      "notes": "Free pier and ferry map layer for amenity=ferry_terminal, man_made=pier, route=ferry, landings, and nearby boat-access context. Useful for coordinates, nearby transfers, and fallback mapping, not official route confirmation.",
      "source_profile_url": "/data/sources/osm-thailand-piers/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "otp-taxi-gps-trip-analytics",
      "registry_position": 160,
      "name": "OTP taxi GPS trip analytics",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "taxi_pickup_dropoff_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "otp-taxi-demand-analytics",
          "name": "OTP taxi demand and pickup/dropoff analytics",
          "kind": "entity-observation",
          "cadence": "Monthly"
        }
      ],
      "current_signal_types": [
        "taxi_pickup_dropoff_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "MOT/OTP catalog resources in CSV/XLSX/PDF and API-backed catalog metadata where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where OTP resources are published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/otp",
      "host": "data.go.th",
      "notes": "Aggregate taxi passenger-trip analytics derived from DLT/OTP GPS data, including monthly average taxis, daily average trips, pickup trips, average trip distance, average speed, total distance, and total time. Good for mobility and demand analysis, not live taxi positions or raw trips.",
      "source_profile_url": "/data/sources/otp-taxi-gps-trip-analytics/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "otp-top-taxi-pickup-and-dropoff-areas",
      "registry_position": 161,
      "name": "OTP top taxi pickup and dropoff areas",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "taxi",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "transport_zone"
      ],
      "observation_scope": [
        "taxi_pickup_dropoff_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "otp-taxi-demand-analytics",
          "name": "OTP taxi demand and pickup/dropoff analytics",
          "kind": "entity-observation",
          "cadence": "Monthly"
        }
      ],
      "current_signal_types": [
        "taxi_pickup_dropoff_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "MOT/OTP catalog resources in CSV/XLSX/PDF and API-backed catalog metadata where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data where OTP resources are published",
      "cadence_declared": "Monthly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.data.go.th/organization/otp",
      "host": "data.go.th",
      "notes": "Top pickup and dropoff area analytics from taxi GPS data with weekday/weekend splits and area labels such as subdistrict, district, and province. Useful for demand heatmaps and taxi-area ranking, not live dispatch.",
      "source_profile_url": "/data/sources/otp-top-taxi-pickup-and-dropoff-areas/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ourairports",
      "registry_position": 151,
      "name": "OurAirports",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Open CSV data dumps and reference documentation",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public/open data",
      "cadence_declared": "Daily or weekly",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://ourairports.com/data/",
      "host": "ourairports.com",
      "notes": "Open airport, runway, navaid, and country reference datasets with ICAO/IATA codes, coordinates, elevation, municipality, and link fields. Useful as an open master-data backup, not an official Thai regulator source.",
      "source_profile_url": "/data/sources/ourairports/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "port-authority-of-thailand-data-catalog",
      "registry_position": 369,
      "name": "Port Authority of Thailand Data Catalog",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN-style PAT Data Catalog with CSV/XLS/RDF/JPEG resources for port statistics, organization data, and official port datasets",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog access where resources remain published",
      "cadence_declared": "Monthly / quarterly / annual depending dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://catalog.port.co.th/en/dataset/",
      "host": "catalog.port.co.th",
      "notes": "Official Port Authority catalog layer for Bangkok Port, Laem Chabang, and other PAT-managed port statistics and reference datasets. Useful for major-port identity, cargo, and logistics context; low direct traveler value and not an island-ferry schedule, ticket, or berth-queue feed.",
      "source_profile_url": "/data/sources/port-authority-of-thailand-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "port-authority-thailand",
      "registry_position": 217,
      "name": "Port Authority Thailand",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "ferry",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "island"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public website, port profiles, contact pages, and annual-report resources",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website",
      "cadence_declared": "Quarterly or annual for reports; operational notices as published",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.port.co.th/port_en/",
      "host": "port.co.th",
      "notes": "Port Authority of Thailand context for Bangkok Port, Laem Chabang, Chiang Saen, Chiang Khong, Ranong, and related port operations. Useful for major-port identity and shipping context, not a public island-ferry timetable feed.",
      "source_profile_url": "/data/sources/port-authority-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "prs-open-data-police-road-accidents",
      "registry_position": 200,
      "name": "PRS Open Data police road accidents",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "safety",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public summary dashboard; broader operational data is internal or partner-facing",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "Free public summary access",
      "cadence_declared": "Operational / frequent for public summaries",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://prs.police.go.th/app/report/report-summary",
      "host": "prs.police.go.th",
      "notes": "Police Road Safety system summary surface used by the Royal Thai Police for road-accident analysis, risk points, and enforcement planning. Useful as a police road-safety layer, not a full open dispatch or case-level feed.",
      "source_profile_url": "/data/sources/prs-open-data-police-road-accidents/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "sabre-cars-vehicle-availability-api",
      "registry_position": 187,
      "name": "Sabre Cars vehicle availability API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Commercial API documentation for vehicle availability, rates, location details, schedules, extras, and booking-related payloads",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial partner access required",
      "cadence_declared": "On request for availability and rates; docs change on product revision",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developer.sabre.com/api/v1/products/rest-api/car-availability/2.4.1/_attachments/car-avail-v241-response-description.html",
      "host": "developer.sabre.com",
      "notes": "Sabre car-rental availability and rate payloads, including vendor, location, opening-times, mileage, charges, extras, and availability-status fields. Use for partner-authorized search and booking flows.",
      "source_profile_url": "/data/sources/sabre-cars-vehicle-availability-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "sabre-flight-apis",
      "registry_position": 155,
      "name": "Sabre Flight APIs",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer documentation for flight search, refresh/revalidate, offers, orders, and related servicing APIs",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Commercial/agency credentials required",
      "cadence_declared": "On request for shopping, booking, and servicing",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developer.sabre.com/rest-api/flightsearch-api/v1/help-documentation/user-guide.html",
      "host": "developer.sabre.com",
      "notes": "Sabre flight-search and offer/order API layer for fare search, itinerary validation, booking, and servicing in agency or partner contexts.",
      "source_profile_url": "/data/sources/sabre-flight-apis/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "skyscanner-car-hire-live-prices-api",
      "registry_position": 190,
      "name": "Skyscanner Car Hire Live Prices API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "tourism",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "hotel_area",
        "attraction"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer API documentation for live car-hire search and quote retrieval",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Developer/commercial access and API key required",
      "cadence_declared": "On request for live quotes; docs change on product revision",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.skyscanner.net/docs/carhire-live-prices/overview",
      "host": "developers.skyscanner.net",
      "notes": "Live car-hire quote search from current day to one year ahead, using pickup and optional dropoff locations, driver age, market, locale, and currency. Use for authorized live price search, not static branch truth.",
      "source_profile_url": "/data/sources/skyscanner-car-hire-live-prices-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "skyscanner-flights-live-prices-api",
      "registry_position": 153,
      "name": "Skyscanner Flights Live Prices API",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "flight",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Commercial",
      "access_class_key": "commercial",
      "access_class_detail": "Optional enrichment only. Do not treat this as open evidence without paid or partner access.",
      "automation_policy": "Optional enrichment",
      "automation_policy_key": "optional-enrichment",
      "automation_policy_detail": "Use only where paid, partner, or operator access exists.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Developer documentation for live flight-price search and itinerary retrieval",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": true,
      "free_tier": "Partner/developer access required; commercial terms apply",
      "cadence_declared": "On request for shopping and refresh",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://developers.skyscanner.net/docs/flights-live-prices/overview",
      "host": "developers.skyscanner.net",
      "notes": "Live flight-price search and itinerary retrieval from Skyscanner partner inventory. Useful for current price discovery, but prices are perishable and not an official schedule or airport source.",
      "source_profile_url": "/data/sources/skyscanner-flights-live-prices-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "srt-timetable-data",
      "registry_position": 158,
      "name": "SRT timetable data",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "rail",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal"
      ],
      "observation_scope": [
        "official_rail_presence_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "srt-official-station-presence",
          "name": "SRT official station presence",
          "kind": "entity-observation",
          "cadence": "Daily / on public timetable-site change"
        }
      ],
      "current_signal_types": [
        "official_rail_presence"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Official public timetable, route, trip, and service pages",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website and timetable pages",
      "cadence_declared": "Operational timetable updates and service notices",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://railway.co.th/Home/Index/en",
      "host": "railway.co.th",
      "notes": "State Railway of Thailand schedule and route pages for intercity and excursion trains, station pairs, departure and arrival times, and service notices. Useful for public train timing context, but no clean national realtime bulk timetable API was verified.",
      "source_profile_url": "/data/sources/srt-timetable-data/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-cargo-e-services",
      "registry_position": 157,
      "name": "THAI Cargo e-services",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "catalog",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public cargo portal and e-service surfaces; deeper workflows require account or shipment context",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public portal; booking, shipment, and account actions depend on user context",
      "cadence_declared": "On demand / event-driven for shipment or schedule queries; static docs on operational change",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.thaicargo.com/en/main",
      "host": "thaicargo.com",
      "notes": "THAI Cargo schedule search, e-booking, storage-charge, e-import, claim, and shipment-service surfaces. Useful for cargo service and shipment workflow context, but no open public bulk cargo API was verified.",
      "source_profile_url": "/data/sources/thai-cargo-e-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-smile-bus-route-pages",
      "registry_position": 224,
      "name": "Thai Smile Bus route pages",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public route pages/app; realtime app data not documented as public API",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website and app view",
      "cadence_declared": "Static crawl daily or weekly; realtime only through permission/partnership",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.thaismilebus.com/",
      "host": "thaismilebus.com",
      "notes": "Thai Smile Bus route IDs, stop/landmark lists, electric-bus network context, and app-visible ETA/vehicle data where available to users.",
      "source_profile_url": "/data/sources/thai-smile-bus-route-pages/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-smile-group-branch-and-depot-locator",
      "registry_position": 225,
      "name": "Thai Smile Group branch and depot locator",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "observation_scope": [
        "urban_bus_operator_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "thai-smile-group-branch-locator",
          "name": "Thai Smile Group branch and depot locator",
          "kind": "entity-observation",
          "cadence": "Daily / site-locator update"
        }
      ],
      "current_signal_types": [
        "urban_bus_operator_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public site locator JSON endpoint",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public website view",
      "cadence_declared": "Static or operational page updates; verify daily or weekly",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://thaismilegroup.com/wp-admin/admin-ajax.php?action=asl_load_stores",
      "host": "thaismilegroup.com",
      "notes": "Public Thai Smile Group branch, office, depot, and service-location context from the site locator. Useful for Bangkok urban bus operator footprint and support coverage. This is location/support context, not realtime vehicle, ETA, or outage truth.",
      "source_profile_url": "/data/sources/thai-smile-group-branch-and-depot-locator/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thairsc-road-accident-center",
      "registry_position": 199,
      "name": "ThaiRSC road accident center",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "safety",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "police_station",
        "hospital"
      ],
      "observation_scope": [
        "road_deaths_today",
        "road_injuries_today",
        "major_accident_context"
      ],
      "decision_scope": [
        "where_to_go_today"
      ],
      "observation_feeds": [
        {
          "id": "thairsc-road-safety",
          "name": "ThaiRSC road-safety observations",
          "kind": "entity-observation",
          "cadence": "Near real time / daily snapshot"
        }
      ],
      "current_signal_types": [
        "road_safety_risk"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public dashboard and related public resources",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public view",
      "cadence_declared": "Operational / frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.thairsc.com/",
      "host": "thairsc.com",
      "notes": "Road Safety Collaboration dashboard for road-accident injury and death context. Useful as a road-risk layer for vehicle-rental guidance, especially motorcycles and long drives.",
      "source_profile_url": "/data/sources/thairsc-road-accident-center/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "transitland-namtang-gtfs-archive",
      "registry_position": 228,
      "name": "Transitland Namtang GTFS archive",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Transit feed catalog/API and GTFS archive",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog; check current API terms for production",
      "cadence_declared": "Daily feed monitoring",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://www.transit.land/",
      "host": "transit.land",
      "notes": "Normalized catalog and historical monitoring layer for the Namtang GTFS feed, operators, routes, stops, and feed versions.",
      "source_profile_url": "/data/sources/transitland-namtang-gtfs-archive/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "transport-co-bks-station-and-ticket-point-locations",
      "registry_position": 221,
      "name": "Transport Co. / BKS station and ticket-point locations",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "observation_scope": [
        "official_intercity_bus_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bks-station-ticket-support",
          "name": "BKS station and ticket-point support",
          "kind": "entity-observation",
          "cadence": "Monthly / quarterly static dataset validation"
        }
      ],
      "current_signal_types": [
        "official_intercity_bus_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "MOT catalog resource, CSV/XLSX where exposed",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where MOT/BKS resource is open",
      "cadence_declared": "Static or one-time; verify monthly or quarterly",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://datagov.mot.go.th/",
      "host": "datagov.mot.go.th",
      "notes": "Official Transport Co. / BKS station, office, stop, ticket counter, and facility location data for intercity bus station pages.",
      "source_profile_url": "/data/sources/transport-co-bks-station-and-ticket-point-locations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "transport-co-bks-timetable-resources",
      "registry_position": 222,
      "name": "Transport Co. / BKS timetable resources",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public, automation terms unclear",
      "access_class_key": "public-automation-unclear",
      "access_class_detail": "Cautious ingest or manual verification only until automation or bulk-reuse terms are clearer.",
      "automation_policy": "Cautious ingest / manual verification",
      "automation_policy_key": "cautious-ingest",
      "automation_policy_detail": "Use for low-frequency checks, verification, or only after reviewing automation terms.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "observation_scope": [
        "official_intercity_bus_search_support_score"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "bks-timetable-search-surface",
          "name": "BKS timetable search surface",
          "kind": "entity-observation",
          "cadence": "Daily / search-surface validation"
        }
      ],
      "current_signal_types": [
        "official_intercity_bus_search_support"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public booking/search HTML surface and internal selector JSON",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public for human lookup; use low-frequency automation and do not treat it as booking inventory",
      "cadence_declared": "Operational search surface; validate daily or on route updates",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://tcl99web.transport.co.th/",
      "host": "tcl99web.transport.co.th",
      "notes": "Official intercity-bus booking/search surface used for destination-selector and route-search support. Useful for proving official route-search presence and overland direction context, but brittle for detailed daily departures unless a stable documented endpoint is available.",
      "source_profile_url": "/data/sources/transport-co-bks-timetable-resources/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "viabus-realtime-transit-app-surface",
      "registry_position": 226,
      "name": "ViaBus realtime transit app surface",
      "domain": "Transport",
      "category_slug": "transport",
      "source_kind": "bus",
      "graph_class": "mixed",
      "graph_role": "Movement and friction layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "route",
        "station",
        "airport",
        "pier",
        "destination",
        "terminal",
        "bus_terminal"
      ],
      "feeds_signals": [
        "transport_friction",
        "highway_transfer_friction",
        "pier_transfer_support",
        "official_pier_support",
        "airport_transfer_support",
        "airport_ground_service_support",
        "airport_board_surface_support",
        "airport_scale_context",
        "airport_environmental_support",
        "rail_feasibility",
        "official_rail_presence",
        "official_bus_terminal_support",
        "official_intercity_bus_support",
        "official_intercity_bus_search_support",
        "official_transport_complaint_support",
        "official_taxi_oversight_support",
        "official_motorcycle_taxi_support",
        "taxi_pickup_dropoff_support",
        "urban_rapid_transit_support",
        "urban_bus_operator_support",
        "ferry_fragility",
        "flight_delay_risk"
      ],
      "feeds_decisions": [
        "route_feasibility",
        "rail_plan",
        "ferry_plan",
        "where_to_go_today"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Free public app surface; no documented open bulk API verified",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public app view; programmatic use requires permission or partnership",
      "cadence_declared": "Realtime in app; do not ingest without documented access",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://viabus.co/",
      "host": "viabus.co",
      "notes": "Rich Thailand realtime vehicle, ETA, route, canceled-stop, road-closure, and multimodal transit context. Use as a partnership target, not an open-data feed.",
      "source_profile_url": "/data/sources/viabus-realtime-transit-app-surface/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "bma-canal-water-quality",
      "registry_position": 354,
      "name": "BMA canal water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Bangkok open-data dataset with WQI records and related Chao Phraya/canal monitoring context",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public open-data portal access",
      "cadence_declared": "Historical / annual or on dataset refresh, with some related city sensor pages updated more frequently",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://data.bangkok.go.th/en/dataset/wqi-2561-2563",
      "host": "data.bangkok.go.th",
      "notes": "Bangkok canal and Chao Phraya urban water-quality layer for WQI, BOD, dissolved oxygen, ammonia, and station context. It is useful for city trend pages but not a universal realtime swim-safety feed.",
      "source_profile_url": "/data/sources/bma-canal-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "department-of-groundwater-resources-wells",
      "registry_position": 353,
      "name": "Department of Groundwater Resources wells",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Smart Pasutara well portal and Open API endpoint for nationwide groundwater-well search",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public portal and open API",
      "cadence_declared": "Monthly / on registry update for well master data",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://pasutara.dgr.go.th/smartpasutara/",
      "host": "pasutara.dgr.go.th",
      "notes": "Best public groundwater-well spine for consumption and agriculture wells, with related DGR quality datasets used separately for slower lab results. Historical quality does not equal present drinking safety.",
      "source_profile_url": "/data/sources/department-of-groundwater-resources-wells/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "diw-water-pollution-monitoring",
      "registry_position": 361,
      "name": "DIW water pollution monitoring",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Restricted",
      "access_class_key": "restricted",
      "access_class_detail": "Metadata-only or descriptive layer. Useful to explain what exists, but not for ingestion.",
      "automation_policy": "Metadata only",
      "automation_policy_key": "metadata-only",
      "automation_policy_detail": "Represent the system or source in the graph, but do not ingest operational records.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Online pollution monitoring system surface for industrial air and water pollution monitoring",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": true,
      "free_tier": "System exists publicly on the web, but practical facility-level access is role-gated and not a public bulk feed",
      "cadence_declared": "Operational / near real time where authorized",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://poms.diw.go.th/",
      "host": "poms.diw.go.th",
      "notes": "Factory monitoring layer for parameters such as BOD, COD, flow, and related compliance signals in industrial contexts. Treat it as regulated operational infrastructure, not open national water-quality data.",
      "source_profile_url": "/data/sources/diw-water-pollution-monitoring/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "dmcr-marine-water-quality",
      "registry_position": 356,
      "name": "DMCR marine water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "DMCR public knowledge-base publication and monitoring context for marine water-quality status",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public publication access",
      "cadence_declared": "Annual / periodic publication updates",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://km.dmcr.go.th/c_263/d_19696",
      "host": "km.dmcr.go.th",
      "notes": "Department of Marine and Coastal Resources publication layer for coastal and marine water-quality monitoring and explanatory context. Useful as a coastal-research and monitoring complement to PCD, not as a national realtime API.",
      "source_profile_url": "/data/sources/dmcr-marine-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "hydro-informatics-institute",
      "registry_position": 23,
      "name": "Hydro-Informatics Institute",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public website and Thaiwater services",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Varies",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.hii.or.th/",
      "host": "hii.or.th",
      "notes": "Institutional source behind national hydroinformatics data.",
      "source_profile_url": "/data/sources/hydro-informatics-institute/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ioc-sea-level-station-monitoring",
      "registry_position": 37,
      "name": "IOC Sea Level Station Monitoring",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "tourism",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Real-time feed",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Minute data / frequent updates",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.ioc-sealevelmonitoring.org/",
      "host": "ioc-sealevelmonitoring.org",
      "notes": "High-frequency sea-level data useful for coastal monitoring.",
      "source_profile_url": "/data/sources/ioc-sea-level-station-monitoring/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mrc-mekong-water-quality",
      "registry_position": 359,
      "name": "MRC Mekong water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official monitoring programme pages, reports, and linked data or download surfaces",
      "access_modes": [
        "geo",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Public programme information and downloads; some portal features can require account or project access",
      "cadence_declared": "Monthly monitoring plus periodic reports",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.mrcmekong.org/our-work/monitoring/water-quality-and-ecology-monitoring-programme/",
      "host": "mrcmekong.org",
      "notes": "Best transboundary Mekong water-quality context for monthly monitoring, nutrients, solids, oxygen, and incident follow-up. Keep basin-scale monitoring separate from local Thai drinking-water claims.",
      "source_profile_url": "/data/sources/mrc-mekong-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mwa-online-tap-water-quality",
      "registry_position": 350,
      "name": "MWA online tap-water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public online tap-water monitoring dashboard and related MWA open-data surfaces",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://twqonline.mwa.co.th/EN",
      "host": "twqonline.mwa.co.th",
      "notes": "Bangkok-metropolitan tap-water monitoring with residual chlorine, turbidity, conductivity, pH, chloride, and salinity across online stations. Strong for distribution quality within the MWA service area, not national tap-water coverage.",
      "source_profile_url": "/data/sources/mwa-online-tap-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "mwa-raw-water-salinity",
      "registry_position": 351,
      "name": "MWA raw-water salinity",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public raw-water remote monitoring dashboard for salinity, conductivity, pH, dissolved oxygen, TDS, and related intake surveillance",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Operational / near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://rwc.mwa.co.th/page/home/",
      "host": "rwc.mwa.co.th",
      "notes": "Best public MWA layer for Chao Phraya raw-water salinity intrusion and intake-quality monitoring. Raw-water intake quality is not the same thing as finished tap-water quality.",
      "source_profile_url": "/data/sources/mwa-raw-water-salinity/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-automatic-water-quality-stations",
      "registry_position": 348,
      "name": "PCD automatic water quality stations",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Government Data Catalog dataset page with automatic-station resources and linked PCD catalog entry",
      "access_modes": [
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public catalog and downloadable resources under listed terms",
      "cadence_declared": "Half-hourly observations at station level where resources remain current; catalog metadata on update",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://gdcatalog.go.th/dataset/gdpublish-water-quality",
      "host": "gdcatalog.go.th",
      "notes": "Representative automatic-station layer for rivers such as Tha Chin, with parameters like temperature, pH, dissolved oxygen, and conductivity. Treat station coverage as partial, not nationwide realtime truth.",
      "source_profile_url": "/data/sources/pcd-automatic-water-quality-stations/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-effluent-pollution-control",
      "registry_position": 360,
      "name": "PCD effluent pollution control",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public download center and guidance for pollution inspection and wastewater-treatment control workflows",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public downloads; deeper EPC workflows are role-based",
      "cadence_declared": "On document, training, or regulatory update",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://ecap.pcd.go.th/public/download.php",
      "host": "ecap.pcd.go.th",
      "notes": "Public-facing slice of PCD wastewater and effluent-control operations, useful for facility guidance, inspection context, and wastewater-treatment standards. It does not expose a comprehensive public realtime industrial effluent feed.",
      "source_profile_url": "/data/sources/pcd-effluent-pollution-control/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-marine-water-quality",
      "registry_position": 355,
      "name": "PCD marine water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "PCD marine/coastal water-quality pages, MWQI summaries, and linked statistics/publications",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Monthly / quarterly / annual depending survey cycle",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.pcd.go.th/watertype/%E0%B9%81%E0%B8%AB%E0%B8%A5%E0%B9%88%E0%B8%87%E0%B8%99%E0%B9%89%E0%B8%B3%E0%B8%97%E0%B8%B0%E0%B9%80%E0%B8%A5/",
      "host": "pcd.go.th",
      "notes": "Primary official marine/coastal quality layer for Thailand MWQI and sampling-round context. Good for coastal status and pollution hotspots, not for same-day beach bacteria guarantees.",
      "source_profile_url": "/data/sources/pcd-marine-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pollution-control-department-water-quality",
      "registry_position": 347,
      "name": "Pollution Control Department water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "PCD water-quality pages, publications, and linked national datasets for surface-water monitoring and WQI",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web and catalog access",
      "cadence_declared": "Monthly / quarterly / annual depending dataset",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.pcd.go.th/water-quality/",
      "host": "pcd.go.th",
      "notes": "Primary official source for Thailand surface-water quality, WQI, and public water-quality service guidance. Use it for national river and lake status, not as a universal realtime API.",
      "source_profile_url": "/data/sources/pollution-control-department-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "provincial-waterworks-water-quality",
      "registry_position": 352,
      "name": "Provincial Waterworks water quality",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public Water Quality Map and Water Monitor Station dashboards linked from the PWA site map",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public dashboard access; bulk API not clearly verified",
      "cadence_declared": "Operational / daily depending station and branch",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "http://dmama.pwa.co.th/rtumonitor/maps_water_qlt.php",
      "host": "dmama.pwa.co.th",
      "notes": "Provincial tap-water and raw-water monitoring layer outside the MWA service area. Treat it as public dashboard truth unless a documented bulk API is granted.",
      "source_profile_url": "/data/sources/provincial-waterworks-water-quality/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "psmsl",
      "registry_position": 38,
      "name": "PSMSL",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "tourism",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast",
        "hotel_area",
        "attraction",
        "route"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Batch time series",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://psmsl.org/",
      "host": "psmsl.org",
      "notes": "Monthly and annual mean sea-level datasets including Thai stations.",
      "source_profile_url": "/data/sources/psmsl/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-irrigation-department",
      "registry_position": 24,
      "name": "Royal Irrigation Department",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "precious",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Dashboards, reports, API surfaces where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Daily / operational",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.rid.go.th/",
      "host": "rid.go.th",
      "notes": "Reservoir, dam, irrigation, and water-management data.",
      "source_profile_url": "/data/sources/royal-irrigation-department/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "royal-thai-navy-hydrographic-department",
      "registry_position": 39,
      "name": "Royal Thai Navy Hydrographic Department",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "PDF/batch tables",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public where posted",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.hydro.navy.mi.th/",
      "host": "hydro.navy.mi.th",
      "notes": "Thai tide tables and hydrographic publications.",
      "source_profile_url": "/data/sources/royal-thai-navy-hydrographic-department/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thaiwater-national-hydroinformatics-data-center",
      "registry_position": 22,
      "name": "Thaiwater / National Hydroinformatics Data Center",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API, dashboards, CSV/ZIP where exposed",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Hourly / daily depending on dataset",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.thaiwater.net/",
      "host": "thaiwater.net",
      "notes": "Integrated rainfall, water level, temperature, flood, and hydrology data.",
      "source_profile_url": "/data/sources/thaiwater-national-hydroinformatics-data-center/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thaiwater-waterquality-api",
      "registry_position": 349,
      "name": "Thaiwater WaterQuality API",
      "domain": "Water and hydrology",
      "category_slug": "water-and-hydrology",
      "source_kind": "water",
      "graph_class": "observations",
      "graph_role": "Environmental quality and flood layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "feeds_signals": [
        "water_quality_risk",
        "flood_risk",
        "marine_condition"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "beach_plan",
        "route_feasibility"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "beach",
        "river",
        "canal",
        "water_station",
        "coast"
      ],
      "observation_scope": [
        "water_quality_index",
        "water_quality_station_state"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "thaiwater-water-quality",
          "name": "Thaiwater water-quality observations",
          "kind": "entity-observation",
          "cadence": "10 to 30 minutes depending on station"
        }
      ],
      "current_signal_types": [
        "flood_water_risk"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Thaiwater water-quality page and related multi-agency observation services where station queries are exposed",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; API contract visibility can be uneven",
      "cadence_declared": "Near real time / 10-30 minutes depending station and agency",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.thaiwater.net/web/index.php/waterquality",
      "host": "thaiwater.net",
      "notes": "Best public multi-agency water-observation spine for latest station snapshots, timestamps, basin filters, and parameter values such as pH, dissolved oxygen, conductivity, turbidity, temperature, and salinity. Keep it separate from WQI batch publications.",
      "source_profile_url": "/data/sources/thaiwater-waterquality-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "air4thai-pollution-control-department",
      "registry_position": 18,
      "name": "Air4Thai / Pollution Control Department",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "aqi",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "aqi_station",
        "district"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "aqi_station",
        "district"
      ],
      "observation_scope": [
        "aqi_average",
        "pm25_average"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check",
        "food_route",
        "gold_buying_check"
      ],
      "observation_feeds": [
        {
          "id": "air4thai-aqi",
          "name": "Air4Thai AQI and PM2.5",
          "kind": "entity-observation",
          "cadence": "Hourly"
        }
      ],
      "current_signal_types": [
        "aqi_risk",
        "outdoor_comfort",
        "source_confidence"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "JSON/XML/API-style feeds and dashboards",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Hourly / daily",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "http://air4thai.pcd.go.th/",
      "host": "air4thai.pcd.go.th",
      "notes": "Thailand PM2.5, PM10, AQI, and air-quality station data.",
      "source_profile_url": "/data/sources/air4thai-pollution-control-department/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "airbkk",
      "registry_position": 21,
      "name": "AirBKK",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "tourism",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "hotel_area",
        "attraction"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Health checked",
      "runtime_role_key": "health-checked",
      "runtime_role_detail": "A connector exists and source health probes it, but it does not yet feed the live graph.",
      "used_in_layers": [
        "source_health"
      ],
      "used_in_layer_labels": [
        "source health"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "A live connector checks this source in the status layer, but the source is not yet wired into observations or decisions.",
      "gated_candidate": false,
      "access_method": "Official public dashboard and backend surface; confirm public data endpoints before production ingestion",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public dashboard",
      "cadence_declared": "Hourly / near realtime on the public station surface",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://stations.airbkk.com/",
      "host": "stations.airbkk.com",
      "notes": "Bangkok-specific air-quality dashboard with district and station context for PM2.5 and related urban monitoring. Useful as Bangkok confidence enrichment on top of national AQ sources, but do not imply a stable public bulk API until a public endpoint is verified.",
      "source_profile_url": "/data/sources/airbkk/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "asmc-regional-haze-and-hotspot-portal",
      "registry_position": 366,
      "name": "ASMC regional haze and hotspot portal",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "safety",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "police_station",
        "hospital"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public ASEAN haze GIS portal, hotspot information pages, satellite overlays, haze maps, and WIS 2.0 pilot catalog context",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access; API access for some WIS 2.0 datasets is marked as emerging or coming soon",
      "cadence_declared": "Daily to near real time depending satellite, map, and forecast layer",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://asmc.asean.org/asmc-gis-portal/",
      "host": "asmc.asean.org",
      "notes": "Regional haze and hotspot context for burning-season pages, cross-border smoke interpretation, satellite fire detections, rainfall, wind, and haze-map overlays. Hotspots are possible active fires and can be missed or falsely detected; use as regional context, not station-level PM2.5 proof.",
      "source_profile_url": "/data/sources/asmc-regional-haze-and-hotspot-portal/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "copernicus-climate-data-store-era5",
      "registry_position": 259,
      "name": "Copernicus Climate Data Store / ERA5",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "store",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "store",
        "market",
        "district"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API, NetCDF, GRIB",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": true,
      "free_tier": "Free registration",
      "cadence_declared": "Regular",
      "cadence_band": "daily",
      "cadence_label": "Daily",
      "cadence_detail": "daily, regular, current-report cadence",
      "url": "https://cds.climate.copernicus.eu/",
      "host": "cds.climate.copernicus.eu",
      "notes": "Global climate/reanalysis data filterable to Thailand.",
      "source_profile_url": "/data/sources/copernicus-climate-data-store-era5/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "ddpm-disaster-data-catalog",
      "registry_position": 202,
      "name": "DDPM disaster data catalog",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official DDPM data catalog and linked CKAN-style dataset resources",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public where datasets are published",
      "cadence_declared": "5-30 minutes during active warning use cases; otherwise daily to monthly depending dataset",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://catalog.disaster.go.th/about",
      "host": "catalog.disaster.go.th",
      "notes": "Department of Disaster Prevention and Mitigation public data-catalog layer for disaster data, warning data, assistance data, resources, and broader disaster-management datasets.",
      "source_profile_url": "/data/sources/ddpm-disaster-data-catalog/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "diw-factory-noise-measurement",
      "registry_position": 251,
      "name": "DIW factory noise measurement",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official PDF regulation and measurement-method document",
      "access_modes": [
        "batch"
      ],
      "access_mode_labels": [
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "On legal or standards change",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://www.diw.go.th/webdiw/wp-content/uploads/2021/07/law-fac-env-07012554.pdf",
      "host": "diw.go.th",
      "notes": "Department of Industrial Works factory-noise measurement method and compliance formula for 24-hour average sound level, background noise, disturbance noise, and maximum sound level from factory operations.",
      "source_profile_url": "/data/sources/diw-factory-noise-measurement/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gdacs",
      "registry_position": 27,
      "name": "GDACS",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [
        "active_hazard_groups",
        "active_hazard_items"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check",
        "food_route",
        "gold_buying_check"
      ],
      "observation_feeds": [
        {
          "id": "gdacs-disaster-context",
          "name": "GDACS disaster context",
          "kind": "context-observation",
          "cadence": "Frequent / feed-driven"
        }
      ],
      "current_signal_types": [
        "source_confidence",
        "regional_disaster_context"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "RSS/feed",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Every few minutes / event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.gdacs.org/",
      "host": "gdacs.org",
      "notes": "Global disaster alerts filterable for Thailand and region.",
      "source_profile_url": "/data/sources/gdacs/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gistda-disaster-fire",
      "registry_position": 203,
      "name": "GISTDA disaster fire",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Public disaster platform dashboard and geospatial fire layers",
      "access_modes": [
        "portal"
      ],
      "access_mode_labels": [
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Near real time to hourly depending hotspot and burned-area layer",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://disaster.gistda.or.th/fire",
      "host": "disaster.gistda.or.th",
      "notes": "GISTDA fire and disaster platform for hotspot, fire, burned-area, and related geospatial context. Useful for wildfire and public-safety risk overlays, not for live fire-engine dispatch.",
      "source_profile_url": "/data/sources/gistda-disaster-fire/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "gistda-disaster-platform",
      "registry_position": 25,
      "name": "GISTDA Disaster Platform",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API, WMS, geospatial layers",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": false,
      "free_tier": "Free public where open",
      "cadence_declared": "Near real time to daily",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://disaster.gistda.or.th/",
      "host": "disaster.gistda.or.th",
      "notes": "Flood, fire, drought, PM2.5, rainfall forecasts, flood imagery, and disaster geospatial layers.",
      "source_profile_url": "/data/sources/gistda-disaster-platform/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "nasa-firms",
      "registry_position": 26,
      "name": "NASA FIRMS",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API, CSV, WMS",
      "access_modes": [
        "api",
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers",
        "Batch files"
      ],
      "auth_required": true,
      "free_tier": "Free public; API key may be required",
      "cadence_declared": "Near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://firms.modaps.eosdis.nasa.gov/",
      "host": "firms.modaps.eosdis.nasa.gov",
      "notes": "MODIS/VIIRS fire and thermal anomaly data filterable to Thailand.",
      "source_profile_url": "/data/sources/nasa-firms/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "noaa-aviation-weather-api",
      "registry_position": 144,
      "name": "NOAA Aviation Weather API",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "flight",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "observation_scope": [
        "airport_flight_rules_score",
        "airport_visibility_score",
        "airport_forecast_disruption_score",
        "airport_convective_forecast_flag"
      ],
      "decision_scope": [
        "where_to_go_today",
        "route_check"
      ],
      "observation_feeds": [
        {
          "id": "aviationweather-airport-status",
          "name": "Aviation Weather airport status context",
          "kind": "entity-observation",
          "cadence": "Minute to hourly depending airport weather updates"
        }
      ],
      "current_signal_types": [
        "flight_delay_risk"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public API, OpenAPI spec, and cache-file downloads for machine-to-machine aviation weather access",
      "access_modes": [
        "api",
        "batch"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Minute to hourly depending product",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://aviationweather.gov/data/api/",
      "host": "aviationweather.gov",
      "notes": "Global aviation weather API for METAR, TAF, SIGMET, station info, and recent archives. Useful as a machine-readable backup or cross-check for Thai airport weather.",
      "source_profile_url": "/data/sources/noaa-aviation-weather-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "noaa-ibtracs",
      "registry_position": 260,
      "name": "NOAA IBTrACS",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CSV/NetCDF",
      "access_modes": [
        "geo",
        "batch"
      ],
      "access_mode_labels": [
        "Geo layers",
        "Batch files"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Periodic",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://www.ncei.noaa.gov/products/international-best-track-archive",
      "host": "ncei.noaa.gov",
      "notes": "Global tropical-cyclone best-track dataset for storm history/risk.",
      "source_profile_url": "/data/sources/noaa-ibtracs/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "openaq-thailand",
      "registry_position": 19,
      "name": "OpenAQ Thailand",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "aqi",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "aqi_station",
        "district"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "REST API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Near real time where stations report",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://openaq.org/",
      "host": "openaq.org",
      "notes": "Global air-quality API filterable to Thailand.",
      "source_profile_url": "/data/sources/openaq-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-ecap-noise-complaints",
      "registry_position": 246,
      "name": "PCD ECAP noise complaints",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "complaint",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "district",
        "service_area"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official public complaint portal; no full open case database verified",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Current intake with public portal counters and routing information",
      "cadence_band": "variable",
      "cadence_label": "Variable",
      "cadence_detail": "catalog, agency, publisher, and project-dependent updates",
      "url": "https://ecap.pcd.go.th/ecap/",
      "host": "ecap.pcd.go.th",
      "notes": "Pollution complaint intake and routing for loud noise, vibration, construction, restaurants, entertainment venues, factories, and other nuisance-noise cases.",
      "source_profile_url": "/data/sources/pcd-ecap-noise-complaints/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-noise-monitor-csv",
      "registry_position": 245,
      "name": "PCD noise monitor CSV",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "noise",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "noise_station",
        "hotel_area"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "CKAN dataset with CSV download resources",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Daily to yearly publication depending resource release",
      "cadence_band": "scheduled",
      "cadence_label": "Scheduled",
      "cadence_detail": "monthly, quarterly, annual, seasonal, official publication",
      "url": "https://dev-portal.gdcatalog.go.th/dataset/gdpublish-noise-monitor",
      "host": "dev-portal.gdcatalog.go.th",
      "notes": "Historical daily average Leq data from Pollution Control Department noise-monitoring stations, typically published as yearly CSV files for nationwide station records.",
      "source_profile_url": "/data/sources/pcd-noise-monitor-csv/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "pcd-noise4thai",
      "registry_position": 244,
      "name": "PCD Noise4Thai",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "noise",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "noise_station",
        "hotel_area"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "noise_station",
        "hotel_area"
      ],
      "observation_scope": [
        "leq_1h",
        "leq_24h"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay"
      ],
      "observation_feeds": [
        {
          "id": "noise4thai-ambient-noise",
          "name": "Noise4Thai ambient noise",
          "kind": "entity-observation",
          "cadence": "Hourly / daily"
        }
      ],
      "current_signal_types": [
        "noise_risk"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public monitoring dashboard and station pages; no documented bulk public JSON API verified",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Current station snapshots with hourly and daily context where stations report",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.noise4thai.com/web/index.php",
      "host": "noise4thai.com",
      "notes": "Official Pollution Control Department ambient-noise monitoring surface with station codes, area type, update time, Leq 24hr, hourly Leq, Lmin, Lmax, and station detail views. Daily station data is presented as preliminary monitoring data.",
      "source_profile_url": "/data/sources/pcd-noise4thai/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "thai-meteorological-department",
      "registry_position": 14,
      "name": "Thai Meteorological Department",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "dataset",
        "source"
      ],
      "observation_scope": [
        "rain_risk_input",
        "heat_risk_input",
        "storm_warning_input",
        "marine_warning_input"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check",
        "food_route"
      ],
      "observation_feeds": [
        {
          "id": "tmd-weather-surface",
          "name": "TMD weather and warning surface",
          "kind": "entity-observation",
          "cadence": "Hourly / warning-driven"
        }
      ],
      "current_signal_types": [
        "rain_risk",
        "marine_warning_risk",
        "ferry_fragility"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Website, RSS, API surfaces where available",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public; some APIs may require token",
      "cadence_declared": "Forecasts and warnings update frequently",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.tmd.go.th/",
      "host": "tmd.go.th",
      "notes": "Weather observations, forecasts, warnings, earthquakes, and weather-radar resources.",
      "source_profile_url": "/data/sources/thai-meteorological-department/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tmd-aeromet",
      "registry_position": 143,
      "name": "TMD Aeromet",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "flight",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Official aviation meteorology portal and airport weather pages",
      "access_modes": [
        "api",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public web access",
      "cadence_declared": "Operational; METAR every 30-60 minutes, TAF every 1-6 hours, warnings on issuance",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://aeromet.tmd.go.th/home_new_2.php",
      "host": "aeromet.tmd.go.th",
      "notes": "Thai aviation meteorology portal for airport weather, METAR, TAF, and aviation-warning context. Best official local weather layer for Thai airports, though public API documentation is unclear.",
      "source_profile_url": "/data/sources/tmd-aeromet/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tmd-earthquake-information",
      "registry_position": 17,
      "name": "TMD earthquake information",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "Website/RSS/API-style feeds",
      "access_modes": [
        "api",
        "batch",
        "portal"
      ],
      "access_mode_labels": [
        "API/feed",
        "Batch files",
        "Portal/dashboard"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Event-driven",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://earthquake.tmd.go.th/",
      "host": "earthquake.tmd.go.th",
      "notes": "Thailand and regional earthquake reports.",
      "source_profile_url": "/data/sources/tmd-earthquake-information/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tmd-shipping-forecast",
      "registry_position": 15,
      "name": "TMD Shipping Forecast",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "ferry",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "island"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "island"
      ],
      "observation_scope": [
        "marine_wind_speed_average",
        "marine_wave_height_average",
        "marine_wave_height_thunder",
        "marine_thunderstorm_flag"
      ],
      "decision_scope": [
        "where_to_go_today",
        "route_check",
        "ferry_check"
      ],
      "observation_feeds": [
        {
          "id": "tmd-shipping-forecast",
          "name": "TMD shipping weather forecast",
          "kind": "entity-observation",
          "cadence": "Operational / on marine-forecast update"
        }
      ],
      "current_signal_types": [
        "marine_warning_risk"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "Public webpage",
      "access_modes": [],
      "access_mode_labels": [],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Operational / on marine-forecast update",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://www.tmd.go.th/en/forecast/shipping",
      "host": "tmd.go.th",
      "notes": "Public Gulf of Thailand and Andaman / Malacca shipping forecast text for wind, wave, thunder, and heavy-rain marine context. Use as sea-state burden and ferry-risk evidence, not operator closure, ticket, or seat truth.",
      "source_profile_url": "/data/sources/tmd-shipping-forecast/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "tmd-weather-data-services",
      "registry_position": 16,
      "name": "TMD weather data services",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "catalog",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "dataset",
        "source"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": false,
      "access_method": "API/data service",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": false,
      "free_tier": "Free public or free token depending on endpoint",
      "cadence_declared": "Frequent",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://data.tmd.go.th/",
      "host": "data.tmd.go.th",
      "notes": "Machine-readable TMD data entry point.",
      "source_profile_url": "/data/sources/tmd-weather-data-services/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "usgs-earthquake-api",
      "registry_position": 28,
      "name": "USGS Earthquake API",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "disaster",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Public",
      "access_class_key": "public",
      "access_class_detail": "Primary ingest layer. Publicly reachable feeds and pages that can be automated within rate-limit and licensing constraints.",
      "automation_policy": "Primary ingest layer",
      "automation_policy_key": "primary-ingest",
      "automation_policy_detail": "Safe target for regular automation, within source cadence and license constraints.",
      "runtime_role": "Decision driving",
      "runtime_role_key": "decision-driving",
      "runtime_role_detail": "The source currently influences live traveler-facing decisions through the graph engine.",
      "used_in_layers": [
        "source_health",
        "observation_ingest",
        "signal_compute",
        "decision_compute"
      ],
      "used_in_layer_labels": [
        "source health",
        "observation ingest",
        "signal compute",
        "decision compute"
      ],
      "production_ready": true,
      "production_ready_note": "This source is currently safe for the production graph role named above.",
      "entity_scope": [],
      "observation_scope": [
        "regional_earthquake_events",
        "regional_max_magnitude"
      ],
      "decision_scope": [
        "where_to_go_today",
        "where_to_stay",
        "route_check",
        "ferry_check",
        "food_route",
        "gold_buying_check"
      ],
      "observation_feeds": [
        {
          "id": "usgs-thailand-earthquakes",
          "name": "USGS Thailand-region earthquakes",
          "kind": "context-observation",
          "cadence": "Frequent / event-driven"
        }
      ],
      "current_signal_types": [
        "source_confidence",
        "regional_earthquake_context"
      ],
      "runtime_notes": "Feeds active observations and signals that currently influence traveler-facing decisions.",
      "gated_candidate": false,
      "access_method": "GeoJSON/API",
      "access_modes": [
        "api",
        "geo"
      ],
      "access_mode_labels": [
        "API/feed",
        "Geo layers"
      ],
      "auth_required": false,
      "free_tier": "Free public",
      "cadence_declared": "Near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://earthquake.usgs.gov/fdsnws/event/1/",
      "host": "earthquake.usgs.gov",
      "notes": "Earthquake events filterable by Thailand bounding box.",
      "source_profile_url": "/data/sources/usgs-earthquake-api/",
      "last_catalog_refresh_at": "2026-05-11"
    },
    {
      "source_id": "waqi-aqicn-thailand",
      "registry_position": 20,
      "name": "WAQI / AQICN Thailand",
      "domain": "Weather, environment, and disasters",
      "category_slug": "weather-environment-and-disasters",
      "source_kind": "aqi",
      "graph_class": "observations",
      "graph_role": "Live risk layer",
      "coverage_area": "Thailand or source-defined scope",
      "coverage_entity_types": [
        "destination",
        "province",
        "region",
        "route",
        "pier",
        "airport",
        "station",
        "aqi_station",
        "district"
      ],
      "feeds_signals": [
        "aqi_risk",
        "rain_risk",
        "marine_warning_risk",
        "heat_risk",
        "storm_risk",
        "fire_smoke_risk",
        "disaster_risk"
      ],
      "feeds_decisions": [
        "where_to_go_today",
        "route_feasibility",
        "ferry_plan",
        "beach_plan",
        "rainy_day_plan"
      ],
      "access_class": "Free registration",
      "access_class_key": "free-registration",
      "access_class_detail": "Primary or secondary ingest layer once keys, tokens, or account setup exist.",
      "automation_policy": "Primary or secondary ingest with registration",
      "automation_policy_key": "registered-ingest",
      "automation_policy_detail": "Use once keys, accounts, quota tracking, and auth status are configured.",
      "runtime_role": "Catalog only",
      "runtime_role_key": "catalog-only",
      "runtime_role_detail": "Profiled in the atlas, but not yet wired into source health or live graph computation.",
      "used_in_layers": [
        "page_reference_only"
      ],
      "used_in_layer_labels": [
        "page reference only"
      ],
      "production_ready": false,
      "production_ready_note": "This source is cataloged or caution-labeled, so it should not be treated as a production-ready live graph input yet.",
      "entity_scope": [],
      "observation_scope": [],
      "decision_scope": [],
      "observation_feeds": [],
      "current_signal_types": [],
      "runtime_notes": "Profiled in the atlas and public pages, but not yet connected to live graph computation.",
      "gated_candidate": true,
      "access_method": "API",
      "access_modes": [
        "api"
      ],
      "access_mode_labels": [
        "API/feed"
      ],
      "auth_required": true,
      "free_tier": "Free registration/token",
      "cadence_declared": "Near real time",
      "cadence_band": "live",
      "cadence_label": "Live",
      "cadence_detail": "minute, hourly, near-real-time, event, warning, operational",
      "url": "https://aqicn.org/api/",
      "host": "aqicn.org",
      "notes": "Air-quality station feeds including Bangkok and Thailand stations.",
      "source_profile_url": "/data/sources/waqi-aqicn-thailand/",
      "last_catalog_refresh_at": "2026-05-11"
    }
  ]
}
