Summary
Add the provider-neutral sync/change contract family that lets Exodus compete with Microsoft Graph-style delta/change semantics without adopting a vendor-authoritative graph model.
Why
Microsoft Graph has useful ideas: unified resources, delta queries, change notifications, and bulk extraction. Exodus should adopt the useful pattern but invert the authority model:
- providers are ingress surfaces only,
- the user evidence repository is canonical,
- all source cursors and change records are evidence-backed,
- snapshots and deltas feed custody, proof packs, and provider-exit readiness.
Contract family
Add initial contracts for:
ConnectorCursor
SourceSnapshot
SourceChangeRecord
SyncRun
SyncCheckpoint
ProviderRelationship
Design posture
ConnectorCursor
Records provider/source traversal state without making provider tokens canonical truth.
Should capture:
- provider
- surface
- connector profile
- cursor state digest or opaque cursor ref
- last successful sync time
- source alias refs
- acquisition run refs
- expiry / invalidation status
SourceSnapshot
Records a point-in-time view of a provider surface.
Should capture:
- provider
- surface
- account ref
- object count estimate
- byte estimate
- discovered folders/containers
- export methods
- evidence refs
- confidence gaps
SourceChangeRecord
Records observed creates, updates, deletes, moves, renames, permission changes, metadata changes, and blocked events.
Should capture:
- change type
- source object ref
- old/new source aliases when available
- timestamp observed
- provider timestamp if available
- acquisition run ref
- canonical blob ref if resolved
- blocked reason if unresolved
SyncRun / SyncCheckpoint
Record the broker's synchronization pass and checkpoint boundaries.
Should capture:
- full snapshot vs incremental delta
- input cursor
- output cursor
- object counts
- error counts
- blocked counts
- manifest refs
- proof refs
ProviderRelationship
Records provider-native relationships without treating them as authoritative beyond the source context.
Examples:
- account owns drive
- folder contains file
- notebook contains section
- conversation contains message
- playlist orders media item
- email thread contains message
Acceptance criteria
- Contracts are added under
packages/contracts/ or the future evidence-contracts repo once available.
- Each contract has a valid example fixture.
- A validator runs all examples.
- The model supports full snapshots and incremental deltas.
- The model preserves source aliases separately from canonical blob identity.
- The model can support Microsoft Graph, Google Drive, iCloud Drive, email, notes, AI chat exports, media libraries, and local filesystem scans.
- The model explicitly states that graph/search/vector projections are derivative, not canonical custody.
Non-goals
- No live Microsoft Graph implementation in this issue.
- No provider API credentials.
- No graph database as system of record.
- No replacement for raw EvidenceBlob custody.
Relationship to PRs
- Follows
SocioProphet/exodus#5.
- Aligns with
SocioProphet/sociosphere#265.
- Supports later
evidence-broker provider adapters.
Summary
Add the provider-neutral sync/change contract family that lets Exodus compete with Microsoft Graph-style delta/change semantics without adopting a vendor-authoritative graph model.
Why
Microsoft Graph has useful ideas: unified resources, delta queries, change notifications, and bulk extraction. Exodus should adopt the useful pattern but invert the authority model:
Contract family
Add initial contracts for:
ConnectorCursorSourceSnapshotSourceChangeRecordSyncRunSyncCheckpointProviderRelationshipDesign posture
ConnectorCursor
Records provider/source traversal state without making provider tokens canonical truth.
Should capture:
SourceSnapshot
Records a point-in-time view of a provider surface.
Should capture:
SourceChangeRecord
Records observed creates, updates, deletes, moves, renames, permission changes, metadata changes, and blocked events.
Should capture:
SyncRun / SyncCheckpoint
Record the broker's synchronization pass and checkpoint boundaries.
Should capture:
ProviderRelationship
Records provider-native relationships without treating them as authoritative beyond the source context.
Examples:
Acceptance criteria
packages/contracts/or the futureevidence-contractsrepo once available.Non-goals
Relationship to PRs
SocioProphet/exodus#5.SocioProphet/sociosphere#265.evidence-brokerprovider adapters.