whats_changed
Report only what changed for a watched trip since a checkpoint.
Use this tool when the user asks for news on a trip already registered
with watch_trip; for the stored notification log rather than a live
diff, use get_trip_updates_since. Recomputes the
trip's current assessment and diffs it against the checkpoint at/just-
before `since` (or the last evaluation when `since` is omitted). Returns
{material, summary, added_events, removed_events, changed_events,
previous_travel_status, travel_status, confidence_from, confidence_to}.
`summary` is a plain-language line ('Since your last check: rail strike
CONFIRMED (was: announced); a road closure cleared; confidence 63->71%').
A non-material tick returns material=False with a clearly-flagged 'No
material change' summary — never invented churn. `since` is an optional
ISO-8601 timestamp (e.g. the user's last-seen time). Id is regex-validated
(^trip-[a-z0-9-]+$); unknown id -> {"error": "not_found"}, malformed id ->
{"error": "invalid_trip_id"}.
The response also forwards the presentation blocks from the current
assessment so the LLM consumer has full context alongside the delta:
presentation (affects_your_trip / doesnt_affect_your_trip / next_steps),
track_record_ref (90-day counts + URL), and suggested_next_call
(the suggested follow-up action). Forwarded in both material=True and
material=False branches; absent if upstream did not compute them
(legacy code paths) — never fabricated.
`audience` (optional: tmc | hotel | ota | tour_operator) attaches the
same `persona` block as assess_trip/watch_trip to the change alert —
audience-tagged actions for the events currently affecting the trip, so
the alert itself carries the operational next step. Unknown audience ->
honest error listing valid_audiences.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| trip_id | Yes | ||
| audience | No |