Skip to main content

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​

EntityMeaning
DeltaStreamMailbox-folder delta, folder-message delta, or Outlook-category full-pull scope
DeltaExecutionOne round with parent/child relationships
DeltaEntitySnapshotLatest known entity state
DeltaEntityVersionEntity state associated with an execution
WebhookCall, WebhookEventCallback 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​

DifferenceCondition
AddedNo before, but an after state exists
Removed: tombstoneProvider removal marker or absent after, with a known prior state. removalReason is tombstone
Removed: moved to Deleted ItemsA detected move into Deleted Items. removalReason is movedToDeletedItems, and merged after remains available
Changed/UpdatedBoth states exist and relevant comparison fields differ
UnchangedCompared 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.