Skip to content

Share Flutter user settings and add browser-approved Atomic account linking - #2035

Closed
joepio wants to merge 4 commits into
developfrom
codex/atomic-flutter-package
Closed

joepio wants to merge 4 commits into
developfrom
codex/atomic-flutter-package

Conversation

@joepio

@joepio joepio commented Oct 3, 2026 •

Copy link
Copy Markdown
Member

Summary

Flutter apps can now reuse Canvas's user, drive and device dialog and offer Atomic account linking through browser approval. The shared package handles the approval flow, provider-bound sessions and decryption of assisted encrypted identity backups. Host adapters install and persist the recovered identity and choose how to connect sync peers.

Canvas uses the extracted dialog through its existing adapter. Atomic Audio consumes the package and stages account identities separately from local projects, with a restart to select the profile. Account discovery connects available Cloud Server enrollments or reachable devices through the native Atomic protocol.

The native drive picker includes drives saved in the private home. Native peer sync also requests missing BLAKE3 file content when a live File update arrives after pairing, so a newly recorded take can transfer alongside its project edits.

Validation

  • Shared package: full Flutter analysis and 11 tests pass, including encrypted recovery/tamper rejection, provider isolation, redirect rejection, expiry, error redaction and cancellation.
  • Canvas: full Flutter analysis and 66 tests pass; its cryptography dependency is locked.
  • Complete cd browser && pnpm run -r lint passes with existing warnings.
  • Audio consuming this package and native library: 19 native unit tests, Clippy with warnings denied, and a real two-process iROH/Loro/BLAKE3/presence regression pass, including files added after pairing.
  • Audio native macOS integration passes with the shared drive dialog. A separate actual microphone regression verifies recording while transport continues.
  • Package CI is included. The updated Canvas native integration fixture has not been run.

Draft boundaries

The live atomic.place browser/account-to-Audio acceptance check is pending: the browser's saved site permission currently blocks access. Mocked account tests do not establish hosted compatibility. Canvas exposes the optional capabilities but has not yet wired the account-link client into its host adapter.

This draft supports assisted encrypted backups; passkey/code-only recovery stays manual. Cloud Vault restore/upload and identity hot switching are not implemented. Sync requires a reachable device or a populated Cloud Server enrollment. Account profile persistence is the host's responsibility. Publishing and physical-device acceptance remain outstanding.

Follow-up: planning/flutter-account-link.md and planning/atomic-flutter-package.md.

@joepio joepio changed the title Extract Canvas user settings into a reusable Flutter package Share Flutter user settings and add browser-approved Atomic account linking Oct 3, 2026
joepio added a commit that referenced this pull request Oct 6, 2026
One tested commit for the open PRs of 5 October: link device to account (#1948), one profile form (#1953), faster branch runs (#1956), end-to-end encrypted conversations (#1971), passkey ceremony header (#1972), Flutter account package (#2035), cheap canvas undo (#2053), atomic.place tab title (#2056), table resource cell (#2057), small table fixes (#2058), storage map (#2061), Sync page cloud ladder (#2072), several served-domain suffixes (#2073), one sign-in (#2074), smaller chat messages (#2077), bring-along e2e fix (#2078), inline row data loss (#2079), Retry-After (#2080), #2070, #2071, #2066, #2067, #2068, #1969, #1887, #1897 and #1920.

Compressed stored values from #2077 stay readable, but a downgrade cannot read compressed rows.

Co-authored-by: Joep Meindertsma <joep@ontola.io>
@joepio joepio closed this Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant