--- id: MEM-2 family: GR-MEM level: extended profiles: [storage-api, runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-mem/mem-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # MEM-2 — An assistant turn is a duplicate only when every call it declares is known *GR-MEM (Part I) · level: extended · profiles: storage-api, runtime · added in 1.0* 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. > > 1. An `assistant`-role message is dropped as a duplicate only when every tool call id it declares is already declared somewhere in the buffer. > > 2. 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`. ```json title="A turn declaring only the id already known" verdict="dropped" { "role": "assistant", "content": "", "tool_calls": [{ "tool_call_id": "c1", "name": "search" }] } ``` ```json title="A turn declaring one known id and one new one" verdict="kept" { "role": "assistant", "content": "", "tool_calls": [{ "tool_call_id": "c1", "name": "search" }, { "tool_call_id": "c2", "name": "lookup" }] } ``` ## Related rules - Names: MEM-1 - Referenced by: MEM-1, MEM-11 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.