An assistant turn is a duplicate only when every call it declares is known
The assistant side of the same guard. Dropping a turn that declares one new call would lose that call, so a partial overlap is kept.
The rule
Normative: this is the rule
- An
assistant-role message is dropped as a duplicate only when every tool call id it declares is already declared somewhere in the buffer. - A turn declaring at least one id not yet seen is appended.
What it means
The assistant side of MEM-1's guard is not symmetric with it. A tool result is one id; an assistant turn can declare several at once, and dropping the whole turn because some of its ids are already known would silently lose whichever ones are not. A turn is a duplicate only when every id it declares is already declared somewhere in the buffer — a single new id is enough to keep it.
Example
A buffer already holds a turn that declared tool call c1.
{ "role": "assistant", "content": "", "tool_calls": [{ "tool_call_id": "c1", "name": "search" }] }{ "role": "assistant", "content": "", "tool_calls": [{ "tool_call_id": "c1", "name": "search" }, { "tool_call_id": "c2", "name": "lookup" }] }Rule identifiers are permanent and are never renumbered. Each implementation publishes its own standing against these rules; this specification does not.spec 1.0-draft · MEM-2 · changed in spec 1.0