Lab data model and differ
The lab stores Graph responses and compares an execution with its parent branch. Complete local setup before capturing mailbox data.
Stored entities
| Entity | Meaning |
|---|---|
DeltaStream | Mailbox-folder delta, folder-message delta, or Outlook-category full-pull scope |
DeltaExecution | One round with parent/child relationships |
DeltaEntitySnapshot | Latest known entity state |
DeltaEntityVersion | Entity state associated with an execution |
WebhookCall, WebhookEvent | Callback and notification evidence |
Delta executions store responses, protect continuation URLs, normalize events, and update snapshot/version state. Outlook-category full pulls instead save a complete response and compare it with the latest successful full pull. They retain no reusable continuation link.
Normalized events
Graph can return a full object, sparse patch, or deletion marker. Normalization supplies entityId, eventType, before, after, and differences so comparison uses a consistent representation.
A sparse update contains only some fields. The displayed differ merges these fields into the comparison state before computing changes. The raw response and persisted normalized after object can remain sparse. Normalization does not apply the differ's merge to every stored snapshot. A raw response containing only isRead does not prove deletion of the omitted properties.
Difference meanings
| Difference | Condition |
|---|---|
| Added | No before, but an after state exists |
| Removed: tombstone | Provider removal marker or absent after, with a known prior state. removalReason is tombstone |
| Removed: moved to Deleted Items | A detected move into Deleted Items. removalReason is movedToDeletedItems, and merged after remains available |
| Changed/Updated | Both states exist and relevant comparison fields differ |
| Unchanged | Compared state has no relevant difference |
A move to Deleted Items is not proof of permanent deletion. A provider tombstone reports removal from that delta scope, not necessarily permanent destruction of the item. Inspect the removal reason and scope.
Duplicate entities with the same changeKey can appear within one execution. The differ removes duplicate observations to avoid repeated additions and noisy summaries.
The Differ tab shows added/removed/changed/unchanged counts and duplicate-removal count. It shows state-colored entities, field changes such as isRead and flag.flagStatus, and optional HTML-body comparison.
Interpret the result relative to the selected execution's parent. It is not an independent statement of the entire live mailbox. Use Lineage and raw response if a difference seems unexpected.
Outlook label comparison
OUTLOOK_CATEGORY uses paged full catalog reads with STANDARD_PULL. It compares against the latest successful full pull, not a saved delta token. Failed pulls do not become comparison baselines.
The differ normally identifies a category by its trimmed NFC-normalized display name, with ID as fallback. Equal names with a changed color produce Changed. A rename appears as removal plus addition. These comparison identities do not replace the provider category ID for API operations. Read-only catalog pulls need MailboxSettings.Read. See label pull behavior.