Skip to content

[Feature]: Implement Desktop external storage connections, sync, and reconcile #133

Description

@Dencyuman

Use case

Fulfill Desktop external storage, connection management, backend binding, sync/reconcile, and recovery workflows while preserving Runtime revision and Access guarantees.

Suggested shape

Implement the external StorageAdapter connection contract, OS keychain-backed credentials, provider capability discovery, remote picker/handoff, BackendBinding, conditional writes/leases, sync, reconcile preview, disconnect, and UI state.

Acceptance criteria

  • Users can connect, authorize, inspect, refresh, and disconnect configured external storage adapters without credentials entering LDL, containers, logs, or frontend persistence.
  • Remote selection resolves a stable Host Document ID and explicit BackendBinding distinct from the portable Project StableAddress.
  • Open/save/autosave use provider capability negotiation, conditional writes or leases, and Runtime revisions rather than blind overwrite.
  • External changes enter typed fast-forward, conflict, merge/rebase, or quarantined reconcile-preview paths and never silently replace restricted content.
  • Runtime and Access re-evaluate definition, state, asset, package, and project-setting effects before publication.
  • Offline edits, credential expiry, rate limit, partial upload, unknown write result, moved item, and reconnect converge to a recoverable state.
  • Connection UI exposes provider, account, scope, last sync, pending work, conflict, and disconnect consequences without leaking secrets.
  • Adapter contract tests and at least one deterministic reference adapter prove open/save/sync/reconcile/restart behavior.

Constraints

  • Provider adapters must not reimplement LDL, Query, revision, conflict, or Access semantics.
  • Do not add Organization/Workspace management, sharing, or realtime collaboration.

Alternatives and workarounds

Local files alone contradict the Desktop definition of opening local or connected LayerDraw documents and the Desktop F36/F37 matrix entries.

Dependency

Blocked by #128.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: runtimeDocument runtime, state, history, and realtimearea: webWeb editor and browser integrationpriority: p1High prioritytype: featureA proposed product capability or enhancement

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions