{"generated_at":"2026-08-22T17:51:47.142Z","storage":{"mode":"versioned-snapshot","snapshot_generated_at":"2026-08-22T17:51:47.142Z"},"family":{"id":"route-check","name":"Route check","decisionType":"route_check","status":"active","endpoint":"/api/decisions/route-check","note":"Checks high-value route templates using destination scores, transfer nodes, airport-weather context, airport-ground-access support, official airport pickup-rule context, official passenger board-surface support, airport-scale context, airport environmental-support context, rail-support context, official rail presence where the route can plausibly use it, and live pier or transfer support where coastal legs matter.","output":"Route feasibility, main breaker, and pivot."},"decision_count":5,"filters":{"destination":"","route":"","limit":50},"rows":[{"decision_id":"route_bangkok-ayutthaya-kanchanaburi","decision_type":"route_check","subject_id":"bangkok-ayutthaya-kanchanaburi","subject_name":"Bangkok -> Ayutthaya -> Kanchanaburi","subject_type":"route","score":64,"component_score":72.7,"penalty_points":9,"confidence":"Medium","label":"mixed","recommendation":"Bangkok -> Ayutthaya -> Kanchanaburi is a cautious route shape right now.","best_for":"Easy central-Thai culture loop with lower airport dependence.","avoid_if":"You only have a rushed long weekend and hate transfers.","check_first":["heat exposure","road and rail comfort","whether Kanchanaburi is actually worth the detour for this trip shape"],"next_action":"Use Bangkok as the base and decide whether both side trips really belong in the same short window.","pivot":"Drop Kanchanaburi first if the loop starts to feel too transfer-heavy.","freshness_class":"expired","score_formula_version":"signal-first-v2","signal_coverage":{"total_components":19,"available_components":19,"live_components":16,"fallback_components":3,"defaulted_components":0,"coverage_ratio":1},"score_components":[{"key":"destination_average","label":"Destination fit average","score":62,"weight":0.34,"contribution":21.08,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Average destination strength across the route chain."},{"key":"weakest_destination","label":"Weakest destination leg","score":59,"weight":0.18,"contribution":10.62,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"No weakest destination leg was available, so the route uses the average destination score.","note":""},{"key":"transport_average","label":"Transport friction average","score":76.5,"weight":0.16,"contribution":12.24,"source":"signal","signal_type":"transport_friction","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"highway_transfer_friction","label":"Highway transfer friction","score":88,"weight":0.08,"contribution":7.04,"source":"signal","signal_type":"highway_transfer_friction","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DOH and EXAT road-support context across overland route legs, not live speed, queue, lane, or incident truth."},{"key":"rain_average","label":"Rain fit average","score":50,"weight":0.1,"contribution":5,"source":"signal","signal_type":"rain_risk","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"airport_weather_operability","label":"Airport weather operability","score":60,"weight":0.1,"contribution":6,"source":"signal","signal_type":"flight_delay_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is airport weather and forecast disruption context on flight-dependent legs, not airline on-time performance."},{"key":"rail_feasibility","label":"Rail feasibility","score":74.33333333333333,"weight":0.08,"contribution":5.95,"source":"signal","signal_type":"rail_feasibility","entity_id":null,"used_default":false,"default_reason":"","note":"This is public rail-support structure across the route chain, not live train seat, timetable, or disruption truth."},{"key":"official_bus_terminal_support","label":"Official bus-terminal support","score":83.33333333333333,"weight":0.06,"contribution":5,"source":"signal","signal_type":"official_bus_terminal_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official MOT terminal-master support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_support","label":"Official intercity-bus support","score":84.5,"weight":0.04,"contribution":3.38,"source":"signal","signal_type":"official_intercity_bus_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS station and ticket-point support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_search_support","label":"Official intercity-bus search support","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"official_intercity_bus_search_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS booking/search-surface support across the route chain for overland route-search confidence, not live departures, seats, or booking inventory truth."},{"key":"official_transport_complaint_support","label":"Official transport complaint support","score":94,"weight":0.04,"contribution":3.76,"source":"signal","signal_type":"official_transport_complaint_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT 1584 complaint recourse and transport-burden context across the route chain, not local realtime service quality or dispatch truth."},{"key":"official_taxi_oversight_support","label":"Official taxi-oversight support","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"official_taxi_oversight_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT GPS and Taxi OK regulated-taxi oversight, complaint, and station-search support across the route chain, not live vehicle location, dispatch, ETA, or raw taxi GPS truth."},{"key":"official_motorcycle_taxi_support","label":"Official motorcycle-taxi support","score":73,"weight":0.03,"contribution":2.19,"source":"signal","signal_type":"official_motorcycle_taxi_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Bangkok motorcycle-taxi stand and driver coverage from the public DLT/data.go.th dataset, useful as route-level last-mile support context rather than live availability, dispatch, or queue truth."},{"key":"taxi_pickup_dropoff_support","label":"Taxi pickup and dropoff support","score":88.5,"weight":0.03,"contribution":2.65,"source":"signal","signal_type":"taxi_pickup_dropoff_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public OTP monthly taxi GPS analytics and hotspot context across Bangkok-linked route nodes, useful as aggregate pickup/dropoff support rather than live dispatch, ETA, queue, or raw trip truth."},{"key":"urban_rapid_transit_support","label":"Urban rapid-transit support","score":94.5,"weight":0.05,"contribution":4.73,"source":"signal","signal_type":"urban_rapid_transit_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BTS and MRTA route-map and service-page support on Bangkok-linked route nodes, not live headway, crowding, or outage truth."},{"key":"urban_bus_operator_support","label":"Urban bus-operator support","score":74,"weight":0.04,"contribution":2.96,"source":"signal","signal_type":"urban_bus_operator_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public Thai Smile Group branch and depot footprint on Bangkok-linked route nodes, useful as fallback urban bus support rather than live bus operations truth."},{"key":"park_access_context","label":"Park access context","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"park_access_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is public DNP protected-area planning context across nature-heavy route legs, not live closure, ranger, capacity, or ticket truth."},{"key":"node_confidence","label":"Transfer-node confidence","score":97,"weight":0.08,"contribution":7.76,"source":"signal","signal_type":"source_confidence","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"route_baseline","label":"Route template baseline","score":62.833333333333336,"weight":0.06,"contribution":3.77,"source":"blueprint","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Route templates now act as low-weight route-shape hints instead of dominating the score."}],"penalty_components":[{"key":"freshness_penalty","label":"Freshness penalty","freshness_class":"fresh","points":0,"applied":false,"note":"Signals are fresh enough that no freshness penalty applies."},{"key":"coverage_penalty","label":"Coverage penalty","defaulted_components":0,"points":0,"applied":false,"note":"All decision components are covered by live or persisted graph values."},{"key":"contradiction_penalty","label":"Route contradiction penalty","points":9,"applied":true,"spread":47,"note":"Component scores spread by 47 points, so the engine treats the answer as more contradictory."}],"fallback_used":false,"fallback_components":[],"source_summary":"3 destination anchors and 1 transfer nodes support this route check.","main_risk":"Regional disaster context is busy","weakest_leg":"Kanchanaburi","path":"/routes/bangkok-ayutthaya-kanchanaburi/","computed_at":"2026-08-22T17:51:47.142Z","expires_at":"2026-08-23T05:52:03.650Z","freshness":"expired","data_current":false,"expired":true},{"decision_id":"route_bangkok-chiang-mai-phuket","decision_type":"route_check","subject_id":"bangkok-chiang-mai-phuket","subject_name":"Bangkok -> Chiang Mai -> Phuket","subject_type":"route","score":60,"component_score":69.1,"penalty_points":9,"confidence":"Medium","label":"mixed","recommendation":"Bangkok -> Chiang Mai -> Phuket is a cautious route shape right now.","best_for":"Classic first trip with city depth, northern culture, and a beach finish.","avoid_if":"Northern AQI is weak or you need a fully overland route.","check_first":["Chiang Mai PM2.5","airport timing between long legs","beach area choice in Phuket"],"next_action":"Lock Bangkok and Phuket first, then leave the Chiang Mai segment soft until AQI feels solid.","pivot":"Go Bangkok -> Phuket directly if the north weakens.","freshness_class":"expired","score_formula_version":"signal-first-v2","signal_coverage":{"total_components":27,"available_components":27,"live_components":24,"fallback_components":3,"defaulted_components":0,"coverage_ratio":1},"score_components":[{"key":"destination_average","label":"Destination fit average","score":61.333333333333336,"weight":0.34,"contribution":20.85,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Average destination strength across the route chain."},{"key":"weakest_destination","label":"Weakest destination leg","score":56,"weight":0.18,"contribution":10.08,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"No weakest destination leg was available, so the route uses the average destination score.","note":""},{"key":"transport_average","label":"Transport friction average","score":70.28571428571429,"weight":0.16,"contribution":11.25,"source":"signal","signal_type":"transport_friction","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"highway_transfer_friction","label":"Highway transfer friction","score":88,"weight":0.08,"contribution":7.04,"source":"signal","signal_type":"highway_transfer_friction","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DOH and EXAT road-support context across overland route legs, not live speed, queue, lane, or incident truth."},{"key":"rain_average","label":"Rain fit average","score":52.666666666666664,"weight":0.1,"contribution":5.27,"source":"signal","signal_type":"rain_risk","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"marine_warning_risk","label":"Marine warning risk","score":16,"weight":0.1,"contribution":1.6,"source":"signal","signal_type":"marine_warning_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is coastal sea-state caution for ferry- or island-shaped route legs."},{"key":"pier_transfer_support","label":"Pier transfer support","score":47,"weight":0.08,"contribution":3.76,"source":"signal","signal_type":"pier_transfer_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public transfer support around pier and coastal route anchors, not operator schedule truth."},{"key":"official_pier_support","label":"Official pier support","score":96,"weight":0.06,"contribution":5.76,"source":"signal","signal_type":"official_pier_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Marine Department passenger-berth support across coastal route anchors, not live ferry schedule, closure, queue, or seat truth."},{"key":"airport_weather_operability","label":"Airport weather operability","score":69.71428571428571,"weight":0.1,"contribution":6.97,"source":"signal","signal_type":"flight_delay_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is airport weather and forecast disruption context on flight-dependent legs, not airline on-time performance."},{"key":"airport_transfer_support","label":"Airport transfer support","score":62.75,"weight":0.08,"contribution":5.02,"source":"signal","signal_type":"airport_transfer_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public ground-access support around route airport nodes, not live check-in or queue truth."},{"key":"airport_ground_service_support","label":"Airport ground-service support","score":60,"weight":0.06,"contribution":3.6,"source":"signal","signal_type":"airport_ground_service_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official airport taxi, Grab, rental, and pickup-rule context around route airport nodes, not live queue, ETA, or rental inventory truth."},{"key":"airport_board_surface_support","label":"Airport board-surface support","score":96,"weight":0.05,"contribution":4.8,"source":"signal","signal_type":"airport_board_surface_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official passenger self-serve board visibility from public AOT flight-status pages, not direct live airline row truth."},{"key":"airport_scale_context","label":"Airport scale context","score":72,"weight":0.05,"contribution":3.6,"source":"signal","signal_type":"airport_scale_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is official AOT passenger and aircraft-movement scale context around route airport nodes, not live airline on-time, queue, gate, or inventory truth."},{"key":"airport_environmental_support","label":"Airport environmental support","score":96,"weight":0.03,"contribution":2.88,"source":"signal","signal_type":"airport_environmental_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is SET-hosted AOT annual-report disclosure context around route airport nodes, not live measured sound-level truth."},{"key":"rail_feasibility","label":"Rail feasibility","score":69.5,"weight":0.08,"contribution":5.56,"source":"signal","signal_type":"rail_feasibility","entity_id":null,"used_default":false,"default_reason":"","note":"This is public rail-support structure across the route chain, not live train seat, timetable, or disruption truth."},{"key":"official_bus_terminal_support","label":"Official bus-terminal support","score":83.33333333333333,"weight":0.06,"contribution":5,"source":"signal","signal_type":"official_bus_terminal_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official MOT terminal-master support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_support","label":"Official intercity-bus support","score":80.33333333333333,"weight":0.04,"contribution":3.21,"source":"signal","signal_type":"official_intercity_bus_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS station and ticket-point support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_search_support","label":"Official intercity-bus search support","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"official_intercity_bus_search_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS booking/search-surface support across the route chain for overland route-search confidence, not live departures, seats, or booking inventory truth."},{"key":"official_transport_complaint_support","label":"Official transport complaint support","score":92.33333333333333,"weight":0.04,"contribution":3.69,"source":"signal","signal_type":"official_transport_complaint_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT 1584 complaint recourse and transport-burden context across the route chain, not local realtime service quality or dispatch truth."},{"key":"official_taxi_oversight_support","label":"Official taxi-oversight support","score":93.71428571428571,"weight":0.04,"contribution":3.75,"source":"signal","signal_type":"official_taxi_oversight_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT GPS and Taxi OK regulated-taxi oversight, complaint, and station-search support across the route chain, not live vehicle location, dispatch, ETA, or raw taxi GPS truth."},{"key":"official_motorcycle_taxi_support","label":"Official motorcycle-taxi support","score":56.333333333333336,"weight":0.03,"contribution":1.69,"source":"signal","signal_type":"official_motorcycle_taxi_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Bangkok motorcycle-taxi stand and driver coverage from the public DLT/data.go.th dataset, useful as route-level last-mile support context rather than live availability, dispatch, or queue truth."},{"key":"taxi_pickup_dropoff_support","label":"Taxi pickup and dropoff support","score":81,"weight":0.03,"contribution":2.43,"source":"signal","signal_type":"taxi_pickup_dropoff_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public OTP monthly taxi GPS analytics and hotspot context across Bangkok-linked route nodes, useful as aggregate pickup/dropoff support rather than live dispatch, ETA, queue, or raw trip truth."},{"key":"urban_rapid_transit_support","label":"Urban rapid-transit support","score":98,"weight":0.05,"contribution":4.9,"source":"signal","signal_type":"urban_rapid_transit_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BTS and MRTA route-map and service-page support on Bangkok-linked route nodes, not live headway, crowding, or outage truth."},{"key":"urban_bus_operator_support","label":"Urban bus-operator support","score":88,"weight":0.04,"contribution":3.52,"source":"signal","signal_type":"urban_bus_operator_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public Thai Smile Group branch and depot footprint on Bangkok-linked route nodes, useful as fallback urban bus support rather than live bus operations truth."},{"key":"park_access_context","label":"Park access context","score":89,"weight":0.04,"contribution":3.56,"source":"signal","signal_type":"park_access_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is public DNP protected-area planning context across nature-heavy route legs, not live closure, ranger, capacity, or ticket truth."},{"key":"node_confidence","label":"Transfer-node confidence","score":97,"weight":0.08,"contribution":7.76,"source":"signal","signal_type":"source_confidence","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"route_baseline","label":"Route template baseline","score":61.42857142857142,"weight":0.06,"contribution":3.69,"source":"blueprint","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Route templates now act as low-weight route-shape hints instead of dominating the score."}],"penalty_components":[{"key":"freshness_penalty","label":"Freshness penalty","freshness_class":"fresh","points":0,"applied":false,"note":"Signals are fresh enough that no freshness penalty applies."},{"key":"coverage_penalty","label":"Coverage penalty","defaulted_components":0,"points":0,"applied":false,"note":"All decision components are covered by live or persisted graph values."},{"key":"contradiction_penalty","label":"Route contradiction penalty","points":9,"applied":true,"spread":82,"note":"Component scores spread by 82 points, so the engine treats the answer as more contradictory."}],"fallback_used":false,"fallback_components":[],"source_summary":"3 destination anchors and 4 transfer nodes support this route check.","main_risk":"Marine warning risk is high","weakest_leg":"Phuket","path":"/routes/bangkok-chiang-mai-phuket/","computed_at":"2026-08-22T17:51:47.142Z","expires_at":"2026-08-23T05:52:03.650Z","freshness":"expired","data_current":false,"expired":true},{"decision_id":"route_chiang-mai-pai-chiang-rai","decision_type":"route_check","subject_id":"chiang-mai-pai-chiang-rai","subject_name":"Chiang Mai -> Pai / Chiang Rai north loop","subject_type":"route","score":61,"component_score":69.6,"penalty_points":9,"confidence":"Medium","label":"mixed","recommendation":"Chiang Mai -> Pai / Chiang Rai north loop is a cautious route shape right now.","best_for":"Repeat visitors who want the north to stay the main character.","avoid_if":"AQI is elevated or the group has low road tolerance.","check_first":["PM2.5","mountain weather","road tolerance","whether Pai is optional or emotionally fixed"],"next_action":"Let Chiang Mai stay strong on its own before you add the road burden.","pivot":"Keep Chiang Mai only, or shift south if air quality fails.","freshness_class":"expired","score_formula_version":"signal-first-v2","signal_coverage":{"total_components":19,"available_components":19,"live_components":16,"fallback_components":3,"defaulted_components":0,"coverage_ratio":1},"score_components":[{"key":"destination_average","label":"Destination fit average","score":60.5,"weight":0.34,"contribution":20.57,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Average destination strength across the route chain."},{"key":"weakest_destination","label":"Weakest destination leg","score":56,"weight":0.18,"contribution":10.08,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"No weakest destination leg was available, so the route uses the average destination score.","note":""},{"key":"transport_average","label":"Transport friction average","score":65,"weight":0.16,"contribution":10.4,"source":"signal","signal_type":"transport_friction","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"highway_transfer_friction","label":"Highway transfer friction","score":88,"weight":0.08,"contribution":7.04,"source":"signal","signal_type":"highway_transfer_friction","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DOH and EXAT road-support context across overland route legs, not live speed, queue, lane, or incident truth."},{"key":"rain_average","label":"Rain fit average","score":54,"weight":0.1,"contribution":5.4,"source":"signal","signal_type":"rain_risk","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"airport_weather_operability","label":"Airport weather operability","score":61,"weight":0.1,"contribution":6.1,"source":"signal","signal_type":"flight_delay_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is airport weather and forecast disruption context on flight-dependent legs, not airline on-time performance."},{"key":"rail_feasibility","label":"Rail feasibility","score":59,"weight":0.08,"contribution":4.72,"source":"signal","signal_type":"rail_feasibility","entity_id":null,"used_default":false,"default_reason":"","note":"This is public rail-support structure across the route chain, not live train seat, timetable, or disruption truth."},{"key":"official_bus_terminal_support","label":"Official bus-terminal support","score":91,"weight":0.06,"contribution":5.46,"source":"signal","signal_type":"official_bus_terminal_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official MOT terminal-master support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_support","label":"Official intercity-bus support","score":84,"weight":0.04,"contribution":3.36,"source":"signal","signal_type":"official_intercity_bus_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS station and ticket-point support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_search_support","label":"Official intercity-bus search support","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"official_intercity_bus_search_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS booking/search-surface support across the route chain for overland route-search confidence, not live departures, seats, or booking inventory truth."},{"key":"official_transport_complaint_support","label":"Official transport complaint support","score":94,"weight":0.04,"contribution":3.76,"source":"signal","signal_type":"official_transport_complaint_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT 1584 complaint recourse and transport-burden context across the route chain, not local realtime service quality or dispatch truth."},{"key":"official_taxi_oversight_support","label":"Official taxi-oversight support","score":94,"weight":0.04,"contribution":3.76,"source":"signal","signal_type":"official_taxi_oversight_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT GPS and Taxi OK regulated-taxi oversight, complaint, and station-search support across the route chain, not live vehicle location, dispatch, ETA, or raw taxi GPS truth."},{"key":"official_motorcycle_taxi_support","label":"Official motorcycle-taxi support","score":58,"weight":0.03,"contribution":1.74,"source":"signal","signal_type":"official_motorcycle_taxi_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Bangkok motorcycle-taxi stand and driver coverage from the public DLT/data.go.th dataset, useful as route-level last-mile support context rather than live availability, dispatch, or queue truth."},{"key":"taxi_pickup_dropoff_support","label":"Taxi pickup and dropoff support","score":85,"weight":0.03,"contribution":2.55,"source":"signal","signal_type":"taxi_pickup_dropoff_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public OTP monthly taxi GPS analytics and hotspot context across Bangkok-linked route nodes, useful as aggregate pickup/dropoff support rather than live dispatch, ETA, queue, or raw trip truth."},{"key":"urban_rapid_transit_support","label":"Urban rapid-transit support","score":91,"weight":0.05,"contribution":4.55,"source":"signal","signal_type":"urban_rapid_transit_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BTS and MRTA route-map and service-page support on Bangkok-linked route nodes, not live headway, crowding, or outage truth."},{"key":"urban_bus_operator_support","label":"Urban bus-operator support","score":60,"weight":0.04,"contribution":2.4,"source":"signal","signal_type":"urban_bus_operator_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public Thai Smile Group branch and depot footprint on Bangkok-linked route nodes, useful as fallback urban bus support rather than live bus operations truth."},{"key":"park_access_context","label":"Park access context","score":91,"weight":0.04,"contribution":3.64,"source":"signal","signal_type":"park_access_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is public DNP protected-area planning context across nature-heavy route legs, not live closure, ranger, capacity, or ticket truth."},{"key":"node_confidence","label":"Transfer-node confidence","score":97,"weight":0.08,"contribution":7.76,"source":"signal","signal_type":"source_confidence","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"route_baseline","label":"Route template baseline","score":59.833333333333336,"weight":0.06,"contribution":3.59,"source":"blueprint","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Route templates now act as low-weight route-shape hints instead of dominating the score."}],"penalty_components":[{"key":"freshness_penalty","label":"Freshness penalty","freshness_class":"fresh","points":0,"applied":false,"note":"Signals are fresh enough that no freshness penalty applies."},{"key":"coverage_penalty","label":"Coverage penalty","defaulted_components":0,"points":0,"applied":false,"note":"All decision components are covered by live or persisted graph values."},{"key":"contradiction_penalty","label":"Route contradiction penalty","points":9,"applied":true,"spread":43,"note":"Component scores spread by 43 points, so the engine treats the answer as more contradictory."}],"fallback_used":false,"fallback_components":[],"source_summary":"2 destination anchors and 1 transfer nodes support this route check.","main_risk":"Road safety burden is high","weakest_leg":"Pai","path":"/routes/chiang-mai-pai-chiang-rai/","computed_at":"2026-08-22T17:51:47.142Z","expires_at":"2026-08-23T05:52:03.650Z","freshness":"expired","data_current":false,"expired":true},{"decision_id":"route_phuket-krabi-koh-lanta","decision_type":"route_check","subject_id":"phuket-krabi-koh-lanta","subject_name":"Phuket -> Krabi / Koh Lanta coast chain","subject_type":"route","score":55,"component_score":64.2,"penalty_points":9,"confidence":"Medium","label":"fragile","recommendation":"Phuket -> Krabi / Koh Lanta coast chain is a cautious route shape right now.","best_for":"Andaman scenery and flexible beach pacing.","avoid_if":"The trip depends on tight ferries or you need maximum weather resilience.","check_first":["Andaman weather","pier timing","whether Phuket should stay the stable base"],"next_action":"Keep at least one hotel refundable and do not make every scenic stop mandatory.","pivot":"Use Phuket as the infrastructure answer if boats weaken.","freshness_class":"expired","score_formula_version":"signal-first-v2","signal_coverage":{"total_components":16,"available_components":16,"live_components":13,"fallback_components":3,"defaulted_components":0,"coverage_ratio":1},"score_components":[{"key":"destination_average","label":"Destination fit average","score":55.5,"weight":0.34,"contribution":18.87,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Average destination strength across the route chain."},{"key":"weakest_destination","label":"Weakest destination leg","score":55,"weight":0.18,"contribution":9.9,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"No weakest destination leg was available, so the route uses the average destination score.","note":""},{"key":"transport_average","label":"Transport friction average","score":61.333333333333336,"weight":0.16,"contribution":9.81,"source":"signal","signal_type":"transport_friction","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"rain_average","label":"Rain fit average","score":54,"weight":0.1,"contribution":5.4,"source":"signal","signal_type":"rain_risk","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"marine_warning_risk","label":"Marine warning risk","score":16,"weight":0.1,"contribution":1.6,"source":"signal","signal_type":"marine_warning_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is coastal sea-state caution for ferry- or island-shaped route legs."},{"key":"pier_transfer_support","label":"Pier transfer support","score":60,"weight":0.08,"contribution":4.8,"source":"signal","signal_type":"pier_transfer_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public transfer support around pier and coastal route anchors, not operator schedule truth."},{"key":"official_pier_support","label":"Official pier support","score":90.66666666666667,"weight":0.06,"contribution":5.44,"source":"signal","signal_type":"official_pier_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Marine Department passenger-berth support across coastal route anchors, not live ferry schedule, closure, queue, or seat truth."},{"key":"airport_weather_operability","label":"Airport weather operability","score":91.5,"weight":0.1,"contribution":9.15,"source":"signal","signal_type":"flight_delay_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is airport weather and forecast disruption context on flight-dependent legs, not airline on-time performance."},{"key":"official_bus_terminal_support","label":"Official bus-terminal support","score":73,"weight":0.06,"contribution":4.38,"source":"signal","signal_type":"official_bus_terminal_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official MOT terminal-master support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_support","label":"Official intercity-bus support","score":67.5,"weight":0.04,"contribution":2.7,"source":"signal","signal_type":"official_intercity_bus_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS station and ticket-point support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_search_support","label":"Official intercity-bus search support","score":96,"weight":0.04,"contribution":3.84,"source":"signal","signal_type":"official_intercity_bus_search_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS booking/search-surface support across the route chain for overland route-search confidence, not live departures, seats, or booking inventory truth."},{"key":"official_transport_complaint_support","label":"Official transport complaint support","score":89,"weight":0.04,"contribution":3.56,"source":"signal","signal_type":"official_transport_complaint_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT 1584 complaint recourse and transport-burden context across the route chain, not local realtime service quality or dispatch truth."},{"key":"official_taxi_oversight_support","label":"Official taxi-oversight support","score":84,"weight":0.04,"contribution":3.36,"source":"signal","signal_type":"official_taxi_oversight_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT GPS and Taxi OK regulated-taxi oversight, complaint, and station-search support across the route chain, not live vehicle location, dispatch, ETA, or raw taxi GPS truth."},{"key":"park_access_context","label":"Park access context","score":91,"weight":0.04,"contribution":3.64,"source":"signal","signal_type":"park_access_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is public DNP protected-area planning context across nature-heavy route legs, not live closure, ranger, capacity, or ticket truth."},{"key":"node_confidence","label":"Transfer-node confidence","score":97,"weight":0.08,"contribution":7.76,"source":"signal","signal_type":"source_confidence","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"route_baseline","label":"Route template baseline","score":56.94444444444445,"weight":0.06,"contribution":3.42,"source":"blueprint","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Route templates now act as low-weight route-shape hints instead of dominating the score."}],"penalty_components":[{"key":"freshness_penalty","label":"Freshness penalty","freshness_class":"fresh","points":0,"applied":false,"note":"Signals are fresh enough that no freshness penalty applies."},{"key":"coverage_penalty","label":"Coverage penalty","defaulted_components":0,"points":0,"applied":false,"note":"All decision components are covered by live or persisted graph values."},{"key":"contradiction_penalty","label":"Route contradiction penalty","points":9,"applied":true,"spread":81,"note":"Component scores spread by 81 points, so the engine treats the answer as more contradictory."}],"fallback_used":false,"fallback_components":[],"source_summary":"2 destination anchors and 1 transfer nodes support this route check.","main_risk":"Marine warning risk is high","weakest_leg":"Krabi","path":"/routes/phuket-krabi-koh-lanta/","computed_at":"2026-08-22T17:51:47.142Z","expires_at":"2026-08-23T05:52:03.650Z","freshness":"expired","data_current":false,"expired":true},{"decision_id":"route_samui-phangan-tao","decision_type":"route_check","subject_id":"samui-phangan-tao","subject_name":"Samui -> Phangan / Tao island chain","subject_type":"route","score":51,"component_score":60.5,"penalty_points":9,"confidence":"Medium","label":"fragile","recommendation":"Samui -> Phangan / Tao island chain is a cautious route shape right now.","best_for":"Gulf island pacing when weather and ferry timing cooperate.","avoid_if":"You need a no-risk transfer chain or are forcing too many islands into a short trip.","check_first":["Gulf weather","last boat timing","mainland-to-pier burden","event timing on Phangan"],"next_action":"Keep Samui as the stable base and make extra islands earn their place.","pivot":"Stay on Samui only if the chain looks brittle.","freshness_class":"expired","score_formula_version":"signal-first-v2","signal_coverage":{"total_components":14,"available_components":14,"live_components":11,"fallback_components":3,"defaulted_components":0,"coverage_ratio":1},"score_components":[{"key":"destination_average","label":"Destination fit average","score":56.5,"weight":0.34,"contribution":19.21,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Average destination strength across the route chain."},{"key":"weakest_destination","label":"Weakest destination leg","score":56,"weight":0.18,"contribution":10.08,"source":"decision","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"No weakest destination leg was available, so the route uses the average destination score.","note":""},{"key":"transport_average","label":"Transport friction average","score":59,"weight":0.16,"contribution":9.44,"source":"signal","signal_type":"transport_friction","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"rain_average","label":"Rain fit average","score":72,"weight":0.1,"contribution":7.2,"source":"signal","signal_type":"rain_risk","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"marine_warning_risk","label":"Marine warning risk","score":24,"weight":0.1,"contribution":2.4,"source":"signal","signal_type":"marine_warning_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is coastal sea-state caution for ferry- or island-shaped route legs."},{"key":"pier_transfer_support","label":"Pier transfer support","score":23.5,"weight":0.08,"contribution":1.88,"source":"signal","signal_type":"pier_transfer_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is public transfer support around pier and coastal route anchors, not operator schedule truth."},{"key":"official_pier_support","label":"Official pier support","score":96,"weight":0.06,"contribution":5.76,"source":"signal","signal_type":"official_pier_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official Marine Department passenger-berth support across coastal route anchors, not live ferry schedule, closure, queue, or seat truth."},{"key":"airport_weather_operability","label":"Airport weather operability","score":66,"weight":0.1,"contribution":6.6,"source":"signal","signal_type":"flight_delay_risk","entity_id":null,"used_default":false,"default_reason":"","note":"This is airport weather and forecast disruption context on flight-dependent legs, not airline on-time performance."},{"key":"official_bus_terminal_support","label":"Official bus-terminal support","score":68,"weight":0.06,"contribution":4.08,"source":"signal","signal_type":"official_bus_terminal_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official MOT terminal-master support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_intercity_bus_support","label":"Official intercity-bus support","score":58,"weight":0.04,"contribution":2.32,"source":"signal","signal_type":"official_intercity_bus_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official BKS station and ticket-point support across the route chain for overland backup and bus-linked resilience, not live departure or booking truth."},{"key":"official_transport_complaint_support","label":"Official transport complaint support","score":81,"weight":0.04,"contribution":3.24,"source":"signal","signal_type":"official_transport_complaint_support","entity_id":null,"used_default":false,"default_reason":"","note":"This is official DLT 1584 complaint recourse and transport-burden context across the route chain, not local realtime service quality or dispatch truth."},{"key":"park_access_context","label":"Park access context","score":84,"weight":0.04,"contribution":3.36,"source":"signal","signal_type":"park_access_context","entity_id":null,"used_default":false,"default_reason":"","note":"This is public DNP protected-area planning context across nature-heavy route legs, not live closure, ranger, capacity, or ticket truth."},{"key":"node_confidence","label":"Transfer-node confidence","score":97,"weight":0.08,"contribution":7.76,"source":"signal","signal_type":"source_confidence","entity_id":null,"used_default":false,"default_reason":"","note":""},{"key":"route_baseline","label":"Route template baseline","score":62.5,"weight":0.06,"contribution":3.75,"source":"blueprint","signal_type":null,"entity_id":null,"used_default":false,"default_reason":"","note":"Route templates now act as low-weight route-shape hints instead of dominating the score."}],"penalty_components":[{"key":"freshness_penalty","label":"Freshness penalty","freshness_class":"fresh","points":0,"applied":false,"note":"Signals are fresh enough that no freshness penalty applies."},{"key":"coverage_penalty","label":"Coverage penalty","defaulted_components":0,"points":0,"applied":false,"note":"All decision components are covered by live or persisted graph values."},{"key":"contradiction_penalty","label":"Route contradiction penalty","points":9,"applied":true,"spread":73.5,"note":"Component scores spread by 74 points, so the engine treats the answer as more contradictory."}],"fallback_used":false,"fallback_components":[],"source_summary":"2 destination anchors and 2 transfer nodes support this route check.","main_risk":"Marine warning risk is high","weakest_leg":"Koh Phangan","path":"/routes/koh-samui-koh-phangan-koh-tao/","computed_at":"2026-08-22T17:51:47.142Z","expires_at":"2026-08-23T05:52:03.650Z","freshness":"expired","data_current":false,"expired":true}],"data_status":{"generated_at":"2026-08-22T17:51:47.142Z","freshness":"expired","is_current":false,"row_count":5,"current_row_count":0,"expired_row_count":5,"row_freshness_counts":{"fresh":0,"aging":0,"stale":0,"expired":5,"unknown":0}}}