Skip to content

Release 2.50.0: fix Cloud publishing, sync, and restore refresh - #774

Merged
adibhanna merged 3 commits into
mainfrom
2.50.0
Sep 14, 2026
Merged

adibhanna merged 3 commits into
mainfrom
2.50.0

Conversation

@adibhanna

Copy link
Copy Markdown
Contributor

Cloud tester feedback exposed publishing timeouts, confusing update controls, misleading file-limit guidance, and delayed incoming edits. Live regression testing also reproduced a backup restore that updated disk while leaving the open editor stale. This prepares version 2.50.0 with fixes for those desktop behaviors.

Changes

  • Allow attachment-bearing publications and updates up to five minutes. When a network failure leaves the result uncertain, show that uncertainty and any existing public link without claiming the latest content is live or automatically creating another share.
  • Add Update note to Settings → Cloud → Published notes, using current disk content or unsaved edits. Rename Refresh to Refresh list and explain the distinction.
  • Display decimal Cloud file limits, including the 10 MB limit, and explain that oversized files must be reduced or removed.
  • Check lightweight remote metadata every five seconds while the desktop is active and online, with failure backoff and the existing slower full-vault scan retained.
  • Refresh open notes after a Cloud restore, while preventing delayed watcher reads from overwriting newer reads, local saves, or unsaved edits.
  • Bump all eight workspace manifests and corresponding lockfile metadata to 2.50.0, following the repository's release convention. Dependencies are unchanged.

Validation

  • 4,386 automated tests passed: shared-domain 1,596, app-core 2,038, desktop 752; five skipped. Full workspace tests passed, followed by the complete app-core suite after the final editor guards.
  • All seven workspace typecheck tasks passed. Desktop build and packaged CLI validation passed, including a fresh build after the version bump. Version consistency and git diff --check passed.
  • Five new restore/read-order regression cases failed before their fixes and passed afterward. Independent code review completed.
  • A real local HTTP test delays a committed 1.1 MB publication response for 31 seconds and verifies creation and update at the same link. Separate Electron UI testing with a controlled server verifies the uncertain-result notice and retry through update.

Live verification used the rebuilt macOS Electron desktop against production Cloud, synthetic fixtures, and independent clients running the desktop sync implementation:

Scenario Result
8.1 MB, 8.7 MB, and exact 10,000,000-byte uploads Downloaded intact; byte lengths and hashes matched.
12.6 MB upload Rejected with the corrected 10 MB guidance; removing it restored completed sync.
Interrupted object-storage upload A fresh client process resumed the 8.7 MB upload successfully.
Incoming remote edit Appeared automatically in the desktop in 5.068 seconds.
Delete and re-add attachment Both operations propagated; restored bytes matched.
Publish, update, and unpublish with a 1.1 MB image Browser rendered the note and image; latest text appeared at the same link; unpublish returned HTTP 404.
Concurrent edits Preserved both versions; merged resolution synced without a pending conflict.
Backup and restore Restored text and attachments with matching hashes; removed files created after the snapshot.
Restore with the editor open Final build refreshed the existing editor to restored content without reopening the note.

Production fixtures, the public share, test vault, and both backups were removed. Live UI testing covered macOS desktop; Android/iPhone UI and their sync timing were not tested. Delayed publication responses were tested against the controlled server; production publishing completed normally.

Allow attachment publications to complete beyond 30 seconds, expose uncertain outcomes without claiming success, and make updating a public note explicit in Settings. Detect incoming changes through lightweight cursor checks and show actionable decimal file limits.
Compare watcher content with the current buffer instead of a historical save. Invalidate delayed reads after newer watcher events or local writes so Cloud restores refresh open notes while unsaved edits remain protected.
response.end(JSON.stringify({ id: 1, slug: 'test', url: 'http://localhost/s/test' }))
} catch (error) {
response.writeHead(500)
response.end(String(error))
@adibhanna
adibhanna merged commit 104416f into main Sep 14, 2026
7 checks passed
@adibhanna
adibhanna deleted the 2.50.0 branch September 14, 2026 16:33
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.

2 participants