{
"trip": "saarland-therme",
"name": "Marrakech night, ironworks morning",
"where": "Rilchingen & Völklingen, Germany",
"task": "Finish planning this trip. Fill every entry in `unresearched` with sourced figures in the same shape.",
"assumptions": {
"travellers": 2,
"rooms": 1,
"dinner_for": 2
},
"fx": {
"base": "EUR",
"rates": {
"EUR": 1,
"CHF": 1.0681
},
"checked": "2026-08-24",
"note": "Reference rates, updated by hand. Do not call a currency service."
},
"readiness_percent": 94,
"planning_state": "Ready to book",
"claims": [
{
"field": "travel.duration",
"status": "estimate",
"value": [
3.75,
4.25
],
"unit": "hours by car from Antwerp",
"basis": "Planning range with traffic buffer; Saarbrücken alone was about 348 km and 3 h 29 in the research snapshot.",
"checked": "2026-08-25"
},
{
"field": "cost.room-package",
"status": "fact",
"value": [
310,
310
],
"currency": "EUR",
"unit": "Pasha room package for two — published anchor",
"variable": "Seasonally variable; exact Friday quote required.",
"source": "https://www.marrakech-hotel.de/zimmer.html",
"checked": "2026-08-25"
},
{
"field": "cost.ironworks",
"status": "fact",
"value": [
34,
34
],
"currency": "EUR",
"unit": "Völklinger Hütte admission for two",
"source": "https://voelklinger-huette.org/en/your-visit/",
"checked": "2026-08-25"
},
{
"field": "choice",
"status": "our_choice",
"value": "Make this a Friday–Saturday trip for Night of Lights."
},
{
"field": "choice",
"status": "our_choice",
"value": "Use the included arrival-day Therme access and visit Völklinger Hütte after checkout."
},
{
"field": "verify",
"status": "must_verify",
"note": "Exact Friday Pasha rate and room cancellation."
},
{
"field": "verify",
"status": "must_verify",
"note": "Night of Lights, spa capacity and textile-free-area inclusions."
},
{
"field": "verify",
"status": "must_verify",
"note": "Restaurant and current ironworks closures."
}
],
"unresearched": [
"cost.dinner",
"cost.fuel",
"cost.lunch"
],
"blocks_total_cost": true,
"cost_total_rule": "A whole-trip total is published only when every cost component is sourced. Never a partial total, never 'from', never an estimated total.",
"itinerary": [
{
"day": 1,
"label": "Friday",
"title": "A candlelit thermal night",
"activities": [
{
"label": "Drive Antwerp → Saarland Therme",
"hours": [
3.75,
4.25
],
"status": "estimate"
},
{
"label": "Arrival-day Therme access",
"hours": null,
"status": "unresolved",
"note": "Included from 12:00, but no visit duration is imposed."
},
{
"label": "Night of Lights",
"hours": null,
"status": "unresolved",
"note": "Begins after dusk; exact date confirmation required."
}
]
},
{
"day": 2,
"label": "Saturday",
"title": "Iron, stairs and big spaces",
"activities": [
{
"label": "Völklinger Hütte visit",
"hours": [
2,
3
],
"status": "estimate"
},
{
"label": "Drive Völklingen → Antwerp",
"hours": [
3.75,
4.25
],
"status": "estimate"
}
]
}
],
"itinerary_mode": "days",
"open_questions": [
"Exact Friday Pasha room rate and cancellation conditions.",
"Dinner booking and any spa-area supplements.",
"Capacity stops and temporary closures at Völklinger Hütte."
],
"itinerary_contract": "Every trip page uses this shape. Timings are rough and may be wrong unless calendar_event is true, which identifies the one activity fixed by trip.calendar. Fill day -> activities[] -> {label, hours, status, calendar_event?}, or say why a day is empty. hours may be a number, a [min,max] range, or null when no figure is published - never invent one. status is fact (sourced timing), estimate (reasoned) or unresolved (something must be decided or booked first). Do not invent waking, breakfast or transfer time, and do not compute how full a day is - just list what we want to do and roughly how long it takes.",
"discovery_query": "Saarland Therme Le Marrakech Night of Lights Pasha room review"
}