Skip to content

Migrate Outlook to Graph immutable ids so a move never changes a message's address #117

Description

@tabmail-kmyi

Why

On Microsoft Graph a move changes the message id. Every queued follower that names the pre-move id is therefore addressed to a message that no longer exists under that id, and Graph answers 404. #114 closes the ordinary path with a same-transaction handoff: when a move retires, the drain re-addresses every queued follower to the id Graph returned.

What the handoff cannot close is the window between Graph's 2xx for the move and the local transaction that retires the move and re-addresses the followers. If the process dies inside that window, the followers still name the old id at the next launch and are lost. That window is accepted by the owner as an explicit exception, stated in the source at the readdress site and registered in the known-issues register. This issue tracks the structural fix that removes the window and lets the handoff be deleted.

What

Make Outlook an immutable-id account, the way Gmail already is:

  • Send Prefer: IdType="ImmutableId" on every Graph request that returns or accepts a message id (list, get, move, delta, mail folders, batch).
  • One-time migration of every stored Outlook message id via translateExchangeIds (mutable → immutable), including the search index keys and any pending-operation rows that name Outlook ids.
  • Parity in the notification service extension's Graph client, and in the push subscription / delta bookkeeping that carries ids across processes.
  • After the migration, delete the Outlook: an action queued on a message before its move reaches Graph runs against the pre-move id and is dropped on the 404 #114 handoff and the Graph arm of the address-changes-on-move logic; the queue then treats Outlook like Gmail (address-stable move).

Notes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority: P4Enhancement or new feature: good to have, not a must

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions