runAgent owns the list, so every call in one turn shares its numbering, and each record carries only the entries its own call added: the turn's whole list is the flattening of its records. The schema accepts the field as optional, because zod drops unknown keys and a reopened conversation would otherwise lose every link.