Skip to content

Add provider-neutral connector cursor and source change contracts #8

Description

@mdheller

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

  1. Contracts are added under packages/contracts/ or the future evidence-contracts repo once available.
  2. Each contract has a valid example fixture.
  3. A validator runs all examples.
  4. The model supports full snapshots and incremental deltas.
  5. The model preserves source aliases separately from canonical blob identity.
  6. The model can support Microsoft Graph, Google Drive, iCloud Drive, email, notes, AI chat exports, media libraries, and local filesystem scans.
  7. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions