Skip to content

Keep one share link per board and refresh receivers' copies - #1477

Merged
thesiti92 merged 17 commits into
mainfrom
share-links
Nov 2, 2026
Merged

thesiti92 merged 17 commits into
mainfrom
share-links

Conversation

@thesiti92

@thesiti92 thesiti92 commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Sharing a board today mints a new /s/<capability> URL on every share, so one board ends up with several links and every link a receiver opens becomes another copy on Home. This makes a share link belong to the board: the first share mints the URL, every later share from that board uploads a new revision behind the same URL, and the URL always serves the newest revision.

Server side lands in cloudboard (schema split into share_link + revisions, newest-revision resolution, ?rev=); this PR is the Desktop half.

  • Protocol 0.5.0: shareLink(origin, capability, revision?) / parseShareLink carry ?rev=; tolerant schemas for the revision list and shared meta; shareCreatedSchema stays strict so shipped builds keep working.
  • Host: the share popover keys its link by board and re-uploads only when the board version changed (the server dedupes equal versions); import asks the service which revision a link serves before opening a copy, refreshes a receiver's unedited copy in place, imports a sibling copy beside an edited one, pins copies opened from ?rev= links, and opens the newest local copy when the service cannot answer. Legacy copies match their revision by sharedAt.
  • Store: copiesOf(key) and refreshCopy (same board id, Trash kept, 409 past baseVersion, refuses non-copies).
  • Deep link dev-fast-review://share/<token>?rev= carries the revision.
  • Journeys: share-link (share, edit, reshare, URL unchanged) and shared-review now covers refresh in place, the edited-copy path and offline reopen, against a fake share service.

Stacked on #1470 (protocol 0.4.0). A follow-up PR adds the history list and Revoke to the popover.

@thesiti92
thesiti92 added this pull request to stack #1479 November 1, 2026 22:02
Base automatically changed from share-peek-rows to main November 2, 2026 19:13
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
… copy

Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 12a7a292-c657-465f-b5f3-c638d3396f22
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
…ited one

Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 64182dea-534e-45f1-8e28-c1e27a5d6bab
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: 196d7f0b-63a2-4186-84b0-5068df27bf9a
Agent-Session: b47f56d8-24aa-4d4f-95b3-4217b7ec9e00
Agent-Session: f2f8f3d8-5a50-4c15-8ad8-9c9308d4a110
Agent-Session: 226d831c-5d71-4f4d-8cdb-7b3c4f30284d
Agent-Session: 61c94475-694a-4e46-8971-e0d703d3b344
Agent-Session: 2b04f44e-91c6-4568-8c57-c4a01b2828ad
Agent-Session: d28b54c2-3ec8-4cf0-959a-e356abec0831
@thesiti92
thesiti92 merged commit 3a803a0 into main Nov 2, 2026
3 checks passed
@thesiti92
thesiti92 deleted the share-links branch November 2, 2026 19:58
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