--- id: MEM-14 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-14 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # MEM-14 — An append reports how much of it was new *GR-MEM (Part I) · level: extended · profiles: storage-api, runtime · added in 1.0* Every drop the buffer makes is silent, and the total message count looks identical across two identical passes. The delta is the only evidence a caller has that a turn actually landed. ## The rule > **Normative.** This is the rule. > > 1. A conversation-buffer append reports how many of the incoming messages were added as new entries, and whether that number is greater than zero, alongside the resulting buffer count. > > 2. The number counts appends and not the change in buffer size, because a windowed buffer can evict as many older messages as the call added. > > 3. A deduplicated message and a placeholder replacement each count as zero, since neither adds an entry. > > 4. An append under a refused identity scope reports zero, together with its empty buffer. ## What it means The count that changes is not the buffer's size. A windowed buffer can evict as many older entries as an append adds, so the total count after a call that genuinely added a message can be exactly what it was before. The number a caller needs is how many of the incoming messages actually became new entries — the delta the buffer's own size cannot show. A message dropped as a duplicate, and a placeholder a real result replaces in place, both add zero entries, so both report zero even though the buffer's size does not tell them apart from a message that landed cleanly. ## Example A three-message window already holds three entries; the incoming message is new content, and the window evicts the oldest to make room. ```json title="A new message arriving at a full three-message window" verdict="appended" {"count": 3, "appended": 1, "appended_any": true} ``` The buffer is still three messages long — the same size it was — but one of those three is the message that just arrived, and `appended` says so where the count alone could not. ```json title="A tool result re-fired under an id the buffer already holds" verdict="dropped" {"count": 2, "appended": 0, "appended_any": false} ``` Here the buffer size does not change either, but for the opposite reason: nothing new landed at all. ## Related rules - Names: MEM-1, MEM-10, MEM-13 --- 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.