## TL;DR
Catch the expired delta token and fall back to a full sync, then store the new delta link. Delta links expire; the sync must handle it, not crash on it.

## Error
```text
Sync failed: delta link expired (resyncRequired)
```

## Steps
1. Confirm the error: the Graph delta query returns the expired-link response. Expected: expiry confirmed, not another failure.
2. Implement the fallback: on expiry, run a full enumeration, then save the fresh delta link the full sync returns. Expected: the fallback path in place.
3. Shorten the sync interval so delta links are used before they expire. Expected: expiries become rare.
4. Re-run the sync. Expected: it completes via the fallback and resumes incremental syncs after.

## When to use
- Entra delta sync fails with an expired link
- Syncs run infrequently
- The agent treats delta links as permanent

## When not to use
- The delta query fails for other reasons (auth, throttling)
- You do not use delta queries (use them; they are cheaper)
- The full sync also fails (a bigger problem)

## Tool compatibility
Microsoft Graph delta queries.

### Variant phrasings
### expiry on every run
The interval exceeds the link lifetime. Sync more often or always full-sync.

### agent crashes instead of falling back
The expiry response is documented; handle it as a normal branch, not an exception.

## Why it happens
Delta links are server-side cursors with lifetimes. Infrequent syncs outlive them, and agents written for the happy path have no fallback.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_zx1J3zAKjHOFe-Az_40W_Q
