dialogue state tracking — slots fill, update, correct across turns
turn 1
"I want a cheap restaurant in the north."
cuisine: —
area: north
price: cheap
people: —
turn 2
"Italian food please."
cuisine: italian
area: north
price: cheap
people: —
turn 3
"Actually make it moderate pricing."
cuisine: italian
area: north
price: moderate
people: —
turn 4
"For four people."
cuisine: italian
area: north
price: moderate
people: 4
final state (JGA counts if and only if all slots match gold)
{cuisine: italian, area: north, price: moderate, people: 4}
→ pass to backend: book_restaurant(cuisine=italian, area=north, price=moderate, people=4)
invariants — correction overwrites (turn 3); explicit negation clears; untouched slots persist