{
  "title": "Enjoy Thai Land signal layer",
  "description": "Explainable Thailand signals computed from the entity registry, normalized observations, and explicit trust rules.",
  "generated_at": "2026-06-24T02:15:17.842Z",
  "entity_count": 62,
  "signal_count": 790,
  "active_family_count": 41,
  "queued_family_count": 0,
  "families": {
    "active": [
      {
        "id": "aqi_risk",
        "name": "AQI risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Turns normalized Air4Thai AQI observations into a place-level outdoor risk signal.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Destination and hotel-area comfort risk."
      },
      {
        "id": "outdoor_comfort",
        "name": "Outdoor comfort",
        "status": "active",
        "kind": "live_observation",
        "note": "Combines AQI and PM2.5 into an explainable outdoor-comfort signal for day planning.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Walkability and outdoor-heavy plan fit."
      },
      {
        "id": "source_confidence",
        "name": "Source confidence",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Blends entity source confidence, source count, and live observation freshness into a trust signal.",
        "dependsOn": [
          "entity-registry",
          "air4thai-aqi",
          "gdacs-disaster-context",
          "usgs-thailand-earthquakes"
        ],
        "output": "Why the graph answer is or is not trustworthy today."
      },
      {
        "id": "regional_disaster_context",
        "name": "Regional disaster context",
        "status": "active",
        "kind": "context",
        "note": "Uses GDACS hazard groups as a route-confidence context layer without pretending it is a local place verdict.",
        "dependsOn": [
          "gdacs-disaster-context"
        ],
        "output": "Graph-wide route and confidence caution."
      },
      {
        "id": "regional_earthquake_context",
        "name": "Regional earthquake context",
        "status": "active",
        "kind": "context",
        "note": "Uses the bounded USGS query as a light route-breaking context signal for Thailand-region events.",
        "dependsOn": [
          "usgs-thailand-earthquakes"
        ],
        "output": "Graph-wide disruption context."
      },
      {
        "id": "rain_risk",
        "name": "Rain risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live TMD forecast, warning, and station-weather observations to compute destination and route rain fit.",
        "dependsOn": [
          "tmd-weather-surface"
        ],
        "output": "Destination fit and route breakage."
      },
      {
        "id": "flight_delay_risk",
        "name": "Flight weather and airport delay risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public METAR and TAF weather-operability context for Thai airports. This is airport weather burden, not airline on-time performance truth.",
        "dependsOn": [
          "aviationweather-airport-status"
        ],
        "output": "Airport weather burden and flight-operability context for route planning."
      },
      {
        "id": "marine_warning_risk",
        "name": "Marine warning and sea-state risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public TMD marine text, wind, and wave context for coastal destinations and ferry-related anchors. This is sea-state caution, not operator closure or seat inventory truth.",
        "dependsOn": [
          "tmd-weather-surface",
          "tmd-shipping-forecast"
        ],
        "output": "Coastal boat-day caution and ferry-fragility context."
      },
      {
        "id": "berth_operability_context",
        "name": "Berth operability context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth-status surface to show whether tracked coastal anchors have named public port selectors and visible ship-visit evidence on the official page. This is berth and movement context, not ferry schedule, ticket, or seat truth.",
        "dependsOn": [
          "marine-department-berth-status"
        ],
        "output": "Coastal port and public berth-status support for ferry-sensitive planning."
      },
      {
        "id": "pier_transfer_support",
        "name": "Pier transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around piers and coastal anchors to show whether ferry moves have real transfer support behind them. This is transfer-structure support, not operator schedule or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Public-water-transport access strength for ferry and coastal planning."
      },
      {
        "id": "airport_transfer_support",
        "name": "Airport transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around airport anchors to show whether flight-based plans have real ground-access support behind them. This is airport transfer support, not live airline board, gate, or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Airport-ground-access strength for route and stay planning."
      },
      {
        "id": "airport_ground_service_support",
        "name": "Airport ground-service support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT airport transport pages to score official taxi, Grab, rental-counter, pickup-rule, and ground-service guidance where those pages are publicly available. This is airport ground-service context, not live queue, ETA, or rental inventory truth.",
        "dependsOn": [
          "aot-airport-ground-services"
        ],
        "output": "Official airport pickup-rule and ground-service support for route and stay planning."
      },
      {
        "id": "airport_board_surface_support",
        "name": "Airport board-surface support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT flight-status pages to score whether a traveler can self-check an official passenger board surface. This is self-serve board visibility, not live airline delay, gate, baggage, or cancellation truth because the row query is protected by a browser turnstile token.",
        "dependsOn": [
          "aot-airport-flight-board-surface"
        ],
        "output": "Official passenger self-serve board visibility for airport, stay, and route planning."
      },
      {
        "id": "airport_scale_context",
        "name": "Airport scale context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public AOT fiscal traffic workbook to score official airport passenger and aircraft-movement scale context. This is airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
        "dependsOn": [
          "aot-airport-traffic-stats"
        ],
        "output": "Official airport scale and major-airport context for destination, stay, and route planning."
      },
      {
        "id": "airport_environmental_support",
        "name": "Airport environmental support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the SET-hosted AOT factsheet and annual report disclosure snapshot to score airport environmental-governance, community-contact, and airport-noise support context. This is institutional disclosure support, not live measured sound-level truth.",
        "dependsOn": [
          "aot-airport-environment-support"
        ],
        "output": "Official airport environmental-governance and community-support context for airport-linked stay and route planning."
      },
      {
        "id": "rail_feasibility",
        "name": "Rail feasibility",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around destinations, hotel areas, and station anchors to show whether a rail-linked plan is structurally real. This is rail-support context, not live seat, delay, or operator-disruption truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Rail-linked destination and stay support for route and base planning."
      },
      {
        "id": "official_rail_presence",
        "name": "Official rail presence",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public SRT station-list surface to confirm official rail presence around destinations and selected hotel areas. This is operator-backed station presence, not live train timing or seat truth.",
        "dependsOn": [
          "srt-official-station-presence"
        ],
        "output": "Official operator-backed rail presence for destination and route confidence."
      },
      {
        "id": "official_bus_terminal_support",
        "name": "Official bus-terminal support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public MOT passenger-terminal master CSV to confirm official overland bus-terminal presence around destinations, hotel areas, and bus-terminal anchors. This is terminal-master support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "mot-bus-terminal-support"
        ],
        "output": "Official overland bus-terminal support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_support",
        "name": "Official intercity bus support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS station, office, stop, and ticket-point CSV to confirm official intercity-bus support around destinations, hotel areas, and overland anchors. This is official station and ticket-point presence, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-station-ticket-support"
        ],
        "output": "Official BKS intercity-bus support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_search_support",
        "name": "Official intercity-bus search support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS booking/search destination-selector surface to confirm whether tracked destinations are actually present in the official intercity-bus route-search flow from Bangkok origins. This is search-surface support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-timetable-search-surface"
        ],
        "output": "Official BKS public route-search support for destination, stay, and route confidence."
      },
      {
        "id": "official_transport_complaint_support",
        "name": "Official transport complaint support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT 1584 fiscal-year complaint workbooks to score official complaint recourse and transport-burden context around Bangkok, regional, and overland traveler entities. This is passenger-protection and burden context, not local realtime service quality or dispatch truth.",
        "dependsOn": [
          "dlt-1584-complaint-stats"
        ],
        "output": "Official complaint recourse and transport-burden context for destination, stay, and route confidence."
      },
      {
        "id": "official_taxi_oversight_support",
        "name": "Official taxi-oversight support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT GPS passenger pages and Taxi OK / Taxi VIP project notices to score official regulated-taxi oversight, complaint, and station-search support. This is oversight and passenger-protection context, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
        "dependsOn": [
          "dlt-gps-taxi-support"
        ],
        "output": "Official regulated-taxi oversight support for city-base, airport-linked, stay, and route confidence."
      },
      {
        "id": "official_motorcycle_taxi_support",
        "name": "Official motorcycle-taxi support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT/data.go.th Bangkok motorcycle-taxi dataset to score official stand and driver support around Bangkok city-base, hotel-area, terminal, and airport-linked entities. This is supply and stand coverage context, not live availability, dispatch, or queue truth.",
        "dependsOn": [
          "bangkok-motorcycle-taxi-support"
        ],
        "output": "Official Bangkok last-mile motorcycle-taxi support for destination, stay, and route confidence."
      },
      {
        "id": "taxi_pickup_dropoff_support",
        "name": "Taxi pickup and dropoff support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public OTP monthly taxi GPS analytics and top pickup/dropoff area rankings to score aggregate Bangkok taxi-demand and hotspot support around city-base, hotel-area, terminal, and airport-linked entities. This is monthly aggregate demand context, not live dispatch, ETA, queue, or raw trip truth.",
        "dependsOn": [
          "otp-taxi-demand-analytics"
        ],
        "output": "Bangkok taxi-demand and hotspot support for destination, stay, and route confidence."
      },
      {
        "id": "official_pier_support",
        "name": "Official pier support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth registry to confirm official passenger-pier support around coastal destinations, hotel areas, and pier anchors. This is berth-registry and infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
        "dependsOn": [
          "marine-department-pier-registry"
        ],
        "output": "Official coastal and passenger-pier support for destination, stay, route, and ferry confidence."
      },
      {
        "id": "urban_rapid_transit_support",
        "name": "Urban rapid-transit support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public BTS and MRTA route-map and service pages to confirm official Bangkok rapid-transit support for core city-base entities. This is route-map and service-page support, not live headway, crowding, or outage truth.",
        "dependsOn": [
          "bangkok-rapid-transit-official-pages"
        ],
        "output": "Official Bangkok rapid-transit support for city-base, stay, and route planning."
      },
      {
        "id": "urban_bus_operator_support",
        "name": "Urban bus-operator support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Thai Smile Group branch and depot locator to confirm Bangkok urban bus operator footprint around selected traveler entities. This is operator footprint and support context, not realtime vehicle, ETA, crowding, or outage truth.",
        "dependsOn": [
          "thai-smile-group-branch-locator"
        ],
        "output": "Bangkok urban bus operator support for city-base, stay, and route planning."
      },
      {
        "id": "thai_gold_reference_price",
        "name": "Thai gold reference price",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the published Gold Traders Association latest-price JSON surface to expose the national Thai domestic 96.5% gold quote in THB per 1 baht-weight. This is a published retail-reference layer, not a live trading feed or local shop-inventory surface.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "National Thai gold reference availability, freshness, and spread context."
      },
      {
        "id": "thai_gold_fx_pressure",
        "name": "Thai gold FX pressure",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses the Bank of Thailand daily-average USD/THB API when configured, and otherwise falls back to the Gold Traders Association embedded FX field, alongside recent GTA quote movement, to explain whether the Thai domestic gold quote feels calmer or more pressured. This is context, not investment advice.",
        "dependsOn": [
          "gta-gold-reference-price",
          "bot-usd-thb-reference"
        ],
        "output": "Exchange-rate and recent-quote pressure behind the Thai retail reference price."
      },
      {
        "id": "thai_gold_buying_friction",
        "name": "Thai gold buying friction",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Combines the national Gold Traders Association quote with city buying-context rules so Bangkok, Chiang Mai, Phuket, Pattaya, and Hat Yai are explained as comparison-shopping or tourist-friction contexts instead of fake province-specific price feeds.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "City-by-city gold buying context and friction around the national Thai reference quote."
      },
      {
        "id": "flood_water_risk",
        "name": "Flood and water risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Thaiwater water-quality observations as a river and canal caution layer where current station coverage exists.",
        "dependsOn": [
          "thaiwater-water-quality"
        ],
        "output": "Flood, water quality, and marine caution."
      },
      {
        "id": "noise_risk",
        "name": "Noise risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Noise4Thai ambient-noise observations for hotel-base comfort and neighborhood nuisance signals.",
        "dependsOn": [
          "noise4thai-ambient-noise"
        ],
        "output": "Hotel base and neighborhood comfort."
      },
      {
        "id": "road_safety_risk",
        "name": "Road safety risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses ThaiRSC road-casualty observations to compute province and route road-safety caution.",
        "dependsOn": [
          "thairsc-road-safety"
        ],
        "output": "Route burden and accident caution."
      },
      {
        "id": "civic_friction",
        "name": "Civic friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses Bangkok Open Data district complaint, resolution, and star-rating stats as a slower-moving nuisance and service-friction layer for Bangkok and its main hotel areas.",
        "dependsOn": [
          "bangkok-civic-complaint-stats"
        ],
        "output": "Bangkok nuisance, complaint burden, and service-friction context."
      },
      {
        "id": "bangkok_flood_friction",
        "name": "Bangkok flood friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Bangkok flood-monitoring current-event surface as a citywide flood-friction layer for Bangkok destination, stay, and route planning. This is Bangkok-only public flood-event context, not a province-by-province Thailand flood service.",
        "dependsOn": [
          "bangkok-flood-monitoring-system"
        ],
        "output": "Bangkok-only route, stay, and transfer burden during current flood events."
      },
      {
        "id": "highway_transfer_friction",
        "name": "Highway transfer friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Combines DOH public CCTV region support with official EXAT expressway support surfaces to explain whether major overland moves have official observability and motorway-support context behind them. This is support and friction context, not live speed, queue, lane, or incident truth.",
        "dependsOn": [
          "doh-highway-traffic-support",
          "exat-expressway-support"
        ],
        "output": "Bangkok-linked and regional overland friction support for route and stay planning."
      },
      {
        "id": "spa_license_support",
        "name": "Spa license support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public HSS health-establishment directory and spa-premium surfaces to expose whether official spa and massage license-lookup context exists behind wellness-heavy traveler anchors. This is licensing-support context, not live booking, treatment quality, or venue popularity truth.",
        "dependsOn": [
          "hss-spa-license-support"
        ],
        "output": "Wellness-license confidence for destination and stay planning."
      },
      {
        "id": "medical_fallback_support",
        "name": "Medical fallback support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public MOPH and HS4 facility surfaces to expose whether official hospital and facility-lookup context exists behind traveler fallback planning. This is medical-support context, not live bed, wait-time, dispatch, or specialist-availability truth.",
        "dependsOn": [
          "moph-health-facility-support"
        ],
        "output": "Destination and stay fallback-support strength when travelers need formal healthcare context."
      },
      {
        "id": "park_access_context",
        "name": "Park access context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public DNP tourism dataset surfaces to expose whether national-park and protected-area planning has official dataset support behind it. This is park-planning context, not live closure, capacity, or ranger-availability truth.",
        "dependsOn": [
          "dnp-park-tourism-support"
        ],
        "output": "Protected-area and nature-trip planning confidence for destination and route decisions."
      },
      {
        "id": "ferry_fragility",
        "name": "Ferry fragility",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends live TMD weather context with pier confidence to score island-chain fragility honestly.",
        "dependsOn": [
          "tmd-weather-surface",
          "source_confidence"
        ],
        "output": "Island transfer reliability."
      },
      {
        "id": "transport_friction",
        "name": "Transport friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends current weather, road burden, official highway support, source confidence, and Namtang transit-structure support into a live movement-friction family.",
        "dependsOn": [
          "rain_risk",
          "road_safety_risk",
          "highway_transfer_friction",
          "source_confidence",
          "namtang-transit-structure"
        ],
        "output": "Movement difficulty and backup strength."
      }
    ],
    "queued": [],
    "all": [
      {
        "id": "aqi_risk",
        "name": "AQI risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Turns normalized Air4Thai AQI observations into a place-level outdoor risk signal.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Destination and hotel-area comfort risk."
      },
      {
        "id": "outdoor_comfort",
        "name": "Outdoor comfort",
        "status": "active",
        "kind": "live_observation",
        "note": "Combines AQI and PM2.5 into an explainable outdoor-comfort signal for day planning.",
        "dependsOn": [
          "air4thai-aqi"
        ],
        "output": "Walkability and outdoor-heavy plan fit."
      },
      {
        "id": "source_confidence",
        "name": "Source confidence",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Blends entity source confidence, source count, and live observation freshness into a trust signal.",
        "dependsOn": [
          "entity-registry",
          "air4thai-aqi",
          "gdacs-disaster-context",
          "usgs-thailand-earthquakes"
        ],
        "output": "Why the graph answer is or is not trustworthy today."
      },
      {
        "id": "regional_disaster_context",
        "name": "Regional disaster context",
        "status": "active",
        "kind": "context",
        "note": "Uses GDACS hazard groups as a route-confidence context layer without pretending it is a local place verdict.",
        "dependsOn": [
          "gdacs-disaster-context"
        ],
        "output": "Graph-wide route and confidence caution."
      },
      {
        "id": "regional_earthquake_context",
        "name": "Regional earthquake context",
        "status": "active",
        "kind": "context",
        "note": "Uses the bounded USGS query as a light route-breaking context signal for Thailand-region events.",
        "dependsOn": [
          "usgs-thailand-earthquakes"
        ],
        "output": "Graph-wide disruption context."
      },
      {
        "id": "rain_risk",
        "name": "Rain risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live TMD forecast, warning, and station-weather observations to compute destination and route rain fit.",
        "dependsOn": [
          "tmd-weather-surface"
        ],
        "output": "Destination fit and route breakage."
      },
      {
        "id": "flight_delay_risk",
        "name": "Flight weather and airport delay risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public METAR and TAF weather-operability context for Thai airports. This is airport weather burden, not airline on-time performance truth.",
        "dependsOn": [
          "aviationweather-airport-status"
        ],
        "output": "Airport weather burden and flight-operability context for route planning."
      },
      {
        "id": "marine_warning_risk",
        "name": "Marine warning and sea-state risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public TMD marine text, wind, and wave context for coastal destinations and ferry-related anchors. This is sea-state caution, not operator closure or seat inventory truth.",
        "dependsOn": [
          "tmd-weather-surface",
          "tmd-shipping-forecast"
        ],
        "output": "Coastal boat-day caution and ferry-fragility context."
      },
      {
        "id": "berth_operability_context",
        "name": "Berth operability context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth-status surface to show whether tracked coastal anchors have named public port selectors and visible ship-visit evidence on the official page. This is berth and movement context, not ferry schedule, ticket, or seat truth.",
        "dependsOn": [
          "marine-department-berth-status"
        ],
        "output": "Coastal port and public berth-status support for ferry-sensitive planning."
      },
      {
        "id": "pier_transfer_support",
        "name": "Pier transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around piers and coastal anchors to show whether ferry moves have real transfer support behind them. This is transfer-structure support, not operator schedule or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Public-water-transport access strength for ferry and coastal planning."
      },
      {
        "id": "airport_transfer_support",
        "name": "Airport transfer support",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around airport anchors to show whether flight-based plans have real ground-access support behind them. This is airport transfer support, not live airline board, gate, or queue-length truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Airport-ground-access strength for route and stay planning."
      },
      {
        "id": "airport_ground_service_support",
        "name": "Airport ground-service support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT airport transport pages to score official taxi, Grab, rental-counter, pickup-rule, and ground-service guidance where those pages are publicly available. This is airport ground-service context, not live queue, ETA, or rental inventory truth.",
        "dependsOn": [
          "aot-airport-ground-services"
        ],
        "output": "Official airport pickup-rule and ground-service support for route and stay planning."
      },
      {
        "id": "airport_board_surface_support",
        "name": "Airport board-surface support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public AOT flight-status pages to score whether a traveler can self-check an official passenger board surface. This is self-serve board visibility, not live airline delay, gate, baggage, or cancellation truth because the row query is protected by a browser turnstile token.",
        "dependsOn": [
          "aot-airport-flight-board-surface"
        ],
        "output": "Official passenger self-serve board visibility for airport, stay, and route planning."
      },
      {
        "id": "airport_scale_context",
        "name": "Airport scale context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public AOT fiscal traffic workbook to score official airport passenger and aircraft-movement scale context. This is airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
        "dependsOn": [
          "aot-airport-traffic-stats"
        ],
        "output": "Official airport scale and major-airport context for destination, stay, and route planning."
      },
      {
        "id": "airport_environmental_support",
        "name": "Airport environmental support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the SET-hosted AOT factsheet and annual report disclosure snapshot to score airport environmental-governance, community-contact, and airport-noise support context. This is institutional disclosure support, not live measured sound-level truth.",
        "dependsOn": [
          "aot-airport-environment-support"
        ],
        "output": "Official airport environmental-governance and community-support context for airport-linked stay and route planning."
      },
      {
        "id": "rail_feasibility",
        "name": "Rail feasibility",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses public Namtang stop and mode structure around destinations, hotel areas, and station anchors to show whether a rail-linked plan is structurally real. This is rail-support context, not live seat, delay, or operator-disruption truth.",
        "dependsOn": [
          "namtang-transit-structure"
        ],
        "output": "Rail-linked destination and stay support for route and base planning."
      },
      {
        "id": "official_rail_presence",
        "name": "Official rail presence",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public SRT station-list surface to confirm official rail presence around destinations and selected hotel areas. This is operator-backed station presence, not live train timing or seat truth.",
        "dependsOn": [
          "srt-official-station-presence"
        ],
        "output": "Official operator-backed rail presence for destination and route confidence."
      },
      {
        "id": "official_bus_terminal_support",
        "name": "Official bus-terminal support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public MOT passenger-terminal master CSV to confirm official overland bus-terminal presence around destinations, hotel areas, and bus-terminal anchors. This is terminal-master support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "mot-bus-terminal-support"
        ],
        "output": "Official overland bus-terminal support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_support",
        "name": "Official intercity bus support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS station, office, stop, and ticket-point CSV to confirm official intercity-bus support around destinations, hotel areas, and overland anchors. This is official station and ticket-point presence, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-station-ticket-support"
        ],
        "output": "Official BKS intercity-bus support for destination, stay, and route confidence."
      },
      {
        "id": "official_intercity_bus_search_support",
        "name": "Official intercity-bus search support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public BKS booking/search destination-selector surface to confirm whether tracked destinations are actually present in the official intercity-bus route-search flow from Bangkok origins. This is search-surface support, not live departure, seat, or booking truth.",
        "dependsOn": [
          "bks-timetable-search-surface"
        ],
        "output": "Official BKS public route-search support for destination, stay, and route confidence."
      },
      {
        "id": "official_transport_complaint_support",
        "name": "Official transport complaint support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT 1584 fiscal-year complaint workbooks to score official complaint recourse and transport-burden context around Bangkok, regional, and overland traveler entities. This is passenger-protection and burden context, not local realtime service quality or dispatch truth.",
        "dependsOn": [
          "dlt-1584-complaint-stats"
        ],
        "output": "Official complaint recourse and transport-burden context for destination, stay, and route confidence."
      },
      {
        "id": "official_taxi_oversight_support",
        "name": "Official taxi-oversight support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT GPS passenger pages and Taxi OK / Taxi VIP project notices to score official regulated-taxi oversight, complaint, and station-search support. This is oversight and passenger-protection context, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
        "dependsOn": [
          "dlt-gps-taxi-support"
        ],
        "output": "Official regulated-taxi oversight support for city-base, airport-linked, stay, and route confidence."
      },
      {
        "id": "official_motorcycle_taxi_support",
        "name": "Official motorcycle-taxi support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public DLT/data.go.th Bangkok motorcycle-taxi dataset to score official stand and driver support around Bangkok city-base, hotel-area, terminal, and airport-linked entities. This is supply and stand coverage context, not live availability, dispatch, or queue truth.",
        "dependsOn": [
          "bangkok-motorcycle-taxi-support"
        ],
        "output": "Official Bangkok last-mile motorcycle-taxi support for destination, stay, and route confidence."
      },
      {
        "id": "taxi_pickup_dropoff_support",
        "name": "Taxi pickup and dropoff support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public OTP monthly taxi GPS analytics and top pickup/dropoff area rankings to score aggregate Bangkok taxi-demand and hotspot support around city-base, hotel-area, terminal, and airport-linked entities. This is monthly aggregate demand context, not live dispatch, ETA, queue, or raw trip truth.",
        "dependsOn": [
          "otp-taxi-demand-analytics"
        ],
        "output": "Bangkok taxi-demand and hotspot support for destination, stay, and route confidence."
      },
      {
        "id": "official_pier_support",
        "name": "Official pier support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Marine Department berth registry to confirm official passenger-pier support around coastal destinations, hotel areas, and pier anchors. This is berth-registry and infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
        "dependsOn": [
          "marine-department-pier-registry"
        ],
        "output": "Official coastal and passenger-pier support for destination, stay, route, and ferry confidence."
      },
      {
        "id": "urban_rapid_transit_support",
        "name": "Urban rapid-transit support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public BTS and MRTA route-map and service pages to confirm official Bangkok rapid-transit support for core city-base entities. This is route-map and service-page support, not live headway, crowding, or outage truth.",
        "dependsOn": [
          "bangkok-rapid-transit-official-pages"
        ],
        "output": "Official Bangkok rapid-transit support for city-base, stay, and route planning."
      },
      {
        "id": "urban_bus_operator_support",
        "name": "Urban bus-operator support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Thai Smile Group branch and depot locator to confirm Bangkok urban bus operator footprint around selected traveler entities. This is operator footprint and support context, not realtime vehicle, ETA, crowding, or outage truth.",
        "dependsOn": [
          "thai-smile-group-branch-locator"
        ],
        "output": "Bangkok urban bus operator support for city-base, stay, and route planning."
      },
      {
        "id": "thai_gold_reference_price",
        "name": "Thai gold reference price",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the published Gold Traders Association latest-price JSON surface to expose the national Thai domestic 96.5% gold quote in THB per 1 baht-weight. This is a published retail-reference layer, not a live trading feed or local shop-inventory surface.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "National Thai gold reference availability, freshness, and spread context."
      },
      {
        "id": "thai_gold_fx_pressure",
        "name": "Thai gold FX pressure",
        "status": "active",
        "kind": "derived_live",
        "note": "Uses the Bank of Thailand daily-average USD/THB API when configured, and otherwise falls back to the Gold Traders Association embedded FX field, alongside recent GTA quote movement, to explain whether the Thai domestic gold quote feels calmer or more pressured. This is context, not investment advice.",
        "dependsOn": [
          "gta-gold-reference-price",
          "bot-usd-thb-reference"
        ],
        "output": "Exchange-rate and recent-quote pressure behind the Thai retail reference price."
      },
      {
        "id": "thai_gold_buying_friction",
        "name": "Thai gold buying friction",
        "status": "active",
        "kind": "seed_plus_live",
        "note": "Combines the national Gold Traders Association quote with city buying-context rules so Bangkok, Chiang Mai, Phuket, Pattaya, and Hat Yai are explained as comparison-shopping or tourist-friction contexts instead of fake province-specific price feeds.",
        "dependsOn": [
          "gta-gold-reference-price"
        ],
        "output": "City-by-city gold buying context and friction around the national Thai reference quote."
      },
      {
        "id": "flood_water_risk",
        "name": "Flood and water risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Thaiwater water-quality observations as a river and canal caution layer where current station coverage exists.",
        "dependsOn": [
          "thaiwater-water-quality"
        ],
        "output": "Flood, water quality, and marine caution."
      },
      {
        "id": "noise_risk",
        "name": "Noise risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses live Noise4Thai ambient-noise observations for hotel-base comfort and neighborhood nuisance signals.",
        "dependsOn": [
          "noise4thai-ambient-noise"
        ],
        "output": "Hotel base and neighborhood comfort."
      },
      {
        "id": "road_safety_risk",
        "name": "Road safety risk",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses ThaiRSC road-casualty observations to compute province and route road-safety caution.",
        "dependsOn": [
          "thairsc-road-safety"
        ],
        "output": "Route burden and accident caution."
      },
      {
        "id": "civic_friction",
        "name": "Civic friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses Bangkok Open Data district complaint, resolution, and star-rating stats as a slower-moving nuisance and service-friction layer for Bangkok and its main hotel areas.",
        "dependsOn": [
          "bangkok-civic-complaint-stats"
        ],
        "output": "Bangkok nuisance, complaint burden, and service-friction context."
      },
      {
        "id": "bangkok_flood_friction",
        "name": "Bangkok flood friction",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public Bangkok flood-monitoring current-event surface as a citywide flood-friction layer for Bangkok destination, stay, and route planning. This is Bangkok-only public flood-event context, not a province-by-province Thailand flood service.",
        "dependsOn": [
          "bangkok-flood-monitoring-system"
        ],
        "output": "Bangkok-only route, stay, and transfer burden during current flood events."
      },
      {
        "id": "highway_transfer_friction",
        "name": "Highway transfer friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Combines DOH public CCTV region support with official EXAT expressway support surfaces to explain whether major overland moves have official observability and motorway-support context behind them. This is support and friction context, not live speed, queue, lane, or incident truth.",
        "dependsOn": [
          "doh-highway-traffic-support",
          "exat-expressway-support"
        ],
        "output": "Bangkok-linked and regional overland friction support for route and stay planning."
      },
      {
        "id": "spa_license_support",
        "name": "Spa license support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses the public HSS health-establishment directory and spa-premium surfaces to expose whether official spa and massage license-lookup context exists behind wellness-heavy traveler anchors. This is licensing-support context, not live booking, treatment quality, or venue popularity truth.",
        "dependsOn": [
          "hss-spa-license-support"
        ],
        "output": "Wellness-license confidence for destination and stay planning."
      },
      {
        "id": "medical_fallback_support",
        "name": "Medical fallback support",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public MOPH and HS4 facility surfaces to expose whether official hospital and facility-lookup context exists behind traveler fallback planning. This is medical-support context, not live bed, wait-time, dispatch, or specialist-availability truth.",
        "dependsOn": [
          "moph-health-facility-support"
        ],
        "output": "Destination and stay fallback-support strength when travelers need formal healthcare context."
      },
      {
        "id": "park_access_context",
        "name": "Park access context",
        "status": "active",
        "kind": "live_observation",
        "note": "Uses public DNP tourism dataset surfaces to expose whether national-park and protected-area planning has official dataset support behind it. This is park-planning context, not live closure, capacity, or ranger-availability truth.",
        "dependsOn": [
          "dnp-park-tourism-support"
        ],
        "output": "Protected-area and nature-trip planning confidence for destination and route decisions."
      },
      {
        "id": "ferry_fragility",
        "name": "Ferry fragility",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends live TMD weather context with pier confidence to score island-chain fragility honestly.",
        "dependsOn": [
          "tmd-weather-surface",
          "source_confidence"
        ],
        "output": "Island transfer reliability."
      },
      {
        "id": "transport_friction",
        "name": "Transport friction",
        "status": "active",
        "kind": "derived_live",
        "note": "Blends current weather, road burden, official highway support, source confidence, and Namtang transit-structure support into a live movement-friction family.",
        "dependsOn": [
          "rain_risk",
          "road_safety_risk",
          "highway_transfer_friction",
          "source_confidence",
          "namtang-transit-structure"
        ],
        "output": "Movement difficulty and backup strength."
      }
    ]
  },
  "signals": [
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 22,
      "severity": "critical",
      "tone": "risk",
      "label": "Pier transfer support is weak",
      "reason": "Public transport structure around this coastal anchor shows 2 mapped stop(s), 1 mode group(s), 0 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_donsak-pier_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 22,
      "severity": "critical",
      "tone": "risk",
      "label": "Pier transfer support is weak",
      "reason": "Public transport structure around this coastal anchor shows 2 mapped stop(s), 1 mode group(s), 0 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_na-thon-pier_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 25,
      "severity": "critical",
      "tone": "risk",
      "label": "Pier transfer support is weak",
      "reason": "Public transport structure around this coastal anchor shows 2 mapped stop(s), 1 mode group(s), 0 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_koh-phangan_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 25,
      "severity": "critical",
      "tone": "risk",
      "label": "Pier transfer support is weak",
      "reason": "Public transport structure around this coastal anchor shows 2 mapped stop(s), 1 mode group(s), 0 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_koh-samui_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 32,
      "severity": "critical",
      "tone": "risk",
      "label": "Airport transfer support is weak",
      "reason": "Public transport structure around this airport shows 1 mapped stop(s), 1 mode group(s), 0 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 1,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_phuket-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 32,
      "severity": "critical",
      "tone": "risk",
      "label": "Airport transfer support is weak",
      "reason": "Public transport structure around this airport shows 1 mapped stop(s), 1 mode group(s), 0 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 1,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_u-tapao-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_ao-nang_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang-pier_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_chaweng_marine_wave_height_average",
        "tmd-shipping-forecast_chaweng_marine_wave_height_thunder",
        "tmd-shipping-forecast_chaweng_marine_wind_speed_average",
        "tmd-shipping-forecast_chaweng_marine_thunderstorm_flag",
        "tmd-shipping-forecast_chaweng_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_lamai_marine_wave_height_average",
        "tmd-shipping-forecast_lamai_marine_wave_height_thunder",
        "tmd-shipping-forecast_lamai_marine_wind_speed_average",
        "tmd-shipping-forecast_lamai_marine_thunderstorm_flag",
        "tmd-shipping-forecast_lamai_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 25.0 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Noise risk is high",
      "reason": "Average Leq 24h is 71.2 dBA across 3 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 3,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_noise4thai-bangkok-roadside-cluster_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok roadside-only Noise4Thai cluster."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_patong_marine_wave_height_average",
        "tmd-shipping-forecast_patong_marine_wave_height_thunder",
        "tmd-shipping-forecast_patong_marine_wind_speed_average",
        "tmd-shipping-forecast_patong_marine_thunderstorm_flag",
        "tmd-shipping-forecast_patong_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_railay_marine_wave_height_average",
        "tmd-shipping-forecast_railay_marine_wave_height_thunder",
        "tmd-shipping-forecast_railay_marine_wind_speed_average",
        "tmd-shipping-forecast_railay_marine_thunderstorm_flag",
        "tmd-shipping-forecast_railay_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_marine_warning_risk",
      "signal_type": "marine_warning_risk",
      "family_name": "Marine warning and sea-state risk",
      "basis": "live_observation",
      "score": 34,
      "severity": "critical",
      "tone": "risk",
      "label": "Marine warning risk is high",
      "reason": "Regional marine context shows wave height 1.5 m, thunderstorm wave height 2.0 m, and wind around 27.5 km/h, with thunderstorm wording present. This is sea-state caution, not live operator closure truth.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_thunder",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wind_speed_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rawai-nai-harn_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "Use this to judge coastal and pier fragility before assuming a ferry day is clean."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 37,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is weak",
      "reason": "Public transport structure around this hotel area shows 2 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nimman_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 37,
      "severity": "high",
      "tone": "caution",
      "label": "Road safety burden is high",
      "reason": "28 deaths and 990 injuries are attached to this province proxy year to date. Province burden percentile 92",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_pai_road_casualty_total_ytd",
        "thairsc-road-safety_pai_road_deaths_ytd",
        "thairsc-road-safety_pai_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 39,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is weak",
      "reason": "Public transport structure around this hotel area shows 3 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_central-hua-hin-khao-takiab_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 40,
      "severity": "high",
      "tone": "caution",
      "label": "Official motorcycle-taxi support is weak",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 179 registered stand(s) and 1984 driver(s) for this support scope, across districts such as ดอนเมือง. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 1,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_don-mueang-airport_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 41,
      "severity": "high",
      "tone": "caution",
      "label": "Airport transfer support is weak",
      "reason": "Public transport structure around this airport shows 1 mapped stop(s), 1 mode group(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 0 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 1,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-mai-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 41,
      "severity": "high",
      "tone": "caution",
      "label": "Official motorcycle-taxi support is weak",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 194 registered stand(s) and 2354 driver(s) for this support scope, across districts such as ลาดกระบัง. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 1,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_suvarnabhumi-airport_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 42,
      "severity": "high",
      "tone": "caution",
      "label": "Civic friction is high",
      "reason": "Latest Bangkok district complaint summary shows 2,249 complaint(s), averaging 1124.5 per mapped district, about 2.21x the city median district load, 42.0% resolved, and 3.89 stars.",
      "source_count": 2,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bts-asok_civic_star_average"
      ],
      "context_ids": [],
      "note": "Asok interchange civic-friction proxy from Watthana and Khlong Toei district complaint statistics."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_airport_ground_service_support",
      "signal_type": "airport_ground_service_support",
      "family_name": "Airport ground-service support",
      "basis": "live_observation",
      "score": 42,
      "severity": "high",
      "tone": "caution",
      "label": "Airport ground-service support is thin",
      "reason": "Official AOT ground-service pages currently show rental across 1 supporting page(s). This is operator-backed airport pickup-rule and ground-service context, not live queue, ETA, or rental inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport ground transport pages",
        "AOT Chiang Mai car rental services"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.060Z",
      "expires_at": "2026-05-16T11:11:26.060Z",
      "observation_ids": [
        "aot-airport-ground-services_chiang-mai-airport_official_airport_ground_service_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether an airport anchor has official taxi, Grab, rental, and pickup-rule support behind it before assuming the ground side of a flight day will be easy."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_airport_ground_service_support",
      "signal_type": "airport_ground_service_support",
      "family_name": "Airport ground-service support",
      "basis": "live_observation",
      "score": 42,
      "severity": "high",
      "tone": "caution",
      "label": "Airport ground-service support is thin",
      "reason": "Official AOT ground-service pages currently show rental across 1 supporting page(s). This is operator-backed airport pickup-rule and ground-service context, not live queue, ETA, or rental inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport ground transport pages",
        "AOT Phuket car rental services"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.060Z",
      "expires_at": "2026-05-16T11:11:26.060Z",
      "observation_ids": [
        "aot-airport-ground-services_phuket-airport_official_airport_ground_service_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether an airport anchor has official taxi, Grab, rental, and pickup-rule support behind it before assuming the ground side of a flight day will be easy."
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "entity_path": "/entities/buriram/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "buriram_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 43,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 2 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_buriram_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 43,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 2 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-mai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "entity_path": "/entities/hat-yai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 43,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 2 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 1 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hat-yai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_status_score",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ao-nang_forecast_rain_probability",
        "tmd-weather-surface_ao-nang_forecast_heavy_rain_flag",
        "tmd-weather-surface_ao-nang_warning_match_count",
        "tmd-weather-surface_ao-nang_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_ari_water_quality_status_score",
        "thaiwater-water-quality_ari_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ari_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_status_score",
        "thaiwater-water-quality_bangkok-mochit-2_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_bts-asok_water_quality_status_score",
        "thaiwater-water-quality_bts-asok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bts-asok_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_don-mueang-airport_water_quality_status_score",
        "thaiwater-water-quality_don-mueang-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_don-mueang-airport_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_status_score",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_patong_forecast_rain_probability",
        "tmd-weather-surface_patong_forecast_heavy_rain_flag",
        "tmd-weather-surface_patong_warning_match_count",
        "tmd-weather-surface_patong_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_phuket-old-town_forecast_rain_probability",
        "tmd-weather-surface_phuket-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket-old-town_warning_match_count",
        "tmd-weather-surface_phuket-old-town_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_railay_forecast_rain_probability",
        "tmd-weather-surface_railay_forecast_heavy_rain_flag",
        "tmd-weather-surface_railay_warning_match_count",
        "tmd-weather-surface_railay_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 60%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_rawai-nai-harn_forecast_rain_probability",
        "tmd-weather-surface_rawai-nai-harn_forecast_heavy_rain_flag",
        "tmd-weather-surface_rawai-nai-harn_warning_match_count",
        "tmd-weather-surface_rawai-nai-harn_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_riverside-old-town_water_quality_status_score",
        "thaiwater-water-quality_riverside-old-town_water_dissolved_oxygen_average",
        "thaiwater-water-quality_riverside-old-town_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_silom-sathorn_water_quality_status_score",
        "thaiwater-water-quality_silom-sathorn_water_dissolved_oxygen_average",
        "thaiwater-water-quality_silom-sathorn_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_sukhumvit_water_quality_status_score",
        "thaiwater-water-quality_sukhumvit_water_dissolved_oxygen_average",
        "thaiwater-water-quality_sukhumvit_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_status_score",
        "thaiwater-water-quality_suvarnabhumi-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 44,
      "severity": "high",
      "tone": "caution",
      "label": "Water and flood-adjacent risk is elevated",
      "reason": "Thaiwater status proxy scores 33 with dissolved oxygen 0 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 2,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_status_score",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 45,
      "severity": "high",
      "tone": "caution",
      "label": "Civic friction is high",
      "reason": "Latest Bangkok district complaint summary shows 2,136 complaint(s), averaging 1068.0 per mapped district, about 2.10x the city median district load, 40.5% resolved, and 4.27 stars.",
      "source_count": 2,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_ari_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_ari_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_ari_civic_star_average"
      ],
      "context_ids": [],
      "note": "Ari civic-friction proxy from Phaya Thai and Chatuchak district complaint statistics."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "entity_path": "/entities/buriram/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "buriram_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "chanthaburi",
      "entity_name": "Chanthaburi",
      "entity_type": "destination",
      "entity_path": "/entities/chanthaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chanthaburi_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "chiang-rai",
      "entity_name": "Chiang Rai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-rai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-rai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "entity_path": "/entities/hat-yai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 3 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hua-hin_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "entity_path": "/entities/hua-hin-station/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin-station_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "entity_path": "/entities/khon-kaen/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "khon-kaen_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 3 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_khon-kaen_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "entity_path": "/entities/khon-kaen/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "khon-kaen_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "entity_path": "/entities/nakhon-ratchasima/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nakhon-ratchasima_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "entity_path": "/entities/nong-khai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nong-khai_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 3 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nong-khai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "entity_path": "/entities/nong-khai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nong-khai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "entity_path": "/entities/samui-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "samui-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "sukhothai",
      "entity_name": "Sukhothai",
      "entity_type": "destination",
      "entity_path": "/entities/sukhothai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhothai_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "surat-thani",
      "entity_name": "Surat Thani",
      "entity_type": "destination",
      "entity_path": "/entities/surat-thani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "surat-thani_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "trang",
      "entity_name": "Trang",
      "entity_type": "destination",
      "entity_path": "/entities/trang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "trang_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "entity_path": "/entities/ubon-ratchathani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ubon-ratchathani_regional_disaster_context",
      "signal_type": "regional_disaster_context",
      "family_name": "Regional disaster context",
      "basis": "context",
      "score": 46,
      "severity": "high",
      "tone": "caution",
      "label": "Regional disaster context is busy",
      "reason": "GDACS currently shows 4 active hazard groups across 32 tracked events. This is a route-confidence layer, not a local place safety verdict.",
      "source_count": 1,
      "source_names": [
        "GDACS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-02T05:45:56.000Z",
      "expires_at": "2026-06-02T17:45:56.000Z",
      "observation_ids": [],
      "context_ids": [
        "gdacs-global-context"
      ],
      "note": "Global disaster context helps with confidence and route caution, but it is not a local destination safety verdict."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 47,
      "severity": "high",
      "tone": "caution",
      "label": "Airport transfer support is thin",
      "reason": "Public transport structure around this airport shows 9 mapped stop(s), 1 mode group(s), 0 rail-linked stop(s), 0 airport-link stop(s), and 9 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 9,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_krabi-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 47,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 3 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_phuket_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Road safety burden is elevated",
      "reason": "36 deaths and 1,571 injuries are attached to this province proxy year to date. Province burden percentile 72",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_ao-nang_road_casualty_total_ytd",
        "thairsc-road-safety_ao-nang_road_deaths_ytd",
        "thairsc-road-safety_ao-nang_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 3 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_kata-karon_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Road safety burden is elevated",
      "reason": "36 deaths and 1,571 injuries are attached to this province proxy year to date. Province burden percentile 72",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_krabi_road_casualty_total_ytd",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 3 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_patong_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 3 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_phuket-old-town_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Road safety burden is elevated",
      "reason": "36 deaths and 1,571 injuries are attached to this province proxy year to date. Province burden percentile 72",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_railay_road_casualty_total_ytd",
        "thairsc-road-safety_railay_road_deaths_ytd",
        "thairsc-road-safety_railay_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 48,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 3 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 2 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_rawai-nai-harn_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_air4thai-bangkok-urban-cluster_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_ari_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_bangkok-mochit-2_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_bts-asok_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_airport_scale_context",
      "signal_type": "airport_scale_context",
      "family_name": "Airport scale context",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Airport scale context is compact",
      "reason": "The latest public AOT fiscal traffic workbook for FY2025 currently shows 4353 total aircraft movements and 624614 total passengers for this airport. This is official airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT air transport statistics"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-10-16T17:00:00.000Z",
      "expires_at": "2025-11-30T17:00:00.000Z",
      "observation_ids": [
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_scale_score",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_passengers"
      ],
      "context_ids": [],
      "note": "Use this to distinguish major public-airport anchors from thinner airport nodes when route resilience matters, without pretending airport size equals punctuality."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_don-mueang-airport_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_riverside-old-town_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_silom-sathorn_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_sukhumvit_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_suvarnabhumi-airport_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 50,
      "severity": "high",
      "tone": "caution",
      "label": "Noise risk is elevated",
      "reason": "Average Leq 24h is 66 dBA across 6 live Noise4Thai stations, peaking at 71.4 dBA.",
      "source_count": 6,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_thaiwater-chao-phraya-bangkok_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Bangkok area average from live Noise4Thai monitoring cards."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 51,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Google Places hotels",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "namtang-transit-structure_koh-phangan_transport_structure_score",
        "marine-department-pier-registry_koh-phangan_official_pier_support_score",
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_temp_min",
        "tmd-weather-surface_koh-phangan_forecast_temp_max",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_marine_wind_speed_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_thunder",
        "tmd-weather-surface_koh-phangan_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-phangan_station_temperature",
        "tmd-weather-surface_koh-phangan_station_humidity",
        "tmd-weather-surface_koh-phangan_station_wind_speed",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-phangan_airport_flight_rules_score",
        "aviationweather-airport-status_koh-phangan_airport_visibility_score",
        "aviationweather-airport-status_koh-phangan_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-phangan_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-phangan_water_quality_status_score",
        "thaiwater-water-quality_koh-phangan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-phangan_water_quality_index_average",
        "namtang-transit-structure_koh-phangan_transport_structure_score",
        "dlt-1584-complaint-stats_koh-phangan_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-phangan_official_pier_support_score",
        "marine-department-berth-status_koh-phangan_official_berth_status_surface_score",
        "moph-health-facility-support_koh-phangan_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-phangan_park_access_context_score",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_temp_min",
        "tmd-weather-surface_koh-phangan_forecast_temp_max",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_marine_wind_speed_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_thunder",
        "tmd-weather-surface_koh-phangan_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-phangan_station_temperature",
        "tmd-weather-surface_koh-phangan_station_humidity",
        "tmd-weather-surface_koh-phangan_station_wind_speed",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-phangan_airport_flight_rules_score",
        "aviationweather-airport-status_koh-phangan_airport_visibility_score",
        "aviationweather-airport-status_koh-phangan_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-phangan_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-phangan_water_quality_status_score",
        "thaiwater-water-quality_koh-phangan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-phangan_water_quality_index_average",
        "namtang-transit-structure_koh-phangan_transport_structure_score",
        "dlt-1584-complaint-stats_koh-phangan_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-phangan_official_pier_support_score",
        "marine-department-berth-status_koh-phangan_official_berth_status_surface_score",
        "moph-health-facility-support_koh-phangan_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-phangan_park_access_context_score",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 51,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Pai.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Natural Resources and Environment Office, Mae Hongson",
        "ThaiRSC Road Accident Center",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_pai_forecast_rain_probability",
        "tmd-weather-surface_pai_forecast_heavy_rain_flag",
        "tmd-weather-surface_pai_warning_match_count",
        "tmd-weather-surface_pai_station_rainfall_today",
        "air4thai-aqi_pai_aqi_average",
        "air4thai-aqi_pai_pm25_average",
        "thairsc-road-safety_pai_road_casualty_total_ytd",
        "thairsc-road-safety_pai_road_deaths_ytd",
        "thairsc-road-safety_pai_road_injuries_ytd",
        "air4thai-aqi_pai_aqi_average",
        "air4thai-aqi_pai_pm25_average",
        "tmd-weather-surface_pai_forecast_rain_probability",
        "tmd-weather-surface_pai_forecast_temp_min",
        "tmd-weather-surface_pai_forecast_temp_max",
        "tmd-weather-surface_pai_forecast_heavy_rain_flag",
        "tmd-weather-surface_pai_warning_match_count",
        "tmd-weather-surface_pai_marine_wind_speed_average",
        "tmd-weather-surface_pai_marine_thunderstorm_flag",
        "tmd-weather-surface_pai_station_temperature",
        "tmd-weather-surface_pai_station_humidity",
        "tmd-weather-surface_pai_station_wind_speed",
        "tmd-weather-surface_pai_station_rainfall_today",
        "moph-health-facility-support_pai_medical_fallback_support_score",
        "dnp-park-tourism-support_pai_park_access_context_score",
        "thairsc-road-safety_pai_road_deaths_ytd",
        "thairsc-road-safety_pai_road_injuries_ytd",
        "thairsc-road-safety_pai_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 51,
      "severity": "high",
      "tone": "caution",
      "label": "Civic friction is elevated",
      "reason": "Latest Bangkok district complaint summary shows 2,811 complaint(s), averaging 937.0 per mapped district, about 1.84x the city median district load, 41.4% resolved, and 4.04 stars.",
      "source_count": 3,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_sukhumvit_civic_star_average"
      ],
      "context_ids": [],
      "note": "Sukhumvit civic-friction proxy from Watthana, Khlong Toei, and Phra Khanong district complaint statistics."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 4 mapped stop(s), 2 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 4,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ayutthaya_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "namtang-transit-structure_donsak-pier_transport_structure_score",
        "marine-department-pier-registry_donsak-pier_official_pier_support_score",
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_temp_min",
        "tmd-weather-surface_donsak-pier_forecast_temp_max",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_marine_wind_speed_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_thunder",
        "tmd-weather-surface_donsak-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_donsak-pier_station_temperature",
        "tmd-weather-surface_donsak-pier_station_humidity",
        "tmd-weather-surface_donsak-pier_station_wind_speed",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_donsak-pier_water_quality_status_score",
        "thaiwater-water-quality_donsak-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_donsak-pier_water_quality_index_average",
        "namtang-transit-structure_donsak-pier_transport_structure_score",
        "marine-department-pier-registry_donsak-pier_official_pier_support_score",
        "marine-department-berth-status_donsak-pier_official_berth_status_surface_score",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_temp_min",
        "tmd-weather-surface_donsak-pier_forecast_temp_max",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_marine_wind_speed_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_thunder",
        "tmd-weather-surface_donsak-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_donsak-pier_station_temperature",
        "tmd-weather-surface_donsak-pier_station_humidity",
        "tmd-weather-surface_donsak-pier_station_wind_speed",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_donsak-pier_water_quality_status_score",
        "thaiwater-water-quality_donsak-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_donsak-pier_water_quality_index_average",
        "namtang-transit-structure_donsak-pier_transport_structure_score",
        "marine-department-pier-registry_donsak-pier_official_pier_support_score",
        "marine-department-berth-status_donsak-pier_official_berth_status_surface_score",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "AOT air transport statistics",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "namtang-transit-structure_koh-samui_transport_structure_score",
        "marine-department-pier-registry_koh-samui_official_pier_support_score",
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_temp_min",
        "tmd-weather-surface_koh-samui_forecast_temp_max",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_marine_wind_speed_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_thunder",
        "tmd-weather-surface_koh-samui_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-samui_station_temperature",
        "tmd-weather-surface_koh-samui_station_humidity",
        "tmd-weather-surface_koh-samui_station_wind_speed",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-samui_airport_flight_rules_score",
        "aviationweather-airport-status_koh-samui_airport_visibility_score",
        "aviationweather-airport-status_koh-samui_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-samui_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-samui_water_quality_status_score",
        "thaiwater-water-quality_koh-samui_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-samui_water_quality_index_average",
        "namtang-transit-structure_koh-samui_transport_structure_score",
        "mot-bus-terminal-support_koh-samui_official_bus_terminal_support_score",
        "bks-station-ticket-support_koh-samui_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_koh-samui_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-samui_official_pier_support_score",
        "marine-department-berth-status_koh-samui_official_berth_status_surface_score",
        "hss-spa-license-support_koh-samui_spa_license_support_score",
        "moph-health-facility-support_koh-samui_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-samui_park_access_context_score",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_temp_min",
        "tmd-weather-surface_koh-samui_forecast_temp_max",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_marine_wind_speed_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_thunder",
        "tmd-weather-surface_koh-samui_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-samui_station_temperature",
        "tmd-weather-surface_koh-samui_station_humidity",
        "tmd-weather-surface_koh-samui_station_wind_speed",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-samui_airport_flight_rules_score",
        "aviationweather-airport-status_koh-samui_airport_visibility_score",
        "aviationweather-airport-status_koh-samui_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-samui_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-samui_water_quality_status_score",
        "thaiwater-water-quality_koh-samui_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-samui_water_quality_index_average",
        "namtang-transit-structure_koh-samui_transport_structure_score",
        "mot-bus-terminal-support_koh-samui_official_bus_terminal_support_score",
        "bks-station-ticket-support_koh-samui_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_koh-samui_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-samui_official_pier_support_score",
        "marine-department-berth-status_koh-samui_official_berth_status_surface_score",
        "hss-spa-license-support_koh-samui_spa_license_support_score",
        "moph-health-facility-support_koh-samui_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-samui_park_access_context_score",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "namtang-transit-structure_na-thon-pier_transport_structure_score",
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score",
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_temp_min",
        "tmd-weather-surface_na-thon-pier_forecast_temp_max",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_marine_wind_speed_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_thunder",
        "tmd-weather-surface_na-thon-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_na-thon-pier_station_temperature",
        "tmd-weather-surface_na-thon-pier_station_humidity",
        "tmd-weather-surface_na-thon-pier_station_wind_speed",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_na-thon-pier_water_quality_status_score",
        "thaiwater-water-quality_na-thon-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_na-thon-pier_water_quality_index_average",
        "namtang-transit-structure_na-thon-pier_transport_structure_score",
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score",
        "marine-department-berth-status_na-thon-pier_official_berth_status_surface_score",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_temp_min",
        "tmd-weather-surface_na-thon-pier_forecast_temp_max",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_marine_wind_speed_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_thunder",
        "tmd-weather-surface_na-thon-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_na-thon-pier_station_temperature",
        "tmd-weather-surface_na-thon-pier_station_humidity",
        "tmd-weather-surface_na-thon-pier_station_wind_speed",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_na-thon-pier_water_quality_status_score",
        "thaiwater-water-quality_na-thon-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_na-thon-pier_water_quality_index_average",
        "namtang-transit-structure_na-thon-pier_transport_structure_score",
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score",
        "marine-department-berth-status_na-thon-pier_official_berth_status_surface_score",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "entity_path": "/entities/nakhon-ratchasima/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nakhon-ratchasima_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 4 mapped stop(s), 2 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 4,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nakhon-ratchasima_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_pai_forecast_rain_probability",
        "tmd-weather-surface_pai_forecast_heavy_rain_flag",
        "tmd-weather-surface_pai_warning_match_count",
        "tmd-weather-surface_pai_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "entity_path": "/entities/ubon-ratchathani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ubon-ratchathani_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 52,
      "severity": "high",
      "tone": "caution",
      "label": "Rail feasibility is thin",
      "reason": "Public transport structure around this destination shows 4 mapped stop(s), 2 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 4,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ubon-ratchathani_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is weak",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถกระบี่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_ao-nang_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "entity_path": "/entities/buriram/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "buriram_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Buriram. Namtang structure scores 48 from 2 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_buriram_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is weak",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถหัวหิน. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_central-hua-hin-khao-takiab_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is weak",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถเกาะสมุย. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_chaweng_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "namtang-transit-structure_kata-karon_transport_structure_score",
        "marine-department-pier-registry_kata-karon_official_pier_support_score",
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_temp_min",
        "tmd-weather-surface_kata-karon_forecast_temp_max",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_marine_wind_speed_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_thunder",
        "tmd-weather-surface_kata-karon_marine_thunderstorm_flag",
        "tmd-weather-surface_kata-karon_station_temperature",
        "tmd-weather-surface_kata-karon_station_humidity",
        "tmd-weather-surface_kata-karon_station_wind_speed",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag",
        "namtang-transit-structure_kata-karon_transport_structure_score",
        "dlt-1584-complaint-stats_kata-karon_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_kata-karon_official_taxi_oversight_support_score",
        "marine-department-pier-registry_kata-karon_official_pier_support_score",
        "hss-spa-license-support_kata-karon_spa_license_support_score",
        "noise4thai-ambient-noise_kata-karon_noise_leq_24h_average",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_temp_min",
        "tmd-weather-surface_kata-karon_forecast_temp_max",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_marine_wind_speed_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_thunder",
        "tmd-weather-surface_kata-karon_marine_thunderstorm_flag",
        "tmd-weather-surface_kata-karon_station_temperature",
        "tmd-weather-surface_kata-karon_station_humidity",
        "tmd-weather-surface_kata-karon_station_wind_speed",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag",
        "namtang-transit-structure_kata-karon_transport_structure_score",
        "dlt-1584-complaint-stats_kata-karon_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_kata-karon_official_taxi_oversight_support_score",
        "marine-department-pier-registry_kata-karon_official_pier_support_score",
        "hss-spa-license-support_kata-karon_spa_license_support_score",
        "noise4thai-ambient-noise_kata-karon_noise_leq_24h_average",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is weak",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถเกาะสมุย. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_lamai_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "AOT air transport statistics",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "namtang-transit-structure_phuket_transport_structure_score",
        "marine-department-pier-registry_phuket_official_pier_support_score",
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_temp_min",
        "tmd-weather-surface_phuket_forecast_temp_max",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_marine_wind_speed_average",
        "tmd-weather-surface_phuket_marine_wave_height_average",
        "tmd-weather-surface_phuket_marine_wave_height_thunder",
        "tmd-weather-surface_phuket_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket_station_temperature",
        "tmd-weather-surface_phuket_station_humidity",
        "tmd-weather-surface_phuket_station_wind_speed",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag",
        "aviationweather-airport-status_phuket_airport_flight_rules_score",
        "aviationweather-airport-status_phuket_airport_visibility_score",
        "aviationweather-airport-status_phuket_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket_airport_convective_forecast_flag",
        "namtang-transit-structure_phuket_transport_structure_score",
        "mot-bus-terminal-support_phuket_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket_official_taxi_oversight_support_score",
        "marine-department-pier-registry_phuket_official_pier_support_score",
        "marine-department-berth-status_phuket_official_berth_status_surface_score",
        "hss-spa-license-support_phuket_spa_license_support_score",
        "moph-health-facility-support_phuket_medical_fallback_support_score",
        "dnp-park-tourism-support_phuket_park_access_context_score",
        "gta-gold-reference-price_phuket_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_usd_thb_reference",
        "gta-gold-reference-price_phuket_gold_spot_reference",
        "gta-gold-reference-price_phuket_gold_price_change_intraday",
        "gta-gold-reference-price_phuket_gold_price_change_prev_day",
        "noise4thai-ambient-noise_phuket_noise_leq_24h_average",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "thairsc-road-safety_phuket_road_casualty_total_ytd",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "thairsc-road-safety_phuket_road_casualty_total_ytd",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_temp_min",
        "tmd-weather-surface_phuket_forecast_temp_max",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_marine_wind_speed_average",
        "tmd-weather-surface_phuket_marine_wave_height_average",
        "tmd-weather-surface_phuket_marine_wave_height_thunder",
        "tmd-weather-surface_phuket_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket_station_temperature",
        "tmd-weather-surface_phuket_station_humidity",
        "tmd-weather-surface_phuket_station_wind_speed",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag",
        "aviationweather-airport-status_phuket_airport_flight_rules_score",
        "aviationweather-airport-status_phuket_airport_visibility_score",
        "aviationweather-airport-status_phuket_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket_airport_convective_forecast_flag",
        "namtang-transit-structure_phuket_transport_structure_score",
        "mot-bus-terminal-support_phuket_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket_official_taxi_oversight_support_score",
        "marine-department-pier-registry_phuket_official_pier_support_score",
        "marine-department-berth-status_phuket_official_berth_status_surface_score",
        "hss-spa-license-support_phuket_spa_license_support_score",
        "moph-health-facility-support_phuket_medical_fallback_support_score",
        "dnp-park-tourism-support_phuket_park_access_context_score",
        "gta-gold-reference-price_phuket_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_usd_thb_reference",
        "gta-gold-reference-price_phuket_gold_spot_reference",
        "gta-gold-reference-price_phuket_gold_price_change_intraday",
        "gta-gold-reference-price_phuket_gold_price_change_prev_day",
        "noise4thai-ambient-noise_phuket_noise_leq_24h_average",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "thairsc-road-safety_phuket_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 54,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is weak",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถกระบี่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_railay_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 55,
      "severity": "high",
      "tone": "caution",
      "label": "Official motorcycle-taxi support is limited",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 380 registered stand(s) and 5416 driver(s) for this support scope, across districts such as พญาไท, จตุจักร. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 2,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_ari_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "entity_path": "/entities/khon-kaen/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "khon-kaen_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 55,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Khon Kaen. Namtang structure scores 50 from 3 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_khon-kaen_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/pattaya-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-gold-shopping_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 55,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Pattaya / Chonburi gold shopping. Namtang structure scores 38 from 2 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_pattaya-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 55,
      "severity": "high",
      "tone": "caution",
      "label": "Pier transfer support is thin",
      "reason": "Public transport structure around this coastal anchor shows 2 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 1 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 2,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_rassada-pier_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 55,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for U-Tapao Airport. Namtang structure scores 41 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "OpenStreetMap Thailand"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_u-tapao-airport_airport_flight_rules_score",
        "aviationweather-airport-status_u-tapao-airport_airport_visibility_score",
        "aviationweather-airport-status_u-tapao-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_u-tapao-airport_airport_convective_forecast_flag",
        "namtang-transit-structure_u-tapao-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_rain_probability",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_warning_match_count",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ari_forecast_rain_probability",
        "tmd-weather-surface_ari_forecast_heavy_rain_flag",
        "tmd-weather-surface_ari_warning_match_count",
        "tmd-weather-surface_ari_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 11 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ayutthaya_forecast_rain_probability",
        "tmd-weather-surface_ayutthaya_forecast_heavy_rain_flag",
        "tmd-weather-surface_ayutthaya_warning_match_count",
        "tmd-weather-surface_ayutthaya_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok-mochit-2_forecast_rain_probability",
        "tmd-weather-surface_bangkok-mochit-2_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok-mochit-2_warning_match_count",
        "tmd-weather-surface_bangkok-mochit-2_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bts-asok_forecast_rain_probability",
        "tmd-weather-surface_bts-asok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bts-asok_warning_match_count",
        "tmd-weather-surface_bts-asok_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Central Pattaya / Jomtien. Namtang structure scores 40 from 2 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "namtang-transit-structure_central-pattaya-jomtien_transport_structure_score",
        "mot-bus-terminal-support_central-pattaya-jomtien_official_bus_terminal_support_score",
        "bks-station-ticket-support_central-pattaya-jomtien_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_central-pattaya-jomtien_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_central-pattaya-jomtien_official_taxi_oversight_support_score",
        "marine-department-pier-registry_central-pattaya-jomtien_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_chaweng_forecast_rain_probability",
        "tmd-weather-surface_chaweng_forecast_heavy_rain_flag",
        "tmd-weather-surface_chaweng_warning_match_count",
        "tmd-weather-surface_chaweng_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_chiang-mai_warning_match_count",
        "tmd-weather-surface_chiang-mai_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_don-mueang-airport_forecast_rain_probability",
        "tmd-weather-surface_don-mueang-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_don-mueang-airport_warning_match_count",
        "tmd-weather-surface_don-mueang-airport_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/hat-yai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai-gold-shopping_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Hat Yai gold shopping. Namtang structure scores 48 from 2 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_hat-yai-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 11 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_kanchanaburi_forecast_rain_probability",
        "tmd-weather-surface_kanchanaburi_forecast_heavy_rain_flag",
        "tmd-weather-surface_kanchanaburi_warning_match_count",
        "tmd-weather-surface_kanchanaburi_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_lamai_forecast_rain_probability",
        "tmd-weather-surface_lamai_forecast_heavy_rain_flag",
        "tmd-weather-surface_lamai_warning_match_count",
        "tmd-weather-surface_lamai_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 7 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_nimman_forecast_rain_probability",
        "tmd-weather-surface_nimman_forecast_heavy_rain_flag",
        "tmd-weather-surface_nimman_warning_match_count",
        "tmd-weather-surface_nimman_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_rain_probability",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_warning_match_count",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 5 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_old-city-chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_old-city-chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_old-city-chiang-mai_warning_match_count",
        "tmd-weather-surface_old-city-chiang-mai_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "namtang-transit-structure_rassada-pier_transport_structure_score",
        "marine-department-pier-registry_rassada-pier_official_pier_support_score",
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_temp_min",
        "tmd-weather-surface_rassada-pier_forecast_temp_max",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_marine_wind_speed_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_thunder",
        "tmd-weather-surface_rassada-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_rassada-pier_station_temperature",
        "tmd-weather-surface_rassada-pier_station_humidity",
        "tmd-weather-surface_rassada-pier_station_wind_speed",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_rassada-pier_transport_structure_score",
        "marine-department-pier-registry_rassada-pier_official_pier_support_score",
        "marine-department-berth-status_rassada-pier_official_berth_status_surface_score",
        "noise4thai-ambient-noise_rassada-pier_noise_leq_24h_average",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_temp_min",
        "tmd-weather-surface_rassada-pier_forecast_temp_max",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_marine_wind_speed_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_thunder",
        "tmd-weather-surface_rassada-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_rassada-pier_station_temperature",
        "tmd-weather-surface_rassada-pier_station_humidity",
        "tmd-weather-surface_rassada-pier_station_wind_speed",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_rassada-pier_transport_structure_score",
        "marine-department-pier-registry_rassada-pier_official_pier_support_score",
        "marine-department-berth-status_rassada-pier_official_berth_status_surface_score",
        "noise4thai-ambient-noise_rassada-pier_noise_leq_24h_average",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_riverside-old-town_forecast_rain_probability",
        "tmd-weather-surface_riverside-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_riverside-old-town_warning_match_count",
        "tmd-weather-surface_riverside-old-town_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_silom-sathorn_forecast_rain_probability",
        "tmd-weather-surface_silom-sathorn_forecast_heavy_rain_flag",
        "tmd-weather-surface_silom-sathorn_warning_match_count",
        "tmd-weather-surface_silom-sathorn_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_sukhumvit_forecast_rain_probability",
        "tmd-weather-surface_sukhumvit_forecast_heavy_rain_flag",
        "tmd-weather-surface_sukhumvit_warning_match_count",
        "tmd-weather-surface_sukhumvit_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_suvarnabhumi-airport_forecast_rain_probability",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_suvarnabhumi-airport_warning_match_count",
        "tmd-weather-surface_suvarnabhumi-airport_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Rain risk is elevated",
      "reason": "Forecast rain chance is 40%, and 10 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_rain_probability",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_warning_match_count",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "trang",
      "entity_name": "Trang",
      "entity_type": "destination",
      "entity_path": "/entities/trang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "trang_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 56,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Trang. Namtang structure scores 37 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_trang_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Marine Department piers",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score",
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_min",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_max",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-weather-surface_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-weather-surface_bophut-fishermans-village_station_temperature",
        "tmd-weather-surface_bophut-fishermans-village_station_humidity",
        "tmd-weather-surface_bophut-fishermans-village_station_wind_speed",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_status_score",
        "thaiwater-water-quality_bophut-fishermans-village_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_index_average",
        "dlt-1584-complaint-stats_bophut-fishermans-village_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bophut-fishermans-village_official_taxi_oversight_support_score",
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score",
        "marine-department-berth-status_bophut-fishermans-village_official_berth_status_surface_score",
        "hss-spa-license-support_bophut-fishermans-village_spa_license_support_score",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_min",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_max",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-weather-surface_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-weather-surface_bophut-fishermans-village_station_temperature",
        "tmd-weather-surface_bophut-fishermans-village_station_humidity",
        "tmd-weather-surface_bophut-fishermans-village_station_wind_speed",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_status_score",
        "thaiwater-water-quality_bophut-fishermans-village_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_index_average",
        "dlt-1584-complaint-stats_bophut-fishermans-village_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bophut-fishermans-village_official_taxi_oversight_support_score",
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score",
        "marine-department-berth-status_bophut-fishermans-village_official_berth_status_surface_score",
        "hss-spa-license-support_bophut-fishermans-village_spa_license_support_score",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Official motorcycle-taxi support is limited",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 357 registered stand(s) and 5721 driver(s) for this support scope, across districts such as คลองเตย, วัฒนา. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 2,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_bts-asok_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Donsak Pier. Namtang structure scores 37 from 2 nearby stops across 1 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_temp_min",
        "tmd-weather-surface_donsak-pier_forecast_temp_max",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_marine_wind_speed_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_thunder",
        "tmd-weather-surface_donsak-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_donsak-pier_station_temperature",
        "tmd-weather-surface_donsak-pier_station_humidity",
        "tmd-weather-surface_donsak-pier_station_wind_speed",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_donsak-pier_water_quality_status_score",
        "thaiwater-water-quality_donsak-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_donsak-pier_water_quality_index_average",
        "namtang-transit-structure_donsak-pier_transport_structure_score",
        "marine-department-pier-registry_donsak-pier_official_pier_support_score",
        "marine-department-berth-status_donsak-pier_official_berth_status_surface_score",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Koh Phangan. Namtang structure scores 38 from 2 nearby stops across 1 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Google Places hotels",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_temp_min",
        "tmd-weather-surface_koh-phangan_forecast_temp_max",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_marine_wind_speed_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_thunder",
        "tmd-weather-surface_koh-phangan_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-phangan_station_temperature",
        "tmd-weather-surface_koh-phangan_station_humidity",
        "tmd-weather-surface_koh-phangan_station_wind_speed",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-phangan_airport_flight_rules_score",
        "aviationweather-airport-status_koh-phangan_airport_visibility_score",
        "aviationweather-airport-status_koh-phangan_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-phangan_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-phangan_water_quality_status_score",
        "thaiwater-water-quality_koh-phangan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-phangan_water_quality_index_average",
        "namtang-transit-structure_koh-phangan_transport_structure_score",
        "dlt-1584-complaint-stats_koh-phangan_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-phangan_official_pier_support_score",
        "marine-department-berth-status_koh-phangan_official_berth_status_surface_score",
        "moph-health-facility-support_koh-phangan_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-phangan_park_access_context_score",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_ferry_fragility",
      "signal_type": "ferry_fragility",
      "family_name": "Ferry fragility",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Ferry fragility is elevated",
      "reason": "This blends live sea-state caution, rain fit, official passenger-pier support, public transfer support, and transfer friction for ferry-dependent coastal moves.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Namtang GTFS",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Thara Public Park",
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "namtang-transit-structure_krabi_transport_structure_score",
        "marine-department-pier-registry_krabi_official_pier_support_score",
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_temp_min",
        "tmd-weather-surface_krabi_forecast_temp_max",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_marine_wind_speed_average",
        "tmd-weather-surface_krabi_marine_wave_height_average",
        "tmd-weather-surface_krabi_marine_wave_height_thunder",
        "tmd-weather-surface_krabi_marine_thunderstorm_flag",
        "tmd-weather-surface_krabi_station_temperature",
        "tmd-weather-surface_krabi_station_humidity",
        "tmd-weather-surface_krabi_station_wind_speed",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag",
        "aviationweather-airport-status_krabi_airport_flight_rules_score",
        "aviationweather-airport-status_krabi_airport_visibility_score",
        "aviationweather-airport-status_krabi_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi_transport_structure_score",
        "mot-bus-terminal-support_krabi_official_bus_terminal_support_score",
        "bks-station-ticket-support_krabi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_krabi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_krabi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_krabi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_krabi_official_pier_support_score",
        "marine-department-berth-status_krabi_official_berth_status_surface_score",
        "hss-spa-license-support_krabi_spa_license_support_score",
        "moph-health-facility-support_krabi_medical_fallback_support_score",
        "dnp-park-tourism-support_krabi_park_access_context_score",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "thairsc-road-safety_krabi_road_casualty_total_ytd",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "thairsc-road-safety_krabi_road_casualty_total_ytd",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_temp_min",
        "tmd-weather-surface_krabi_forecast_temp_max",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_marine_wind_speed_average",
        "tmd-weather-surface_krabi_marine_wave_height_average",
        "tmd-weather-surface_krabi_marine_wave_height_thunder",
        "tmd-weather-surface_krabi_marine_thunderstorm_flag",
        "tmd-weather-surface_krabi_station_temperature",
        "tmd-weather-surface_krabi_station_humidity",
        "tmd-weather-surface_krabi_station_wind_speed",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag",
        "aviationweather-airport-status_krabi_airport_flight_rules_score",
        "aviationweather-airport-status_krabi_airport_visibility_score",
        "aviationweather-airport-status_krabi_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi_transport_structure_score",
        "mot-bus-terminal-support_krabi_official_bus_terminal_support_score",
        "bks-station-ticket-support_krabi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_krabi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_krabi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_krabi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_krabi_official_pier_support_score",
        "marine-department-berth-status_krabi_official_berth_status_surface_score",
        "hss-spa-license-support_krabi_spa_license_support_score",
        "moph-health-facility-support_krabi_medical_fallback_support_score",
        "dnp-park-tourism-support_krabi_park_access_context_score",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "thairsc-road-safety_krabi_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "Refund flexibility still matters because this layer does not read live operator seat inventory."
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "entity_path": "/entities/nong-khai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nong-khai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Nong Khai. Namtang structure scores 50 from 3 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nong-khai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "sukhothai",
      "entity_name": "Sukhothai",
      "entity_type": "destination",
      "entity_path": "/entities/sukhothai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhothai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Sukhothai. Namtang structure scores 37 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_sukhothai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "surat-thani",
      "entity_name": "Surat Thani",
      "entity_type": "destination",
      "entity_path": "/entities/surat-thani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "surat-thani_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 57,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Surat Thani. Namtang structure scores 37 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_surat-thani_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official motorcycle-taxi support is limited",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 374 registered stand(s) and 5340 driver(s) for this support scope, across districts such as จตุจักร, บางซื่อ. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 2,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_bangkok-mochit-2_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official pier support is limited",
      "reason": "The public Marine Department berth registry currently matches 1 passenger-use berth row(s) for this entity across ประจวบคีรีขันธ์, with longest berth 82.0 m and deepest berth 2.0 m, including codes such as PPCFM. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 1,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_central-hua-hin-khao-takiab_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Central Hua Hin / Khao Takiab. Namtang structure scores 52 from 3 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "SRT timetable data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "namtang-transit-structure_central-hua-hin-khao-takiab_transport_structure_score",
        "mot-bus-terminal-support_central-hua-hin-khao-takiab_official_bus_terminal_support_score",
        "bks-station-ticket-support_central-hua-hin-khao-takiab_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_central-hua-hin-khao-takiab_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_central-hua-hin-khao-takiab_official_taxi_oversight_support_score",
        "marine-department-pier-registry_central-hua-hin-khao-takiab_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "chiang-rai",
      "entity_name": "Chiang Rai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-rai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-rai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chiang Rai. Namtang structure scores 40 from 3 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-rai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถหัวหิน. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_hua-hin_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Isaan.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Hydrogeological Group Water Resources Regional Office4 khonkaen",
        "Municipal Waste Water Pumping Station",
        "Buriram City Hall",
        "Bueng Planchai",
        "Meteorological stations, Sakon Nakhon",
        "Surin Meteorological Center",
        "Nong Thin Public Park, Nong Khai",
        "Nong Prajak Public Park, Udon Thani",
        "ThaiRSC Road Accident Center",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "Namtang GTFS",
        "Royal Thai Police station directory and provincial datasets"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_isaan_forecast_rain_probability",
        "tmd-weather-surface_isaan_forecast_heavy_rain_flag",
        "tmd-weather-surface_isaan_warning_match_count",
        "tmd-weather-surface_isaan_station_rainfall_today",
        "air4thai-aqi_isaan_aqi_average",
        "air4thai-aqi_isaan_pm25_average",
        "thairsc-road-safety_isaan_road_casualty_total_ytd",
        "thairsc-road-safety_isaan_road_deaths_ytd",
        "thairsc-road-safety_isaan_road_injuries_ytd",
        "air4thai-aqi_isaan_aqi_average",
        "air4thai-aqi_isaan_pm25_average",
        "tmd-weather-surface_isaan_forecast_rain_probability",
        "tmd-weather-surface_isaan_forecast_temp_min",
        "tmd-weather-surface_isaan_forecast_temp_max",
        "tmd-weather-surface_isaan_forecast_heavy_rain_flag",
        "tmd-weather-surface_isaan_warning_match_count",
        "tmd-weather-surface_isaan_marine_wind_speed_average",
        "tmd-weather-surface_isaan_marine_thunderstorm_flag",
        "tmd-weather-surface_isaan_station_temperature",
        "tmd-weather-surface_isaan_station_humidity",
        "tmd-weather-surface_isaan_station_wind_speed",
        "tmd-weather-surface_isaan_station_rainfall_today",
        "thaiwater-water-quality_isaan_water_quality_status_score",
        "thaiwater-water-quality_isaan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_isaan_water_quality_index_average",
        "mot-bus-terminal-support_isaan_official_bus_terminal_support_score",
        "bks-station-ticket-support_isaan_official_intercity_bus_support_score",
        "bks-timetable-search-surface_isaan_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_isaan_official_transport_complaint_support_score",
        "moph-health-facility-support_isaan_medical_fallback_support_score",
        "dnp-park-tourism-support_isaan_park_access_context_score",
        "thairsc-road-safety_isaan_road_deaths_ytd",
        "thairsc-road-safety_isaan_road_injuries_ytd",
        "thairsc-road-safety_isaan_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถกาญจนบุรี. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_kanchanaburi_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถเกาะสมุย. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_koh-samui_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 1 official station or ticket-point name(s) for this entity: สถานีเดินรถกระบี่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_krabi_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Krabi Airport. Namtang structure scores 50 from 9 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "Department of Airports flight info"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_krabi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_krabi-airport_airport_visibility_score",
        "aviationweather-airport-status_krabi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi-airport_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi-airport_transport_structure_score",
        "dlt-gps-taxi-support_krabi-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Na Thon Pier. Namtang structure scores 37 from 2 nearby stops across 1 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_temp_min",
        "tmd-weather-surface_na-thon-pier_forecast_temp_max",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_marine_wind_speed_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_thunder",
        "tmd-weather-surface_na-thon-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_na-thon-pier_station_temperature",
        "tmd-weather-surface_na-thon-pier_station_humidity",
        "tmd-weather-surface_na-thon-pier_station_wind_speed",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_na-thon-pier_water_quality_status_score",
        "thaiwater-water-quality_na-thon-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_na-thon-pier_water_quality_index_average",
        "namtang-transit-structure_na-thon-pier_transport_structure_score",
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score",
        "marine-department-berth-status_na-thon-pier_official_berth_status_surface_score",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "entity_path": "/entities/nakhon-ratchasima/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nakhon-ratchasima_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Nakhon Ratchasima. Namtang structure scores 53 from 4 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nakhon-ratchasima_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Phuket Airport. Namtang structure scores 41 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "AOT airport flight status",
        "AOT Phuket car rental services"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_phuket-airport_airport_flight_rules_score",
        "aviationweather-airport-status_phuket-airport_airport_visibility_score",
        "aviationweather-airport-status_phuket-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_phuket-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_phuket-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_phuket-airport_official_airport_scale_score",
        "aot-airport-environment-support_phuket-airport_official_airport_environmental_support_score",
        "namtang-transit-structure_phuket-airport_transport_structure_score",
        "dlt-gps-taxi-support_phuket-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Railay. Namtang structure scores 66 from 17 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Thara Public Park",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_railay_forecast_rain_probability",
        "tmd-weather-surface_railay_forecast_heavy_rain_flag",
        "tmd-weather-surface_railay_warning_match_count",
        "tmd-weather-surface_railay_station_rainfall_today",
        "air4thai-aqi_railay_aqi_average",
        "air4thai-aqi_railay_pm25_average",
        "thairsc-road-safety_railay_road_casualty_total_ytd",
        "thairsc-road-safety_railay_road_deaths_ytd",
        "thairsc-road-safety_railay_road_injuries_ytd",
        "air4thai-aqi_railay_aqi_average",
        "air4thai-aqi_railay_pm25_average",
        "tmd-weather-surface_railay_forecast_rain_probability",
        "tmd-weather-surface_railay_forecast_temp_min",
        "tmd-weather-surface_railay_forecast_temp_max",
        "tmd-weather-surface_railay_forecast_heavy_rain_flag",
        "tmd-weather-surface_railay_warning_match_count",
        "tmd-weather-surface_railay_marine_wind_speed_average",
        "tmd-weather-surface_railay_marine_wave_height_average",
        "tmd-weather-surface_railay_marine_wave_height_thunder",
        "tmd-weather-surface_railay_marine_thunderstorm_flag",
        "tmd-weather-surface_railay_station_temperature",
        "tmd-weather-surface_railay_station_humidity",
        "tmd-weather-surface_railay_station_wind_speed",
        "tmd-weather-surface_railay_station_rainfall_today",
        "tmd-shipping-forecast_railay_marine_wind_speed_average",
        "tmd-shipping-forecast_railay_marine_wave_height_average",
        "tmd-shipping-forecast_railay_marine_wave_height_thunder",
        "tmd-shipping-forecast_railay_marine_thunderstorm_flag",
        "tmd-shipping-forecast_railay_forecast_heavy_rain_flag",
        "namtang-transit-structure_railay_transport_structure_score",
        "mot-bus-terminal-support_railay_official_bus_terminal_support_score",
        "bks-station-ticket-support_railay_official_intercity_bus_support_score",
        "bks-timetable-search-surface_railay_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_railay_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_railay_official_taxi_oversight_support_score",
        "marine-department-pier-registry_railay_official_pier_support_score",
        "marine-department-berth-status_railay_official_berth_status_surface_score",
        "thairsc-road-safety_railay_road_deaths_ytd",
        "thairsc-road-safety_railay_road_injuries_ytd",
        "thairsc-road-safety_railay_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "entity_path": "/entities/ubon-ratchathani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ubon-ratchathani_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 58,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Ubon Ratchathani. Namtang structure scores 53 from 4 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ubon-ratchathani_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 59,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Ao Nang. Namtang structure scores 75 from 26 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Thara Public Park",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "Marine Department piers",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ao-nang_forecast_rain_probability",
        "tmd-weather-surface_ao-nang_forecast_heavy_rain_flag",
        "tmd-weather-surface_ao-nang_warning_match_count",
        "tmd-weather-surface_ao-nang_station_rainfall_today",
        "air4thai-aqi_ao-nang_aqi_average",
        "air4thai-aqi_ao-nang_pm25_average",
        "thairsc-road-safety_ao-nang_road_casualty_total_ytd",
        "thairsc-road-safety_ao-nang_road_deaths_ytd",
        "thairsc-road-safety_ao-nang_road_injuries_ytd",
        "air4thai-aqi_ao-nang_aqi_average",
        "air4thai-aqi_ao-nang_pm25_average",
        "tmd-weather-surface_ao-nang_forecast_rain_probability",
        "tmd-weather-surface_ao-nang_forecast_temp_min",
        "tmd-weather-surface_ao-nang_forecast_temp_max",
        "tmd-weather-surface_ao-nang_forecast_heavy_rain_flag",
        "tmd-weather-surface_ao-nang_warning_match_count",
        "tmd-weather-surface_ao-nang_marine_wind_speed_average",
        "tmd-weather-surface_ao-nang_marine_wave_height_average",
        "tmd-weather-surface_ao-nang_marine_wave_height_thunder",
        "tmd-weather-surface_ao-nang_marine_thunderstorm_flag",
        "tmd-weather-surface_ao-nang_station_temperature",
        "tmd-weather-surface_ao-nang_station_humidity",
        "tmd-weather-surface_ao-nang_station_wind_speed",
        "tmd-weather-surface_ao-nang_station_rainfall_today",
        "tmd-shipping-forecast_ao-nang_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang_forecast_heavy_rain_flag",
        "namtang-transit-structure_ao-nang_transport_structure_score",
        "mot-bus-terminal-support_ao-nang_official_bus_terminal_support_score",
        "bks-station-ticket-support_ao-nang_official_intercity_bus_support_score",
        "bks-timetable-search-surface_ao-nang_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_ao-nang_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_ao-nang_official_taxi_oversight_support_score",
        "marine-department-pier-registry_ao-nang_official_pier_support_score",
        "marine-department-berth-status_ao-nang_official_berth_status_surface_score",
        "hss-spa-license-support_ao-nang_spa_license_support_score",
        "thairsc-road-safety_ao-nang_road_deaths_ytd",
        "thairsc-road-safety_ao-nang_road_injuries_ytd",
        "thairsc-road-safety_ao-nang_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/chiang-mai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-gold-shopping_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 59,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chiang Mai gold shopping. Namtang structure scores 48 from 2 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-mai-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/phuket-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-gold-shopping_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 59,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Phuket gold shopping. Namtang structure scores 48 from 3 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_phuket-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_phuket-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "entity_path": "/entities/samui-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "samui-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 59,
      "severity": "high",
      "tone": "caution",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Samui Airport.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "AOT air transport statistics"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_samui-airport_airport_flight_rules_score",
        "aviationweather-airport-status_samui-airport_airport_visibility_score",
        "aviationweather-airport-status_samui-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_samui-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Urban bus-operator support is limited",
      "reason": "The public Thai Smile Group locator currently shows 1 nearby branch or depot location(s) for this entity: อู่เลี่ยงเมืองนนท์. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 1,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_bangkok-mochit-2_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "chanthaburi",
      "entity_name": "Chanthaburi",
      "entity_type": "destination",
      "entity_path": "/entities/chanthaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chanthaburi_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chanthaburi. Namtang structure scores 41 from 4 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Chanthaburi gem market public tourism and map sources",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chanthaburi_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_chiang-mai_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_chiang-mai-airport_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chiang Mai Airport. Namtang structure scores 52 from 1 nearby stops across 1 mode groups.",
      "source_count": 2,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "Department of Airports flight info",
        "AOT Chiang Mai car rental services"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_chiang-mai-airport_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_chiang-mai-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_chiang-mai-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_scale_score",
        "aot-airport-environment-support_chiang-mai-airport_official_airport_environmental_support_score",
        "namtang-transit-structure_chiang-mai-airport_transport_structure_score",
        "dlt-gps-taxi-support_chiang-mai-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_don-mueang-airport_airport_flight_rules_score",
        "aviationweather-airport-status_don-mueang-airport_airport_visibility_score",
        "aviationweather-airport-status_don-mueang-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_don-mueang-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_airport_ground_service_support",
      "signal_type": "airport_ground_service_support",
      "family_name": "Airport ground-service support",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport ground-service support is thin",
      "reason": "Official AOT ground-service pages currently show Grab, rental, pickup-rule detail across 2 supporting page(s) and 1 structured location record(s). This is operator-backed airport pickup-rule and ground-service context, not live queue, ETA, or rental inventory truth.",
      "source_count": 2,
      "source_names": [
        "AOT airport ground transport pages",
        "AOT Don Mueang Grab pickup points",
        "AOT Don Mueang car rental services"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.060Z",
      "expires_at": "2026-05-16T11:11:26.060Z",
      "observation_ids": [
        "aot-airport-ground-services_don-mueang-airport_official_airport_ground_service_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether an airport anchor has official taxi, Grab, rental, and pickup-rule support behind it before assuming the ground side of a flight day will be easy."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official pier support is limited",
      "reason": "The public Marine Department berth registry currently matches 1 passenger-use berth row(s) for this entity across ประจวบคีรีขันธ์, with longest berth 82.0 m and deepest berth 2.0 m, including codes such as PPCFM. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 1,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_hua-hin_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Kata / Karon. Namtang structure scores 51 from 3 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_temp_min",
        "tmd-weather-surface_kata-karon_forecast_temp_max",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_marine_wind_speed_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_thunder",
        "tmd-weather-surface_kata-karon_marine_thunderstorm_flag",
        "tmd-weather-surface_kata-karon_station_temperature",
        "tmd-weather-surface_kata-karon_station_humidity",
        "tmd-weather-surface_kata-karon_station_wind_speed",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag",
        "namtang-transit-structure_kata-karon_transport_structure_score",
        "dlt-1584-complaint-stats_kata-karon_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_kata-karon_official_taxi_oversight_support_score",
        "marine-department-pier-registry_kata-karon_official_pier_support_score",
        "hss-spa-license-support_kata-karon_spa_license_support_score",
        "noise4thai-ambient-noise_kata-karon_noise_leq_24h_average",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Koh Samui. Namtang structure scores 38 from 2 nearby stops across 1 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Marine Department piers",
        "AOT air transport statistics",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_temp_min",
        "tmd-weather-surface_koh-samui_forecast_temp_max",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_marine_wind_speed_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_thunder",
        "tmd-weather-surface_koh-samui_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-samui_station_temperature",
        "tmd-weather-surface_koh-samui_station_humidity",
        "tmd-weather-surface_koh-samui_station_wind_speed",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-samui_airport_flight_rules_score",
        "aviationweather-airport-status_koh-samui_airport_visibility_score",
        "aviationweather-airport-status_koh-samui_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-samui_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-samui_water_quality_status_score",
        "thaiwater-water-quality_koh-samui_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-samui_water_quality_index_average",
        "namtang-transit-structure_koh-samui_transport_structure_score",
        "mot-bus-terminal-support_koh-samui_official_bus_terminal_support_score",
        "bks-station-ticket-support_koh-samui_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_koh-samui_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-samui_official_pier_support_score",
        "marine-department-berth-status_koh-samui_official_berth_status_surface_score",
        "hss-spa-license-support_koh-samui_spa_license_support_score",
        "moph-health-facility-support_koh-samui_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-samui_park_access_context_score",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Krabi. Namtang structure scores 80 from 47 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Thara Public Park",
        "ThaiRSC Road Accident Center",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "thairsc-road-safety_krabi_road_casualty_total_ytd",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_temp_min",
        "tmd-weather-surface_krabi_forecast_temp_max",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_marine_wind_speed_average",
        "tmd-weather-surface_krabi_marine_wave_height_average",
        "tmd-weather-surface_krabi_marine_wave_height_thunder",
        "tmd-weather-surface_krabi_marine_thunderstorm_flag",
        "tmd-weather-surface_krabi_station_temperature",
        "tmd-weather-surface_krabi_station_humidity",
        "tmd-weather-surface_krabi_station_wind_speed",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag",
        "aviationweather-airport-status_krabi_airport_flight_rules_score",
        "aviationweather-airport-status_krabi_airport_visibility_score",
        "aviationweather-airport-status_krabi_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi_transport_structure_score",
        "mot-bus-terminal-support_krabi_official_bus_terminal_support_score",
        "bks-station-ticket-support_krabi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_krabi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_krabi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_krabi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_krabi_official_pier_support_score",
        "marine-department-berth-status_krabi_official_berth_status_surface_score",
        "hss-spa-license-support_krabi_spa_license_support_score",
        "moph-health-facility-support_krabi_medical_fallback_support_score",
        "dnp-park-tourism-support_krabi_park_access_context_score",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "thairsc-road-safety_krabi_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Civic friction is elevated",
      "reason": "Latest Bangkok district complaint summary shows 2,085 complaint(s), averaging 521.3 per mapped district, about 1.02x the city median district load, 50.7% resolved, and 3.99 stars.",
      "source_count": 4,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_star_average"
      ],
      "context_ids": [],
      "note": "Riverside / Old Town civic-friction proxy from Phra Nakhon, Samphanthawong, Khlong San, and Bang Rak district complaint statistics."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Civic friction is elevated",
      "reason": "Latest Bangkok district complaint summary shows 1,946 complaint(s), averaging 648.7 per mapped district, about 1.27x the city median district load, 49.4% resolved, and 3.85 stars.",
      "source_count": 3,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_star_average"
      ],
      "context_ids": [],
      "note": "Silom / Sathorn civic-friction proxy from Bang Rak, Sathon, and Yan Nawa district complaint statistics."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 60,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is elevated",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 30.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_suvarnabhumi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_visibility_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 61,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Bophut / Fisherman's Village.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_min",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_max",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-weather-surface_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-weather-surface_bophut-fishermans-village_station_temperature",
        "tmd-weather-surface_bophut-fishermans-village_station_humidity",
        "tmd-weather-surface_bophut-fishermans-village_station_wind_speed",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_status_score",
        "thaiwater-water-quality_bophut-fishermans-village_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_index_average",
        "dlt-1584-complaint-stats_bophut-fishermans-village_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bophut-fishermans-village_official_taxi_oversight_support_score",
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score",
        "marine-department-berth-status_bophut-fishermans-village_official_berth_status_surface_score",
        "hss-spa-license-support_bophut-fishermans-village_spa_license_support_score",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "entity_path": "/entities/hat-yai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 61,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Hat Yai. Namtang structure scores 48 from 2 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Tourist Police Bureau",
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hat-yai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 61,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Phuket. Namtang structure scores 48 from 3 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Marine Department piers",
        "AOT air transport statistics",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "thairsc-road-safety_phuket_road_casualty_total_ytd",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_temp_min",
        "tmd-weather-surface_phuket_forecast_temp_max",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_marine_wind_speed_average",
        "tmd-weather-surface_phuket_marine_wave_height_average",
        "tmd-weather-surface_phuket_marine_wave_height_thunder",
        "tmd-weather-surface_phuket_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket_station_temperature",
        "tmd-weather-surface_phuket_station_humidity",
        "tmd-weather-surface_phuket_station_wind_speed",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag",
        "aviationweather-airport-status_phuket_airport_flight_rules_score",
        "aviationweather-airport-status_phuket_airport_visibility_score",
        "aviationweather-airport-status_phuket_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket_airport_convective_forecast_flag",
        "namtang-transit-structure_phuket_transport_structure_score",
        "mot-bus-terminal-support_phuket_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket_official_taxi_oversight_support_score",
        "marine-department-pier-registry_phuket_official_pier_support_score",
        "marine-department-berth-status_phuket_official_berth_status_surface_score",
        "hss-spa-license-support_phuket_spa_license_support_score",
        "moph-health-facility-support_phuket_medical_fallback_support_score",
        "dnp-park-tourism-support_phuket_park_access_context_score",
        "gta-gold-reference-price_phuket_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_usd_thb_reference",
        "gta-gold-reference-price_phuket_gold_spot_reference",
        "gta-gold-reference-price_phuket_gold_price_change_intraday",
        "gta-gold-reference-price_phuket_gold_price_change_prev_day",
        "noise4thai-ambient-noise_phuket_noise_leq_24h_average",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "thairsc-road-safety_phuket_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 61,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Rassada Pier. Namtang structure scores 65 from 2 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_temp_min",
        "tmd-weather-surface_rassada-pier_forecast_temp_max",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_marine_wind_speed_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_thunder",
        "tmd-weather-surface_rassada-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_rassada-pier_station_temperature",
        "tmd-weather-surface_rassada-pier_station_humidity",
        "tmd-weather-surface_rassada-pier_station_wind_speed",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_rassada-pier_transport_structure_score",
        "marine-department-pier-registry_rassada-pier_official_pier_support_score",
        "marine-department-berth-status_rassada-pier_official_berth_status_surface_score",
        "noise4thai-ambient-noise_rassada-pier_noise_leq_24h_average",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 61,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official motorcycle-taxi support is limited",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 448 registered stand(s) and 4415 driver(s) for this support scope, across districts such as ป้อมปราบศัตรูพ่าย, สัมพันธวงศ์, คลองสาน, ธนบุรี, พระนคร. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 5,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_riverside-old-town_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KRABI BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_ao-nang_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is thin",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_bophut-fishermans-village_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: HUA HIN BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_central-hua-hin-khao-takiab_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is thin",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_chaweng_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KO SAMUI BUS TERMINAL SURAT THANI. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_chaweng_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chaweng.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_chaweng_forecast_rain_probability",
        "tmd-weather-surface_chaweng_forecast_heavy_rain_flag",
        "tmd-weather-surface_chaweng_warning_match_count",
        "tmd-weather-surface_chaweng_station_rainfall_today",
        "air4thai-aqi_chaweng_aqi_average",
        "air4thai-aqi_chaweng_pm25_average",
        "thairsc-road-safety_chaweng_road_casualty_total_ytd",
        "thairsc-road-safety_chaweng_road_deaths_ytd",
        "thairsc-road-safety_chaweng_road_injuries_ytd",
        "air4thai-aqi_chaweng_aqi_average",
        "air4thai-aqi_chaweng_pm25_average",
        "tmd-weather-surface_chaweng_forecast_rain_probability",
        "tmd-weather-surface_chaweng_forecast_temp_min",
        "tmd-weather-surface_chaweng_forecast_temp_max",
        "tmd-weather-surface_chaweng_forecast_heavy_rain_flag",
        "tmd-weather-surface_chaweng_warning_match_count",
        "tmd-weather-surface_chaweng_marine_wind_speed_average",
        "tmd-weather-surface_chaweng_marine_wave_height_average",
        "tmd-weather-surface_chaweng_marine_wave_height_thunder",
        "tmd-weather-surface_chaweng_marine_thunderstorm_flag",
        "tmd-weather-surface_chaweng_station_temperature",
        "tmd-weather-surface_chaweng_station_humidity",
        "tmd-weather-surface_chaweng_station_wind_speed",
        "tmd-weather-surface_chaweng_station_rainfall_today",
        "tmd-shipping-forecast_chaweng_marine_wind_speed_average",
        "tmd-shipping-forecast_chaweng_marine_wave_height_average",
        "tmd-shipping-forecast_chaweng_marine_wave_height_thunder",
        "tmd-shipping-forecast_chaweng_marine_thunderstorm_flag",
        "tmd-shipping-forecast_chaweng_forecast_heavy_rain_flag",
        "thaiwater-water-quality_chaweng_water_quality_status_score",
        "thaiwater-water-quality_chaweng_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chaweng_water_quality_index_average",
        "mot-bus-terminal-support_chaweng_official_bus_terminal_support_score",
        "bks-station-ticket-support_chaweng_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_chaweng_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_chaweng_official_taxi_oversight_support_score",
        "marine-department-pier-registry_chaweng_official_pier_support_score",
        "marine-department-berth-status_chaweng_official_berth_status_surface_score",
        "hss-spa-license-support_chaweng_spa_license_support_score",
        "thairsc-road-safety_chaweng_road_deaths_ytd",
        "thairsc-road-safety_chaweng_road_injuries_ytd",
        "thairsc-road-safety_chaweng_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "entity_path": "/entities/hua-hin-station/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin-station_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Hua Hin Railway Station. Namtang structure scores 71 from 3 nearby stops across 2 mode groups.",
      "source_count": 2,
      "source_names": [
        "SRT timetable data",
        "Namtang GTFS",
        "OpenStreetMap Thailand"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hua-hin-station_transport_structure_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is thin",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_lamai_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KO SAMUI BUS TERMINAL SURAT THANI. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_lamai_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Lamai.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Environment Agency Section 14, Surat Thani",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_lamai_forecast_rain_probability",
        "tmd-weather-surface_lamai_forecast_heavy_rain_flag",
        "tmd-weather-surface_lamai_warning_match_count",
        "tmd-weather-surface_lamai_station_rainfall_today",
        "air4thai-aqi_lamai_aqi_average",
        "air4thai-aqi_lamai_pm25_average",
        "thairsc-road-safety_lamai_road_casualty_total_ytd",
        "thairsc-road-safety_lamai_road_deaths_ytd",
        "thairsc-road-safety_lamai_road_injuries_ytd",
        "air4thai-aqi_lamai_aqi_average",
        "air4thai-aqi_lamai_pm25_average",
        "tmd-weather-surface_lamai_forecast_rain_probability",
        "tmd-weather-surface_lamai_forecast_temp_min",
        "tmd-weather-surface_lamai_forecast_temp_max",
        "tmd-weather-surface_lamai_forecast_heavy_rain_flag",
        "tmd-weather-surface_lamai_warning_match_count",
        "tmd-weather-surface_lamai_marine_wind_speed_average",
        "tmd-weather-surface_lamai_marine_wave_height_average",
        "tmd-weather-surface_lamai_marine_wave_height_thunder",
        "tmd-weather-surface_lamai_marine_thunderstorm_flag",
        "tmd-weather-surface_lamai_station_temperature",
        "tmd-weather-surface_lamai_station_humidity",
        "tmd-weather-surface_lamai_station_wind_speed",
        "tmd-weather-surface_lamai_station_rainfall_today",
        "tmd-shipping-forecast_lamai_marine_wind_speed_average",
        "tmd-shipping-forecast_lamai_marine_wave_height_average",
        "tmd-shipping-forecast_lamai_marine_wave_height_thunder",
        "tmd-shipping-forecast_lamai_marine_thunderstorm_flag",
        "tmd-shipping-forecast_lamai_forecast_heavy_rain_flag",
        "thaiwater-water-quality_lamai_water_quality_status_score",
        "thaiwater-water-quality_lamai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_lamai_water_quality_index_average",
        "mot-bus-terminal-support_lamai_official_bus_terminal_support_score",
        "bks-station-ticket-support_lamai_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_lamai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_lamai_official_taxi_oversight_support_score",
        "marine-department-pier-registry_lamai_official_pier_support_score",
        "marine-department-berth-status_lamai_official_berth_status_surface_score",
        "hss-spa-license-support_lamai_spa_license_support_score",
        "thairsc-road-safety_lamai_road_deaths_ytd",
        "thairsc-road-safety_lamai_road_injuries_ytd",
        "thairsc-road-safety_lamai_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is thin",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_patong_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Patong. Namtang structure scores 51 from 3 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_patong_forecast_rain_probability",
        "tmd-weather-surface_patong_forecast_heavy_rain_flag",
        "tmd-weather-surface_patong_warning_match_count",
        "tmd-weather-surface_patong_station_rainfall_today",
        "air4thai-aqi_patong_aqi_average",
        "air4thai-aqi_patong_pm25_average",
        "thairsc-road-safety_patong_road_casualty_total_ytd",
        "thairsc-road-safety_patong_road_deaths_ytd",
        "thairsc-road-safety_patong_road_injuries_ytd",
        "air4thai-aqi_patong_aqi_average",
        "air4thai-aqi_patong_pm25_average",
        "tmd-weather-surface_patong_forecast_rain_probability",
        "tmd-weather-surface_patong_forecast_temp_min",
        "tmd-weather-surface_patong_forecast_temp_max",
        "tmd-weather-surface_patong_forecast_heavy_rain_flag",
        "tmd-weather-surface_patong_warning_match_count",
        "tmd-weather-surface_patong_marine_wind_speed_average",
        "tmd-weather-surface_patong_marine_wave_height_average",
        "tmd-weather-surface_patong_marine_wave_height_thunder",
        "tmd-weather-surface_patong_marine_thunderstorm_flag",
        "tmd-weather-surface_patong_station_temperature",
        "tmd-weather-surface_patong_station_humidity",
        "tmd-weather-surface_patong_station_wind_speed",
        "tmd-weather-surface_patong_station_rainfall_today",
        "tmd-shipping-forecast_patong_marine_wind_speed_average",
        "tmd-shipping-forecast_patong_marine_wave_height_average",
        "tmd-shipping-forecast_patong_marine_wave_height_thunder",
        "tmd-shipping-forecast_patong_marine_thunderstorm_flag",
        "tmd-shipping-forecast_patong_forecast_heavy_rain_flag",
        "namtang-transit-structure_patong_transport_structure_score",
        "mot-bus-terminal-support_patong_official_bus_terminal_support_score",
        "bks-station-ticket-support_patong_official_intercity_bus_support_score",
        "bks-timetable-search-surface_patong_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_patong_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_patong_official_taxi_oversight_support_score",
        "marine-department-pier-registry_patong_official_pier_support_score",
        "marine-department-berth-status_patong_official_berth_status_surface_score",
        "hss-spa-license-support_patong_spa_license_support_score",
        "noise4thai-ambient-noise_patong_noise_leq_24h_average",
        "thairsc-road-safety_patong_road_deaths_ytd",
        "thairsc-road-safety_patong_road_injuries_ytd",
        "thairsc-road-safety_patong_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Phuket Old Town. Namtang structure scores 51 from 3 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_phuket-old-town_forecast_rain_probability",
        "tmd-weather-surface_phuket-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket-old-town_warning_match_count",
        "tmd-weather-surface_phuket-old-town_station_rainfall_today",
        "air4thai-aqi_phuket-old-town_aqi_average",
        "air4thai-aqi_phuket-old-town_pm25_average",
        "thairsc-road-safety_phuket-old-town_road_casualty_total_ytd",
        "thairsc-road-safety_phuket-old-town_road_deaths_ytd",
        "thairsc-road-safety_phuket-old-town_road_injuries_ytd",
        "air4thai-aqi_phuket-old-town_aqi_average",
        "air4thai-aqi_phuket-old-town_pm25_average",
        "tmd-weather-surface_phuket-old-town_forecast_rain_probability",
        "tmd-weather-surface_phuket-old-town_forecast_temp_min",
        "tmd-weather-surface_phuket-old-town_forecast_temp_max",
        "tmd-weather-surface_phuket-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket-old-town_warning_match_count",
        "tmd-weather-surface_phuket-old-town_marine_wind_speed_average",
        "tmd-weather-surface_phuket-old-town_marine_wave_height_average",
        "tmd-weather-surface_phuket-old-town_marine_wave_height_thunder",
        "tmd-weather-surface_phuket-old-town_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket-old-town_station_temperature",
        "tmd-weather-surface_phuket-old-town_station_humidity",
        "tmd-weather-surface_phuket-old-town_station_wind_speed",
        "tmd-weather-surface_phuket-old-town_station_rainfall_today",
        "namtang-transit-structure_phuket-old-town_transport_structure_score",
        "mot-bus-terminal-support_phuket-old-town_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket-old-town_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket-old-town_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket-old-town_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket-old-town_official_taxi_oversight_support_score",
        "noise4thai-ambient-noise_phuket-old-town_noise_leq_24h_average",
        "thairsc-road-safety_phuket-old-town_road_deaths_ytd",
        "thairsc-road-safety_phuket-old-town_road_injuries_ytd",
        "thairsc-road-safety_phuket-old-town_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KRABI BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_railay_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Rawai / Nai Harn. Namtang structure scores 51 from 3 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Municipal Health Center",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_rawai-nai-harn_forecast_rain_probability",
        "tmd-weather-surface_rawai-nai-harn_forecast_heavy_rain_flag",
        "tmd-weather-surface_rawai-nai-harn_warning_match_count",
        "tmd-weather-surface_rawai-nai-harn_station_rainfall_today",
        "air4thai-aqi_rawai-nai-harn_aqi_average",
        "air4thai-aqi_rawai-nai-harn_pm25_average",
        "thairsc-road-safety_rawai-nai-harn_road_casualty_total_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_deaths_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_injuries_ytd",
        "air4thai-aqi_rawai-nai-harn_aqi_average",
        "air4thai-aqi_rawai-nai-harn_pm25_average",
        "tmd-weather-surface_rawai-nai-harn_forecast_rain_probability",
        "tmd-weather-surface_rawai-nai-harn_forecast_temp_min",
        "tmd-weather-surface_rawai-nai-harn_forecast_temp_max",
        "tmd-weather-surface_rawai-nai-harn_forecast_heavy_rain_flag",
        "tmd-weather-surface_rawai-nai-harn_warning_match_count",
        "tmd-weather-surface_rawai-nai-harn_marine_wind_speed_average",
        "tmd-weather-surface_rawai-nai-harn_marine_wave_height_average",
        "tmd-weather-surface_rawai-nai-harn_marine_wave_height_thunder",
        "tmd-weather-surface_rawai-nai-harn_marine_thunderstorm_flag",
        "tmd-weather-surface_rawai-nai-harn_station_temperature",
        "tmd-weather-surface_rawai-nai-harn_station_humidity",
        "tmd-weather-surface_rawai-nai-harn_station_wind_speed",
        "tmd-weather-surface_rawai-nai-harn_station_rainfall_today",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wind_speed_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_thunder",
        "tmd-shipping-forecast_rawai-nai-harn_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rawai-nai-harn_forecast_heavy_rain_flag",
        "namtang-transit-structure_rawai-nai-harn_transport_structure_score",
        "mot-bus-terminal-support_rawai-nai-harn_official_bus_terminal_support_score",
        "bks-station-ticket-support_rawai-nai-harn_official_intercity_bus_support_score",
        "bks-timetable-search-surface_rawai-nai-harn_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_rawai-nai-harn_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_rawai-nai-harn_official_taxi_oversight_support_score",
        "marine-department-pier-registry_rawai-nai-harn_official_pier_support_score",
        "marine-department-berth-status_rawai-nai-harn_official_berth_status_surface_score",
        "hss-spa-license-support_rawai-nai-harn_spa_license_support_score",
        "noise4thai-ambient-noise_rawai-nai-harn_noise_leq_24h_average",
        "thairsc-road-safety_rawai-nai-harn_road_deaths_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_injuries_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Urban bus-operator support is limited",
      "reason": "The public Thai Smile Group locator currently shows 2 nearby branch or depot location(s) for this entity: สำนักงานใหญ่, อู่พระประแดง. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_silom-sathorn_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 62,
      "severity": "medium",
      "tone": "mixed",
      "label": "Urban bus-operator support is limited",
      "reason": "The public Thai Smile Group locator currently shows 2 nearby branch or depot location(s) for this entity: สำนักงานใหญ่, อู่พระประแดง. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_sukhumvit_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_civic_friction",
      "signal_type": "civic_friction",
      "family_name": "Civic friction",
      "basis": "live_observation",
      "score": 63,
      "severity": "medium",
      "tone": "mixed",
      "label": "Civic friction is elevated",
      "reason": "Latest Bangkok district complaint summary shows 28,532 complaint(s), averaging 570.6 per mapped district, about 1.12x the city median district load, 47.1% resolved, and 4.17 stars.",
      "source_count": 50,
      "source_names": [
        "Bangkok Open Data"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-07-31T17:00:00.000Z",
      "expires_at": "2025-08-14T17:00:00.000Z",
      "observation_ids": [
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average"
      ],
      "context_ids": [],
      "note": "Bangkok-wide civic complaint context from the latest public district Traffy summary on Bangkok Open Data."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 63,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Chiang Mai. Namtang structure scores 48 from 2 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School",
        "ThaiRSC Road Accident Center",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_chiang-mai_warning_match_count",
        "tmd-weather-surface_chiang-mai_station_rainfall_today",
        "air4thai-aqi_chiang-mai_aqi_average",
        "air4thai-aqi_chiang-mai_pm25_average",
        "thairsc-road-safety_chiang-mai_road_casualty_total_ytd",
        "thairsc-road-safety_chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_chiang-mai_road_injuries_ytd",
        "air4thai-aqi_chiang-mai_aqi_average",
        "air4thai-aqi_chiang-mai_pm25_average",
        "tmd-weather-surface_chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_chiang-mai_forecast_temp_min",
        "tmd-weather-surface_chiang-mai_forecast_temp_max",
        "tmd-weather-surface_chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_chiang-mai_warning_match_count",
        "tmd-weather-surface_chiang-mai_marine_wind_speed_average",
        "tmd-weather-surface_chiang-mai_marine_thunderstorm_flag",
        "tmd-weather-surface_chiang-mai_station_temperature",
        "tmd-weather-surface_chiang-mai_station_humidity",
        "tmd-weather-surface_chiang-mai_station_wind_speed",
        "tmd-weather-surface_chiang-mai_station_rainfall_today",
        "aviationweather-airport-status_chiang-mai_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai_airport_convective_forecast_flag",
        "thaiwater-water-quality_chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chiang-mai_water_quality_index_average",
        "namtang-transit-structure_chiang-mai_transport_structure_score",
        "mot-bus-terminal-support_chiang-mai_official_bus_terminal_support_score",
        "bks-station-ticket-support_chiang-mai_official_intercity_bus_support_score",
        "bks-timetable-search-surface_chiang-mai_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_chiang-mai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_chiang-mai_official_taxi_oversight_support_score",
        "hss-spa-license-support_chiang-mai_spa_license_support_score",
        "moph-health-facility-support_chiang-mai_medical_fallback_support_score",
        "dnp-park-tourism-support_chiang-mai_park_access_context_score",
        "gta-gold-reference-price_chiang-mai_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai_gold_spot_reference",
        "gta-gold-reference-price_chiang-mai_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai_gold_price_change_prev_day",
        "noise4thai-ambient-noise_chiang-mai_noise_leq_24h_average",
        "thairsc-road-safety_chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_chiang-mai_road_injuries_ytd",
        "thairsc-road-safety_chiang-mai_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 63,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is elevated",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Nimman. Namtang structure scores 51 from 2 nearby stops across 2 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Air4Thai / Pollution Control Department",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_nimman_forecast_rain_probability",
        "tmd-weather-surface_nimman_forecast_heavy_rain_flag",
        "tmd-weather-surface_nimman_warning_match_count",
        "tmd-weather-surface_nimman_station_rainfall_today",
        "air4thai-aqi_nimman_aqi_average",
        "air4thai-aqi_nimman_pm25_average",
        "thairsc-road-safety_nimman_road_casualty_total_ytd",
        "thairsc-road-safety_nimman_road_deaths_ytd",
        "thairsc-road-safety_nimman_road_injuries_ytd",
        "air4thai-aqi_nimman_aqi_average",
        "air4thai-aqi_nimman_pm25_average",
        "tmd-weather-surface_nimman_forecast_rain_probability",
        "tmd-weather-surface_nimman_forecast_temp_min",
        "tmd-weather-surface_nimman_forecast_temp_max",
        "tmd-weather-surface_nimman_forecast_heavy_rain_flag",
        "tmd-weather-surface_nimman_warning_match_count",
        "tmd-weather-surface_nimman_marine_wind_speed_average",
        "tmd-weather-surface_nimman_marine_thunderstorm_flag",
        "tmd-weather-surface_nimman_station_temperature",
        "tmd-weather-surface_nimman_station_humidity",
        "tmd-weather-surface_nimman_station_wind_speed",
        "tmd-weather-surface_nimman_station_rainfall_today",
        "thaiwater-water-quality_nimman_water_quality_status_score",
        "thaiwater-water-quality_nimman_water_dissolved_oxygen_average",
        "thaiwater-water-quality_nimman_water_quality_index_average",
        "namtang-transit-structure_nimman_transport_structure_score",
        "hss-spa-license-support_nimman_spa_license_support_score",
        "noise4thai-ambient-noise_nimman_noise_leq_24h_average",
        "thairsc-road-safety_nimman_road_deaths_ytd",
        "thairsc-road-safety_nimman_road_injuries_ytd",
        "thairsc-road-safety_nimman_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_airport_scale_context",
      "signal_type": "airport_scale_context",
      "family_name": "Airport scale context",
      "basis": "live_observation",
      "score": 63,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport scale context is established",
      "reason": "The latest public AOT fiscal traffic workbook for FY2025 currently shows 7087 total aircraft movements and 1016099 total passengers for this airport. This is official airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT air transport statistics"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-10-16T17:00:00.000Z",
      "expires_at": "2025-11-30T17:00:00.000Z",
      "observation_ids": [
        "aot-airport-traffic-stats_phuket-airport_official_airport_scale_score",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_passengers"
      ],
      "context_ids": [],
      "note": "Use this to distinguish major public-airport anchors from thinner airport nodes when route resilience matters, without pretending airport size equals punctuality."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Ao Nang Pier. Namtang structure scores 83 from 9 nearby stops across 2 mode groups.",
      "source_count": 3,
      "source_names": [
        "Thai Meteorological Department",
        "Marine Department piers",
        "Namtang GTFS",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_ao-nang-pier_forecast_heavy_rain_flag",
        "tmd-shipping-forecast_ao-nang-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_ao-nang-pier_transport_structure_score",
        "marine-department-pier-registry_ao-nang-pier_official_pier_support_score",
        "marine-department-berth-status_ao-nang-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "entity_path": "/entities/buriram/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "buriram_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "chanthaburi",
      "entity_name": "Chanthaburi",
      "entity_type": "destination",
      "entity_path": "/entities/chanthaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chanthaburi_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "chiang-rai",
      "entity_name": "Chiang Rai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-rai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-rai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "entity_path": "/entities/hat-yai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "entity_path": "/entities/hua-hin-station/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin-station_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Rain risk is manageable",
      "reason": "Forecast rain chance is 30%, and 9 matched warning item(s) apply.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T00:00:00.000Z",
      "expires_at": "2026-06-24T06:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_isaan_forecast_rain_probability",
        "tmd-weather-surface_isaan_forecast_heavy_rain_flag",
        "tmd-weather-surface_isaan_warning_match_count",
        "tmd-weather-surface_isaan_station_rainfall_today"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Road safety burden is moderate",
      "reason": "71 deaths and 2,472 injuries are attached to this province proxy year to date. Province burden percentile 45",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_kanchanaburi_road_casualty_total_ytd",
        "thairsc-road-safety_kanchanaburi_road_deaths_ytd",
        "thairsc-road-safety_kanchanaburi_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "entity_path": "/entities/khon-kaen/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "khon-kaen_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "entity_path": "/entities/nakhon-ratchasima/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nakhon-ratchasima_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "entity_path": "/entities/nong-khai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nong-khai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Old City Chiang Mai.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School",
        "ThaiRSC Road Accident Center",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Air4Thai / Pollution Control Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_old-city-chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_old-city-chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_old-city-chiang-mai_warning_match_count",
        "tmd-weather-surface_old-city-chiang-mai_station_rainfall_today",
        "air4thai-aqi_old-city-chiang-mai_aqi_average",
        "air4thai-aqi_old-city-chiang-mai_pm25_average",
        "thairsc-road-safety_old-city-chiang-mai_road_casualty_total_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_injuries_ytd",
        "air4thai-aqi_old-city-chiang-mai_aqi_average",
        "air4thai-aqi_old-city-chiang-mai_pm25_average",
        "tmd-weather-surface_old-city-chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_old-city-chiang-mai_forecast_temp_min",
        "tmd-weather-surface_old-city-chiang-mai_forecast_temp_max",
        "tmd-weather-surface_old-city-chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_old-city-chiang-mai_warning_match_count",
        "tmd-weather-surface_old-city-chiang-mai_marine_wind_speed_average",
        "tmd-weather-surface_old-city-chiang-mai_marine_thunderstorm_flag",
        "tmd-weather-surface_old-city-chiang-mai_station_temperature",
        "tmd-weather-surface_old-city-chiang-mai_station_humidity",
        "tmd-weather-surface_old-city-chiang-mai_station_wind_speed",
        "tmd-weather-surface_old-city-chiang-mai_station_rainfall_today",
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_old-city-chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_index_average",
        "mot-bus-terminal-support_old-city-chiang-mai_official_bus_terminal_support_score",
        "bks-station-ticket-support_old-city-chiang-mai_official_intercity_bus_support_score",
        "bks-timetable-search-surface_old-city-chiang-mai_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_old-city-chiang-mai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_old-city-chiang-mai_official_taxi_oversight_support_score",
        "noise4thai-ambient-noise_old-city-chiang-mai_noise_leq_24h_average",
        "thairsc-road-safety_old-city-chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_injuries_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Medical fallback support is usable",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_pai_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Pai uses public MOPH facility surfaces only as cautious fallback context because mountain access still dominates the real burden."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "entity_path": "/entities/samui-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "samui-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official motorcycle-taxi support is limited",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 485 registered stand(s) and 5251 driver(s) for this support scope, across districts such as บางรัก, ยานนาวา, สาทร. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 3,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_silom-sathorn_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "sukhothai",
      "entity_name": "Sukhothai",
      "entity_type": "destination",
      "entity_path": "/entities/sukhothai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhothai_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "surat-thani",
      "entity_name": "Surat Thani",
      "entity_type": "destination",
      "entity_path": "/entities/surat-thani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "surat-thani_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "trang",
      "entity_name": "Trang",
      "entity_type": "destination",
      "entity_path": "/entities/trang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "trang_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "entity_path": "/entities/ubon-ratchathani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ubon-ratchathani_regional_earthquake_context",
      "signal_type": "regional_earthquake_context",
      "family_name": "Regional earthquake context",
      "basis": "context",
      "score": 64,
      "severity": "medium",
      "tone": "mixed",
      "label": "Regional earthquake context is watchable",
      "reason": "USGS currently shows 1 Thailand-region events, max magnitude 4.4. This stays a context signal, not a local destination verdict.",
      "source_count": 1,
      "source_names": [
        "USGS Earthquake API"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-14T20:07:57.209Z",
      "expires_at": "2026-06-15T08:07:57.209Z",
      "observation_ids": [],
      "context_ids": [
        "usgs-thailand-earthquake-context"
      ],
      "note": "A quiet query is still a useful context observation because it reduces one class of route-breaking surprise."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 65,
      "severity": "medium",
      "tone": "mixed",
      "label": "Pier transfer support is workable",
      "reason": "Public transport structure around this coastal anchor shows 17 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 16 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 17,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_railay_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 66,
      "severity": "medium",
      "tone": "mixed",
      "label": "Taxi pickup and dropoff support is limited",
      "reason": "The latest public OTP taxi analytics month currently matches 4 ranked hotspot row(s) for this interchange scope, including stops such as MRT ศูนย์ประชุมสิริกิติ์, ซอยสุขุมวิท 41, เอ็มควอเทียร์, ซอยนานา. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 4,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_bts-asok_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "entity_path": "/entities/hua-hin-station/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin-station_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 66,
      "severity": "medium",
      "tone": "mixed",
      "label": "Rail feasibility is workable",
      "reason": "Public transport structure around this station shows 3 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 2 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hua-hin-station_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 66,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_koh-phangan_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 66,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_koh-samui_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 66,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_pattaya-chonburi_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 67,
      "severity": "medium",
      "tone": "mixed",
      "label": "Thai gold buying friction is manageable",
      "reason": "Pattaya / Chonburi is a tourist-market buying context with more friction than Bangkok for comparison shopping and buyback confidence. Ask about spread, ornament workmanship, and buyback terms before assuming the headline quote is your final shop price.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: HUA HIN BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_hua-hin_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KANCHANABURI BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_kanchanaburi_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Kanchanaburi. Namtang structure scores 37 from 1 nearby stops across 1 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Kanchanaburi Meteorological Station",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "SRT timetable data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_kanchanaburi_forecast_rain_probability",
        "tmd-weather-surface_kanchanaburi_forecast_heavy_rain_flag",
        "tmd-weather-surface_kanchanaburi_warning_match_count",
        "tmd-weather-surface_kanchanaburi_station_rainfall_today",
        "air4thai-aqi_kanchanaburi_aqi_average",
        "air4thai-aqi_kanchanaburi_pm25_average",
        "thairsc-road-safety_kanchanaburi_road_casualty_total_ytd",
        "thairsc-road-safety_kanchanaburi_road_deaths_ytd",
        "thairsc-road-safety_kanchanaburi_road_injuries_ytd",
        "exat-expressway-support_kanchanaburi_exat_expressway_support_score",
        "air4thai-aqi_kanchanaburi_aqi_average",
        "air4thai-aqi_kanchanaburi_pm25_average",
        "tmd-weather-surface_kanchanaburi_forecast_rain_probability",
        "tmd-weather-surface_kanchanaburi_forecast_temp_min",
        "tmd-weather-surface_kanchanaburi_forecast_temp_max",
        "tmd-weather-surface_kanchanaburi_forecast_heavy_rain_flag",
        "tmd-weather-surface_kanchanaburi_warning_match_count",
        "tmd-weather-surface_kanchanaburi_marine_wind_speed_average",
        "tmd-weather-surface_kanchanaburi_marine_thunderstorm_flag",
        "tmd-weather-surface_kanchanaburi_station_temperature",
        "tmd-weather-surface_kanchanaburi_station_humidity",
        "tmd-weather-surface_kanchanaburi_station_wind_speed",
        "tmd-weather-surface_kanchanaburi_station_rainfall_today",
        "thaiwater-water-quality_kanchanaburi_water_quality_status_score",
        "thaiwater-water-quality_kanchanaburi_water_dissolved_oxygen_average",
        "thaiwater-water-quality_kanchanaburi_water_quality_index_average",
        "namtang-transit-structure_kanchanaburi_transport_structure_score",
        "mot-bus-terminal-support_kanchanaburi_official_bus_terminal_support_score",
        "bks-station-ticket-support_kanchanaburi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_kanchanaburi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_kanchanaburi_official_transport_complaint_support_score",
        "exat-expressway-support_kanchanaburi_exat_expressway_support_score",
        "moph-health-facility-support_kanchanaburi_medical_fallback_support_score",
        "dnp-park-tourism-support_kanchanaburi_park_access_context_score",
        "thairsc-road-safety_kanchanaburi_road_deaths_ytd",
        "thairsc-road-safety_kanchanaburi_road_injuries_ytd",
        "thairsc-road-safety_kanchanaburi_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KO SAMUI BUS TERMINAL SURAT THANI. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_koh-samui_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: KRABI BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_krabi_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถเชียงใหม่, - จุดรับส่งพัสดุ เชียงใหม่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_old-city-chiang-mai_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Pattaya / Chonburi. Namtang structure scores 38 from 2 nearby stops across 1 mode groups. Official highway support currently scores 88.",
      "source_count": 3,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "exat-expressway-support_pattaya-chonburi_exat_expressway_support_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_flight_rules_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_visibility_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_forecast_disruption_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_convective_forecast_flag",
        "namtang-transit-structure_pattaya-chonburi_transport_structure_score",
        "mot-bus-terminal-support_pattaya-chonburi_official_bus_terminal_support_score",
        "bks-station-ticket-support_pattaya-chonburi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_pattaya-chonburi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_pattaya-chonburi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_pattaya-chonburi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_pattaya-chonburi_official_pier_support_score",
        "marine-department-berth-status_pattaya-chonburi_official_berth_status_surface_score",
        "exat-expressway-support_pattaya-chonburi_exat_expressway_support_score",
        "hss-spa-license-support_pattaya-chonburi_spa_license_support_score",
        "moph-health-facility-support_pattaya-chonburi_medical_fallback_support_score",
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_usd_thb_reference",
        "gta-gold-reference-price_pattaya-chonburi_gold_spot_reference",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/pattaya-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-gold-shopping_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Thai gold buying friction is manageable",
      "reason": "Pattaya / Chonburi gold shopping is a convenience anchor where buyback terms, spread, and workmanship need more direct checking than in Bangkok. Treat it as a convenience market, not a separate official east-coast price field.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 68,
      "severity": "medium",
      "tone": "mixed",
      "label": "Thai gold buying friction is manageable",
      "reason": "Phuket is a tourist-heavy buying context where convenience is high but spread, language support, and receipt clarity matter more. Do not treat Phuket as a separate official provincial price market.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 69,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is manageable",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 58.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_krabi_airport_flight_rules_score",
        "aviationweather-airport-status_krabi_airport_visibility_score",
        "aviationweather-airport-status_krabi_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 69,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is manageable",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 58.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_krabi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_krabi-airport_airport_visibility_score",
        "aviationweather-airport-status_krabi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 69,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is manageable",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 58.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_phuket_airport_flight_rules_score",
        "aviationweather-airport-status_phuket_airport_visibility_score",
        "aviationweather-airport-status_phuket_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 69,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport weather delay risk is manageable",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 58.0, with convective wording in at least one mapped airport forecast. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_phuket-airport_airport_flight_rules_score",
        "aviationweather-airport-status_phuket-airport_airport_visibility_score",
        "aviationweather-airport-status_phuket-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "entity_path": "/entities/yaowarat-gold-district/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "yaowarat-gold-district_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 69,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Yaowarat gold district. Namtang structure scores 96 from 1429 nearby stops across 7 mode groups.",
      "source_count": 2,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_yaowarat-gold-district_transport_structure_score",
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_usd_thb_reference",
        "gta-gold-reference-price_yaowarat-gold-district_gold_spot_reference",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_intraday",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "2 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_ao-nang_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Taxi pickup and dropoff support is workable",
      "reason": "The latest public OTP taxi analytics month currently matches 8 ranked hotspot row(s) for this airport scope, including stops such as อาคารผู้โดยสาร ชั้น 3, อาคารผู้โดยสาร 1 ชั้น 1 ประตู 6, อาคารผู้โดยสาร 2 ชั้น 1 ประตู 12, ดอนเมือง(สำนักงานท่าอากาศยาน), สนามบินดอนเมือง, SRT ตลาดใหม่ดอนเมือง. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 8,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_don-mueang-airport_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Hua Hin / Cha-am. Namtang structure scores 50 from 3 nearby stops across 2 mode groups. Official highway support currently scores 88.",
      "source_count": 3,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "SRT timetable data",
        "Namtang GTFS"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "exat-expressway-support_hua-hin_exat_expressway_support_score",
        "namtang-transit-structure_hua-hin_transport_structure_score",
        "mot-bus-terminal-support_hua-hin_official_bus_terminal_support_score",
        "bks-station-ticket-support_hua-hin_official_intercity_bus_support_score",
        "bks-timetable-search-surface_hua-hin_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_hua-hin_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_hua-hin_official_taxi_oversight_support_score",
        "marine-department-pier-registry_hua-hin_official_pier_support_score",
        "exat-expressway-support_hua-hin_exat_expressway_support_score",
        "hss-spa-license-support_hua-hin_spa_license_support_score",
        "moph-health-facility-support_hua-hin_medical_fallback_support_score",
        "dnp-park-tourism-support_hua-hin_park_access_context_score"
      ],
      "context_ids": [],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Medical fallback support is usable",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_koh-phangan_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Koh Phangan uses public MOPH facility surfaces only as fallback context behind a more ferry-dependent medical access chain."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "1 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_na-thon-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/phuket-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-gold-shopping_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Thai gold buying friction is manageable",
      "reason": "Phuket gold shopping is a tourist-market convenience anchor where spread, language support, and receipt clarity matter more than local headline prices. Do not treat it as a separate official provincial price market.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "2 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_railay_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 70,
      "severity": "medium",
      "tone": "mixed",
      "label": "Urban bus-operator support is workable",
      "reason": "The public Thai Smile Group locator currently shows 4 nearby branch or depot location(s) for this entity: สำนักงานใหญ่, อู่พระประแดง, อู่พรานนก, อู่สายใต้ใหม่. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 4,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_riverside-old-town_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: CHON BURI BUS TERMINAL, PATTAYA BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_central-pattaya-jomtien_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถเชียงใหม่, - จุดรับส่งพัสดุ เชียงใหม่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_chiang-mai_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Noise4Thai Bangkok roadside cluster. Namtang structure scores 96 from 4687 nearby stops across 7 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "PCD Noise4Thai",
        "OpenStreetMap Thailand",
        "AOT airport noise monitoring",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_rain_probability",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_warning_match_count",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_rainfall_today",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_aqi_average",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_pm25_average",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_casualty_total_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_deaths_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_injuries_ytd",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_aqi_average",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_pm25_average",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_rain_probability",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_temp_min",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_temp_max",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_warning_match_count",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_marine_wind_speed_average",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_marine_thunderstorm_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_temperature",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_humidity",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_wind_speed",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_rainfall_today",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_status_score",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_index_average",
        "namtang-transit-structure_noise4thai-bangkok-roadside-cluster_transport_structure_score",
        "noise4thai-ambient-noise_noise4thai-bangkok-roadside-cluster_noise_leq_24h_average",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_deaths_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_injuries_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: PHUKET BUS TERMINAL, PHUKET BUS TERMINAL 2. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_patong_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: PHUKET BUS TERMINAL, PHUKET BUS TERMINAL 2. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_phuket-old-town_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 72,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is limited",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: PHUKET BUS TERMINAL, PHUKET BUS TERMINAL 2. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_rawai-nai-harn_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 73,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Air4Thai Bangkok urban cluster. Namtang structure scores 96 from 4687 nearby stops across 7 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "Air4Thai / Pollution Control Department",
        "OpenAQ Thailand",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_rain_probability",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_warning_match_count",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_rainfall_today",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_aqi_average",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_pm25_average",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_casualty_total_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_deaths_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_injuries_ytd",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_aqi_average",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_pm25_average",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_rain_probability",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_temp_min",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_temp_max",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_warning_match_count",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_marine_wind_speed_average",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_marine_thunderstorm_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_temperature",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_humidity",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_wind_speed",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_rainfall_today",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_status_score",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_index_average",
        "namtang-transit-structure_air4thai-bangkok-urban-cluster_transport_structure_score",
        "noise4thai-ambient-noise_air4thai-bangkok-urban-cluster_noise_leq_24h_average",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_deaths_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_injuries_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 73,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถภูเก็ต, - สถานีเดินรถภูเก็ต 2. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_patong_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 73,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถภูเก็ต, - สถานีเดินรถภูเก็ต 2. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_phuket-old-town_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 73,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is limited",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถภูเก็ต, - สถานีเดินรถภูเก็ต 2. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_rawai-nai-harn_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 73,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Thaiwater Chao Phraya Bangkok corridor. Namtang structure scores 96 from 4687 nearby stops across 7 mode groups.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "Thaiwater WaterQuality API",
        "Pollution Control Department water quality",
        "MWA raw-water salinity",
        "BMA canal water quality",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_rain_probability",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_warning_match_count",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_rainfall_today",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_aqi_average",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_pm25_average",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_deaths_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_injuries_ytd",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_aqi_average",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_pm25_average",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_rain_probability",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_temp_min",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_temp_max",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_warning_match_count",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_marine_wind_speed_average",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_temperature",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_humidity",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_wind_speed",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_rainfall_today",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_status_score",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_index_average",
        "namtang-transit-structure_thaiwater-chao-phraya-bangkok_transport_structure_score",
        "noise4thai-ambient-noise_thaiwater-chao-phraya-bangkok_noise_leq_24h_average",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_deaths_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_injuries_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_rain_risk",
      "signal_type": "rain_risk",
      "family_name": "Rain risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Rain risk is manageable",
      "reason": "Forecast rain chance is n/a, heavy-rain wording is present.",
      "source_count": 1,
      "source_names": [
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T12:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_ao-nang-pier_forecast_heavy_rain_flag"
      ],
      "context_ids": [],
      "note": "This is the live weather-fit layer for destinations, piers, airports, and route nodes."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_kata-karon_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_patong_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_phuket_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_phuket-old-town_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_rassada-pier_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Noise risk is moderate",
      "reason": "Average Leq 24h is 59.7 dBA across 1 live Noise4Thai stations, peaking at 59.7 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-16T10:00:00.000Z",
      "expires_at": "2026-05-16T22:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_rawai-nai-harn_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Phuket city average from live Noise4Thai cards."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 74,
      "severity": "medium",
      "tone": "mixed",
      "label": "Taxi pickup and dropoff support is workable",
      "reason": "The latest public OTP taxi analytics month currently matches 16 ranked hotspot row(s) for this hotel-area scope, including stops such as ตรงข้ามสหกรณ์กรุงเทพเอกมัย, MRT ศูนย์ประชุมสิริกิติ์, ตลาดคองเตย, BTSอ่อนนุช,ซอยสุขุมวิท 81 (ศิริพจน์), ตลาดคลองเตย(ถนนพระราม3ขาเข้า), ศูนย์ประชุมสิริกิติ์. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 16,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_sukhumvit_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 75,
      "severity": "medium",
      "tone": "mixed",
      "label": "Pier transfer support is workable",
      "reason": "Public transport structure around this coastal anchor shows 26 mapped stop(s), 2 mode group(s), 2 boat-linked stop(s), and 24 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 26,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ao-nang_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 75,
      "severity": "medium",
      "tone": "mixed",
      "label": "Pier transfer support is workable",
      "reason": "Public transport structure around this coastal anchor shows 9 mapped stop(s), 2 mode group(s), 1 boat-linked stop(s), and 8 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 9,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ao-nang-pier_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 75,
      "severity": "medium",
      "tone": "mixed",
      "label": "Transport friction is manageable",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Ayutthaya. Namtang structure scores 53 from 4 nearby stops across 2 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Ayutthaya Witthayalai School",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "OpenStreetMap Thailand",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ayutthaya_forecast_rain_probability",
        "tmd-weather-surface_ayutthaya_forecast_heavy_rain_flag",
        "tmd-weather-surface_ayutthaya_warning_match_count",
        "tmd-weather-surface_ayutthaya_station_rainfall_today",
        "air4thai-aqi_ayutthaya_aqi_average",
        "air4thai-aqi_ayutthaya_pm25_average",
        "thairsc-road-safety_ayutthaya_road_casualty_total_ytd",
        "thairsc-road-safety_ayutthaya_road_deaths_ytd",
        "thairsc-road-safety_ayutthaya_road_injuries_ytd",
        "exat-expressway-support_ayutthaya_exat_expressway_support_score",
        "air4thai-aqi_ayutthaya_aqi_average",
        "air4thai-aqi_ayutthaya_pm25_average",
        "tmd-weather-surface_ayutthaya_forecast_rain_probability",
        "tmd-weather-surface_ayutthaya_forecast_temp_min",
        "tmd-weather-surface_ayutthaya_forecast_temp_max",
        "tmd-weather-surface_ayutthaya_forecast_heavy_rain_flag",
        "tmd-weather-surface_ayutthaya_warning_match_count",
        "tmd-weather-surface_ayutthaya_marine_wind_speed_average",
        "tmd-weather-surface_ayutthaya_marine_thunderstorm_flag",
        "tmd-weather-surface_ayutthaya_station_temperature",
        "tmd-weather-surface_ayutthaya_station_humidity",
        "tmd-weather-surface_ayutthaya_station_wind_speed",
        "tmd-weather-surface_ayutthaya_station_rainfall_today",
        "thaiwater-water-quality_ayutthaya_water_quality_status_score",
        "thaiwater-water-quality_ayutthaya_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ayutthaya_water_quality_index_average",
        "namtang-transit-structure_ayutthaya_transport_structure_score",
        "bks-station-ticket-support_ayutthaya_official_intercity_bus_support_score",
        "bks-timetable-search-surface_ayutthaya_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_ayutthaya_official_transport_complaint_support_score",
        "exat-expressway-support_ayutthaya_exat_expressway_support_score",
        "moph-health-facility-support_ayutthaya_medical_fallback_support_score",
        "thairsc-road-safety_ayutthaya_road_deaths_ytd",
        "thairsc-road-safety_ayutthaya_road_injuries_ytd",
        "thairsc-road-safety_ayutthaya_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 75,
      "severity": "medium",
      "tone": "mixed",
      "label": "Rail feasibility is workable",
      "reason": "Public transport structure around this bus terminal shows 11 mapped stop(s), 1 rail-linked stop(s), 0 airport-link stop(s), and 10 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 11,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_bangkok-mochit-2_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 75,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official motorcycle-taxi support is workable",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 526 registered stand(s) and 9588 driver(s) for this support scope, across districts such as พระโขนง, คลองเตย, วัฒนา, บางนา. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 4,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_sukhumvit_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official pier support is workable",
      "reason": "The public Marine Department berth registry currently matches 10 passenger-use berth row(s) for this entity across กระบี่, with longest berth 75.0 m and deepest berth 5.8 m, including codes such as KBV04, KBV08, KBV13, KBV14, KBV15, KBV16. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 10,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_ao-nang_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Water and flood-adjacent risk is moderate",
      "reason": "Thaiwater status proxy scores 76 with dissolved oxygen 4.93 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 3,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_ayutthaya_water_quality_status_score",
        "thaiwater-water-quality_ayutthaya_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ayutthaya_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Water and flood-adjacent risk is moderate",
      "reason": "Thaiwater status proxy scores 67.3 with dissolved oxygen 4.82 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 3,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_isaan_water_quality_status_score",
        "thaiwater-water-quality_isaan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_isaan_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Road safety burden is moderate",
      "reason": "886 deaths and 48,471 injuries are attached to this province proxy year to date. Province burden percentile 25",
      "source_count": 9,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_isaan_road_casualty_total_ytd",
        "thairsc-road-safety_isaan_road_deaths_ytd",
        "thairsc-road-safety_isaan_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Medical fallback support is usable",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_kanchanaburi_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Kanchanaburi uses public MOPH facility surfaces as moderate medical-fallback context."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_krabi_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Krabi uses public HSS wellness-license support as resort and recovery-day spa context."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 76,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official pier support is workable",
      "reason": "The public Marine Department berth registry currently matches 10 passenger-use berth row(s) for this entity across กระบี่, with longest berth 75.0 m and deepest berth 5.8 m, including codes such as KBV04, KBV08, KBV13, KBV14, KBV15, KBV16. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 10,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_railay_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Road safety burden is moderate",
      "reason": "92 deaths and 4,964 injuries are attached to this province proxy year to date. Province burden percentile 22",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_ayutthaya_road_casualty_total_ytd",
        "thairsc-road-safety_ayutthaya_road_deaths_ytd",
        "thairsc-road-safety_ayutthaya_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official transport complaint support is workable",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-island profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_bophut-fishermans-village_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "entity_path": "/entities/buriram/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "buriram_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 77,
      "severity": "low",
      "tone": "positive",
      "label": "High source confidence",
      "reason": "7 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 7,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_buriram_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official transport complaint support is workable",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-island profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_chaweng_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/hat-yai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai-gold-shopping_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Thai gold buying friction is manageable",
      "reason": "Hat Yai gold shopping is a strong southern regional convenience anchor when the trip already centers on the lower south and the buyer does not need Bangkok-level comparison density. Treat it as a southern convenience market around the national quote, not a separate official local price.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "entity_path": "/entities/khon-kaen/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "khon-kaen_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 77,
      "severity": "low",
      "tone": "positive",
      "label": "High source confidence",
      "reason": "8 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 8,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_khon-kaen_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official transport complaint support is workable",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-island profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_lamai_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 77,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official intercity-bus support is workable",
      "reason": "The public BKS station and ticket-point dataset currently matches 2 official station or ticket-point name(s) for this entity: สถานีเดินรถภูเก็ต, - สถานีเดินรถภูเก็ต 2. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_phuket_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_ao-nang_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Ao Nang inherits Krabi HSS wellness-license support as resort spa and massage confidence."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "2 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_ao-nang-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_hua-hin_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Hua Hin uses public HSS wellness-license support as resort spa and massage confidence."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Outdoor comfort is good",
      "reason": "AQI averages 29.3 and PM2.5 averages 16.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 9,
      "source_names": [
        "Hydrogeological Group Water Resources Regional Office4 khonkaen",
        "Municipal Waste Water Pumping Station",
        "Buriram City Hall",
        "Bueng Planchai",
        "Meteorological stations, Sakon Nakhon",
        "Surin Meteorological Center",
        "Nong Thin Public Park, Nong Khai",
        "Nong Prajak Public Park, Udon Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_isaan_aqi_average",
        "air4thai-aqi_isaan_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Medical fallback support is usable",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_isaan_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Isaan uses public MOPH facility surfaces as broad regional fallback context."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Outdoor comfort is good",
      "reason": "AQI averages 30 and PM2.5 averages 16.9 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Kanchanaburi Meteorological Station"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_kanchanaburi_aqi_average",
        "air4thai-aqi_kanchanaburi_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_pier_transfer_support",
      "signal_type": "pier_transfer_support",
      "family_name": "Pier transfer support",
      "basis": "derived_live",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Pier transfer support is workable",
      "reason": "Public transport structure around this coastal anchor shows 47 mapped stop(s), 2 mode group(s), 2 boat-linked stop(s), and 45 bus-linked stop(s). This is public transfer support, not operator schedule or queue-length truth.",
      "source_count": 47,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_krabi_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a ferry day has enough public transfer structure behind it before you assume the pier move is easy."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official pier support is workable",
      "reason": "The public Marine Department berth registry currently matches 10 passenger-use berth row(s) for this entity across กระบี่, with longest berth 75.0 m and deepest berth 5.8 m, including codes such as KBV04, KBV08, KBV13, KBV14, KBV15, KBV16. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 10,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_krabi_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_patong_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Patong inherits Phuket HSS wellness-license support as tourist-market spa and massage confidence."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: CHON BURI BUS TERMINAL, PATTAYA BUS TERMINAL. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_pattaya-chonburi_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 2 official terminal name(s) for this entity: PHUKET BUS TERMINAL, PHUKET BUS TERMINAL 2. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 2,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_phuket_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Berth operability context is workable",
      "reason": "3 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_rawai-nai-harn_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 78,
      "severity": "medium",
      "tone": "mixed",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_rawai-nai-harn_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Rawai / Nai Harn inherits Phuket HSS wellness-license support as spa and massage confidence."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_airport_scale_context",
      "signal_type": "airport_scale_context",
      "family_name": "Airport scale context",
      "basis": "live_observation",
      "score": 79,
      "severity": "medium",
      "tone": "mixed",
      "label": "Airport scale context is strong",
      "reason": "The latest public AOT fiscal traffic workbook for FY2025 currently shows 15867 total aircraft movements and 2293514 total passengers for this airport. This is official airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT air transport statistics"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-10-16T17:00:00.000Z",
      "expires_at": "2025-11-30T17:00:00.000Z",
      "observation_ids": [
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_scale_score",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_passengers"
      ],
      "context_ids": [],
      "note": "Use this to distinguish major public-airport anchors from thinner airport nodes when route resilience matters, without pretending airport size equals punctuality."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is workable",
      "reason": "The public Marine Department berth registry currently matches 12 passenger-use berth row(s) for this entity across ชลบุรี, with longest berth 500.0 m and deepest berth 13.0 m, including codes such as LCBA1, LCBC0, PT001, PTL02, PTY01, PT002. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 12,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_central-pattaya-jomtien_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold buying friction is manageable",
      "reason": "Chiang Mai is workable for ordinary buying, but comparison shopping is thinner than Yaowarat and the city is more about convenience than maximum market depth. Treat Chiang Mai as a regional convenience market, not the best-density national benchmark.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is useful",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_hua-hin_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Hua Hin uses DNP tourism datasets as coastal-park planning context, not live same-day closure truth."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_kata-karon_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Kata / Karon inherits Phuket HSS wellness-license support as spa and massage confidence."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_lamai_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Lamai inherits Samui HSS wellness-license support as resort spa confidence."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 3 official terminal name(s) for this entity: CHIANG MAI BUS TERMINAL 2 (AKHET), CHIANG MAI BUS TERMINAL 3, CHIANG MAI BUS TERMINAL 1 (CHANG PHUEAK). This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 3,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_old-city-chiang-mai_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 80,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is usable",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_pattaya-chonburi_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Pattaya / Chonburi uses public HSS wellness-license support as tourist-market spa and massage confidence."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_chaweng_road_casualty_total_ytd",
        "thairsc-road-safety_chaweng_road_deaths_ytd",
        "thairsc-road-safety_chaweng_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/chiang-mai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-gold-shopping_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold buying friction is manageable",
      "reason": "Chiang Mai gold shopping is a regional convenience anchor where the trip already centers on the north and the buyer does not need Bangkok-level shop density. Treat it as a convenience market, not the deepest national comparison field.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is workable",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-island profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_koh-phangan_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is workable",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-island profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_koh-samui_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_lamai_road_casualty_total_ytd",
        "thairsc-road-safety_lamai_road_deaths_ytd",
        "thairsc-road-safety_lamai_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 81,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "113 deaths and 6,178 injuries are attached to this province proxy year to date. Province burden percentile 16",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_ayutthaya_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Ayutthaya uses public MOPH facility surfaces as moderate medical-fallback context."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Bangkok Mochit 2 Bus Terminal. Namtang structure scores 89 from 11 nearby stops across 2 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Namtang GTFS",
        "Ministry of Transport Data Catalog",
        "OpenStreetMap Thailand bus stops and route relations"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok-mochit-2_forecast_rain_probability",
        "tmd-weather-surface_bangkok-mochit-2_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok-mochit-2_warning_match_count",
        "tmd-weather-surface_bangkok-mochit-2_station_rainfall_today",
        "air4thai-aqi_bangkok-mochit-2_aqi_average",
        "air4thai-aqi_bangkok-mochit-2_pm25_average",
        "thairsc-road-safety_bangkok-mochit-2_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_deaths_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_injuries_ytd",
        "exat-expressway-support_bangkok-mochit-2_exat_expressway_support_score",
        "air4thai-aqi_bangkok-mochit-2_aqi_average",
        "air4thai-aqi_bangkok-mochit-2_pm25_average",
        "tmd-weather-surface_bangkok-mochit-2_forecast_rain_probability",
        "tmd-weather-surface_bangkok-mochit-2_forecast_temp_min",
        "tmd-weather-surface_bangkok-mochit-2_forecast_temp_max",
        "tmd-weather-surface_bangkok-mochit-2_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok-mochit-2_warning_match_count",
        "tmd-weather-surface_bangkok-mochit-2_marine_wind_speed_average",
        "tmd-weather-surface_bangkok-mochit-2_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok-mochit-2_station_temperature",
        "tmd-weather-surface_bangkok-mochit-2_station_humidity",
        "tmd-weather-surface_bangkok-mochit-2_station_wind_speed",
        "tmd-weather-surface_bangkok-mochit-2_station_rainfall_today",
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_status_score",
        "thaiwater-water-quality_bangkok-mochit-2_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_index_average",
        "namtang-transit-structure_bangkok-mochit-2_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok-mochit-2_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok-mochit-2_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok-mochit-2_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok-mochit-2_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok-mochit-2_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok-mochit-2_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok-mochit-2_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok-mochit-2_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok-mochit-2_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok-mochit-2_exat_expressway_support_score",
        "noise4thai-ambient-noise_bangkok-mochit-2_noise_leq_24h_average",
        "thairsc-road-safety_bangkok-mochit-2_road_deaths_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_injuries_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_chaweng_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Chaweng inherits Samui HSS wellness-license support as resort spa confidence."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_hua-hin_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Hua Hin uses public MOPH facility surfaces as moderate medical-fallback context."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is low",
      "reason": "Average AQI is 29.3 across 9 supporting stations. Hydrogeological Group Water Resources Regional Office4 khonkaen reached AQI 45",
      "source_count": 9,
      "source_names": [
        "Hydrogeological Group Water Resources Regional Office4 khonkaen",
        "Municipal Waste Water Pumping Station",
        "Buriram City Hall",
        "Bueng Planchai",
        "Meteorological stations, Sakon Nakhon",
        "Surin Meteorological Center",
        "Nong Thin Public Park, Nong Khai",
        "Nong Prajak Public Park, Udon Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_isaan_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses a regional set of northeastern stations as a proxy."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is low",
      "reason": "Average AQI is 30 across 1 supporting stations. Kanchanaburi Meteorological Station reached AQI 30",
      "source_count": 1,
      "source_names": [
        "Kanchanaburi Meteorological Station"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_kanchanaburi_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from public provincial station coverage."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_koh-phangan_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Koh Phangan uses DNP tourism datasets as island protected-area planning context, not live same-day closure truth."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Berth operability context is strong",
      "reason": "3 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_krabi_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_nimman_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Nimman inherits Chiang Mai HSS wellness-license support as hotel-base spa and massage confidence."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is workable",
      "reason": "The public Marine Department berth registry currently matches 12 passenger-use berth row(s) for this entity across ชลบุรี, with longest berth 500.0 m and deepest berth 13.0 m, including codes such as LCBA1, LCBC0, PT001, PTL02, PTY01, PT002. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 12,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_pattaya-chonburi_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Berth operability context is strong",
      "reason": "4 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_phuket_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_phuket_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Phuket uses public HSS wellness-license support as tourist-market spa and massage confidence, not live booking truth."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Riverside / Old Town. Namtang structure scores 96 from 951 nearby stops across 6 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_riverside-old-town_forecast_rain_probability",
        "tmd-weather-surface_riverside-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_riverside-old-town_warning_match_count",
        "tmd-weather-surface_riverside-old-town_station_rainfall_today",
        "air4thai-aqi_riverside-old-town_aqi_average",
        "air4thai-aqi_riverside-old-town_pm25_average",
        "thairsc-road-safety_riverside-old-town_road_casualty_total_ytd",
        "thairsc-road-safety_riverside-old-town_road_deaths_ytd",
        "thairsc-road-safety_riverside-old-town_road_injuries_ytd",
        "exat-expressway-support_riverside-old-town_exat_expressway_support_score",
        "air4thai-aqi_riverside-old-town_aqi_average",
        "air4thai-aqi_riverside-old-town_pm25_average",
        "tmd-weather-surface_riverside-old-town_forecast_rain_probability",
        "tmd-weather-surface_riverside-old-town_forecast_temp_min",
        "tmd-weather-surface_riverside-old-town_forecast_temp_max",
        "tmd-weather-surface_riverside-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_riverside-old-town_warning_match_count",
        "tmd-weather-surface_riverside-old-town_marine_wind_speed_average",
        "tmd-weather-surface_riverside-old-town_marine_thunderstorm_flag",
        "tmd-weather-surface_riverside-old-town_station_temperature",
        "tmd-weather-surface_riverside-old-town_station_humidity",
        "tmd-weather-surface_riverside-old-town_station_wind_speed",
        "tmd-weather-surface_riverside-old-town_station_rainfall_today",
        "thaiwater-water-quality_riverside-old-town_water_quality_status_score",
        "thaiwater-water-quality_riverside-old-town_water_dissolved_oxygen_average",
        "thaiwater-water-quality_riverside-old-town_water_quality_index_average",
        "namtang-transit-structure_riverside-old-town_transport_structure_score",
        "bangkok-rapid-transit-official-pages_riverside-old-town_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_riverside-old-town_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_riverside-old-town_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_riverside-old-town_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_riverside-old-town_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_riverside-old-town_urban_bus_operator_support_score",
        "exat-expressway-support_riverside-old-town_exat_expressway_support_score",
        "moph-health-facility-support_riverside-old-town_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_star_average",
        "noise4thai-ambient-noise_riverside-old-town_noise_leq_24h_average",
        "thairsc-road-safety_riverside-old-town_road_deaths_ytd",
        "thairsc-road-safety_riverside-old-town_road_injuries_ytd",
        "thairsc-road-safety_riverside-old-town_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 82,
      "severity": "low",
      "tone": "positive",
      "label": "Airport transfer support is strong",
      "reason": "Public transport structure around this airport shows 37 mapped stop(s), 2 mode group(s), 1 rail-linked stop(s), 1 airport-link stop(s), and 36 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 37,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_suvarnabhumi-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_ao-nang_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_bophut-fishermans-village_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_central-hua-hin-khao-takiab_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_central-pattaya-jomtien_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_chaweng_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_kata-karon_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_lamai_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_patong_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_phuket-old-town_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_railay_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is workable",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_rawai-nai-harn_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 83,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Suvarnabhumi Airport. Namtang structure scores 83 from 37 nearby stops across 2 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "AOT airport flight status",
        "AOT air transport statistics",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "AOT Suvarnabhumi public taxi",
        "AOT Suvarnabhumi Grab pickup points",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_suvarnabhumi-airport_forecast_rain_probability",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_suvarnabhumi-airport_warning_match_count",
        "tmd-weather-surface_suvarnabhumi-airport_station_rainfall_today",
        "air4thai-aqi_suvarnabhumi-airport_aqi_average",
        "air4thai-aqi_suvarnabhumi-airport_pm25_average",
        "thairsc-road-safety_suvarnabhumi-airport_road_casualty_total_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_deaths_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_injuries_ytd",
        "exat-expressway-support_suvarnabhumi-airport_exat_expressway_support_score",
        "air4thai-aqi_suvarnabhumi-airport_aqi_average",
        "air4thai-aqi_suvarnabhumi-airport_pm25_average",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_rain_probability",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_temp_min",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_temp_max",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_suvarnabhumi-airport_warning_match_count",
        "tmd-weather-surface_suvarnabhumi-airport_marine_wind_speed_average",
        "tmd-weather-surface_suvarnabhumi-airport_marine_thunderstorm_flag",
        "tmd-weather-surface_suvarnabhumi-airport_station_temperature",
        "tmd-weather-surface_suvarnabhumi-airport_station_humidity",
        "tmd-weather-surface_suvarnabhumi-airport_station_wind_speed",
        "tmd-weather-surface_suvarnabhumi-airport_station_rainfall_today",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_visibility_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_suvarnabhumi-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_suvarnabhumi-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_scale_score",
        "aot-airport-environment-support_suvarnabhumi-airport_official_airport_environmental_support_score",
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_status_score",
        "thaiwater-water-quality_suvarnabhumi-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_index_average",
        "namtang-transit-structure_suvarnabhumi-airport_transport_structure_score",
        "dlt-gps-taxi-support_suvarnabhumi-airport_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_suvarnabhumi-airport_official_motorcycle_taxi_support_score",
        "exat-expressway-support_suvarnabhumi-airport_exat_expressway_support_score",
        "moph-health-facility-support_suvarnabhumi-airport_medical_fallback_support_score",
        "noise4thai-ambient-noise_suvarnabhumi-airport_noise_leq_24h_average",
        "thairsc-road-safety_suvarnabhumi-airport_road_deaths_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_injuries_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_bophut-fishermans-village_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Bophut / Fisherman's Village inherits Samui HSS wellness-license support as resort spa confidence."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_chiang-mai_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Chiang Mai uses public HSS wellness-license support as regional spa and massage confidence, not live booking or treatment quality truth."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Don Mueang Airport. Namtang structure scores 96 from 60 nearby stops across 4 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "AOT airport flight status",
        "AOT air transport statistics",
        "AOT Don Mueang taxi meter service",
        "AOT Don Mueang Grab pickup points",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_don-mueang-airport_forecast_rain_probability",
        "tmd-weather-surface_don-mueang-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_don-mueang-airport_warning_match_count",
        "tmd-weather-surface_don-mueang-airport_station_rainfall_today",
        "air4thai-aqi_don-mueang-airport_aqi_average",
        "air4thai-aqi_don-mueang-airport_pm25_average",
        "thairsc-road-safety_don-mueang-airport_road_casualty_total_ytd",
        "thairsc-road-safety_don-mueang-airport_road_deaths_ytd",
        "thairsc-road-safety_don-mueang-airport_road_injuries_ytd",
        "exat-expressway-support_don-mueang-airport_exat_expressway_support_score",
        "air4thai-aqi_don-mueang-airport_aqi_average",
        "air4thai-aqi_don-mueang-airport_pm25_average",
        "tmd-weather-surface_don-mueang-airport_forecast_rain_probability",
        "tmd-weather-surface_don-mueang-airport_forecast_temp_min",
        "tmd-weather-surface_don-mueang-airport_forecast_temp_max",
        "tmd-weather-surface_don-mueang-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_don-mueang-airport_warning_match_count",
        "tmd-weather-surface_don-mueang-airport_marine_wind_speed_average",
        "tmd-weather-surface_don-mueang-airport_marine_thunderstorm_flag",
        "tmd-weather-surface_don-mueang-airport_station_temperature",
        "tmd-weather-surface_don-mueang-airport_station_humidity",
        "tmd-weather-surface_don-mueang-airport_station_wind_speed",
        "tmd-weather-surface_don-mueang-airport_station_rainfall_today",
        "aviationweather-airport-status_don-mueang-airport_airport_flight_rules_score",
        "aviationweather-airport-status_don-mueang-airport_airport_visibility_score",
        "aviationweather-airport-status_don-mueang-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_don-mueang-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_don-mueang-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_don-mueang-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_scale_score",
        "aot-airport-environment-support_don-mueang-airport_official_airport_environmental_support_score",
        "thaiwater-water-quality_don-mueang-airport_water_quality_status_score",
        "thaiwater-water-quality_don-mueang-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_don-mueang-airport_water_quality_index_average",
        "namtang-transit-structure_don-mueang-airport_transport_structure_score",
        "dlt-gps-taxi-support_don-mueang-airport_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_don-mueang-airport_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_don-mueang-airport_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_don-mueang-airport_exat_expressway_support_score",
        "moph-health-facility-support_don-mueang-airport_medical_fallback_support_score",
        "noise4thai-ambient-noise_don-mueang-airport_noise_leq_24h_average",
        "thairsc-road-safety_don-mueang-airport_road_deaths_ytd",
        "thairsc-road-safety_don-mueang-airport_road_injuries_ytd",
        "thairsc-road-safety_don-mueang-airport_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_hua-hin_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_isaan_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Isaan uses DNP tourism datasets as broad regional park and protected-area planning context, not live same-day closure truth."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_koh-samui_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Koh Samui uses public MOPH facility surfaces as moderate medical-fallback context."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_krabi_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_pattaya-chonburi_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 84,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_phuket_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_ao-nang_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 17 ranked hotspot row(s) for this terminal scope, including stops such as อู่หมอชิต 2, ตรงข้ามเซ็นทรัลลาดพร้าว, นครชัยแอร์, SRT ชุมทางบางซื่อ, ท่าปล่อยรถ สวนจตุจักร (A1), MRTบางซื่อ. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 17,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_bangkok-mochit-2_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_kata-karon_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_patong_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_phuket-old-town_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_railay_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_rawai-nai-harn_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is workable",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_riverside-old-town_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 85,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Silom / Sathorn. Namtang structure scores 96 from 678 nearby stops across 5 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "OpenStreetMap Thailand nightlife venues",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_silom-sathorn_forecast_rain_probability",
        "tmd-weather-surface_silom-sathorn_forecast_heavy_rain_flag",
        "tmd-weather-surface_silom-sathorn_warning_match_count",
        "tmd-weather-surface_silom-sathorn_station_rainfall_today",
        "air4thai-aqi_silom-sathorn_aqi_average",
        "air4thai-aqi_silom-sathorn_pm25_average",
        "thairsc-road-safety_silom-sathorn_road_casualty_total_ytd",
        "thairsc-road-safety_silom-sathorn_road_deaths_ytd",
        "thairsc-road-safety_silom-sathorn_road_injuries_ytd",
        "exat-expressway-support_silom-sathorn_exat_expressway_support_score",
        "air4thai-aqi_silom-sathorn_aqi_average",
        "air4thai-aqi_silom-sathorn_pm25_average",
        "tmd-weather-surface_silom-sathorn_forecast_rain_probability",
        "tmd-weather-surface_silom-sathorn_forecast_temp_min",
        "tmd-weather-surface_silom-sathorn_forecast_temp_max",
        "tmd-weather-surface_silom-sathorn_forecast_heavy_rain_flag",
        "tmd-weather-surface_silom-sathorn_warning_match_count",
        "tmd-weather-surface_silom-sathorn_marine_wind_speed_average",
        "tmd-weather-surface_silom-sathorn_marine_thunderstorm_flag",
        "tmd-weather-surface_silom-sathorn_station_temperature",
        "tmd-weather-surface_silom-sathorn_station_humidity",
        "tmd-weather-surface_silom-sathorn_station_wind_speed",
        "tmd-weather-surface_silom-sathorn_station_rainfall_today",
        "thaiwater-water-quality_silom-sathorn_water_quality_status_score",
        "thaiwater-water-quality_silom-sathorn_water_dissolved_oxygen_average",
        "thaiwater-water-quality_silom-sathorn_water_quality_index_average",
        "namtang-transit-structure_silom-sathorn_transport_structure_score",
        "bangkok-rapid-transit-official-pages_silom-sathorn_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_silom-sathorn_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_silom-sathorn_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_silom-sathorn_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_silom-sathorn_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_silom-sathorn_urban_bus_operator_support_score",
        "exat-expressway-support_silom-sathorn_exat_expressway_support_score",
        "hss-spa-license-support_silom-sathorn_spa_license_support_score",
        "moph-health-facility-support_silom-sathorn_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_star_average",
        "noise4thai-ambient-noise_silom-sathorn_noise_leq_24h_average",
        "thairsc-road-safety_silom-sathorn_road_deaths_ytd",
        "thairsc-road-safety_silom-sathorn_road_injuries_ytd",
        "thairsc-road-safety_silom-sathorn_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Ari. Namtang structure scores 96 from 590 nearby stops across 5 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_ari_forecast_rain_probability",
        "tmd-weather-surface_ari_forecast_heavy_rain_flag",
        "tmd-weather-surface_ari_warning_match_count",
        "tmd-weather-surface_ari_station_rainfall_today",
        "air4thai-aqi_ari_aqi_average",
        "air4thai-aqi_ari_pm25_average",
        "thairsc-road-safety_ari_road_casualty_total_ytd",
        "thairsc-road-safety_ari_road_deaths_ytd",
        "thairsc-road-safety_ari_road_injuries_ytd",
        "exat-expressway-support_ari_exat_expressway_support_score",
        "air4thai-aqi_ari_aqi_average",
        "air4thai-aqi_ari_pm25_average",
        "tmd-weather-surface_ari_forecast_rain_probability",
        "tmd-weather-surface_ari_forecast_temp_min",
        "tmd-weather-surface_ari_forecast_temp_max",
        "tmd-weather-surface_ari_forecast_heavy_rain_flag",
        "tmd-weather-surface_ari_warning_match_count",
        "tmd-weather-surface_ari_marine_wind_speed_average",
        "tmd-weather-surface_ari_marine_thunderstorm_flag",
        "tmd-weather-surface_ari_station_temperature",
        "tmd-weather-surface_ari_station_humidity",
        "tmd-weather-surface_ari_station_wind_speed",
        "tmd-weather-surface_ari_station_rainfall_today",
        "thaiwater-water-quality_ari_water_quality_status_score",
        "thaiwater-water-quality_ari_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ari_water_quality_index_average",
        "namtang-transit-structure_ari_transport_structure_score",
        "bangkok-rapid-transit-official-pages_ari_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_ari_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_ari_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_ari_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_ari_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_ari_exat_expressway_support_score",
        "moph-health-facility-support_ari_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_ari_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_ari_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_ari_civic_star_average",
        "noise4thai-ambient-noise_ari_noise_leq_24h_average",
        "thairsc-road-safety_ari_road_deaths_ytd",
        "thairsc-road-safety_ari_road_injuries_ytd",
        "thairsc-road-safety_ari_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 3 official terminal name(s) for this entity: SOUTHERN BUS TERMINAL, BOROMMARATCHACHONNANI RD., NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL), BANGKOK BUS TERMINAL (EKAMAI). This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 3,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Bangkok. Namtang structure scores 96 from 4687 nearby stops across 7 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Royal Thai Police station directory and provincial datasets",
        "Tourist Police Bureau",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_temp_min",
        "tmd-weather-surface_bangkok_forecast_temp_max",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_marine_wind_speed_average",
        "tmd-weather-surface_bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok_station_temperature",
        "tmd-weather-surface_bangkok_station_humidity",
        "tmd-weather-surface_bangkok_station_wind_speed",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag",
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average",
        "namtang-transit-structure_bangkok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "hss-spa-license-support_bangkok_spa_license_support_score",
        "moph-health-facility-support_bangkok_medical_fallback_support_score",
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_spot_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average",
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_status_score",
        "thaiwater-water-quality_bophut-fishermans-village_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for BTS Asok / MRT Sukhumvit. Namtang structure scores 96 from 132 nearby stops across 5 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "Namtang GTFS",
        "OpenStreetMap Thailand",
        "Google Places hotels"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "tmd-weather-surface_bts-asok_forecast_rain_probability",
        "tmd-weather-surface_bts-asok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bts-asok_warning_match_count",
        "tmd-weather-surface_bts-asok_station_rainfall_today",
        "air4thai-aqi_bts-asok_aqi_average",
        "air4thai-aqi_bts-asok_pm25_average",
        "thairsc-road-safety_bts-asok_road_casualty_total_ytd",
        "thairsc-road-safety_bts-asok_road_deaths_ytd",
        "thairsc-road-safety_bts-asok_road_injuries_ytd",
        "exat-expressway-support_bts-asok_exat_expressway_support_score",
        "air4thai-aqi_bts-asok_aqi_average",
        "air4thai-aqi_bts-asok_pm25_average",
        "tmd-weather-surface_bts-asok_forecast_rain_probability",
        "tmd-weather-surface_bts-asok_forecast_temp_min",
        "tmd-weather-surface_bts-asok_forecast_temp_max",
        "tmd-weather-surface_bts-asok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bts-asok_warning_match_count",
        "tmd-weather-surface_bts-asok_marine_wind_speed_average",
        "tmd-weather-surface_bts-asok_marine_thunderstorm_flag",
        "tmd-weather-surface_bts-asok_station_temperature",
        "tmd-weather-surface_bts-asok_station_humidity",
        "tmd-weather-surface_bts-asok_station_wind_speed",
        "tmd-weather-surface_bts-asok_station_rainfall_today",
        "thaiwater-water-quality_bts-asok_water_quality_status_score",
        "thaiwater-water-quality_bts-asok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bts-asok_water_quality_index_average",
        "namtang-transit-structure_bts-asok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bts-asok_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_bts-asok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bts-asok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bts-asok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bts-asok_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_bts-asok_exat_expressway_support_score",
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bts-asok_civic_star_average",
        "noise4thai-ambient-noise_bts-asok_noise_leq_24h_average",
        "thairsc-road-safety_bts-asok_road_deaths_ytd",
        "thairsc-road-safety_bts-asok_road_injuries_ytd",
        "thairsc-road-safety_bts-asok_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is workable",
      "reason": "The public BKS station and ticket-point dataset currently matches 4 official station or ticket-point name(s) for this entity: สถานีเดินรถชลบุรี, - จุดจอดศรีราชา, สถานีเดินรถพัทยา, - จุดจอดสัตหีบ. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_central-pattaya-jomtien_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_chaweng_water_quality_status_score",
        "thaiwater-water-quality_chaweng_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chaweng_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is workable",
      "reason": "The public MOT passenger-terminal master currently matches 3 official terminal name(s) for this entity: CHIANG MAI BUS TERMINAL 2 (AKHET), CHIANG MAI BUS TERMINAL 3, CHIANG MAI BUS TERMINAL 1 (CHANG PHUEAK). This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 3,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_chiang-mai_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 6.07 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chiang-mai_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/chiang-mai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-gold-shopping_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Berth operability context is strong",
      "reason": "3 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_donsak-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_donsak-pier_water_quality_status_score",
        "thaiwater-water-quality_donsak-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_donsak-pier_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/hat-yai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai-gold-shopping_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "entity_path": "/entities/hua-hin-station/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin-station_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 3,
      "source_names": [
        "SRT timetable data",
        "Namtang GTFS",
        "OpenStreetMap Thailand"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hua-hin-station_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 6.21 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_kanchanaburi_water_quality_status_score",
        "thaiwater-water-quality_kanchanaburi_water_dissolved_oxygen_average",
        "thaiwater-water-quality_kanchanaburi_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_koh-phangan_water_quality_status_score",
        "thaiwater-water-quality_koh-phangan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-phangan_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_koh-samui_water_quality_status_score",
        "thaiwater-water-quality_koh-samui_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-samui_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_koh-samui_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Koh Samui uses public HSS wellness-license support as resort and spa-planning context."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_koh-samui_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Koh Samui uses DNP tourism datasets as island and marine-park planning context, not live same-day closure truth."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_krabi_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Krabi uses public MOPH facility surfaces as moderate medical-fallback context."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_lamai_water_quality_status_score",
        "thaiwater-water-quality_lamai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_lamai_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 4.76 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_na-thon-pier_water_quality_status_score",
        "thaiwater-water-quality_na-thon-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_na-thon-pier_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 6.07 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_nimman_water_quality_status_score",
        "thaiwater-water-quality_nimman_water_dissolved_oxygen_average",
        "thaiwater-water-quality_nimman_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_flood_water_risk",
      "signal_type": "flood_water_risk",
      "family_name": "Flood and water risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Water and flood-adjacent risk is low",
      "reason": "Thaiwater status proxy scores 82 with dissolved oxygen 6.07 mg/L. This is a river and canal caution layer, not a full flood-stage model.",
      "source_count": 1,
      "source_names": [
        "Thaiwater WaterQuality API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:30:00.000Z",
      "expires_at": "2026-06-24T13:30:00.000Z",
      "observation_ids": [
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_old-city-chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_index_average"
      ],
      "context_ids": [],
      "note": "Water risk is only emitted where current Thaiwater station coverage exists."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_patong_road_casualty_total_ytd",
        "thairsc-road-safety_patong_road_deaths_ytd",
        "thairsc-road-safety_patong_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/pattaya-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-gold-shopping_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_phuket_road_casualty_total_ytd",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_phuket_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/phuket-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-gold-shopping_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_phuket-old-town_road_casualty_total_ytd",
        "thairsc-road-safety_phuket-old-town_road_deaths_ytd",
        "thairsc-road-safety_phuket-old-town_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_berth_operability_context",
      "signal_type": "berth_operability_context",
      "family_name": "Berth operability context",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Berth operability context is strong",
      "reason": "3 public berth-status port option(s) currently match this coastal scope, and the public Marine Department berth surface renders 350 visible ship-visit row(s) (274 arrivals, 76 departures). This is berth-movement evidence, not a live ferry schedule or seat feed.",
      "source_count": 1,
      "source_names": [
        "Marine Department berth status"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T10:15:23.481Z",
      "observation_ids": [
        "marine-department-berth-status_rassada-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Use this as operational berth-surface confidence behind ferry and coastal transfer decisions, not as direct operator timetable truth."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "63 deaths and 11,578 injuries are attached to this province proxy year to date. Province burden percentile 7",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_rawai-nai-harn_road_casualty_total_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_deaths_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 32 ranked hotspot row(s) for this hotel-area scope, including stops such as เซ็นทรัลพระราม 3, สวนลุมพินี(ฝั่งราชดำริป้าย2), โรงพยาบาลจุฬาลงกรณ์(ฝั่งราชดำริ), ตรงข้ามโรบินสันบางรัก, BRT วัดด่าน, สถานีรถไฟหัวลำโพง. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 32,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_silom-sathorn_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_transport_friction",
      "signal_type": "transport_friction",
      "family_name": "Transport friction",
      "basis": "derived_live",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Transport friction is low",
      "reason": "This blends live rain, comfort, road burden, graph-known transfer strength, current public transit structure, and official highway-support context for Sukhumvit. Namtang structure scores 96 from 678 nearby stops across 5 mode groups. Official highway support currently scores 88.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng",
        "ThaiRSC Road Accident Center",
        "EXAT Traffic Surface",
        "EXAT Data Catalog",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "OpenStreetMap Thailand restaurants and cafes",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "tmd-weather-surface_sukhumvit_forecast_rain_probability",
        "tmd-weather-surface_sukhumvit_forecast_heavy_rain_flag",
        "tmd-weather-surface_sukhumvit_warning_match_count",
        "tmd-weather-surface_sukhumvit_station_rainfall_today",
        "air4thai-aqi_sukhumvit_aqi_average",
        "air4thai-aqi_sukhumvit_pm25_average",
        "thairsc-road-safety_sukhumvit_road_casualty_total_ytd",
        "thairsc-road-safety_sukhumvit_road_deaths_ytd",
        "thairsc-road-safety_sukhumvit_road_injuries_ytd",
        "exat-expressway-support_sukhumvit_exat_expressway_support_score",
        "air4thai-aqi_sukhumvit_aqi_average",
        "air4thai-aqi_sukhumvit_pm25_average",
        "tmd-weather-surface_sukhumvit_forecast_rain_probability",
        "tmd-weather-surface_sukhumvit_forecast_temp_min",
        "tmd-weather-surface_sukhumvit_forecast_temp_max",
        "tmd-weather-surface_sukhumvit_forecast_heavy_rain_flag",
        "tmd-weather-surface_sukhumvit_warning_match_count",
        "tmd-weather-surface_sukhumvit_marine_wind_speed_average",
        "tmd-weather-surface_sukhumvit_marine_thunderstorm_flag",
        "tmd-weather-surface_sukhumvit_station_temperature",
        "tmd-weather-surface_sukhumvit_station_humidity",
        "tmd-weather-surface_sukhumvit_station_wind_speed",
        "tmd-weather-surface_sukhumvit_station_rainfall_today",
        "thaiwater-water-quality_sukhumvit_water_quality_status_score",
        "thaiwater-water-quality_sukhumvit_water_dissolved_oxygen_average",
        "thaiwater-water-quality_sukhumvit_water_quality_index_average",
        "namtang-transit-structure_sukhumvit_transport_structure_score",
        "bangkok-rapid-transit-official-pages_sukhumvit_official_rapid_transit_support_score",
        "bks-station-ticket-support_sukhumvit_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_sukhumvit_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_sukhumvit_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_sukhumvit_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_sukhumvit_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_sukhumvit_urban_bus_operator_support_score",
        "exat-expressway-support_sukhumvit_exat_expressway_support_score",
        "hss-spa-license-support_sukhumvit_spa_license_support_score",
        "moph-health-facility-support_sukhumvit_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_sukhumvit_civic_star_average",
        "noise4thai-ambient-noise_sukhumvit_noise_leq_24h_average",
        "thairsc-road-safety_sukhumvit_road_deaths_ytd",
        "thairsc-road-safety_sukhumvit_road_injuries_ytd",
        "thairsc-road-safety_sukhumvit_road_casualty_total_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a decision-support friction layer. It now uses public static transit structure, but it is still not a live timetable or disruption feed."
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "entity_path": "/entities/yaowarat-gold-district/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "yaowarat-gold-district_thai_gold_reference_price",
      "signal_type": "thai_gold_reference_price",
      "family_name": "Thai gold reference price",
      "basis": "live_observation",
      "score": 86,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold reference is fresh",
      "reason": "The published Gold Traders Association quote currently shows 96.5% gold bar buy at ฿64,400 and sell at ฿64,600 per 1 baht-weight, with ornament base around ฿63,111.08 and ornament sell around ฿65,400. This is a national Thai retail reference, not a local province-specific shop feed.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "bar_buy_price": 64400,
      "bar_sell_price": 64600,
      "ornament_base_price": 63111.08,
      "ornament_sell_price": 65400,
      "observation_ids": [
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "Use this as the national THB-per-baht-weight quote behind Thailand gold pages and decisions. It is not a live trading feed."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 87,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 71 ranked hotspot row(s) for this hotel-area scope, including stops such as อู่หมอชิต 2, ตรงข้ามเซ็นทรัลลาดพร้าว, นครชัยแอร์, SRT ชุมทางบางซื่อ, แยกลาดพร้าว(ลาดพร้าวซอย4), ท่าปล่อยรถ สวนจตุจักร (A1). The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 71,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_ari_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_ari_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok -> Ayutthaya / central northbound. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_ayutthaya_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok -> Ayutthaya / central northbound. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_motorcycle_taxi_support",
      "signal_type": "official_motorcycle_taxi_support",
      "family_name": "Official motorcycle-taxi support",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Official motorcycle-taxi support is strong",
      "reason": "The public DLT/data.go.th Bangkok motorcycle-taxi dataset currently shows 5800 registered stand(s) and 87179 driver(s) for this support scope, across districts such as บางกะปิ, บางเขน, บางรัก, ดุสิต, ห้วยขวาง, ปทุมวัน. This is official last-mile support coverage, not live motorcycle-taxi availability, queue, or dispatch truth.",
      "source_count": 50,
      "source_names": [
        "Bangkok motorcycle taxi stands and drivers"
      ],
      "freshness_class": "stale",
      "observed_at": "2020-07-23T04:25:48.450Z",
      "expires_at": "2020-08-22T04:25:48.450Z",
      "observation_ids": [
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish Bangkok hotel areas, terminals, and airport-linked anchors with stronger official motorcycle-taxi last-mile coverage from places that rely only on rail, taxi, or generic city map logic."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_urban_bus_operator_support",
      "signal_type": "urban_bus_operator_support",
      "family_name": "Urban bus-operator support",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Urban bus-operator support is strong",
      "reason": "The public Thai Smile Group locator currently shows 18 nearby branch or depot location(s) for this entity: สำนักงานใหญ่, อู่ตลิ่งชัน, อู่ท่าอิฐ, อู่บึงกุ่ม, อู่ปากน้ำ, อู่ปากเกร็ด. This is operator-footprint support, not realtime vehicle, ETA, crowding, or outage truth.",
      "source_count": 18,
      "source_names": [
        "Thai Smile Group branch and depot locator"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-26T02:15:23.481Z",
      "observation_ids": [
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score"
      ],
      "context_ids": [],
      "note": "Use this as operator-footprint support, not live bus operation, ETA, crowding, or outage truth."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine; Bangkok -> Pattaya / Eastern Seaboard; Bangkok -> Hua Hin / southbound coast; Bangkok -> Ayutthaya / central northbound; Bangkok -> Kanchanaburi / westbound nature loop. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_bangkok_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine, Bangkok -> Pattaya / Eastern Seaboard, Bangkok -> Hua Hin / southbound coast, Bangkok -> Ayutthaya / central northbound, Bangkok -> Kanchanaburi / westbound nature loop. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine; Bangkok -> Ayutthaya / central northbound; Bangkok -> Kanchanaburi / westbound nature loop. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_bangkok-mochit-2_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine, Bangkok -> Ayutthaya / central northbound, Bangkok -> Kanchanaburi / westbound nature loop. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_bts-asok_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Noise risk is low",
      "reason": "Average Leq 24h is 54.4 dBA across 1 live Noise4Thai stations, peaking at 54.4 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_chiang-mai_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Chiang Mai city average from live Noise4Thai cards."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "150 deaths and 14,711 injuries are attached to this province proxy year to date. Province burden percentile 3",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_chiang-mai_road_casualty_total_ytd",
        "thairsc-road-safety_chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_chiang-mai_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine; Bangkok -> Ayutthaya / central northbound. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_don-mueang-airport_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine, Bangkok -> Ayutthaya / central northbound. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok -> Hua Hin / southbound coast. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_hua-hin_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok -> Hua Hin / southbound coast. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok -> Kanchanaburi / westbound nature loop. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_kanchanaburi_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok -> Kanchanaburi / westbound nature loop. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Noise risk is low",
      "reason": "Average Leq 24h is 54.4 dBA across 1 live Noise4Thai stations, peaking at 54.4 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_nimman_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Chiang Mai city average from live Noise4Thai cards."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "150 deaths and 14,711 injuries are attached to this province proxy year to date. Province burden percentile 3",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_nimman_road_casualty_total_ytd",
        "thairsc-road-safety_nimman_road_deaths_ytd",
        "thairsc-road-safety_nimman_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_noise_risk",
      "signal_type": "noise_risk",
      "family_name": "Noise risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Noise risk is low",
      "reason": "Average Leq 24h is 54.4 dBA across 1 live Noise4Thai stations, peaking at 54.4 dBA.",
      "source_count": 1,
      "source_names": [
        "PCD Noise4Thai"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "noise4thai-ambient-noise_old-city-chiang-mai_noise_leq_24h_average"
      ],
      "context_ids": [],
      "note": "Chiang Mai city average from live Noise4Thai cards."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "150 deaths and 14,711 injuries are attached to this province proxy year to date. Province burden percentile 3",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_old-city-chiang-mai_road_casualty_total_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok -> Pattaya / Eastern Seaboard. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_pattaya-chonburi_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok -> Pattaya / Eastern Seaboard. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_phuket_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Phuket uses DNP tourism datasets as marine-park and island-access planning context, not live same-day closure truth."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_riverside-old-town_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_silom-sathorn_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 4 official station or ticket-point name(s) for this entity: สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย), - จุดจอดแกลง สถานีเดินรถระยอง, - จุดจอดศรีราชา, สถานีเดินรถตราด. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_sukhumvit_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_sukhumvit_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_highway_transfer_friction",
      "signal_type": "highway_transfer_friction",
      "family_name": "Highway transfer friction",
      "basis": "derived_live",
      "score": 88,
      "severity": "low",
      "tone": "positive",
      "label": "Highway transfer friction is low",
      "reason": "Public road-support context currently shows 0 matched DOH CCTV row marker(s), plus 5 official EXAT support page(s) exposing 15 expressway-support marker(s). The strongest corridor fit here is Bangkok urban transfer spine; Bangkok -> Pattaya / Eastern Seaboard. This is official observability and support context, not live speed, queue, lane, or incident truth.",
      "source_count": 1,
      "source_names": [
        "EXAT Traffic Surface",
        "EXAT Data Catalog"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.132Z",
      "expires_at": "2026-05-16T11:11:30.132Z",
      "observation_ids": [
        "exat-expressway-support_suvarnabhumi-airport_exat_expressway_support_score"
      ],
      "context_ids": [],
      "note": "Use this as overland support context behind Bangkok urban transfer spine, Bangkok -> Pattaya / Eastern Seaboard. It should not be mistaken for a live navigation feed."
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/hat-yai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai-gold-shopping_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 9 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_hat-yai-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_hat-yai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_krabi_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 21 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "PCD Noise4Thai",
        "OpenStreetMap Thailand",
        "AOT airport noise monitoring"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_aqi_average",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_pm25_average",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_rain_probability",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_temp_min",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_temp_max",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_warning_match_count",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_marine_wind_speed_average",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_marine_thunderstorm_flag",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_temperature",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_humidity",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_wind_speed",
        "tmd-weather-surface_noise4thai-bangkok-roadside-cluster_station_rainfall_today",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_status_score",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_noise4thai-bangkok-roadside-cluster_water_quality_index_average",
        "namtang-transit-structure_noise4thai-bangkok-roadside-cluster_transport_structure_score",
        "noise4thai-ambient-noise_noise4thai-bangkok-roadside-cluster_noise_leq_24h_average",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_deaths_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_injuries_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/pattaya-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-gold-shopping_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 9 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_pattaya-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this regional-coastal profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_phuket_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/phuket-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-gold-shopping_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 9 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_phuket-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_phuket-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 67 ranked hotspot row(s) for this hotel-area scope, including stops such as เซ็นทรัลปิ่นเกล้า, ตรงข้ามโรงพยาบาลศิริราช, เดอะมอลล์ท่าพระ, ปากคลองตลาด, ท่าพรานนก (วังหลัง), โรงพยาบาลศิริราช. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 67,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_riverside-old-town_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 89,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 5 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "OpenStreetMap Thailand"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_u-tapao-airport_airport_flight_rules_score",
        "aviationweather-airport-status_u-tapao-airport_airport_visibility_score",
        "aviationweather-airport-status_u-tapao-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_u-tapao-airport_airport_convective_forecast_flag",
        "namtang-transit-structure_u-tapao-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_casualty_total_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_deaths_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 10 passenger-use berth row(s) for this entity across กระบี่, with longest berth 75.0 m and deepest berth 5.8 m, including codes such as KBV04, KBV08, KBV13, KBV14, KBV15, KBV16. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 10,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_ao-nang-pier_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_ari_road_casualty_total_ytd",
        "thairsc-road-safety_ari_road_deaths_ytd",
        "thairsc-road-safety_ari_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "gta-gold-reference-price_bangkok_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold buying friction is low",
      "reason": "Bangkok / Yaowarat is the strongest public comparison-shopping base because shop density, receipts, and buyback familiarity are easiest to compare. Still compare workmanship, receipt detail, and buyback terms shop by shop.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_bangkok-mochit-2_road_casualty_total_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_deaths_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_bts-asok_road_casualty_total_ytd",
        "thairsc-road-safety_bts-asok_road_deaths_ytd",
        "thairsc-road-safety_bts-asok_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_chaweng_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_chiang-mai_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Chiang Mai uses DNP tourism datasets as national-park and nature-access planning context, not live same-day closure truth."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai_gold_price_change_prev_day",
        "gta-gold-reference-price_chiang-mai_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/chiang-mai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-gold-shopping_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_chiang-mai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_prev_day",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_don-mueang-airport_road_casualty_total_ytd",
        "thairsc-road-safety_don-mueang-airport_road_deaths_ytd",
        "thairsc-road-safety_don-mueang-airport_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/hat-yai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai-gold-shopping_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_hat-yai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_price_change_prev_day",
        "gta-gold-reference-price_hat-yai-gold-shopping_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 36 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Google Places hotels"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average",
        "tmd-weather-surface_koh-phangan_forecast_rain_probability",
        "tmd-weather-surface_koh-phangan_forecast_temp_min",
        "tmd-weather-surface_koh-phangan_forecast_temp_max",
        "tmd-weather-surface_koh-phangan_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-phangan_warning_match_count",
        "tmd-weather-surface_koh-phangan_marine_wind_speed_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_average",
        "tmd-weather-surface_koh-phangan_marine_wave_height_thunder",
        "tmd-weather-surface_koh-phangan_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-phangan_station_temperature",
        "tmd-weather-surface_koh-phangan_station_humidity",
        "tmd-weather-surface_koh-phangan_station_wind_speed",
        "tmd-weather-surface_koh-phangan_station_rainfall_today",
        "tmd-shipping-forecast_koh-phangan_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_average",
        "tmd-shipping-forecast_koh-phangan_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-phangan_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-phangan_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-phangan_airport_flight_rules_score",
        "aviationweather-airport-status_koh-phangan_airport_visibility_score",
        "aviationweather-airport-status_koh-phangan_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-phangan_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-phangan_water_quality_status_score",
        "thaiwater-water-quality_koh-phangan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-phangan_water_quality_index_average",
        "namtang-transit-structure_koh-phangan_transport_structure_score",
        "dlt-1584-complaint-stats_koh-phangan_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-phangan_official_pier_support_score",
        "marine-department-berth-status_koh-phangan_official_berth_status_surface_score",
        "moph-health-facility-support_koh-phangan_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-phangan_park_access_context_score",
        "thairsc-road-safety_koh-phangan_road_deaths_ytd",
        "thairsc-road-safety_koh-phangan_road_injuries_ytd",
        "thairsc-road-safety_koh-phangan_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_lamai_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_casualty_total_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_deaths_ytd",
        "thairsc-road-safety_noise4thai-bangkok-roadside-cluster_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 18 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "Namtang GTFS"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_pai_aqi_average",
        "air4thai-aqi_pai_pm25_average",
        "tmd-weather-surface_pai_forecast_rain_probability",
        "tmd-weather-surface_pai_forecast_temp_min",
        "tmd-weather-surface_pai_forecast_temp_max",
        "tmd-weather-surface_pai_forecast_heavy_rain_flag",
        "tmd-weather-surface_pai_warning_match_count",
        "tmd-weather-surface_pai_marine_wind_speed_average",
        "tmd-weather-surface_pai_marine_thunderstorm_flag",
        "tmd-weather-surface_pai_station_temperature",
        "tmd-weather-surface_pai_station_humidity",
        "tmd-weather-surface_pai_station_wind_speed",
        "tmd-weather-surface_pai_station_rainfall_today",
        "moph-health-facility-support_pai_medical_fallback_support_score",
        "dnp-park-tourism-support_pai_park_access_context_score",
        "thairsc-road-safety_pai_road_deaths_ytd",
        "thairsc-road-safety_pai_road_injuries_ytd",
        "thairsc-road-safety_pai_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 4 official station or ticket-point name(s) for this entity: สถานีเดินรถชลบุรี, - จุดจอดศรีราชา, สถานีเดินรถพัทยา, - จุดจอดสัตหีบ. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_pattaya-chonburi_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_pattaya-chonburi_usd_thb_reference",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_prev_day",
        "gta-gold-reference-price_pattaya-chonburi_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/pattaya-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-gold-shopping_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_pattaya-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_price_change_prev_day",
        "gta-gold-reference-price_pattaya-gold-shopping_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_phuket_usd_thb_reference",
        "gta-gold-reference-price_phuket_gold_price_change_intraday",
        "gta-gold-reference-price_phuket_gold_price_change_prev_day",
        "gta-gold-reference-price_phuket_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/phuket-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-gold-shopping_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_phuket-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_phuket-gold-shopping_gold_price_change_prev_day",
        "gta-gold-reference-price_phuket-gold-shopping_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_riverside-old-town_road_casualty_total_ytd",
        "thairsc-road-safety_riverside-old-town_road_deaths_ytd",
        "thairsc-road-safety_riverside-old-town_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_silom-sathorn_road_casualty_total_ytd",
        "thairsc-road-safety_silom-sathorn_road_deaths_ytd",
        "thairsc-road-safety_silom-sathorn_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_silom-sathorn_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Silom / Sathorn inherits Bangkok HSS wellness-license support as a hotel-base spa and massage confidence layer."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_sukhumvit_road_casualty_total_ytd",
        "thairsc-road-safety_sukhumvit_road_deaths_ytd",
        "thairsc-road-safety_sukhumvit_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_suvarnabhumi-airport_road_casualty_total_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_deaths_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_road_safety_risk",
      "signal_type": "road_safety_risk",
      "family_name": "Road safety risk",
      "basis": "live_observation",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Road safety burden is low",
      "reason": "315 deaths and 61,592 injuries are attached to this province proxy year to date. Province burden percentile 0",
      "source_count": 1,
      "source_names": [
        "ThaiRSC Road Accident Center"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:00:00.000Z",
      "expires_at": "2026-05-16T11:00:00.000Z",
      "observation_ids": [
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_casualty_total_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_deaths_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_injuries_ytd"
      ],
      "context_ids": [
        "thairsc-national-context"
      ],
      "note": "This is a province-burden signal, not a per-road or per-kilometer crash model."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 21 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Thaiwater WaterQuality API",
        "Pollution Control Department water quality",
        "MWA raw-water salinity",
        "BMA canal water quality"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_aqi_average",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_pm25_average",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_rain_probability",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_temp_min",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_temp_max",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_warning_match_count",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_marine_wind_speed_average",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_temperature",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_humidity",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_wind_speed",
        "tmd-weather-surface_thaiwater-chao-phraya-bangkok_station_rainfall_today",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_status_score",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_thaiwater-chao-phraya-bangkok_water_quality_index_average",
        "namtang-transit-structure_thaiwater-chao-phraya-bangkok_transport_structure_score",
        "noise4thai-ambient-noise_thaiwater-chao-phraya-bangkok_noise_leq_24h_average",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_deaths_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_injuries_ytd",
        "thairsc-road-safety_thaiwater-chao-phraya-bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "entity_path": "/entities/yaowarat-gold-district/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "yaowarat-gold-district_thai_gold_fx_pressure",
      "signal_type": "thai_gold_fx_pressure",
      "family_name": "Thai gold FX pressure",
      "basis": "derived_live",
      "score": 90,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold FX pressure is calm",
      "reason": "Published GTA USD/THB context shows USD/THB around 33.37, intraday quote change -200 THB, and previous-day change -200 THB. GTA spot reference is 4,088. This is pricing context, not investment advice.",
      "source_count": 4,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_yaowarat-gold-district_usd_thb_reference",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_intraday",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_prev_day",
        "gta-gold-reference-price_yaowarat-gold-district_gold_spot_reference"
      ],
      "context_ids": [],
      "note": "Use this to explain why the domestic Thai quote feels calmer or more pressured. It does not replace personal investment or dealer advice."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 91,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_bangkok-mochit-2_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 91,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 25 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "Namtang GTFS",
        "Royal Thai Police station directory and provincial datasets"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_isaan_aqi_average",
        "air4thai-aqi_isaan_pm25_average",
        "tmd-weather-surface_isaan_forecast_rain_probability",
        "tmd-weather-surface_isaan_forecast_temp_min",
        "tmd-weather-surface_isaan_forecast_temp_max",
        "tmd-weather-surface_isaan_forecast_heavy_rain_flag",
        "tmd-weather-surface_isaan_warning_match_count",
        "tmd-weather-surface_isaan_marine_wind_speed_average",
        "tmd-weather-surface_isaan_marine_thunderstorm_flag",
        "tmd-weather-surface_isaan_station_temperature",
        "tmd-weather-surface_isaan_station_humidity",
        "tmd-weather-surface_isaan_station_wind_speed",
        "tmd-weather-surface_isaan_station_rainfall_today",
        "thaiwater-water-quality_isaan_water_quality_status_score",
        "thaiwater-water-quality_isaan_water_dissolved_oxygen_average",
        "thaiwater-water-quality_isaan_water_quality_index_average",
        "mot-bus-terminal-support_isaan_official_bus_terminal_support_score",
        "bks-station-ticket-support_isaan_official_intercity_bus_support_score",
        "bks-timetable-search-surface_isaan_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_isaan_official_transport_complaint_support_score",
        "moph-health-facility-support_isaan_medical_fallback_support_score",
        "dnp-park-tourism-support_isaan_park_access_context_score",
        "thairsc-road-safety_isaan_road_deaths_ytd",
        "thairsc-road-safety_isaan_road_injuries_ytd",
        "thairsc-road-safety_isaan_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 91,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_old-city-chiang-mai_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "entity_path": "/entities/yaowarat-gold-district/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "yaowarat-gold-district_thai_gold_buying_friction",
      "signal_type": "thai_gold_buying_friction",
      "family_name": "Thai gold buying friction",
      "basis": "seed_plus_live",
      "score": 91,
      "severity": "low",
      "tone": "positive",
      "label": "Thai gold buying friction is low",
      "reason": "Yaowarat gold district is the strongest public comparison-shopping anchor because nearby shop density makes spread, receipt, and buyback comparison easier than almost anywhere else in Thailand. Even here, compare workmanship, receipt detail, and buyback terms shop by shop.",
      "source_count": 1,
      "source_names": [
        "Gold Traders Association Thailand gold prices"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T10:05:00.000Z",
      "observation_ids": [
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_sell_baht_weight"
      ],
      "context_ids": [],
      "note": "This is city buying-context friction around the national Thai quote. It is not a local price feed or a shop-quality guarantee."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_air4thai-bangkok-urban-cluster_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Thara Public Park reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ao-nang_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Krabi public station coverage."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ari_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 16 across 1 supporting stations. Ayutthaya Witthayalai School reached AQI 16",
      "source_count": 1,
      "source_names": [
        "Ayutthaya Witthayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ayutthaya_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from public provincial station coverage."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 5 official station or ticket-point name(s) for this entity: สถานีเดินรถอยุธยา, - จุดจอดเจ้าพรหม, สถานีเดินรถวังน้อย, ด่านตรวจการนวนคร (ขาออก), ด่านตรวจการวังน้อย (ขาออก). This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 5,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_ayutthaya_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 7 official station or ticket-point name(s) for this entity: สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่, สถานีบริการขนส่งสาธารณะขนาดเล็ก, สถานีขนส่งผู้โดยสารกรุงเทพ (เอกมัย), สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้บรมราชชนนี), งานบริการน้ำมัน (สายใต้ปิ่นเกล้า), จุดจำหน่ายค่าธรรมเนียม สถานีขนส่งผู้โดยสารกรุงเทพ (สายใต้ปิ่นเกล้า). This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 7,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_taxi_pickup_dropoff_support",
      "signal_type": "taxi_pickup_dropoff_support",
      "family_name": "Taxi pickup and dropoff support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Taxi pickup and dropoff support is strong",
      "reason": "The latest public OTP taxi analytics month currently matches 475 ranked hotspot row(s) for this city-total scope, including stops such as อู่หมอชิต 2, เซ็นทรัลปิ่นเกล้า, เอ็นมาร์คพลาซ่า(น้อมจิตต์), อาคารผู้โดยสาร ชั้น 3, อาคารผู้โดยสาร 1 ชั้น 1 ประตู 6, ตรงข้ามเซ็นทรัลลาดพร้าว. The same published month shows about 84522 citywide passenger trips and 1170 taxis per day in the aggregate OTP GPS series. This is monthly aggregate pickup/dropoff and demand context, not live dispatch, ETA, queue, or raw trip truth.",
      "source_count": 475,
      "source_names": [
        "OTP taxi GPS trip analytics",
        "OTP top taxi pickup and dropoff areas"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.449Z",
      "expires_at": "2026-05-22T11:11:35.449Z",
      "observation_ids": [
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases, rail nodes, terminals, and airport corridors that the public OTP monthly hotspot rankings consistently treat as taxi-active from places where taxi convenience is only assumed from generic city geography."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok-mochit-2_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bophut-fishermans-village_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bts-asok_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_chaweng_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 18 across 2 supporting stations. City Hall, Chiangmai reached AQI 21",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_chiang-mai_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Chiang Mai public station coverage."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_chiang-mai_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_don-mueang-airport_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_donsak-pier_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is strong",
      "reason": "The public MOT passenger-terminal master currently matches 29 official terminal name(s) for this entity: KHON KAEN AIR-CONDITIONED BUS TERMINAL, PHAN DON BUS TERMINAL, BURI RAM BUS TERMINAL, UDON THANI BUS TERMINAL 2, ROI ET BUS TERMINAL, NAKHON RATCHASIMA BUS TERMINAL 2. This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 29,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_isaan_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 27 official station or ticket-point name(s) for this entity: สถานีเดินรถลำปาง, - สถานีเดินรถลำปาง แห่งที่ 2, สถานีเดินรถบุรีรัมย์, - สถานีขนส่งผู้โดยสารจังหวัดบุรีรัมย์, สถานีเดินรถนางรอง, - จุดจอดหนองกี่. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 27,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_isaan_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_kata-karon_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 41 passenger-use berth row(s) for this entity across ภูเก็ต, with longest berth 360.0 m and deepest berth 10.0 m, including codes such as CL001, CL002, CL003, CL004, HKT01, HKT03. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 41,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_kata-karon_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-phangan_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-samui_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Thara Public Park reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_krabi_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Krabi public station coverage."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_lamai_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Environment Agency Section 14, Surat Thani reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_na-thon-pier_aqi_average"
      ],
      "context_ids": [],
      "note": "Uses Surat Thani province stations as a Gulf-island proxy until direct island AQI coverage is integrated."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 18 across 2 supporting stations. City Hall, Chiangmai reached AQI 21",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_nimman_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Chiang Mai public station coverage."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 18 across 2 supporting stations. City Hall, Chiangmai reached AQI 21",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_old-city-chiang-mai_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Chiang Mai public station coverage."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 13 across 1 supporting stations. Natural Resources and Environment Office, Mae Hongson reached AQI 13",
      "source_count": 1,
      "source_names": [
        "Natural Resources and Environment Office, Mae Hongson"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_pai_aqi_average"
      ],
      "context_ids": [],
      "note": "Prefers Pai coverage when present, then falls back to Mae Hong Son province."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_pai_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Pai uses DNP tourism datasets as mountain, cave, and park-access planning context, not live same-day closure truth."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_patong_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 41 passenger-use berth row(s) for this entity across ภูเก็ต, with longest berth 360.0 m and deepest berth 10.0 m, including codes such as CL001, CL002, CL003, CL004, HKT01, HKT03. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 41,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_patong_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_phuket_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_phuket-old-town_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Thara Public Park reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_railay_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Krabi public station coverage."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rassada-pier_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 12 across 1 supporting stations. Municipal Health Center reached AQI 12",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rawai-nai-harn_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Phuket public station coverage."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 41 passenger-use berth row(s) for this entity across ภูเก็ต, with longest berth 360.0 m and deepest berth 10.0 m, including codes such as CL001, CL002, CL003, CL004, HKT01, HKT03. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 41,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_rawai-nai-harn_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_riverside-old-town_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_silom-sathorn_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_sukhumvit_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_sukhumvit_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Sukhumvit inherits Bangkok HSS wellness-license support as a hotel-base spa and massage confidence layer."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_suvarnabhumi-airport_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_aqi_risk",
      "signal_type": "aqi_risk",
      "family_name": "AQI risk",
      "basis": "live_observation",
      "score": 92,
      "severity": "low",
      "tone": "positive",
      "label": "AQI risk is very low",
      "reason": "Average AQI is 19.9 across 81 supporting stations. Odeon Circus reached AQI 33",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_aqi_average"
      ],
      "context_ids": [],
      "note": "Derived from Bangkok public station coverage."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 93,
      "severity": "low",
      "tone": "positive",
      "label": "Airport weather delay risk is low",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 94.0. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_koh-phangan_airport_flight_rules_score",
        "aviationweather-airport-status_koh-phangan_airport_visibility_score",
        "aviationweather-airport-status_koh-phangan_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-phangan_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 93,
      "severity": "low",
      "tone": "positive",
      "label": "Airport weather delay risk is low",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 94.0. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_koh-samui_airport_flight_rules_score",
        "aviationweather-airport-status_koh-samui_airport_visibility_score",
        "aviationweather-airport-status_koh-samui_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-samui_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 93,
      "severity": "low",
      "tone": "positive",
      "label": "Airport weather delay risk is low",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 94.0. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_pattaya-chonburi_airport_flight_rules_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_visibility_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_forecast_disruption_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "entity_path": "/entities/samui-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "samui-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 93,
      "severity": "low",
      "tone": "positive",
      "label": "Airport weather delay risk is low",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 94.0. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_samui-airport_airport_flight_rules_score",
        "aviationweather-airport-status_samui-airport_airport_visibility_score",
        "aviationweather-airport-status_samui-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_samui-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "entity_path": "/entities/u-tapao-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "u-tapao-airport_flight_delay_risk",
      "signal_type": "flight_delay_risk",
      "family_name": "Flight weather and airport delay risk",
      "basis": "live_observation",
      "score": 93,
      "severity": "low",
      "tone": "positive",
      "label": "Airport weather delay risk is low",
      "reason": "Current flight-rules score is 94.0, visibility score is 92.0, and forecast disruption score is 94.0. This is airport weather-operability context, not airline on-time truth.",
      "source_count": 1,
      "source_names": [
        "NOAA Aviation Weather API"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_u-tapao-airport_airport_flight_rules_score",
        "aviationweather-airport-status_u-tapao-airport_airport_visibility_score",
        "aviationweather-airport-status_u-tapao-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_u-tapao-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "This signal should be read as airport weather and operability burden. Airline-specific delays, gates, and cancellations still need different sources."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_ari_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_ayutthaya_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 7 relevant mode(s) and 7 active month(s) for this bangkok-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถตู้โดยสารปรับอากาศ, บขส.และรถเอกชนร่วมบริการ, ขสมก., รถร่วมบริการ(ปรับอากาศ). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 7,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_bangkok-mochit-2_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_bts-asok_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_central-hua-hin-khao-takiab_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_central-pattaya-jomtien_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_chiang-mai_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_hua-hin_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_isaan_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_kanchanaburi_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_koh-phangan_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_koh-samui_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_krabi_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Krabi uses DNP tourism datasets as strong park, island, and protected-area planning context, not live same-day closure truth."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_old-city-chiang-mai_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 8 relevant mode(s) and 7 active month(s) for this regional-overland profile, including รถแท็กซี่, รถจักรยานยนต์รับจ้าง, รถอื่น ๆ, รถโดยสารประจำทาง หมวด 1, รถโดยสารประจำทาง หมวด 2, รถโดยสารประจำทาง หมวด 3. Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, พขร.,พกส. แสดงกิริยาวาจาไม่สุภาพ. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 8,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_pattaya-chonburi_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_pattaya-chonburi_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Pattaya / Chonburi uses public MOPH facility surfaces as strong medical-fallback context."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_riverside-old-town_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_silom-sathorn_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_official_transport_complaint_support",
      "signal_type": "official_transport_complaint_support",
      "family_name": "Official transport complaint support",
      "basis": "live_observation",
      "score": 94,
      "severity": "low",
      "tone": "positive",
      "label": "Official transport complaint support is strong",
      "reason": "The public DLT 1584 fiscal-year 2569 workbook currently shows 11 relevant mode(s) and 7 active month(s) for this bangkok-urban profile, including รถแท็กซี่, รถสามล้อรับจ้าง, รถสี่ล้อเล็กรับจ้าง, รถจักรยานยนต์รับจ้าง, ขสมก., รถร่วมบริการ(ธรรมดา). Current leading complaint reasons include แสดงกิริยาวาจาไม่สุภาพ, ขับรถประมาทน่าหวาดเสียว, ปฏิเสธไม่รับผู้โดยสาร, ไม่หยุดรับ-ส่งผู้โดยสารที่ป้าย. This is official complaint recourse and burden context, not local realtime service quality or dispatch truth.",
      "source_count": 11,
      "source_names": [
        "DLT 1584 public-transport complaints"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.831Z",
      "expires_at": "2026-05-22T11:11:30.831Z",
      "observation_ids": [
        "dlt-1584-complaint-stats_sukhumvit_official_transport_complaint_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with clearer official passenger-protection recourse and broad public-transport complaint coverage from places where transport confidence relies only on structural map layers."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_air4thai-bangkok-urban-cluster_aqi_average",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 6.9 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ao-nang_aqi_average",
        "air4thai-aqi_ao-nang_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ari_aqi_average",
        "air4thai-aqi_ari_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 16 and PM2.5 averages 9.7 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Ayutthaya Witthayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ayutthaya_aqi_average",
        "air4thai-aqi_ayutthaya_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bangkok-mochit-2_aqi_average",
        "air4thai-aqi_bangkok-mochit-2_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bts-asok_aqi_average",
        "air4thai-aqi_bts-asok_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_chaweng_aqi_average",
        "air4thai-aqi_chaweng_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 18 and PM2.5 averages 10.8 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_chiang-mai_aqi_average",
        "air4thai-aqi_chiang-mai_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_don-mueang-airport_aqi_average",
        "air4thai-aqi_don-mueang-airport_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 3 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Hua Hin, Huahin (Blueport), Hua hin. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 3,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_hua-hin_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "entity_path": "/entities/koh-phangan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-phangan_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-phangan_aqi_average",
        "air4thai-aqi_koh-phangan_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 6.9 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_lamai_aqi_average",
        "air4thai-aqi_lamai_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.1 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Environment Agency Section 14, Surat Thani"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 18 and PM2.5 averages 10.8 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_nimman_aqi_average",
        "air4thai-aqi_nimman_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "noise4thai-bangkok-roadside-cluster_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_aqi_average",
        "air4thai-aqi_noise4thai-bangkok-roadside-cluster_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 18 and PM2.5 averages 10.8 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 2,
      "source_names": [
        "City Hall, Chiangmai",
        "Yupparaj Wittayalai School"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_old-city-chiang-mai_aqi_average",
        "air4thai-aqi_old-city-chiang-mai_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "entity_path": "/entities/pai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pai_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 13 and PM2.5 averages 7.7 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Natural Resources and Environment Office, Mae Hongson"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_pai_aqi_average",
        "air4thai-aqi_pai_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_patong_aqi_average",
        "air4thai-aqi_patong_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_phuket-old-town_aqi_average",
        "air4thai-aqi_phuket-old-town_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 6.9 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Thara Public Park"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_railay_aqi_average",
        "air4thai-aqi_railay_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 12 and PM2.5 averages 7.3 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 1,
      "source_names": [
        "Municipal Health Center"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T01:00:00.000Z",
      "expires_at": "2026-06-24T07:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rawai-nai-harn_aqi_average",
        "air4thai-aqi_rawai-nai-harn_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_riverside-old-town_aqi_average",
        "air4thai-aqi_riverside-old-town_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_silom-sathorn_aqi_average",
        "air4thai-aqi_silom-sathorn_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_sukhumvit_aqi_average",
        "air4thai-aqi_sukhumvit_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_suvarnabhumi-airport_aqi_average",
        "air4thai-aqi_suvarnabhumi-airport_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/thaiwater-chao-phraya-bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "thaiwater-chao-phraya-bangkok_outdoor_comfort",
      "signal_type": "outdoor_comfort",
      "family_name": "Outdoor comfort",
      "basis": "live_observation",
      "score": 95,
      "severity": "low",
      "tone": "positive",
      "label": "Outdoor comfort is excellent",
      "reason": "AQI averages 19.9 and PM2.5 averages 11.6 µg/m3. This comfort layer is still air-first, but it now sits alongside live rain, water, noise, and road-risk families.",
      "source_count": 81,
      "source_names": [
        "Bansomdejchaopraya Rajabhat University",
        "Highway NO.3902 km.13 +600",
        "Thai Meteorological Department ",
        "Nonsi Witthaya School",
        "Chulalongkorn Hospital",
        "Thonburi Power Sub-Station",
        "Chokchai Police Station",
        "National Housing Authority Dindaeng"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T08:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_aqi_average",
        "air4thai-aqi_thaiwater-chao-phraya-bangkok_pm25_average"
      ],
      "context_ids": [],
      "note": "Outdoor comfort stays deliberately air-first so users can see how weather and comfort layers disagree instead of hiding them inside one score."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 5 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 5,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_ao-nang_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this hotel area shows 590 mapped stop(s), 16 rail-linked stop(s), 0 airport-link stop(s), and 527 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 590,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ari_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_ari_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_ari_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Ari inherits Bangkok public MOPH medical-fallback support for stay and route decisions."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 6 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Wang Noi, ทางแยกเข้าจ.พระนครศรอยุธยา, Ayutthaya, ม.กรุงเทพฯ. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 6,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_ayutthaya_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this destination shows 4687 mapped stop(s), 204 rail-linked stop(s), 14 airport-link stop(s), and 4345 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 4687,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_bangkok_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 617 relevant official destination option(s) for this entity across 2 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong, BKK (EKKAMAI). This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 617,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_spa_license_support",
      "signal_type": "spa_license_support",
      "family_name": "Spa license support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Spa license support is strong",
      "reason": "Public HSS wellness-license support currently shows 2 official support page(s) and 4 spa, massage, or health-establishment marker(s) behind this traveler anchor. This is official license-lookup context, not live booking, treatment quality, or venue popularity truth.",
      "source_count": 1,
      "source_names": [
        "HSS Health Establishment Directory",
        "HSS Spa Premium"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:35.580Z",
      "expires_at": "2026-05-18T11:11:35.580Z",
      "observation_ids": [
        "hss-spa-license-support_bangkok_spa_license_support_score"
      ],
      "context_ids": [],
      "note": "Bangkok uses public HSS license-lookup and spa-premium surfaces as wellness-license confidence behind spa and massage planning."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_bangkok_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Bangkok uses public MOPH facility surfaces as strong medical-fallback context for travel decisions."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_bus_terminal_support",
      "signal_type": "official_bus_terminal_support",
      "family_name": "Official bus-terminal support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official bus-terminal support is strong",
      "reason": "The public MOT passenger-terminal master currently matches 1 official terminal name(s) for this entity: NORTHERN AND NORTHEASTERN BUS TERMINAL (MO CHIT 2 BUS TERMINAL). This is terminal-master support, not live departure, seat, or booking truth.",
      "source_count": 1,
      "source_names": [
        "MOT passenger bus terminals dataset"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-27T02:15:23.481Z",
      "observation_ids": [
        "mot-bus-terminal-support_bangkok-mochit-2_official_bus_terminal_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate destinations with explicit official overland terminal support from places where bus logic is only inferred from general map coverage."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_intercity_bus_support",
      "signal_type": "official_intercity_bus_support",
      "family_name": "Official intercity-bus support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus support is strong",
      "reason": "The public BKS station and ticket-point dataset currently matches 3 official station or ticket-point name(s) for this entity: สถานีขนส่งผู้โดยสารกรุงเทพ (จตุจักร)/สำนักงานใหญ่, สถานีบริการขนส่งสาธารณะขนาดเล็ก, สถานีเดินรถกำแพงเพชร. This is official intercity-bus support, not live departure, seat, or booking truth.",
      "source_count": 3,
      "source_names": [
        "Transport Co. / BKS station and ticket-point locations"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.824Z",
      "expires_at": "2026-05-22T11:11:43.824Z",
      "observation_ids": [
        "bks-station-ticket-support_bangkok-mochit-2_official_intercity_bus_support_score"
      ],
      "context_ids": [],
      "note": "Use this to distinguish places with explicit official BKS overland support from places where bus logic only comes from general terminal or map layers."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 607 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong, BKK (EKKAMAI). This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 607,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_bangkok-mochit-2_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_bangkok-mochit-2_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this station shows 132 mapped stop(s), 10 rail-linked stop(s), 0 airport-link stop(s), and 118 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 132,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_bts-asok_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_bts-asok_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 12 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including กรมขนส่ง (อาเขต แห่งที่ 3), Chom Thong, Doi Tao, Ban Tha Ton, Fang, A. Hot. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 12,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_chiang-mai_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_chiang-mai_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Chiang Mai uses public MOPH facility surfaces as strong regional medical-fallback context."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_airport_board_surface_support",
      "signal_type": "airport_board_surface_support",
      "family_name": "Airport board-surface support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport board self-check support is strong",
      "reason": "Flight Status exposes passenger-facing arrivals and departures board context, a visible latest-update label, public search modes, and a public browser board surface. The live row query still uses a browser turnstile token, so this supports self-check visibility rather than direct ops truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport flight status"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.678Z",
      "expires_at": "2026-05-16T11:11:26.678Z",
      "observation_ids": [
        "aot-airport-flight-board-surface_chiang-mai-airport_official_airport_board_surface_score"
      ],
      "context_ids": [],
      "note": "Official public Chiang Mai flight-status page with passenger-facing board context. This supports self-serve board visibility, not direct live row ingestion. Served from the current build snapshot to avoid repeated AOT board-page and bundle fetches during refresh."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_airport_environmental_support",
      "signal_type": "airport_environmental_support",
      "family_name": "Airport environmental support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport environmental support is strong",
      "reason": "AOT annual report disclosure snapshot currently shows public airport-operator disclosure, environmental wording, airport-noise wording, community wording, and this airport named in the report. This is official disclosure support, not live measured sound-level truth.",
      "source_count": 1,
      "source_names": [
        "AOT annual report / SET filing"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:25.296Z",
      "expires_at": "2026-06-29T11:11:25.296Z",
      "observation_ids": [
        "aot-airport-environment-support_chiang-mai-airport_official_airport_environmental_support_score"
      ],
      "context_ids": [],
      "note": "This airport gets extra support weight because the SET-hosted AOT annual report names it directly alongside broader operator and environmental disclosure context. That is disclosure support, not live sound-level monitoring."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_chiang-mai-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_airport_transfer_support",
      "signal_type": "airport_transfer_support",
      "family_name": "Airport transfer support",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport transfer support is strong",
      "reason": "Public transport structure around this airport shows 60 mapped stop(s), 4 mode group(s), 8 rail-linked stop(s), 2 airport-link stop(s), and 52 bus-linked stop(s). This is airport-ground-access support, not live airline board or queue truth.",
      "source_count": 60,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_don-mueang-airport_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether the airport side of a route is structurally easy before assuming a cheap flight is low-friction."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_airport_board_surface_support",
      "signal_type": "airport_board_surface_support",
      "family_name": "Airport board-surface support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport board self-check support is strong",
      "reason": "Flight Status exposes passenger-facing arrivals and departures board context, a visible latest-update label, public search modes, and a public browser board surface. The live row query still uses a browser turnstile token, so this supports self-check visibility rather than direct ops truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport flight status"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.678Z",
      "expires_at": "2026-05-16T11:11:26.678Z",
      "observation_ids": [
        "aot-airport-flight-board-surface_don-mueang-airport_official_airport_board_surface_score"
      ],
      "context_ids": [],
      "note": "Official public Don Mueang flight-status page with passenger-facing board context. This supports self-serve board visibility, not direct live row ingestion. Served from the current build snapshot to avoid repeated AOT board-page and bundle fetches during refresh."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_airport_environmental_support",
      "signal_type": "airport_environmental_support",
      "family_name": "Airport environmental support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport environmental support is strong",
      "reason": "AOT annual report disclosure snapshot currently shows public airport-operator disclosure, environmental wording, airport-noise wording, community wording, and this airport named in the report. This is official disclosure support, not live measured sound-level truth.",
      "source_count": 1,
      "source_names": [
        "AOT annual report / SET filing"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:25.296Z",
      "expires_at": "2026-06-29T11:11:25.296Z",
      "observation_ids": [
        "aot-airport-environment-support_don-mueang-airport_official_airport_environmental_support_score"
      ],
      "context_ids": [],
      "note": "This airport gets extra support weight because the SET-hosted AOT annual report names it directly alongside broader operator and environmental disclosure context. That is disclosure support, not live sound-level monitoring."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_don-mueang-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_don-mueang-airport_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Don Mueang airport inherits Bangkok public MOPH medical-fallback support for route decisions."
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "entity_path": "/entities/isaan/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "isaan_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 147 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including KHON KAEN, Phon, CHUM PHAE, UBOL RATANA DAM (Junction), NAM PHONG, BAN PHAI. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 147,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_isaan_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 9 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including KANCHANA BURI, DAN CHADEE SAM ONG, Sungkhlaburi, Patandongrang, SANGKHLABURI, THONG PHA PHUM. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 9,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_kanchanaburi_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_park_access_context",
      "signal_type": "park_access_context",
      "family_name": "Park access context",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Park access context is strong",
      "reason": "Public DNP support currently shows 1 official support page(s), 2 park or tourism marker(s), and 21 dataset marker(s) behind this nature-planning anchor. This is protected-area planning context, not live closure, ranger, capacity, or ticket truth.",
      "source_count": 1,
      "source_names": [
        "DNP Tourism Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:43.688Z",
      "expires_at": "2026-05-20T11:11:43.688Z",
      "observation_ids": [
        "dnp-park-tourism-support_kanchanaburi_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Kanchanaburi uses DNP tourism datasets as strong waterfall, cave, and park-access planning context, not live same-day closure truth."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 5 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 5,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_krabi_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_krabi-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 12 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including กรมขนส่ง (อาเขต แห่งที่ 3), Chom Thong, Doi Tao, Ban Tha Ton, Fang, A. Hot. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 12,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_old-city-chiang-mai_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 4 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Thalang, Phuket, Tha-ruea, Muangmai. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_patong_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 10 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including กม.10(สนามบินอู่ตะเภา), ครัวไท, Chonburi, Pattaya, Sattahip, YAK NONG-PREU. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 10,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_pattaya-chonburi_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 4 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Thalang, Phuket, Tha-ruea, Muangmai. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_phuket_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 41 passenger-use berth row(s) for this entity across ภูเก็ต, with longest berth 360.0 m and deepest berth 10.0 m, including codes such as CL001, CL002, CL003, CL004, HKT01, HKT03. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 41,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_phuket_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_phuket_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Phuket uses public MOPH facility surfaces as strong island-access medical-fallback context."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_airport_board_surface_support",
      "signal_type": "airport_board_surface_support",
      "family_name": "Airport board-surface support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport board self-check support is strong",
      "reason": "Flight Status exposes passenger-facing arrivals and departures board context, a visible latest-update label, public search modes, and a public browser board surface. The live row query still uses a browser turnstile token, so this supports self-check visibility rather than direct ops truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport flight status"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.678Z",
      "expires_at": "2026-05-16T11:11:26.678Z",
      "observation_ids": [
        "aot-airport-flight-board-surface_phuket-airport_official_airport_board_surface_score"
      ],
      "context_ids": [],
      "note": "Official public Phuket flight-status page with passenger-facing board context. This supports self-serve board visibility, not direct live row ingestion. Served from the current build snapshot to avoid repeated AOT board-page and bundle fetches during refresh."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_airport_environmental_support",
      "signal_type": "airport_environmental_support",
      "family_name": "Airport environmental support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport environmental support is strong",
      "reason": "AOT annual report disclosure snapshot currently shows public airport-operator disclosure, environmental wording, airport-noise wording, community wording, and this airport named in the report. This is official disclosure support, not live measured sound-level truth.",
      "source_count": 1,
      "source_names": [
        "AOT annual report / SET filing"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:25.296Z",
      "expires_at": "2026-06-29T11:11:25.296Z",
      "observation_ids": [
        "aot-airport-environment-support_phuket-airport_official_airport_environmental_support_score"
      ],
      "context_ids": [],
      "note": "This airport gets extra support weight because the SET-hosted AOT annual report names it directly alongside broader operator and environmental disclosure context. That is disclosure support, not live sound-level monitoring."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_phuket-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 4 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Thalang, Phuket, Tha-ruea, Muangmai. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_phuket-old-town_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 5 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Krabi, Khlongthom, Ko Lanta, Khaophanom, Nueakhlong. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 5,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_railay_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_official_intercity_bus_search_support",
      "signal_type": "official_intercity_bus_search_support",
      "family_name": "Official intercity-bus search support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official intercity-bus search support is strong",
      "reason": "The public BKS booking/search destination-selector surface currently shows 4 relevant official destination option(s) for this entity across 1 Bangkok-origin search surface(s), including Thalang, Phuket, Tha-ruea, Muangmai. This is official route-search support, not live departures, seats, or booking inventory truth.",
      "source_count": 4,
      "source_names": [
        "Transport Co. / BKS timetable resources"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:48Z",
      "expires_at": "2026-05-18T11:11:48.000Z",
      "observation_ids": [
        "bks-timetable-search-surface_rawai-nai-harn_official_intercity_bus_search_support_score"
      ],
      "context_ids": [],
      "note": "Use this to tell whether a place is actually present in the official BKS public route-search surface from Bangkok, not just near a terminal or ticket office."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this hotel area shows 951 mapped stop(s), 37 rail-linked stop(s), 2 airport-link stop(s), and 849 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 951,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_riverside-old-town_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_riverside-old-town_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_riverside-old-town_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Riverside / Old Town inherits Bangkok public MOPH medical-fallback support for stay and route decisions."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this hotel area shows 678 mapped stop(s), 21 rail-linked stop(s), 0 airport-link stop(s), and 604 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 678,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_silom-sathorn_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_silom-sathorn_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_silom-sathorn_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Silom / Sathorn inherits Bangkok public MOPH medical-fallback support for stay and route decisions."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_rail_feasibility",
      "signal_type": "rail_feasibility",
      "family_name": "Rail feasibility",
      "basis": "derived_live",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Rail feasibility is strong",
      "reason": "Public transport structure around this hotel area shows 678 mapped stop(s), 21 rail-linked stop(s), 0 airport-link stop(s), and 604 bus-linked stop(s). This is rail-support context, not live seat, delay, or operator-disruption truth.",
      "source_count": 678,
      "source_names": [
        "Namtang GTFS"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T19:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_sukhumvit_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether a rail-linked base or route is structurally real before treating train logic as free convenience."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_sukhumvit_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_sukhumvit_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Sukhumvit inherits Bangkok public MOPH medical-fallback support for stay and route decisions."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_airport_ground_service_support",
      "signal_type": "airport_ground_service_support",
      "family_name": "Airport ground-service support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport ground-service support is strong",
      "reason": "Official AOT ground-service pages currently show taxi, Grab, rental, airport rail link, shuttle or bus, pickup-rule detail, 24-hour wording across 3 supporting page(s) and 2 structured location record(s). This is operator-backed airport pickup-rule and ground-service context, not live queue, ETA, or rental inventory truth.",
      "source_count": 3,
      "source_names": [
        "AOT airport ground transport pages",
        "AOT Suvarnabhumi car rental services",
        "AOT Suvarnabhumi public taxi",
        "AOT Suvarnabhumi Grab pickup points"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.060Z",
      "expires_at": "2026-05-16T11:11:26.060Z",
      "observation_ids": [
        "aot-airport-ground-services_suvarnabhumi-airport_official_airport_ground_service_score"
      ],
      "context_ids": [],
      "note": "Use this to judge whether an airport anchor has official taxi, Grab, rental, and pickup-rule support behind it before assuming the ground side of a flight day will be easy."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_airport_board_surface_support",
      "signal_type": "airport_board_surface_support",
      "family_name": "Airport board-surface support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport board self-check support is strong",
      "reason": "Flight Status exposes passenger-facing arrivals and departures board context, a visible latest-update label, public search modes, and a public browser board surface. The live row query still uses a browser turnstile token, so this supports self-check visibility rather than direct ops truth.",
      "source_count": 1,
      "source_names": [
        "AOT airport flight status"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:26.678Z",
      "expires_at": "2026-05-16T11:11:26.678Z",
      "observation_ids": [
        "aot-airport-flight-board-surface_suvarnabhumi-airport_official_airport_board_surface_score"
      ],
      "context_ids": [],
      "note": "Official public Suvarnabhumi flight-status page with passenger-facing board context. This supports self-serve board visibility, not direct live row ingestion. Served from the current build snapshot to avoid repeated AOT board-page and bundle fetches during refresh."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_airport_scale_context",
      "signal_type": "airport_scale_context",
      "family_name": "Airport scale context",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport scale context is very strong",
      "reason": "The latest public AOT fiscal traffic workbook for FY2025 currently shows 28065 total aircraft movements and 4422078 total passengers for this airport. This is official airport scale and resilience context, not live on-time, queue, gate, or inventory truth.",
      "source_count": 1,
      "source_names": [
        "AOT air transport statistics"
      ],
      "freshness_class": "stale",
      "observed_at": "2025-10-16T17:00:00.000Z",
      "expires_at": "2025-11-30T17:00:00.000Z",
      "observation_ids": [
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_scale_score",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_passengers"
      ],
      "context_ids": [],
      "note": "Use this to distinguish major public-airport anchors from thinner airport nodes when route resilience matters, without pretending airport size equals punctuality."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_airport_environmental_support",
      "signal_type": "airport_environmental_support",
      "family_name": "Airport environmental support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Airport environmental support is strong",
      "reason": "AOT annual report disclosure snapshot currently shows public airport-operator disclosure, environmental wording, airport-noise wording, community wording, and this airport named in the report. This is official disclosure support, not live measured sound-level truth.",
      "source_count": 1,
      "source_names": [
        "AOT annual report / SET filing"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:25.296Z",
      "expires_at": "2026-06-29T11:11:25.296Z",
      "observation_ids": [
        "aot-airport-environment-support_suvarnabhumi-airport_official_airport_environmental_support_score"
      ],
      "context_ids": [],
      "note": "This airport gets extra support weight because the SET-hosted AOT annual report names it directly alongside broader operator and environmental disclosure context. That is disclosure support, not live sound-level monitoring."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_official_taxi_oversight_support",
      "signal_type": "official_taxi_oversight_support",
      "family_name": "Official taxi-oversight support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Official taxi-oversight support is strong",
      "reason": "The public DLT GPS passenger pages currently expose 7 passenger-support marker(s), including registered vehicle locator, complaint reporting, passenger-station search, improved search and tracking, improved map display, while the Taxi OK / VIP project page shows 13 public notice download(s) and regulatory markers such as project workflow, taxi communication-center rules, driver-history rules, trip-recorder rules, safety-equipment rules. This is official regulated-taxi oversight support, not live vehicle location, dispatch, ETA, or raw taxi GPS truth.",
      "source_count": 16,
      "source_names": [
        "DLT GPS passenger and complaint app",
        "DLT Taxi OK / Taxi VIP project"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:32.530Z",
      "expires_at": "2026-05-18T11:11:32.530Z",
      "observation_ids": [
        "dlt-gps-taxi-support_suvarnabhumi-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Use this to show where official regulated-taxi oversight, complaint, and station-search support materially improves confidence around city-base, airport-linked, and last-mile movement without confusing it for live taxi operations."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_medical_fallback_support",
      "signal_type": "medical_fallback_support",
      "family_name": "Medical fallback support",
      "basis": "live_observation",
      "score": 96,
      "severity": "low",
      "tone": "positive",
      "label": "Medical fallback support is strong",
      "reason": "Public MOPH and HS4 facility support currently shows 2 official support page(s), 4 hospital or facility marker(s), and 61 dataset/resource marker(s) behind this traveler anchor. This is medical fallback context, not live bed, wait-time, dispatch, or specialist-availability truth.",
      "source_count": 1,
      "source_names": [
        "MOPH Health Facility Datasets"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:37.864Z",
      "expires_at": "2026-05-18T11:11:37.864Z",
      "observation_ids": [
        "moph-health-facility-support_suvarnabhumi-airport_medical_fallback_support_score"
      ],
      "context_ids": [],
      "note": "Suvarnabhumi airport inherits Bangkok public MOPH medical-fallback support for route decisions."
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "entity_path": "/entities/air4thai-bangkok-urban-cluster/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "air4thai-bangkok-urban-cluster_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "2 joined atlas sources and 21 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 2,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "OpenAQ Thailand"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_air4thai-bangkok-urban-cluster_aqi_average",
        "air4thai-aqi_air4thai-bangkok-urban-cluster_pm25_average",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_rain_probability",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_temp_min",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_temp_max",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_forecast_heavy_rain_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_warning_match_count",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_marine_wind_speed_average",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_marine_thunderstorm_flag",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_temperature",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_humidity",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_wind_speed",
        "tmd-weather-surface_air4thai-bangkok-urban-cluster_station_rainfall_today",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_status_score",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_dissolved_oxygen_average",
        "thaiwater-water-quality_air4thai-bangkok-urban-cluster_water_quality_index_average",
        "namtang-transit-structure_air4thai-bangkok-urban-cluster_transport_structure_score",
        "noise4thai-ambient-noise_air4thai-bangkok-urban-cluster_noise_leq_24h_average",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_deaths_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_injuries_ytd",
        "thairsc-road-safety_air4thai-bangkok-urban-cluster_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ao-nang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 32 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "Thai Meteorological Department",
        "Marine Department piers"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ao-nang_aqi_average",
        "air4thai-aqi_ao-nang_pm25_average",
        "tmd-weather-surface_ao-nang_forecast_rain_probability",
        "tmd-weather-surface_ao-nang_forecast_temp_min",
        "tmd-weather-surface_ao-nang_forecast_temp_max",
        "tmd-weather-surface_ao-nang_forecast_heavy_rain_flag",
        "tmd-weather-surface_ao-nang_warning_match_count",
        "tmd-weather-surface_ao-nang_marine_wind_speed_average",
        "tmd-weather-surface_ao-nang_marine_wave_height_average",
        "tmd-weather-surface_ao-nang_marine_wave_height_thunder",
        "tmd-weather-surface_ao-nang_marine_thunderstorm_flag",
        "tmd-weather-surface_ao-nang_station_temperature",
        "tmd-weather-surface_ao-nang_station_humidity",
        "tmd-weather-surface_ao-nang_station_wind_speed",
        "tmd-weather-surface_ao-nang_station_rainfall_today",
        "tmd-shipping-forecast_ao-nang_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang_forecast_heavy_rain_flag",
        "namtang-transit-structure_ao-nang_transport_structure_score",
        "mot-bus-terminal-support_ao-nang_official_bus_terminal_support_score",
        "bks-station-ticket-support_ao-nang_official_intercity_bus_support_score",
        "bks-timetable-search-surface_ao-nang_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_ao-nang_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_ao-nang_official_taxi_oversight_support_score",
        "marine-department-pier-registry_ao-nang_official_pier_support_score",
        "marine-department-berth-status_ao-nang_official_berth_status_surface_score",
        "hss-spa-license-support_ao-nang_spa_license_support_score",
        "thairsc-road-safety_ao-nang_road_deaths_ytd",
        "thairsc-road-safety_ao-nang_road_injuries_ytd",
        "thairsc-road-safety_ao-nang_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "entity_path": "/entities/ao-nang-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ao-nang-pier_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 8 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Marine Department piers",
        "Namtang GTFS",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "tmd-shipping-forecast_ao-nang-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_average",
        "tmd-shipping-forecast_ao-nang-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_ao-nang-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_ao-nang-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_ao-nang-pier_transport_structure_score",
        "marine-department-pier-registry_ao-nang-pier_official_pier_support_score",
        "marine-department-berth-status_ao-nang-pier_official_berth_status_surface_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_ari_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "entity_path": "/entities/ari/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ari_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 31 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "OpenStreetMap Thailand restaurants and cafes"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ari_aqi_average",
        "air4thai-aqi_ari_pm25_average",
        "tmd-weather-surface_ari_forecast_rain_probability",
        "tmd-weather-surface_ari_forecast_temp_min",
        "tmd-weather-surface_ari_forecast_temp_max",
        "tmd-weather-surface_ari_forecast_heavy_rain_flag",
        "tmd-weather-surface_ari_warning_match_count",
        "tmd-weather-surface_ari_marine_wind_speed_average",
        "tmd-weather-surface_ari_marine_thunderstorm_flag",
        "tmd-weather-surface_ari_station_temperature",
        "tmd-weather-surface_ari_station_humidity",
        "tmd-weather-surface_ari_station_wind_speed",
        "tmd-weather-surface_ari_station_rainfall_today",
        "thaiwater-water-quality_ari_water_quality_status_score",
        "thaiwater-water-quality_ari_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ari_water_quality_index_average",
        "namtang-transit-structure_ari_transport_structure_score",
        "bangkok-rapid-transit-official-pages_ari_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_ari_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_ari_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_ari_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_ari_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_ari_exat_expressway_support_score",
        "moph-health-facility-support_ari_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_ari_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_ari_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_ari_civic_star_average",
        "noise4thai-ambient-noise_ari_noise_leq_24h_average",
        "thairsc-road-safety_ari_road_deaths_ytd",
        "thairsc-road-safety_ari_road_injuries_ytd",
        "thairsc-road-safety_ari_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "entity_path": "/entities/ayutthaya/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ayutthaya_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 25 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "SRT timetable data",
        "OpenStreetMap Thailand"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_ayutthaya_aqi_average",
        "air4thai-aqi_ayutthaya_pm25_average",
        "tmd-weather-surface_ayutthaya_forecast_rain_probability",
        "tmd-weather-surface_ayutthaya_forecast_temp_min",
        "tmd-weather-surface_ayutthaya_forecast_temp_max",
        "tmd-weather-surface_ayutthaya_forecast_heavy_rain_flag",
        "tmd-weather-surface_ayutthaya_warning_match_count",
        "tmd-weather-surface_ayutthaya_marine_wind_speed_average",
        "tmd-weather-surface_ayutthaya_marine_thunderstorm_flag",
        "tmd-weather-surface_ayutthaya_station_temperature",
        "tmd-weather-surface_ayutthaya_station_humidity",
        "tmd-weather-surface_ayutthaya_station_wind_speed",
        "tmd-weather-surface_ayutthaya_station_rainfall_today",
        "thaiwater-water-quality_ayutthaya_water_quality_status_score",
        "thaiwater-water-quality_ayutthaya_water_dissolved_oxygen_average",
        "thaiwater-water-quality_ayutthaya_water_quality_index_average",
        "namtang-transit-structure_ayutthaya_transport_structure_score",
        "bks-station-ticket-support_ayutthaya_official_intercity_bus_support_score",
        "bks-timetable-search-surface_ayutthaya_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_ayutthaya_official_transport_complaint_support_score",
        "exat-expressway-support_ayutthaya_exat_expressway_support_score",
        "moph-health-facility-support_ayutthaya_medical_fallback_support_score",
        "thairsc-road-safety_ayutthaya_road_deaths_ytd",
        "thairsc-road-safety_ayutthaya_road_injuries_ytd",
        "thairsc-road-safety_ayutthaya_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "7 joined atlas sources and 48 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 7,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Royal Thai Police station directory and provincial datasets",
        "Tourist Police Bureau"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_bangkok_aqi_average",
        "air4thai-aqi_bangkok_pm25_average",
        "tmd-weather-surface_bangkok_forecast_rain_probability",
        "tmd-weather-surface_bangkok_forecast_temp_min",
        "tmd-weather-surface_bangkok_forecast_temp_max",
        "tmd-weather-surface_bangkok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok_warning_match_count",
        "tmd-weather-surface_bangkok_marine_wind_speed_average",
        "tmd-weather-surface_bangkok_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok_station_temperature",
        "tmd-weather-surface_bangkok_station_humidity",
        "tmd-weather-surface_bangkok_station_wind_speed",
        "tmd-weather-surface_bangkok_station_rainfall_today",
        "aviationweather-airport-status_bangkok_airport_flight_rules_score",
        "aviationweather-airport-status_bangkok_airport_visibility_score",
        "aviationweather-airport-status_bangkok_airport_forecast_disruption_score",
        "aviationweather-airport-status_bangkok_airport_convective_forecast_flag",
        "thaiwater-water-quality_bangkok_water_quality_status_score",
        "thaiwater-water-quality_bangkok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok_water_quality_index_average",
        "namtang-transit-structure_bangkok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok_exat_expressway_support_score",
        "hss-spa-license-support_bangkok_spa_license_support_score",
        "moph-health-facility-support_bangkok_medical_fallback_support_score",
        "gta-gold-reference-price_bangkok_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_bangkok_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_bangkok_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_bangkok_usd_thb_reference",
        "gta-gold-reference-price_bangkok_gold_spot_reference",
        "gta-gold-reference-price_bangkok_gold_price_change_intraday",
        "gta-gold-reference-price_bangkok_gold_price_change_prev_day",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bangkok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bangkok_civic_star_average",
        "noise4thai-ambient-noise_bangkok_noise_leq_24h_average",
        "thairsc-road-safety_bangkok_road_deaths_ytd",
        "thairsc-road-safety_bangkok_road_injuries_ytd",
        "thairsc-road-safety_bangkok_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "entity_path": "/entities/bangkok-mochit-2/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok-mochit-2_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 31 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Namtang GTFS",
        "Ministry of Transport Data Catalog",
        "OpenStreetMap Thailand bus stops and route relations"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_bangkok-mochit-2_aqi_average",
        "air4thai-aqi_bangkok-mochit-2_pm25_average",
        "tmd-weather-surface_bangkok-mochit-2_forecast_rain_probability",
        "tmd-weather-surface_bangkok-mochit-2_forecast_temp_min",
        "tmd-weather-surface_bangkok-mochit-2_forecast_temp_max",
        "tmd-weather-surface_bangkok-mochit-2_forecast_heavy_rain_flag",
        "tmd-weather-surface_bangkok-mochit-2_warning_match_count",
        "tmd-weather-surface_bangkok-mochit-2_marine_wind_speed_average",
        "tmd-weather-surface_bangkok-mochit-2_marine_thunderstorm_flag",
        "tmd-weather-surface_bangkok-mochit-2_station_temperature",
        "tmd-weather-surface_bangkok-mochit-2_station_humidity",
        "tmd-weather-surface_bangkok-mochit-2_station_wind_speed",
        "tmd-weather-surface_bangkok-mochit-2_station_rainfall_today",
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_status_score",
        "thaiwater-water-quality_bangkok-mochit-2_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bangkok-mochit-2_water_quality_index_average",
        "namtang-transit-structure_bangkok-mochit-2_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bangkok-mochit-2_official_rapid_transit_support_score",
        "mot-bus-terminal-support_bangkok-mochit-2_official_bus_terminal_support_score",
        "bks-station-ticket-support_bangkok-mochit-2_official_intercity_bus_support_score",
        "bks-timetable-search-surface_bangkok-mochit-2_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_bangkok-mochit-2_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bangkok-mochit-2_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bangkok-mochit-2_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bangkok-mochit-2_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_bangkok-mochit-2_urban_bus_operator_support_score",
        "exat-expressway-support_bangkok-mochit-2_exat_expressway_support_score",
        "noise4thai-ambient-noise_bangkok-mochit-2_noise_leq_24h_average",
        "thairsc-road-safety_bangkok-mochit-2_road_deaths_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_injuries_ytd",
        "thairsc-road-safety_bangkok-mochit-2_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "entity_path": "/entities/bophut-fishermans-village/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bophut-fishermans-village_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 31 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bophut-fishermans-village_aqi_average",
        "air4thai-aqi_bophut-fishermans-village_pm25_average",
        "tmd-weather-surface_bophut-fishermans-village_forecast_rain_probability",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_min",
        "tmd-weather-surface_bophut-fishermans-village_forecast_temp_max",
        "tmd-weather-surface_bophut-fishermans-village_forecast_heavy_rain_flag",
        "tmd-weather-surface_bophut-fishermans-village_warning_match_count",
        "tmd-weather-surface_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_average",
        "tmd-weather-surface_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-weather-surface_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-weather-surface_bophut-fishermans-village_station_temperature",
        "tmd-weather-surface_bophut-fishermans-village_station_humidity",
        "tmd-weather-surface_bophut-fishermans-village_station_wind_speed",
        "tmd-weather-surface_bophut-fishermans-village_station_rainfall_today",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wind_speed_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_average",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_wave_height_thunder",
        "tmd-shipping-forecast_bophut-fishermans-village_marine_thunderstorm_flag",
        "tmd-shipping-forecast_bophut-fishermans-village_forecast_heavy_rain_flag",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_status_score",
        "thaiwater-water-quality_bophut-fishermans-village_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bophut-fishermans-village_water_quality_index_average",
        "dlt-1584-complaint-stats_bophut-fishermans-village_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bophut-fishermans-village_official_taxi_oversight_support_score",
        "marine-department-pier-registry_bophut-fishermans-village_official_pier_support_score",
        "marine-department-berth-status_bophut-fishermans-village_official_berth_status_surface_score",
        "hss-spa-license-support_bophut-fishermans-village_spa_license_support_score",
        "thairsc-road-safety_bophut-fishermans-village_road_deaths_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_injuries_ytd",
        "thairsc-road-safety_bophut-fishermans-village_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 30 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "Namtang GTFS",
        "OpenStreetMap Thailand",
        "Google Places hotels"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_bts-asok_aqi_average",
        "air4thai-aqi_bts-asok_pm25_average",
        "tmd-weather-surface_bts-asok_forecast_rain_probability",
        "tmd-weather-surface_bts-asok_forecast_temp_min",
        "tmd-weather-surface_bts-asok_forecast_temp_max",
        "tmd-weather-surface_bts-asok_forecast_heavy_rain_flag",
        "tmd-weather-surface_bts-asok_warning_match_count",
        "tmd-weather-surface_bts-asok_marine_wind_speed_average",
        "tmd-weather-surface_bts-asok_marine_thunderstorm_flag",
        "tmd-weather-surface_bts-asok_station_temperature",
        "tmd-weather-surface_bts-asok_station_humidity",
        "tmd-weather-surface_bts-asok_station_wind_speed",
        "tmd-weather-surface_bts-asok_station_rainfall_today",
        "thaiwater-water-quality_bts-asok_water_quality_status_score",
        "thaiwater-water-quality_bts-asok_water_dissolved_oxygen_average",
        "thaiwater-water-quality_bts-asok_water_quality_index_average",
        "namtang-transit-structure_bts-asok_transport_structure_score",
        "bangkok-rapid-transit-official-pages_bts-asok_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_bts-asok_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_bts-asok_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_bts-asok_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_bts-asok_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_bts-asok_exat_expressway_support_score",
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_bts-asok_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_bts-asok_civic_star_average",
        "noise4thai-ambient-noise_bts-asok_noise_leq_24h_average",
        "thairsc-road-safety_bts-asok_road_deaths_ytd",
        "thairsc-road-safety_bts-asok_road_injuries_ytd",
        "thairsc-road-safety_bts-asok_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-hua-hin-khao-takiab/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-hua-hin-khao-takiab_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 6 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "SRT timetable data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "namtang-transit-structure_central-hua-hin-khao-takiab_transport_structure_score",
        "mot-bus-terminal-support_central-hua-hin-khao-takiab_official_bus_terminal_support_score",
        "bks-station-ticket-support_central-hua-hin-khao-takiab_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_central-hua-hin-khao-takiab_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_central-hua-hin-khao-takiab_official_taxi_oversight_support_score",
        "marine-department-pier-registry_central-hua-hin-khao-takiab_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "entity_path": "/entities/central-pattaya-jomtien/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "central-pattaya-jomtien_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 6 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues",
        "OpenStreetMap Thailand restaurants and cafes"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "namtang-transit-structure_central-pattaya-jomtien_transport_structure_score",
        "mot-bus-terminal-support_central-pattaya-jomtien_official_bus_terminal_support_score",
        "bks-station-ticket-support_central-pattaya-jomtien_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_central-pattaya-jomtien_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_central-pattaya-jomtien_official_taxi_oversight_support_score",
        "marine-department-pier-registry_central-pattaya-jomtien_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chanthaburi",
      "entity_name": "Chanthaburi",
      "entity_type": "destination",
      "entity_path": "/entities/chanthaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chanthaburi_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Chanthaburi gem market public tourism and map sources",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chanthaburi_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "entity_path": "/entities/chaweng/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chaweng_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 33 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_chaweng_aqi_average",
        "air4thai-aqi_chaweng_pm25_average",
        "tmd-weather-surface_chaweng_forecast_rain_probability",
        "tmd-weather-surface_chaweng_forecast_temp_min",
        "tmd-weather-surface_chaweng_forecast_temp_max",
        "tmd-weather-surface_chaweng_forecast_heavy_rain_flag",
        "tmd-weather-surface_chaweng_warning_match_count",
        "tmd-weather-surface_chaweng_marine_wind_speed_average",
        "tmd-weather-surface_chaweng_marine_wave_height_average",
        "tmd-weather-surface_chaweng_marine_wave_height_thunder",
        "tmd-weather-surface_chaweng_marine_thunderstorm_flag",
        "tmd-weather-surface_chaweng_station_temperature",
        "tmd-weather-surface_chaweng_station_humidity",
        "tmd-weather-surface_chaweng_station_wind_speed",
        "tmd-weather-surface_chaweng_station_rainfall_today",
        "tmd-shipping-forecast_chaweng_marine_wind_speed_average",
        "tmd-shipping-forecast_chaweng_marine_wave_height_average",
        "tmd-shipping-forecast_chaweng_marine_wave_height_thunder",
        "tmd-shipping-forecast_chaweng_marine_thunderstorm_flag",
        "tmd-shipping-forecast_chaweng_forecast_heavy_rain_flag",
        "thaiwater-water-quality_chaweng_water_quality_status_score",
        "thaiwater-water-quality_chaweng_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chaweng_water_quality_index_average",
        "mot-bus-terminal-support_chaweng_official_bus_terminal_support_score",
        "bks-station-ticket-support_chaweng_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_chaweng_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_chaweng_official_taxi_oversight_support_score",
        "marine-department-pier-registry_chaweng_official_pier_support_score",
        "marine-department-berth-status_chaweng_official_berth_status_surface_score",
        "hss-spa-license-support_chaweng_spa_license_support_score",
        "thairsc-road-safety_chaweng_road_deaths_ytd",
        "thairsc-road-safety_chaweng_road_injuries_ytd",
        "thairsc-road-safety_chaweng_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 41 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 6,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_chiang-mai_aqi_average",
        "air4thai-aqi_chiang-mai_pm25_average",
        "tmd-weather-surface_chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_chiang-mai_forecast_temp_min",
        "tmd-weather-surface_chiang-mai_forecast_temp_max",
        "tmd-weather-surface_chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_chiang-mai_warning_match_count",
        "tmd-weather-surface_chiang-mai_marine_wind_speed_average",
        "tmd-weather-surface_chiang-mai_marine_thunderstorm_flag",
        "tmd-weather-surface_chiang-mai_station_temperature",
        "tmd-weather-surface_chiang-mai_station_humidity",
        "tmd-weather-surface_chiang-mai_station_wind_speed",
        "tmd-weather-surface_chiang-mai_station_rainfall_today",
        "aviationweather-airport-status_chiang-mai_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai_airport_convective_forecast_flag",
        "thaiwater-water-quality_chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_chiang-mai_water_quality_index_average",
        "namtang-transit-structure_chiang-mai_transport_structure_score",
        "mot-bus-terminal-support_chiang-mai_official_bus_terminal_support_score",
        "bks-station-ticket-support_chiang-mai_official_intercity_bus_support_score",
        "bks-timetable-search-surface_chiang-mai_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_chiang-mai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_chiang-mai_official_taxi_oversight_support_score",
        "hss-spa-license-support_chiang-mai_spa_license_support_score",
        "moph-health-facility-support_chiang-mai_medical_fallback_support_score",
        "dnp-park-tourism-support_chiang-mai_park_access_context_score",
        "gta-gold-reference-price_chiang-mai_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai_gold_spot_reference",
        "gta-gold-reference-price_chiang-mai_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai_gold_price_change_prev_day",
        "noise4thai-ambient-noise_chiang-mai_noise_leq_24h_average",
        "thairsc-road-safety_chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_chiang-mai_road_injuries_ytd",
        "thairsc-road-safety_chiang-mai_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "entity_path": "/entities/chiang-mai-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 12 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "Department of Airports flight info",
        "AOT Chiang Mai car rental services"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_chiang-mai-airport_airport_flight_rules_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_visibility_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_chiang-mai-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_chiang-mai-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_chiang-mai-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_chiang-mai-airport_official_airport_scale_score",
        "aot-airport-environment-support_chiang-mai-airport_official_airport_environmental_support_score",
        "namtang-transit-structure_chiang-mai-airport_transport_structure_score",
        "dlt-gps-taxi-support_chiang-mai-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "entity_path": "/entities/chiang-mai-gold-shopping/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-mai-gold-shopping_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 9 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-mai-gold-shopping_transport_structure_score",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_chiang-mai-gold-shopping_usd_thb_reference",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_spot_reference",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_intraday",
        "gta-gold-reference-price_chiang-mai-gold-shopping_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "chiang-rai",
      "entity_name": "Chiang Rai",
      "entity_type": "destination",
      "entity_path": "/entities/chiang-rai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "chiang-rai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "8 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 8,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_chiang-rai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "entity_path": "/entities/don-mueang-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "don-mueang-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 36 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "AOT airport flight status",
        "AOT air transport statistics",
        "AOT Don Mueang taxi meter service",
        "AOT Don Mueang Grab pickup points"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_don-mueang-airport_aqi_average",
        "air4thai-aqi_don-mueang-airport_pm25_average",
        "tmd-weather-surface_don-mueang-airport_forecast_rain_probability",
        "tmd-weather-surface_don-mueang-airport_forecast_temp_min",
        "tmd-weather-surface_don-mueang-airport_forecast_temp_max",
        "tmd-weather-surface_don-mueang-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_don-mueang-airport_warning_match_count",
        "tmd-weather-surface_don-mueang-airport_marine_wind_speed_average",
        "tmd-weather-surface_don-mueang-airport_marine_thunderstorm_flag",
        "tmd-weather-surface_don-mueang-airport_station_temperature",
        "tmd-weather-surface_don-mueang-airport_station_humidity",
        "tmd-weather-surface_don-mueang-airport_station_wind_speed",
        "tmd-weather-surface_don-mueang-airport_station_rainfall_today",
        "aviationweather-airport-status_don-mueang-airport_airport_flight_rules_score",
        "aviationweather-airport-status_don-mueang-airport_airport_visibility_score",
        "aviationweather-airport-status_don-mueang-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_don-mueang-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_don-mueang-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_don-mueang-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_don-mueang-airport_official_airport_scale_score",
        "aot-airport-environment-support_don-mueang-airport_official_airport_environmental_support_score",
        "thaiwater-water-quality_don-mueang-airport_water_quality_status_score",
        "thaiwater-water-quality_don-mueang-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_don-mueang-airport_water_quality_index_average",
        "namtang-transit-structure_don-mueang-airport_transport_structure_score",
        "dlt-gps-taxi-support_don-mueang-airport_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_don-mueang-airport_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_don-mueang-airport_taxi_pickup_dropoff_support_score",
        "exat-expressway-support_don-mueang-airport_exat_expressway_support_score",
        "moph-health-facility-support_don-mueang-airport_medical_fallback_support_score",
        "noise4thai-ambient-noise_don-mueang-airport_noise_leq_24h_average",
        "thairsc-road-safety_don-mueang-airport_road_deaths_ytd",
        "thairsc-road-safety_don-mueang-airport_road_injuries_ytd",
        "thairsc-road-safety_don-mueang-airport_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 29 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_donsak-pier_aqi_average",
        "air4thai-aqi_donsak-pier_pm25_average",
        "tmd-weather-surface_donsak-pier_forecast_rain_probability",
        "tmd-weather-surface_donsak-pier_forecast_temp_min",
        "tmd-weather-surface_donsak-pier_forecast_temp_max",
        "tmd-weather-surface_donsak-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_donsak-pier_warning_match_count",
        "tmd-weather-surface_donsak-pier_marine_wind_speed_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_average",
        "tmd-weather-surface_donsak-pier_marine_wave_height_thunder",
        "tmd-weather-surface_donsak-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_donsak-pier_station_temperature",
        "tmd-weather-surface_donsak-pier_station_humidity",
        "tmd-weather-surface_donsak-pier_station_wind_speed",
        "tmd-weather-surface_donsak-pier_station_rainfall_today",
        "tmd-shipping-forecast_donsak-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_average",
        "tmd-shipping-forecast_donsak-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_donsak-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_donsak-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_donsak-pier_water_quality_status_score",
        "thaiwater-water-quality_donsak-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_donsak-pier_water_quality_index_average",
        "namtang-transit-structure_donsak-pier_transport_structure_score",
        "marine-department-pier-registry_donsak-pier_official_pier_support_score",
        "marine-department-berth-status_donsak-pier_official_berth_status_surface_score",
        "thairsc-road-safety_donsak-pier_road_deaths_ytd",
        "thairsc-road-safety_donsak-pier_road_injuries_ytd",
        "thairsc-road-safety_donsak-pier_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "entity_path": "/entities/hat-yai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hat-yai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "7 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 7,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Tourist Police Bureau"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_hat-yai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "entity_path": "/entities/hua-hin/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "hua-hin_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 11 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 6,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "SRT timetable data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "namtang-transit-structure_hua-hin_transport_structure_score",
        "mot-bus-terminal-support_hua-hin_official_bus_terminal_support_score",
        "bks-station-ticket-support_hua-hin_official_intercity_bus_support_score",
        "bks-timetable-search-surface_hua-hin_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_hua-hin_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_hua-hin_official_taxi_oversight_support_score",
        "marine-department-pier-registry_hua-hin_official_pier_support_score",
        "exat-expressway-support_hua-hin_exat_expressway_support_score",
        "hss-spa-license-support_hua-hin_spa_license_support_score",
        "moph-health-facility-support_hua-hin_medical_fallback_support_score",
        "dnp-park-tourism-support_hua-hin_park_access_context_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "entity_path": "/entities/kanchanaburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kanchanaburi_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 27 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Thai Meteorological Department",
        "Air4Thai / Pollution Control Department",
        "OpenStreetMap Thailand",
        "SRT timetable data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_kanchanaburi_aqi_average",
        "air4thai-aqi_kanchanaburi_pm25_average",
        "tmd-weather-surface_kanchanaburi_forecast_rain_probability",
        "tmd-weather-surface_kanchanaburi_forecast_temp_min",
        "tmd-weather-surface_kanchanaburi_forecast_temp_max",
        "tmd-weather-surface_kanchanaburi_forecast_heavy_rain_flag",
        "tmd-weather-surface_kanchanaburi_warning_match_count",
        "tmd-weather-surface_kanchanaburi_marine_wind_speed_average",
        "tmd-weather-surface_kanchanaburi_marine_thunderstorm_flag",
        "tmd-weather-surface_kanchanaburi_station_temperature",
        "tmd-weather-surface_kanchanaburi_station_humidity",
        "tmd-weather-surface_kanchanaburi_station_wind_speed",
        "tmd-weather-surface_kanchanaburi_station_rainfall_today",
        "thaiwater-water-quality_kanchanaburi_water_quality_status_score",
        "thaiwater-water-quality_kanchanaburi_water_dissolved_oxygen_average",
        "thaiwater-water-quality_kanchanaburi_water_quality_index_average",
        "namtang-transit-structure_kanchanaburi_transport_structure_score",
        "mot-bus-terminal-support_kanchanaburi_official_bus_terminal_support_score",
        "bks-station-ticket-support_kanchanaburi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_kanchanaburi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_kanchanaburi_official_transport_complaint_support_score",
        "exat-expressway-support_kanchanaburi_exat_expressway_support_score",
        "moph-health-facility-support_kanchanaburi_medical_fallback_support_score",
        "dnp-park-tourism-support_kanchanaburi_park_access_context_score",
        "thairsc-road-safety_kanchanaburi_road_deaths_ytd",
        "thairsc-road-safety_kanchanaburi_road_injuries_ytd",
        "thairsc-road-safety_kanchanaburi_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "entity_path": "/entities/kata-karon/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "kata-karon_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 29 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "TAT accommodation data",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_kata-karon_aqi_average",
        "air4thai-aqi_kata-karon_pm25_average",
        "tmd-weather-surface_kata-karon_forecast_rain_probability",
        "tmd-weather-surface_kata-karon_forecast_temp_min",
        "tmd-weather-surface_kata-karon_forecast_temp_max",
        "tmd-weather-surface_kata-karon_forecast_heavy_rain_flag",
        "tmd-weather-surface_kata-karon_warning_match_count",
        "tmd-weather-surface_kata-karon_marine_wind_speed_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_average",
        "tmd-weather-surface_kata-karon_marine_wave_height_thunder",
        "tmd-weather-surface_kata-karon_marine_thunderstorm_flag",
        "tmd-weather-surface_kata-karon_station_temperature",
        "tmd-weather-surface_kata-karon_station_humidity",
        "tmd-weather-surface_kata-karon_station_wind_speed",
        "tmd-weather-surface_kata-karon_station_rainfall_today",
        "tmd-shipping-forecast_kata-karon_marine_wind_speed_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_average",
        "tmd-shipping-forecast_kata-karon_marine_wave_height_thunder",
        "tmd-shipping-forecast_kata-karon_marine_thunderstorm_flag",
        "tmd-shipping-forecast_kata-karon_forecast_heavy_rain_flag",
        "namtang-transit-structure_kata-karon_transport_structure_score",
        "dlt-1584-complaint-stats_kata-karon_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_kata-karon_official_taxi_oversight_support_score",
        "marine-department-pier-registry_kata-karon_official_pier_support_score",
        "hss-spa-license-support_kata-karon_spa_license_support_score",
        "noise4thai-ambient-noise_kata-karon_noise_leq_24h_average",
        "thairsc-road-safety_kata-karon_road_deaths_ytd",
        "thairsc-road-safety_kata-karon_road_injuries_ytd",
        "thairsc-road-safety_kata-karon_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "entity_path": "/entities/koh-samui/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "koh-samui_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 39 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Marine Department piers",
        "AOT air transport statistics"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_koh-samui_aqi_average",
        "air4thai-aqi_koh-samui_pm25_average",
        "tmd-weather-surface_koh-samui_forecast_rain_probability",
        "tmd-weather-surface_koh-samui_forecast_temp_min",
        "tmd-weather-surface_koh-samui_forecast_temp_max",
        "tmd-weather-surface_koh-samui_forecast_heavy_rain_flag",
        "tmd-weather-surface_koh-samui_warning_match_count",
        "tmd-weather-surface_koh-samui_marine_wind_speed_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_average",
        "tmd-weather-surface_koh-samui_marine_wave_height_thunder",
        "tmd-weather-surface_koh-samui_marine_thunderstorm_flag",
        "tmd-weather-surface_koh-samui_station_temperature",
        "tmd-weather-surface_koh-samui_station_humidity",
        "tmd-weather-surface_koh-samui_station_wind_speed",
        "tmd-weather-surface_koh-samui_station_rainfall_today",
        "tmd-shipping-forecast_koh-samui_marine_wind_speed_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_average",
        "tmd-shipping-forecast_koh-samui_marine_wave_height_thunder",
        "tmd-shipping-forecast_koh-samui_marine_thunderstorm_flag",
        "tmd-shipping-forecast_koh-samui_forecast_heavy_rain_flag",
        "aviationweather-airport-status_koh-samui_airport_flight_rules_score",
        "aviationweather-airport-status_koh-samui_airport_visibility_score",
        "aviationweather-airport-status_koh-samui_airport_forecast_disruption_score",
        "aviationweather-airport-status_koh-samui_airport_convective_forecast_flag",
        "thaiwater-water-quality_koh-samui_water_quality_status_score",
        "thaiwater-water-quality_koh-samui_water_dissolved_oxygen_average",
        "thaiwater-water-quality_koh-samui_water_quality_index_average",
        "namtang-transit-structure_koh-samui_transport_structure_score",
        "mot-bus-terminal-support_koh-samui_official_bus_terminal_support_score",
        "bks-station-ticket-support_koh-samui_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_koh-samui_official_transport_complaint_support_score",
        "marine-department-pier-registry_koh-samui_official_pier_support_score",
        "marine-department-berth-status_koh-samui_official_berth_status_surface_score",
        "hss-spa-license-support_koh-samui_spa_license_support_score",
        "moph-health-facility-support_koh-samui_medical_fallback_support_score",
        "dnp-park-tourism-support_koh-samui_park_access_context_score",
        "thairsc-road-safety_koh-samui_road_deaths_ytd",
        "thairsc-road-safety_koh-samui_road_injuries_ytd",
        "thairsc-road-safety_koh-samui_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "entity_path": "/entities/krabi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 38 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "Thai Meteorological Department",
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_krabi_aqi_average",
        "air4thai-aqi_krabi_pm25_average",
        "tmd-weather-surface_krabi_forecast_rain_probability",
        "tmd-weather-surface_krabi_forecast_temp_min",
        "tmd-weather-surface_krabi_forecast_temp_max",
        "tmd-weather-surface_krabi_forecast_heavy_rain_flag",
        "tmd-weather-surface_krabi_warning_match_count",
        "tmd-weather-surface_krabi_marine_wind_speed_average",
        "tmd-weather-surface_krabi_marine_wave_height_average",
        "tmd-weather-surface_krabi_marine_wave_height_thunder",
        "tmd-weather-surface_krabi_marine_thunderstorm_flag",
        "tmd-weather-surface_krabi_station_temperature",
        "tmd-weather-surface_krabi_station_humidity",
        "tmd-weather-surface_krabi_station_wind_speed",
        "tmd-weather-surface_krabi_station_rainfall_today",
        "tmd-shipping-forecast_krabi_marine_wind_speed_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_average",
        "tmd-shipping-forecast_krabi_marine_wave_height_thunder",
        "tmd-shipping-forecast_krabi_marine_thunderstorm_flag",
        "tmd-shipping-forecast_krabi_forecast_heavy_rain_flag",
        "aviationweather-airport-status_krabi_airport_flight_rules_score",
        "aviationweather-airport-status_krabi_airport_visibility_score",
        "aviationweather-airport-status_krabi_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi_transport_structure_score",
        "mot-bus-terminal-support_krabi_official_bus_terminal_support_score",
        "bks-station-ticket-support_krabi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_krabi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_krabi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_krabi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_krabi_official_pier_support_score",
        "marine-department-berth-status_krabi_official_berth_status_surface_score",
        "hss-spa-license-support_krabi_spa_license_support_score",
        "moph-health-facility-support_krabi_medical_fallback_support_score",
        "dnp-park-tourism-support_krabi_park_access_context_score",
        "thairsc-road-safety_krabi_road_deaths_ytd",
        "thairsc-road-safety_krabi_road_injuries_ytd",
        "thairsc-road-safety_krabi_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/krabi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "krabi-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 6 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "Department of Airports flight info"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_krabi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_krabi-airport_airport_visibility_score",
        "aviationweather-airport-status_krabi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_krabi-airport_airport_convective_forecast_flag",
        "namtang-transit-structure_krabi-airport_transport_structure_score",
        "dlt-gps-taxi-support_krabi-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/lamai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "lamai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 33 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_lamai_aqi_average",
        "air4thai-aqi_lamai_pm25_average",
        "tmd-weather-surface_lamai_forecast_rain_probability",
        "tmd-weather-surface_lamai_forecast_temp_min",
        "tmd-weather-surface_lamai_forecast_temp_max",
        "tmd-weather-surface_lamai_forecast_heavy_rain_flag",
        "tmd-weather-surface_lamai_warning_match_count",
        "tmd-weather-surface_lamai_marine_wind_speed_average",
        "tmd-weather-surface_lamai_marine_wave_height_average",
        "tmd-weather-surface_lamai_marine_wave_height_thunder",
        "tmd-weather-surface_lamai_marine_thunderstorm_flag",
        "tmd-weather-surface_lamai_station_temperature",
        "tmd-weather-surface_lamai_station_humidity",
        "tmd-weather-surface_lamai_station_wind_speed",
        "tmd-weather-surface_lamai_station_rainfall_today",
        "tmd-shipping-forecast_lamai_marine_wind_speed_average",
        "tmd-shipping-forecast_lamai_marine_wave_height_average",
        "tmd-shipping-forecast_lamai_marine_wave_height_thunder",
        "tmd-shipping-forecast_lamai_marine_thunderstorm_flag",
        "tmd-shipping-forecast_lamai_forecast_heavy_rain_flag",
        "thaiwater-water-quality_lamai_water_quality_status_score",
        "thaiwater-water-quality_lamai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_lamai_water_quality_index_average",
        "mot-bus-terminal-support_lamai_official_bus_terminal_support_score",
        "bks-station-ticket-support_lamai_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_lamai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_lamai_official_taxi_oversight_support_score",
        "marine-department-pier-registry_lamai_official_pier_support_score",
        "marine-department-berth-status_lamai_official_berth_status_surface_score",
        "hss-spa-license-support_lamai_spa_license_support_score",
        "thairsc-road-safety_lamai_road_deaths_ytd",
        "thairsc-road-safety_lamai_road_injuries_ytd",
        "thairsc-road-safety_lamai_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 29 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_na-thon-pier_aqi_average",
        "air4thai-aqi_na-thon-pier_pm25_average",
        "tmd-weather-surface_na-thon-pier_forecast_rain_probability",
        "tmd-weather-surface_na-thon-pier_forecast_temp_min",
        "tmd-weather-surface_na-thon-pier_forecast_temp_max",
        "tmd-weather-surface_na-thon-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_na-thon-pier_warning_match_count",
        "tmd-weather-surface_na-thon-pier_marine_wind_speed_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_average",
        "tmd-weather-surface_na-thon-pier_marine_wave_height_thunder",
        "tmd-weather-surface_na-thon-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_na-thon-pier_station_temperature",
        "tmd-weather-surface_na-thon-pier_station_humidity",
        "tmd-weather-surface_na-thon-pier_station_wind_speed",
        "tmd-weather-surface_na-thon-pier_station_rainfall_today",
        "tmd-shipping-forecast_na-thon-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_average",
        "tmd-shipping-forecast_na-thon-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_na-thon-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_na-thon-pier_forecast_heavy_rain_flag",
        "thaiwater-water-quality_na-thon-pier_water_quality_status_score",
        "thaiwater-water-quality_na-thon-pier_water_dissolved_oxygen_average",
        "thaiwater-water-quality_na-thon-pier_water_quality_index_average",
        "namtang-transit-structure_na-thon-pier_transport_structure_score",
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score",
        "marine-department-berth-status_na-thon-pier_official_berth_status_surface_score",
        "thairsc-road-safety_na-thon-pier_road_deaths_ytd",
        "thairsc-road-safety_na-thon-pier_road_injuries_ytd",
        "thairsc-road-safety_na-thon-pier_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "entity_path": "/entities/nakhon-ratchasima/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nakhon-ratchasima_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "8 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 8,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nakhon-ratchasima_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "entity_path": "/entities/nimman/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nimman_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 22 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Air4Thai / Pollution Control Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_nimman_aqi_average",
        "air4thai-aqi_nimman_pm25_average",
        "tmd-weather-surface_nimman_forecast_rain_probability",
        "tmd-weather-surface_nimman_forecast_temp_min",
        "tmd-weather-surface_nimman_forecast_temp_max",
        "tmd-weather-surface_nimman_forecast_heavy_rain_flag",
        "tmd-weather-surface_nimman_warning_match_count",
        "tmd-weather-surface_nimman_marine_wind_speed_average",
        "tmd-weather-surface_nimman_marine_thunderstorm_flag",
        "tmd-weather-surface_nimman_station_temperature",
        "tmd-weather-surface_nimman_station_humidity",
        "tmd-weather-surface_nimman_station_wind_speed",
        "tmd-weather-surface_nimman_station_rainfall_today",
        "thaiwater-water-quality_nimman_water_quality_status_score",
        "thaiwater-water-quality_nimman_water_dissolved_oxygen_average",
        "thaiwater-water-quality_nimman_water_quality_index_average",
        "namtang-transit-structure_nimman_transport_structure_score",
        "hss-spa-license-support_nimman_spa_license_support_score",
        "noise4thai-ambient-noise_nimman_noise_leq_24h_average",
        "thairsc-road-safety_nimman_road_deaths_ytd",
        "thairsc-road-safety_nimman_road_injuries_ytd",
        "thairsc-road-safety_nimman_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "entity_path": "/entities/nong-khai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "nong-khai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "8 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 8,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_nong-khai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "entity_path": "/entities/old-city-chiang-mai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "old-city-chiang-mai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 25 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Air4Thai / Pollution Control Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_old-city-chiang-mai_aqi_average",
        "air4thai-aqi_old-city-chiang-mai_pm25_average",
        "tmd-weather-surface_old-city-chiang-mai_forecast_rain_probability",
        "tmd-weather-surface_old-city-chiang-mai_forecast_temp_min",
        "tmd-weather-surface_old-city-chiang-mai_forecast_temp_max",
        "tmd-weather-surface_old-city-chiang-mai_forecast_heavy_rain_flag",
        "tmd-weather-surface_old-city-chiang-mai_warning_match_count",
        "tmd-weather-surface_old-city-chiang-mai_marine_wind_speed_average",
        "tmd-weather-surface_old-city-chiang-mai_marine_thunderstorm_flag",
        "tmd-weather-surface_old-city-chiang-mai_station_temperature",
        "tmd-weather-surface_old-city-chiang-mai_station_humidity",
        "tmd-weather-surface_old-city-chiang-mai_station_wind_speed",
        "tmd-weather-surface_old-city-chiang-mai_station_rainfall_today",
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_status_score",
        "thaiwater-water-quality_old-city-chiang-mai_water_dissolved_oxygen_average",
        "thaiwater-water-quality_old-city-chiang-mai_water_quality_index_average",
        "mot-bus-terminal-support_old-city-chiang-mai_official_bus_terminal_support_score",
        "bks-station-ticket-support_old-city-chiang-mai_official_intercity_bus_support_score",
        "bks-timetable-search-surface_old-city-chiang-mai_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_old-city-chiang-mai_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_old-city-chiang-mai_official_taxi_oversight_support_score",
        "noise4thai-ambient-noise_old-city-chiang-mai_noise_leq_24h_average",
        "thairsc-road-safety_old-city-chiang-mai_road_deaths_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_injuries_ytd",
        "thairsc-road-safety_old-city-chiang-mai_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "entity_path": "/entities/patong/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "patong_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 33 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand nightlife venues",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_patong_aqi_average",
        "air4thai-aqi_patong_pm25_average",
        "tmd-weather-surface_patong_forecast_rain_probability",
        "tmd-weather-surface_patong_forecast_temp_min",
        "tmd-weather-surface_patong_forecast_temp_max",
        "tmd-weather-surface_patong_forecast_heavy_rain_flag",
        "tmd-weather-surface_patong_warning_match_count",
        "tmd-weather-surface_patong_marine_wind_speed_average",
        "tmd-weather-surface_patong_marine_wave_height_average",
        "tmd-weather-surface_patong_marine_wave_height_thunder",
        "tmd-weather-surface_patong_marine_thunderstorm_flag",
        "tmd-weather-surface_patong_station_temperature",
        "tmd-weather-surface_patong_station_humidity",
        "tmd-weather-surface_patong_station_wind_speed",
        "tmd-weather-surface_patong_station_rainfall_today",
        "tmd-shipping-forecast_patong_marine_wind_speed_average",
        "tmd-shipping-forecast_patong_marine_wave_height_average",
        "tmd-shipping-forecast_patong_marine_wave_height_thunder",
        "tmd-shipping-forecast_patong_marine_thunderstorm_flag",
        "tmd-shipping-forecast_patong_forecast_heavy_rain_flag",
        "namtang-transit-structure_patong_transport_structure_score",
        "mot-bus-terminal-support_patong_official_bus_terminal_support_score",
        "bks-station-ticket-support_patong_official_intercity_bus_support_score",
        "bks-timetable-search-surface_patong_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_patong_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_patong_official_taxi_oversight_support_score",
        "marine-department-pier-registry_patong_official_pier_support_score",
        "marine-department-berth-status_patong_official_berth_status_surface_score",
        "hss-spa-license-support_patong_spa_license_support_score",
        "noise4thai-ambient-noise_patong_noise_leq_24h_average",
        "thairsc-road-safety_patong_road_deaths_ytd",
        "thairsc-road-safety_patong_road_injuries_ytd",
        "thairsc-road-safety_patong_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "entity_path": "/entities/pattaya-chonburi/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "pattaya-chonburi_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 23 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "Air4Thai / Pollution Control Department",
        "Thai Meteorological Department",
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "aviationweather-airport-status_pattaya-chonburi_airport_flight_rules_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_visibility_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_forecast_disruption_score",
        "aviationweather-airport-status_pattaya-chonburi_airport_convective_forecast_flag",
        "namtang-transit-structure_pattaya-chonburi_transport_structure_score",
        "mot-bus-terminal-support_pattaya-chonburi_official_bus_terminal_support_score",
        "bks-station-ticket-support_pattaya-chonburi_official_intercity_bus_support_score",
        "bks-timetable-search-surface_pattaya-chonburi_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_pattaya-chonburi_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_pattaya-chonburi_official_taxi_oversight_support_score",
        "marine-department-pier-registry_pattaya-chonburi_official_pier_support_score",
        "marine-department-berth-status_pattaya-chonburi_official_berth_status_surface_score",
        "exat-expressway-support_pattaya-chonburi_exat_expressway_support_score",
        "hss-spa-license-support_pattaya-chonburi_spa_license_support_score",
        "moph-health-facility-support_pattaya-chonburi_medical_fallback_support_score",
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_pattaya-chonburi_usd_thb_reference",
        "gta-gold-reference-price_pattaya-chonburi_gold_spot_reference",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_intraday",
        "gta-gold-reference-price_pattaya-chonburi_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "entity_path": "/entities/phuket/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 47 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Marine Department piers",
        "AOT air transport statistics"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_phuket_aqi_average",
        "air4thai-aqi_phuket_pm25_average",
        "tmd-weather-surface_phuket_forecast_rain_probability",
        "tmd-weather-surface_phuket_forecast_temp_min",
        "tmd-weather-surface_phuket_forecast_temp_max",
        "tmd-weather-surface_phuket_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket_warning_match_count",
        "tmd-weather-surface_phuket_marine_wind_speed_average",
        "tmd-weather-surface_phuket_marine_wave_height_average",
        "tmd-weather-surface_phuket_marine_wave_height_thunder",
        "tmd-weather-surface_phuket_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket_station_temperature",
        "tmd-weather-surface_phuket_station_humidity",
        "tmd-weather-surface_phuket_station_wind_speed",
        "tmd-weather-surface_phuket_station_rainfall_today",
        "tmd-shipping-forecast_phuket_marine_wind_speed_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_average",
        "tmd-shipping-forecast_phuket_marine_wave_height_thunder",
        "tmd-shipping-forecast_phuket_marine_thunderstorm_flag",
        "tmd-shipping-forecast_phuket_forecast_heavy_rain_flag",
        "aviationweather-airport-status_phuket_airport_flight_rules_score",
        "aviationweather-airport-status_phuket_airport_visibility_score",
        "aviationweather-airport-status_phuket_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket_airport_convective_forecast_flag",
        "namtang-transit-structure_phuket_transport_structure_score",
        "mot-bus-terminal-support_phuket_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket_official_taxi_oversight_support_score",
        "marine-department-pier-registry_phuket_official_pier_support_score",
        "marine-department-berth-status_phuket_official_berth_status_surface_score",
        "hss-spa-license-support_phuket_spa_license_support_score",
        "moph-health-facility-support_phuket_medical_fallback_support_score",
        "dnp-park-tourism-support_phuket_park_access_context_score",
        "gta-gold-reference-price_phuket_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_phuket_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_phuket_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_phuket_usd_thb_reference",
        "gta-gold-reference-price_phuket_gold_spot_reference",
        "gta-gold-reference-price_phuket_gold_price_change_intraday",
        "gta-gold-reference-price_phuket_gold_price_change_prev_day",
        "noise4thai-ambient-noise_phuket_noise_leq_24h_average",
        "thairsc-road-safety_phuket_road_deaths_ytd",
        "thairsc-road-safety_phuket_road_injuries_ytd",
        "thairsc-road-safety_phuket_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "entity_path": "/entities/phuket-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 12 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "AOT airport flight status",
        "AOT Phuket car rental services"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_phuket-airport_airport_flight_rules_score",
        "aviationweather-airport-status_phuket-airport_airport_visibility_score",
        "aviationweather-airport-status_phuket-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_phuket-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_phuket-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_phuket-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_phuket-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_phuket-airport_official_airport_scale_score",
        "aot-airport-environment-support_phuket-airport_official_airport_environmental_support_score",
        "namtang-transit-structure_phuket-airport_transport_structure_score",
        "dlt-gps-taxi-support_phuket-airport_official_taxi_oversight_support_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/phuket-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "phuket-old-town_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 25 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_phuket-old-town_aqi_average",
        "air4thai-aqi_phuket-old-town_pm25_average",
        "tmd-weather-surface_phuket-old-town_forecast_rain_probability",
        "tmd-weather-surface_phuket-old-town_forecast_temp_min",
        "tmd-weather-surface_phuket-old-town_forecast_temp_max",
        "tmd-weather-surface_phuket-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_phuket-old-town_warning_match_count",
        "tmd-weather-surface_phuket-old-town_marine_wind_speed_average",
        "tmd-weather-surface_phuket-old-town_marine_wave_height_average",
        "tmd-weather-surface_phuket-old-town_marine_wave_height_thunder",
        "tmd-weather-surface_phuket-old-town_marine_thunderstorm_flag",
        "tmd-weather-surface_phuket-old-town_station_temperature",
        "tmd-weather-surface_phuket-old-town_station_humidity",
        "tmd-weather-surface_phuket-old-town_station_wind_speed",
        "tmd-weather-surface_phuket-old-town_station_rainfall_today",
        "namtang-transit-structure_phuket-old-town_transport_structure_score",
        "mot-bus-terminal-support_phuket-old-town_official_bus_terminal_support_score",
        "bks-station-ticket-support_phuket-old-town_official_intercity_bus_support_score",
        "bks-timetable-search-surface_phuket-old-town_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_phuket-old-town_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_phuket-old-town_official_taxi_oversight_support_score",
        "noise4thai-ambient-noise_phuket-old-town_noise_leq_24h_average",
        "thairsc-road-safety_phuket-old-town_road_deaths_ytd",
        "thairsc-road-safety_phuket-old-town_road_injuries_ytd",
        "thairsc-road-safety_phuket-old-town_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "entity_path": "/entities/railay/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "railay_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 31 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "Thai Meteorological Department",
        "Marine Department piers"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_railay_aqi_average",
        "air4thai-aqi_railay_pm25_average",
        "tmd-weather-surface_railay_forecast_rain_probability",
        "tmd-weather-surface_railay_forecast_temp_min",
        "tmd-weather-surface_railay_forecast_temp_max",
        "tmd-weather-surface_railay_forecast_heavy_rain_flag",
        "tmd-weather-surface_railay_warning_match_count",
        "tmd-weather-surface_railay_marine_wind_speed_average",
        "tmd-weather-surface_railay_marine_wave_height_average",
        "tmd-weather-surface_railay_marine_wave_height_thunder",
        "tmd-weather-surface_railay_marine_thunderstorm_flag",
        "tmd-weather-surface_railay_station_temperature",
        "tmd-weather-surface_railay_station_humidity",
        "tmd-weather-surface_railay_station_wind_speed",
        "tmd-weather-surface_railay_station_rainfall_today",
        "tmd-shipping-forecast_railay_marine_wind_speed_average",
        "tmd-shipping-forecast_railay_marine_wave_height_average",
        "tmd-shipping-forecast_railay_marine_wave_height_thunder",
        "tmd-shipping-forecast_railay_marine_thunderstorm_flag",
        "tmd-shipping-forecast_railay_forecast_heavy_rain_flag",
        "namtang-transit-structure_railay_transport_structure_score",
        "mot-bus-terminal-support_railay_official_bus_terminal_support_score",
        "bks-station-ticket-support_railay_official_intercity_bus_support_score",
        "bks-timetable-search-surface_railay_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_railay_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_railay_official_taxi_oversight_support_score",
        "marine-department-pier-registry_railay_official_pier_support_score",
        "marine-department-berth-status_railay_official_berth_status_surface_score",
        "thairsc-road-safety_railay_road_deaths_ytd",
        "thairsc-road-safety_railay_road_injuries_ytd",
        "thairsc-road-safety_railay_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 27 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Marine Department piers",
        "OpenStreetMap Thailand",
        "Ferry operator commercial context"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rassada-pier_aqi_average",
        "air4thai-aqi_rassada-pier_pm25_average",
        "tmd-weather-surface_rassada-pier_forecast_rain_probability",
        "tmd-weather-surface_rassada-pier_forecast_temp_min",
        "tmd-weather-surface_rassada-pier_forecast_temp_max",
        "tmd-weather-surface_rassada-pier_forecast_heavy_rain_flag",
        "tmd-weather-surface_rassada-pier_warning_match_count",
        "tmd-weather-surface_rassada-pier_marine_wind_speed_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_average",
        "tmd-weather-surface_rassada-pier_marine_wave_height_thunder",
        "tmd-weather-surface_rassada-pier_marine_thunderstorm_flag",
        "tmd-weather-surface_rassada-pier_station_temperature",
        "tmd-weather-surface_rassada-pier_station_humidity",
        "tmd-weather-surface_rassada-pier_station_wind_speed",
        "tmd-weather-surface_rassada-pier_station_rainfall_today",
        "tmd-shipping-forecast_rassada-pier_marine_wind_speed_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_average",
        "tmd-shipping-forecast_rassada-pier_marine_wave_height_thunder",
        "tmd-shipping-forecast_rassada-pier_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rassada-pier_forecast_heavy_rain_flag",
        "namtang-transit-structure_rassada-pier_transport_structure_score",
        "marine-department-pier-registry_rassada-pier_official_pier_support_score",
        "marine-department-berth-status_rassada-pier_official_berth_status_surface_score",
        "noise4thai-ambient-noise_rassada-pier_noise_leq_24h_average",
        "thairsc-road-safety_rassada-pier_road_deaths_ytd",
        "thairsc-road-safety_rassada-pier_road_injuries_ytd",
        "thairsc-road-safety_rassada-pier_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/rawai-nai-harn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rawai-nai-harn_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 33 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand restaurants and cafes",
        "Thai Meteorological Department"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T06:00:00.000Z",
      "expires_at": "2026-06-24T18:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_rawai-nai-harn_aqi_average",
        "air4thai-aqi_rawai-nai-harn_pm25_average",
        "tmd-weather-surface_rawai-nai-harn_forecast_rain_probability",
        "tmd-weather-surface_rawai-nai-harn_forecast_temp_min",
        "tmd-weather-surface_rawai-nai-harn_forecast_temp_max",
        "tmd-weather-surface_rawai-nai-harn_forecast_heavy_rain_flag",
        "tmd-weather-surface_rawai-nai-harn_warning_match_count",
        "tmd-weather-surface_rawai-nai-harn_marine_wind_speed_average",
        "tmd-weather-surface_rawai-nai-harn_marine_wave_height_average",
        "tmd-weather-surface_rawai-nai-harn_marine_wave_height_thunder",
        "tmd-weather-surface_rawai-nai-harn_marine_thunderstorm_flag",
        "tmd-weather-surface_rawai-nai-harn_station_temperature",
        "tmd-weather-surface_rawai-nai-harn_station_humidity",
        "tmd-weather-surface_rawai-nai-harn_station_wind_speed",
        "tmd-weather-surface_rawai-nai-harn_station_rainfall_today",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wind_speed_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_average",
        "tmd-shipping-forecast_rawai-nai-harn_marine_wave_height_thunder",
        "tmd-shipping-forecast_rawai-nai-harn_marine_thunderstorm_flag",
        "tmd-shipping-forecast_rawai-nai-harn_forecast_heavy_rain_flag",
        "namtang-transit-structure_rawai-nai-harn_transport_structure_score",
        "mot-bus-terminal-support_rawai-nai-harn_official_bus_terminal_support_score",
        "bks-station-ticket-support_rawai-nai-harn_official_intercity_bus_support_score",
        "bks-timetable-search-surface_rawai-nai-harn_official_intercity_bus_search_support_score",
        "dlt-1584-complaint-stats_rawai-nai-harn_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_rawai-nai-harn_official_taxi_oversight_support_score",
        "marine-department-pier-registry_rawai-nai-harn_official_pier_support_score",
        "marine-department-berth-status_rawai-nai-harn_official_berth_status_surface_score",
        "hss-spa-license-support_rawai-nai-harn_spa_license_support_score",
        "noise4thai-ambient-noise_rawai-nai-harn_noise_leq_24h_average",
        "thairsc-road-safety_rawai-nai-harn_road_deaths_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_injuries_ytd",
        "thairsc-road-safety_rawai-nai-harn_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "entity_path": "/entities/riverside-old-town/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "riverside-old-town_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "4 joined atlas sources and 32 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 4,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "OpenStreetMap Thailand",
        "TAT accommodation data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_riverside-old-town_aqi_average",
        "air4thai-aqi_riverside-old-town_pm25_average",
        "tmd-weather-surface_riverside-old-town_forecast_rain_probability",
        "tmd-weather-surface_riverside-old-town_forecast_temp_min",
        "tmd-weather-surface_riverside-old-town_forecast_temp_max",
        "tmd-weather-surface_riverside-old-town_forecast_heavy_rain_flag",
        "tmd-weather-surface_riverside-old-town_warning_match_count",
        "tmd-weather-surface_riverside-old-town_marine_wind_speed_average",
        "tmd-weather-surface_riverside-old-town_marine_thunderstorm_flag",
        "tmd-weather-surface_riverside-old-town_station_temperature",
        "tmd-weather-surface_riverside-old-town_station_humidity",
        "tmd-weather-surface_riverside-old-town_station_wind_speed",
        "tmd-weather-surface_riverside-old-town_station_rainfall_today",
        "thaiwater-water-quality_riverside-old-town_water_quality_status_score",
        "thaiwater-water-quality_riverside-old-town_water_dissolved_oxygen_average",
        "thaiwater-water-quality_riverside-old-town_water_quality_index_average",
        "namtang-transit-structure_riverside-old-town_transport_structure_score",
        "bangkok-rapid-transit-official-pages_riverside-old-town_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_riverside-old-town_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_riverside-old-town_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_riverside-old-town_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_riverside-old-town_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_riverside-old-town_urban_bus_operator_support_score",
        "exat-expressway-support_riverside-old-town_exat_expressway_support_score",
        "moph-health-facility-support_riverside-old-town_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_riverside-old-town_civic_star_average",
        "noise4thai-ambient-noise_riverside-old-town_noise_leq_24h_average",
        "thairsc-road-safety_riverside-old-town_road_deaths_ytd",
        "thairsc-road-safety_riverside-old-town_road_injuries_ytd",
        "thairsc-road-safety_riverside-old-town_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "entity_path": "/entities/samui-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "samui-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 4 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "NOAA Aviation Weather API",
        "Namtang GTFS",
        "AOT air transport statistics"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "aviationweather-airport-status_samui-airport_airport_flight_rules_score",
        "aviationweather-airport-status_samui-airport_airport_visibility_score",
        "aviationweather-airport-status_samui-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_samui-airport_airport_convective_forecast_flag"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 33 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "OpenStreetMap Thailand nightlife venues"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_silom-sathorn_aqi_average",
        "air4thai-aqi_silom-sathorn_pm25_average",
        "tmd-weather-surface_silom-sathorn_forecast_rain_probability",
        "tmd-weather-surface_silom-sathorn_forecast_temp_min",
        "tmd-weather-surface_silom-sathorn_forecast_temp_max",
        "tmd-weather-surface_silom-sathorn_forecast_heavy_rain_flag",
        "tmd-weather-surface_silom-sathorn_warning_match_count",
        "tmd-weather-surface_silom-sathorn_marine_wind_speed_average",
        "tmd-weather-surface_silom-sathorn_marine_thunderstorm_flag",
        "tmd-weather-surface_silom-sathorn_station_temperature",
        "tmd-weather-surface_silom-sathorn_station_humidity",
        "tmd-weather-surface_silom-sathorn_station_wind_speed",
        "tmd-weather-surface_silom-sathorn_station_rainfall_today",
        "thaiwater-water-quality_silom-sathorn_water_quality_status_score",
        "thaiwater-water-quality_silom-sathorn_water_dissolved_oxygen_average",
        "thaiwater-water-quality_silom-sathorn_water_quality_index_average",
        "namtang-transit-structure_silom-sathorn_transport_structure_score",
        "bangkok-rapid-transit-official-pages_silom-sathorn_official_rapid_transit_support_score",
        "dlt-1584-complaint-stats_silom-sathorn_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_silom-sathorn_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_silom-sathorn_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_silom-sathorn_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_silom-sathorn_urban_bus_operator_support_score",
        "exat-expressway-support_silom-sathorn_exat_expressway_support_score",
        "hss-spa-license-support_silom-sathorn_spa_license_support_score",
        "moph-health-facility-support_silom-sathorn_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_silom-sathorn_civic_star_average",
        "noise4thai-ambient-noise_silom-sathorn_noise_leq_24h_average",
        "thairsc-road-safety_silom-sathorn_road_deaths_ytd",
        "thairsc-road-safety_silom-sathorn_road_injuries_ytd",
        "thairsc-road-safety_silom-sathorn_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "sukhothai",
      "entity_name": "Sukhothai",
      "entity_type": "destination",
      "entity_path": "/entities/sukhothai/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhothai_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 6,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_sukhothai_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "5 joined atlas sources and 34 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 5,
      "source_names": [
        "Google Places hotels",
        "OSM Thailand accommodation",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "OpenStreetMap Thailand restaurants and cafes"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:15:23.481Z",
      "expires_at": "2026-06-24T14:15:23.481Z",
      "observation_ids": [
        "air4thai-aqi_sukhumvit_aqi_average",
        "air4thai-aqi_sukhumvit_pm25_average",
        "tmd-weather-surface_sukhumvit_forecast_rain_probability",
        "tmd-weather-surface_sukhumvit_forecast_temp_min",
        "tmd-weather-surface_sukhumvit_forecast_temp_max",
        "tmd-weather-surface_sukhumvit_forecast_heavy_rain_flag",
        "tmd-weather-surface_sukhumvit_warning_match_count",
        "tmd-weather-surface_sukhumvit_marine_wind_speed_average",
        "tmd-weather-surface_sukhumvit_marine_thunderstorm_flag",
        "tmd-weather-surface_sukhumvit_station_temperature",
        "tmd-weather-surface_sukhumvit_station_humidity",
        "tmd-weather-surface_sukhumvit_station_wind_speed",
        "tmd-weather-surface_sukhumvit_station_rainfall_today",
        "thaiwater-water-quality_sukhumvit_water_quality_status_score",
        "thaiwater-water-quality_sukhumvit_water_dissolved_oxygen_average",
        "thaiwater-water-quality_sukhumvit_water_quality_index_average",
        "namtang-transit-structure_sukhumvit_transport_structure_score",
        "bangkok-rapid-transit-official-pages_sukhumvit_official_rapid_transit_support_score",
        "bks-station-ticket-support_sukhumvit_official_intercity_bus_support_score",
        "dlt-1584-complaint-stats_sukhumvit_official_transport_complaint_support_score",
        "dlt-gps-taxi-support_sukhumvit_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_sukhumvit_official_motorcycle_taxi_support_score",
        "otp-taxi-demand-analytics_sukhumvit_taxi_pickup_dropoff_support_score",
        "thai-smile-group-branch-locator_sukhumvit_urban_bus_operator_support_score",
        "exat-expressway-support_sukhumvit_exat_expressway_support_score",
        "hss-spa-license-support_sukhumvit_spa_license_support_score",
        "moph-health-facility-support_sukhumvit_medical_fallback_support_score",
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_complaint_count",
        "bangkok-civic-complaint-stats_sukhumvit_civic_monthly_resolution_rate",
        "bangkok-civic-complaint-stats_sukhumvit_civic_star_average",
        "noise4thai-ambient-noise_sukhumvit_noise_leq_24h_average",
        "thairsc-road-safety_sukhumvit_road_deaths_ytd",
        "thairsc-road-safety_sukhumvit_road_injuries_ytd",
        "thairsc-road-safety_sukhumvit_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "surat-thani",
      "entity_name": "Surat Thani",
      "entity_type": "destination",
      "entity_path": "/entities/surat-thani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "surat-thani_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "7 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 7,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_surat-thani_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "entity_path": "/entities/suvarnabhumi-airport/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "suvarnabhumi-airport_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "6 joined atlas sources and 35 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 6,
      "source_names": [
        "AOT airport flight status",
        "AOT air transport statistics",
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages",
        "AOT Suvarnabhumi public taxi",
        "AOT Suvarnabhumi Grab pickup points"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:00:00.000Z",
      "expires_at": "2026-06-24T14:00:00.000Z",
      "observation_ids": [
        "air4thai-aqi_suvarnabhumi-airport_aqi_average",
        "air4thai-aqi_suvarnabhumi-airport_pm25_average",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_rain_probability",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_temp_min",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_temp_max",
        "tmd-weather-surface_suvarnabhumi-airport_forecast_heavy_rain_flag",
        "tmd-weather-surface_suvarnabhumi-airport_warning_match_count",
        "tmd-weather-surface_suvarnabhumi-airport_marine_wind_speed_average",
        "tmd-weather-surface_suvarnabhumi-airport_marine_thunderstorm_flag",
        "tmd-weather-surface_suvarnabhumi-airport_station_temperature",
        "tmd-weather-surface_suvarnabhumi-airport_station_humidity",
        "tmd-weather-surface_suvarnabhumi-airport_station_wind_speed",
        "tmd-weather-surface_suvarnabhumi-airport_station_rainfall_today",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_flight_rules_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_visibility_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_forecast_disruption_score",
        "aviationweather-airport-status_suvarnabhumi-airport_airport_convective_forecast_flag",
        "aot-airport-ground-services_suvarnabhumi-airport_official_airport_ground_service_score",
        "aot-airport-flight-board-surface_suvarnabhumi-airport_official_airport_board_surface_score",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_movements",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_total_passengers",
        "aot-airport-traffic-stats_suvarnabhumi-airport_official_airport_scale_score",
        "aot-airport-environment-support_suvarnabhumi-airport_official_airport_environmental_support_score",
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_status_score",
        "thaiwater-water-quality_suvarnabhumi-airport_water_dissolved_oxygen_average",
        "thaiwater-water-quality_suvarnabhumi-airport_water_quality_index_average",
        "namtang-transit-structure_suvarnabhumi-airport_transport_structure_score",
        "dlt-gps-taxi-support_suvarnabhumi-airport_official_taxi_oversight_support_score",
        "bangkok-motorcycle-taxi-support_suvarnabhumi-airport_official_motorcycle_taxi_support_score",
        "exat-expressway-support_suvarnabhumi-airport_exat_expressway_support_score",
        "moph-health-facility-support_suvarnabhumi-airport_medical_fallback_support_score",
        "noise4thai-ambient-noise_suvarnabhumi-airport_noise_leq_24h_average",
        "thairsc-road-safety_suvarnabhumi-airport_road_deaths_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_injuries_ytd",
        "thairsc-road-safety_suvarnabhumi-airport_road_casualty_total_ytd"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "trang",
      "entity_name": "Trang",
      "entity_type": "destination",
      "entity_path": "/entities/trang/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "trang_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "7 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 7,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_trang_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "entity_path": "/entities/ubon-ratchathani/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "ubon-ratchathani_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "8 joined atlas sources and 1 live observation rows currently support this entity. Freshness is acceptable.",
      "source_count": 8,
      "source_names": [
        "Thai Meteorological Department",
        "OpenStreetMap Thailand",
        "TAT accommodation data",
        "Google Places hotels",
        "Air4Thai / Pollution Control Department",
        "SRT timetable data",
        "AOT air transport statistics",
        "Marine Department piers"
      ],
      "freshness_class": "acceptable",
      "observed_at": "2026-06-23T19:00:28.000Z",
      "expires_at": "2026-06-24T07:00:28.000Z",
      "observation_ids": [
        "namtang-transit-structure_ubon-ratchathani_transport_structure_score"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "entity_path": "/entities/yaowarat-gold-district/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "yaowarat-gold-district_source_confidence",
      "signal_type": "source_confidence",
      "family_name": "Source confidence",
      "basis": "seed_plus_live",
      "score": 97,
      "severity": "low",
      "tone": "positive",
      "label": "Very high source confidence",
      "reason": "3 joined atlas sources and 9 live observation rows currently support this entity. Freshness is fresh.",
      "source_count": 3,
      "source_names": [
        "Gold Traders Association Thailand gold prices",
        "OpenStreetMap Thailand gold, gem, and jewelry POIs",
        "TFEX Gold Futures contract and market data"
      ],
      "freshness_class": "fresh",
      "observed_at": "2026-06-24T02:05:00.000Z",
      "expires_at": "2026-06-24T14:05:00.000Z",
      "observation_ids": [
        "namtang-transit-structure_yaowarat-gold-district_transport_structure_score",
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_buy_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_bar_965_sell_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_base_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_gold_ornament_965_sell_baht_weight",
        "gta-gold-reference-price_yaowarat-gold-district_usd_thb_reference",
        "gta-gold-reference-price_yaowarat-gold-district_gold_spot_reference",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_intraday",
        "gta-gold-reference-price_yaowarat-gold-district_gold_price_change_prev_day"
      ],
      "context_ids": [],
      "note": "Confidence stays explicit so the graph can explain when a place answer is well-supported versus mostly seeded."
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "entity_path": "/entities/bangkok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bangkok_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_bangkok_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "entity_path": "/entities/bts-asok/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "bts-asok_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_bts-asok_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "entity_path": "/entities/donsak-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "donsak-pier_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_donsak-pier_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "entity_path": "/entities/na-thon-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "na-thon-pier_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 52 passenger-use berth row(s) for this entity across สุราษฎร์ธานี, with longest berth 120.0 m and deepest berth 5.5 m, including codes such as KT001, KT002, KT003, KT004, KT005, KT006. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 52,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_na-thon-pier_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "entity_path": "/entities/rassada-pier/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "rassada-pier_official_pier_support",
      "signal_type": "official_pier_support",
      "family_name": "Official pier support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official pier support is strong",
      "reason": "The public Marine Department berth registry currently matches 41 passenger-use berth row(s) for this entity across ภูเก็ต, with longest berth 360.0 m and deepest berth 10.0 m, including codes such as CL001, CL002, CL003, CL004, HKT01, HKT03. This is official pier-infrastructure support, not live ferry schedule, closure, queue, or seat truth.",
      "source_count": 41,
      "source_names": [
        "Marine Department piers"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:30.342Z",
      "expires_at": "2026-05-18T11:11:30.342Z",
      "observation_ids": [
        "marine-department-pier-registry_rassada-pier_official_pier_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate coastal destinations and pier anchors with explicit official passenger-berth support from places where ferry logic is only inferred from map geometry or operator pages."
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "entity_path": "/entities/silom-sathorn/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "silom-sathorn_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_silom-sathorn_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "entity_path": "/entities/sukhumvit/",
      "computed_at": "2026-06-24T02:15:17.842Z",
      "signal_id": "sukhumvit_urban_rapid_transit_support",
      "signal_type": "urban_rapid_transit_support",
      "family_name": "Urban rapid-transit support",
      "basis": "live_observation",
      "score": 98,
      "severity": "low",
      "tone": "positive",
      "label": "Official rapid-transit support is strong",
      "reason": "The latest public BTS and MRTA route-page snapshot shows 2 official page(s), 6 BTS route or journey-planning feature(s), 8 MRTA route or service feature(s), and named MRT lines such as Blue Line, Purple Line, Yellow Line, Pink Line. This is official route-map and service-page support, not live headway, crowding, or outage truth.",
      "source_count": 2,
      "source_names": [
        "BTS SkyTrain system maps and service pages",
        "MRT / MRTA metro maps and service pages"
      ],
      "freshness_class": "stale",
      "observed_at": "2026-05-15T11:11:29.575Z",
      "expires_at": "2026-05-17T11:11:29.575Z",
      "observation_ids": [
        "bangkok-rapid-transit-official-pages_sukhumvit_official_rapid_transit_support_score"
      ],
      "context_ids": [],
      "note": "Use this to separate Bangkok bases with clearly supported rapid-transit logic from areas that only look easy on a generic city map."
    }
  ],
  "storage": {
    "mode": "persisted",
    "snapshot_kind": "signals",
    "generated_at": "2026-06-24T02:15:17.842Z",
    "stored_at": "2026-06-24T02:16:12.398Z",
    "fresh": false
  },
  "filters": {
    "entity_id": "all",
    "signal_type": "all",
    "severity": "all"
  },
  "entity_summaries": [
    {
      "entity_id": "ao-nang",
      "entity_name": "Ao Nang",
      "entity_type": "hotel_area",
      "path": "/entities/ao-nang/",
      "signal_count": 18,
      "family_count": 18,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "ao-nang-pier",
      "entity_name": "Ao Nang Pier",
      "entity_type": "pier",
      "path": "/entities/ao-nang-pier/",
      "signal_count": 9,
      "family_count": 9,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "bophut-fishermans-village",
      "entity_name": "Bophut / Fisherman's Village",
      "entity_type": "hotel_area",
      "path": "/entities/bophut-fishermans-village/",
      "signal_count": 16,
      "family_count": 16,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "chaweng",
      "entity_name": "Chaweng",
      "entity_type": "hotel_area",
      "path": "/entities/chaweng/",
      "signal_count": 17,
      "family_count": 17,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "donsak-pier",
      "entity_name": "Donsak Pier",
      "entity_type": "pier",
      "path": "/entities/donsak-pier/",
      "signal_count": 14,
      "family_count": 14,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "kata-karon",
      "entity_name": "Kata / Karon",
      "entity_type": "hotel_area",
      "path": "/entities/kata-karon/",
      "signal_count": 16,
      "family_count": 16,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "koh-phangan",
      "entity_name": "Koh Phangan",
      "entity_type": "destination",
      "path": "/entities/koh-phangan/",
      "signal_count": 18,
      "family_count": 18,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "koh-samui",
      "entity_name": "Koh Samui",
      "entity_type": "destination",
      "path": "/entities/koh-samui/",
      "signal_count": 21,
      "family_count": 21,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "krabi",
      "entity_name": "Krabi",
      "entity_type": "destination",
      "path": "/entities/krabi/",
      "signal_count": 22,
      "family_count": 22,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "lamai",
      "entity_name": "Lamai",
      "entity_type": "hotel_area",
      "path": "/entities/lamai/",
      "signal_count": 17,
      "family_count": 17,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "na-thon-pier",
      "entity_name": "Na Thon Pier",
      "entity_type": "pier",
      "path": "/entities/na-thon-pier/",
      "signal_count": 14,
      "family_count": 14,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "noise4thai-bangkok-roadside-cluster",
      "entity_name": "Noise4Thai Bangkok roadside cluster",
      "entity_type": "monitoring_cluster",
      "path": "/entities/noise4thai-bangkok-roadside-cluster/",
      "signal_count": 10,
      "family_count": 10,
      "strongest_type": "noise_risk",
      "strongest_label": "Noise risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "patong",
      "entity_name": "Patong",
      "entity_type": "hotel_area",
      "path": "/entities/patong/",
      "signal_count": 19,
      "family_count": 19,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "phuket",
      "entity_name": "Phuket",
      "entity_type": "destination",
      "path": "/entities/phuket/",
      "signal_count": 26,
      "family_count": 26,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "railay",
      "entity_name": "Railay",
      "entity_type": "hotel_area",
      "path": "/entities/railay/",
      "signal_count": 17,
      "family_count": 17,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "rassada-pier",
      "entity_name": "Rassada Pier",
      "entity_type": "pier",
      "path": "/entities/rassada-pier/",
      "signal_count": 14,
      "family_count": 14,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "rawai-nai-harn",
      "entity_name": "Rawai / Nai Harn",
      "entity_type": "hotel_area",
      "path": "/entities/rawai-nai-harn/",
      "signal_count": 19,
      "family_count": 19,
      "strongest_type": "marine_warning_risk",
      "strongest_label": "Marine warning risk is high",
      "strongest_score": 34,
      "strongest_severity": "critical",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T06:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "pai",
      "entity_name": "Pai",
      "entity_type": "destination",
      "path": "/entities/pai/",
      "signal_count": 10,
      "family_count": 10,
      "strongest_type": "road_safety_risk",
      "strongest_label": "Road safety burden is high",
      "strongest_score": 37,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "don-mueang-airport",
      "entity_name": "Don Mueang Airport",
      "entity_type": "airport",
      "path": "/entities/don-mueang-airport/",
      "signal_count": 21,
      "family_count": 21,
      "strongest_type": "official_motorcycle_taxi_support",
      "strongest_label": "Official motorcycle-taxi support is weak",
      "strongest_score": 40,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "suvarnabhumi-airport",
      "entity_name": "Suvarnabhumi Airport",
      "entity_type": "airport",
      "path": "/entities/suvarnabhumi-airport/",
      "signal_count": 20,
      "family_count": 20,
      "strongest_type": "official_motorcycle_taxi_support",
      "strongest_label": "Official motorcycle-taxi support is weak",
      "strongest_score": 41,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "bts-asok",
      "entity_name": "BTS Asok / MRT Sukhumvit",
      "entity_type": "station",
      "path": "/entities/bts-asok/",
      "signal_count": 18,
      "family_count": 18,
      "strongest_type": "civic_friction",
      "strongest_label": "Civic friction is high",
      "strongest_score": 42,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "chiang-mai-airport",
      "entity_name": "Chiang Mai Airport",
      "entity_type": "airport",
      "path": "/entities/chiang-mai-airport/",
      "signal_count": 11,
      "family_count": 11,
      "strongest_type": "airport_ground_service_support",
      "strongest_label": "Airport ground-service support is thin",
      "strongest_score": 42,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "phuket-airport",
      "entity_name": "Phuket Airport",
      "entity_type": "airport",
      "path": "/entities/phuket-airport/",
      "signal_count": 11,
      "family_count": 11,
      "strongest_type": "airport_ground_service_support",
      "strongest_label": "Airport ground-service support is thin",
      "strongest_score": 42,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "air4thai-bangkok-urban-cluster",
      "entity_name": "Air4Thai Bangkok urban cluster",
      "entity_type": "monitoring_cluster",
      "path": "/entities/air4thai-bangkok-urban-cluster/",
      "signal_count": 10,
      "family_count": 10,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "ari",
      "entity_name": "Ari",
      "entity_type": "hotel_area",
      "path": "/entities/ari/",
      "signal_count": 19,
      "family_count": 19,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "bangkok",
      "entity_name": "Bangkok",
      "entity_type": "destination",
      "path": "/entities/bangkok/",
      "signal_count": 28,
      "family_count": 28,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "bangkok-mochit-2",
      "entity_name": "Bangkok Mochit 2 Bus Terminal",
      "entity_type": "bus_terminal",
      "path": "/entities/bangkok-mochit-2/",
      "signal_count": 21,
      "family_count": 21,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "phuket-old-town",
      "entity_name": "Phuket Old Town",
      "entity_type": "hotel_area",
      "path": "/entities/phuket-old-town/",
      "signal_count": 15,
      "family_count": 15,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "riverside-old-town",
      "entity_name": "Riverside / Old Town",
      "entity_type": "hotel_area",
      "path": "/entities/riverside-old-town/",
      "signal_count": 20,
      "family_count": 20,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "silom-sathorn",
      "entity_name": "Silom / Sathorn",
      "entity_type": "hotel_area",
      "path": "/entities/silom-sathorn/",
      "signal_count": 21,
      "family_count": 21,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "sukhumvit",
      "entity_name": "Sukhumvit",
      "entity_type": "hotel_area",
      "path": "/entities/sukhumvit/",
      "signal_count": 22,
      "family_count": 22,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "thaiwater-chao-phraya-bangkok",
      "entity_name": "Thaiwater Chao Phraya Bangkok corridor",
      "entity_type": "monitoring_cluster",
      "path": "/entities/thaiwater-chao-phraya-bangkok/",
      "signal_count": 10,
      "family_count": 10,
      "strongest_type": "flood_water_risk",
      "strongest_label": "Water and flood-adjacent risk is elevated",
      "strongest_score": 44,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "central-hua-hin-khao-takiab",
      "entity_name": "Central Hua Hin / Khao Takiab",
      "entity_type": "hotel_area",
      "path": "/entities/central-hua-hin-khao-takiab/",
      "signal_count": 10,
      "family_count": 10,
      "strongest_type": "official_intercity_bus_support",
      "strongest_label": "Official intercity-bus support is weak",
      "strongest_score": 54,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "ayutthaya",
      "entity_name": "Ayutthaya",
      "entity_type": "destination",
      "path": "/entities/ayutthaya/",
      "signal_count": 15,
      "family_count": 15,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 56,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "chiang-mai",
      "entity_name": "Chiang Mai",
      "entity_type": "destination",
      "path": "/entities/chiang-mai/",
      "signal_count": 23,
      "family_count": 23,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 56,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "kanchanaburi",
      "entity_name": "Kanchanaburi",
      "entity_type": "destination",
      "path": "/entities/kanchanaburi/",
      "signal_count": 16,
      "family_count": 16,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 56,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "nimman",
      "entity_name": "Nimman",
      "entity_type": "hotel_area",
      "path": "/entities/nimman/",
      "signal_count": 12,
      "family_count": 12,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 56,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "old-city-chiang-mai",
      "entity_name": "Old City Chiang Mai",
      "entity_type": "hotel_area",
      "path": "/entities/old-city-chiang-mai/",
      "signal_count": 15,
      "family_count": 15,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is elevated",
      "strongest_score": 56,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "hua-hin",
      "entity_name": "Hua Hin / Cha-am",
      "entity_type": "destination",
      "path": "/entities/hua-hin/",
      "signal_count": 15,
      "family_count": 15,
      "strongest_type": "official_intercity_bus_support",
      "strongest_label": "Official intercity-bus support is limited",
      "strongest_score": 58,
      "strongest_severity": "high",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "stale"
    },
    {
      "entity_id": "isaan",
      "entity_name": "Isaan",
      "entity_type": "destination",
      "path": "/entities/isaan/",
      "signal_count": 15,
      "family_count": 15,
      "strongest_type": "rain_risk",
      "strongest_label": "Rain risk is manageable",
      "strongest_score": 64,
      "strongest_severity": "medium",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "pattaya-chonburi",
      "entity_name": "Pattaya / Chonburi",
      "entity_type": "destination",
      "path": "/entities/pattaya-chonburi/",
      "signal_count": 18,
      "family_count": 18,
      "strongest_type": "berth_operability_context",
      "strongest_label": "Berth operability context is workable",
      "strongest_score": 66,
      "strongest_severity": "medium",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "krabi-airport",
      "entity_name": "Krabi Airport",
      "entity_type": "airport",
      "path": "/entities/krabi-airport/",
      "signal_count": 7,
      "family_count": 7,
      "strongest_type": "flight_delay_risk",
      "strongest_label": "Airport weather delay risk is manageable",
      "strongest_score": 69,
      "strongest_severity": "medium",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "central-pattaya-jomtien",
      "entity_name": "Central Pattaya / Jomtien",
      "entity_type": "hotel_area",
      "path": "/entities/central-pattaya-jomtien/",
      "signal_count": 9,
      "family_count": 9,
      "strongest_type": "official_bus_terminal_support",
      "strongest_label": "Official bus-terminal support is limited",
      "strongest_score": 72,
      "strongest_severity": "medium",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:15:23.481Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "buriram",
      "entity_name": "Buriram",
      "entity_type": "destination",
      "path": "/entities/buriram/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "High source confidence",
      "strongest_score": 77,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "khon-kaen",
      "entity_name": "Khon Kaen",
      "entity_type": "destination",
      "path": "/entities/khon-kaen/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "High source confidence",
      "strongest_score": 77,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "chiang-mai-gold-shopping",
      "entity_name": "Chiang Mai gold shopping",
      "entity_type": "market_district",
      "path": "/entities/chiang-mai-gold-shopping/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "thai_gold_reference_price",
      "strongest_label": "Thai gold reference is fresh",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "hat-yai-gold-shopping",
      "entity_name": "Hat Yai gold shopping",
      "entity_type": "market_district",
      "path": "/entities/hat-yai-gold-shopping/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "thai_gold_reference_price",
      "strongest_label": "Thai gold reference is fresh",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "hua-hin-station",
      "entity_name": "Hua Hin Railway Station",
      "entity_type": "station",
      "path": "/entities/hua-hin-station/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "pattaya-gold-shopping",
      "entity_name": "Pattaya / Chonburi gold shopping",
      "entity_type": "market_district",
      "path": "/entities/pattaya-gold-shopping/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "thai_gold_reference_price",
      "strongest_label": "Thai gold reference is fresh",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "phuket-gold-shopping",
      "entity_name": "Phuket gold shopping",
      "entity_type": "market_district",
      "path": "/entities/phuket-gold-shopping/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "thai_gold_reference_price",
      "strongest_label": "Thai gold reference is fresh",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "yaowarat-gold-district",
      "entity_name": "Yaowarat gold district",
      "entity_type": "market_district",
      "path": "/entities/yaowarat-gold-district/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "thai_gold_reference_price",
      "strongest_label": "Thai gold reference is fresh",
      "strongest_score": 86,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:05:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "samui-airport",
      "entity_name": "Samui Airport",
      "entity_type": "airport",
      "path": "/entities/samui-airport/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "flight_delay_risk",
      "strongest_label": "Airport weather delay risk is low",
      "strongest_score": 93,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "u-tapao-airport",
      "entity_name": "U-Tapao Airport",
      "entity_type": "airport",
      "path": "/entities/u-tapao-airport/",
      "signal_count": 6,
      "family_count": 6,
      "strongest_type": "flight_delay_risk",
      "strongest_label": "Airport weather delay risk is low",
      "strongest_score": 93,
      "strongest_severity": "low",
      "strongest_basis": "live_observation",
      "last_observed_at": "2026-06-24T02:00:00.000Z",
      "freshness_class": "fresh"
    },
    {
      "entity_id": "chanthaburi",
      "entity_name": "Chanthaburi",
      "entity_type": "destination",
      "path": "/entities/chanthaburi/",
      "signal_count": 4,
      "family_count": 4,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "chiang-rai",
      "entity_name": "Chiang Rai",
      "entity_type": "destination",
      "path": "/entities/chiang-rai/",
      "signal_count": 4,
      "family_count": 4,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "hat-yai",
      "entity_name": "Hat Yai",
      "entity_type": "destination",
      "path": "/entities/hat-yai/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "nakhon-ratchasima",
      "entity_name": "Nakhon Ratchasima",
      "entity_type": "destination",
      "path": "/entities/nakhon-ratchasima/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "nong-khai",
      "entity_name": "Nong Khai",
      "entity_type": "destination",
      "path": "/entities/nong-khai/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "sukhothai",
      "entity_name": "Sukhothai",
      "entity_type": "destination",
      "path": "/entities/sukhothai/",
      "signal_count": 4,
      "family_count": 4,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "surat-thani",
      "entity_name": "Surat Thani",
      "entity_type": "destination",
      "path": "/entities/surat-thani/",
      "signal_count": 4,
      "family_count": 4,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "trang",
      "entity_name": "Trang",
      "entity_type": "destination",
      "path": "/entities/trang/",
      "signal_count": 4,
      "family_count": 4,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    },
    {
      "entity_id": "ubon-ratchathani",
      "entity_name": "Ubon Ratchathani",
      "entity_type": "destination",
      "path": "/entities/ubon-ratchathani/",
      "signal_count": 5,
      "family_count": 5,
      "strongest_type": "source_confidence",
      "strongest_label": "Very high source confidence",
      "strongest_score": 97,
      "strongest_severity": "low",
      "strongest_basis": "seed_plus_live",
      "last_observed_at": "2026-06-23T19:00:28.000Z",
      "freshness_class": "acceptable"
    }
  ]
}