Skip to content

Releases: openlfcp/obsidian

Shared Tasks 0.5.2

Choose a tag to compare

@github-actions github-actions released this 30 Oct 07:28

Shared Tasks 0.5.2

Shared Tasks 0.5.2 answers the automated review of the Obsidian community
directory: the plugin's code now passes Obsidian's own lint rules without
warnings. For catalog users updating from 0.5.1; nothing changes in how you
share tasks.

Requires Obsidian 1.13.4 or later, as 0.5.1.

The Markdown format of your notes and the sync protocol are unchanged.

What changed since 0.5.1

  • The command "Open Shared Tasks pane" has a new ID, open-pane (it
    was open-shared-tasks-pane), because the community review asks that a
    command ID not repeat the plugin ID. The command name is the same.
  • Elements, timers and type checks work the Obsidian way. The plugin
    builds its interface with Obsidian's own element helpers and uses the
    window's timers, which is what pop-out windows expect.
  • A damaged section marker is marked with a solid warning underline
    instead of a wavy one, in the same warning color. The line keeps its
    height.
  • The developer pane prototype is removed. It never shipped in a
    release build. An old data.json that still has the
    developerPanePrototype key is read as before and the key is ignored.

Install and upgrade

From Settings → Community plugins → Updates. Nothing to migrate: identity,
keys, shared sections and queued edits are kept.

If you set a hotkey on "Open Shared Tasks pane", set it again under
Settings → Hotkeys: a hotkey belongs to the command ID, and the ID changed.

By hand: put main.js, manifest.json and styles.css from the release
page into <vault>/.obsidian/plugins/shared-tasks/ and compare them with
these checksums.

File SHA-256
main.js e941dc3ac039f0f9c6b1ec8824b80a22042a4c04e63700fbcf171d97303942e3
manifest.json 575f298213aa46c9d362cb516d187fb7cedae0dc8e98e1ae7679b326a037479a
styles.css 6e1f2f832739373f8b28237a53d4f9641eca3f69549039dc7ae738cdd43bab8a

Built by CI from the commit the tag 0.5.2 points to; the release page
carries a build provenance attestation: gh attestation verify main.js --repo openlfcp/obsidian.

Rolling back to 0.5.1

Install 0.5.1 over 0.5.2 (BRAT: choose version 0.5.1 for
openlfcp/obsidian, or put 0.5.1's three files into the plugin folder).
The data format is the same; a hotkey set on the new command ID has to be
set again.

Known limits

As in 0.5.1.

Earlier notes: 0.5.1.

Shared Tasks 0.5.1

Choose a tag to compare

@github-actions github-actions released this 25 Oct 19:34

Shared Tasks 0.5.1

Shared Tasks 0.5.1 makes sharing a section with someone harder to get wrong:
the palette invites to the section you are in, a link of the wrong kind is
refused before it is used, every dead end says what to do next, and a
section marker damaged by a stray keystroke is repaired in one click. For
catalog users updating from 0.5.0.

Requires Obsidian 1.13.4 or later, as 0.5.0.

The Markdown format of your notes and the sync protocol are unchanged.

What changed since 0.5.0

  • "Invite to this section…" (new command, ID invite-to-section)
    invites to the shared section at the cursor, as the pane does. With the
    cursor outside every shared section it says so and opens no picker.
  • The older one-task-at-a-time collaborations step aside. Their
    commands are named "Legacy: …" and appear only in a vault that already
    holds such a collaboration; "Legacy: Join task collaboration" is always
    there. "Legacy: Invite to task collaboration" (the old
    invite-collaborator ID, so hotkeys keep working) lists only those
    collaborations, never shared sections. Pickers that still list both kinds
    say which is which.
  • A link of the wrong kind is refused before it is used. Joining from
    the pane, or with a palette join, accepts shared sections only. A link to
    an older task collaboration is refused before anything is claimed, says
    what it is and asks you to request a section link; the link still works
    with "Legacy: Join task collaboration". With shared sections off on the
    device, joining from the pane works as before.
  • Dead ends say why and what next. "Already joined" for an older task
    collaboration, an empty list of shared sections on a device that holds
    only an older collaboration, and "Insert shared section…" with nothing to
    insert yet now name the cause and the next step.
  • A damaged section marker is repaired in one click. When the start or
    end line of a shared section was changed by a typo (up to two characters)
    and exactly one section on this device matches, the pane shows one
    problem, says that edits to the section are not sent until it is fixed,
    and offers Restore, which rewrites only that line if the note has not
    changed since. Otherwise Repair is offered as before. The section shows
    "Damaged in this note" instead of "Not inserted yet", and the pane's main
    action is the fix, never "Insert into a note…".
  • Section markers are protected in Live Preview. With sharing metadata
    hidden, typing into a marker line is refused, with a short notice that
    points to Source mode; indenting and deleting whole lines still work. A
    damaged marker is hidden too, with a warning mark so you can find it.

Fixed

  • A section whose start marker was changed by one character showed all its
    markers in Live Preview, ignored "Show sharing metadata", and silently
    stopped sending edits (#89).

Install and upgrade

From Settings → Community plugins → Updates. Nothing to migrate: identity,
keys, shared sections and queued edits are kept.

If you bound a hotkey to one of the older collaboration commands, it does
nothing in a vault that holds no such collaboration, because the command is
not there.

By hand: put main.js, manifest.json and styles.css from the release
page into <vault>/.obsidian/plugins/shared-tasks/ and compare them with
these checksums.

File SHA-256
main.js b5b3a3c386dd1f5521b0a497c2f05e49c62b9f2592d6d62828bbe4f076d99ee6
manifest.json a601f824640dc5f1c0752376aeb0f429d63f12dc32b62d2cdd387708989554d4
styles.css 29713d1ed9fa11756ef8773cd36e59cab7dfd15d1b9db6b42c5ef76fb6cc06dc

Built by CI from the commit the tag 0.5.1 points to; the release page
carries a build provenance attestation: gh attestation verify main.js --repo openlfcp/obsidian.

Rolling back to 0.5.0

Install 0.5.0 over 0.5.1 (BRAT: choose version 0.5.0 for
openlfcp/obsidian, or put 0.5.0's three files into the plugin folder).
The data format is the same; the old command names come back.

Known limits

As in 0.5.0, plus:

  • Restore covers the start and end lines of a section. A damaged marker
    under a single task (lfcp-ref) still goes through Repair.
  • Deleting a marker line with Backspace in Live Preview is not confirmed
    separately; Undo brings it back.
  • With several cursors, a keystroke that would change a marker line is
    refused for all of them.
  • The older collaboration commands appear when the plugin starts or after a
    join; a collaboration that arrives another way shows them after a restart.

Earlier notes: 0.5.0.

Shared Tasks 0.5.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 11:05

Shared Tasks 0.5.0

Shared Tasks 0.5.0: collaboration you can do without learning the commands. A
visible pane and a card on the section lead you through sharing, inviting and
joining, show what needs attention with a direct way to fix it, and pick up
unfinished work after a restart. For catalog users updating from 0.4.2.

Requires Obsidian 1.13.4 or later, as 0.4.x.

The Markdown format of your notes and the sync protocol are unchanged. The
command palette commands keep their names and still work; everything about
sections is also in the pane and the card, and single tasks are still shared
with commands.

What is new since 0.4.2

  • The Shared Tasks pane. One pane per workspace, opened from the ribbon
    icon ("Open Shared Tasks pane"), the command of the same name, the section
    card, or the editor's context menu. It follows the note you are in and
    offers the next step for the cursor: "Share section…" on a heading,
    "Invite collaborator…" on a shared section, "Insert into a note…" for a
    section you joined and have not placed yet. It lists the shared sections
    this device knows, where each is used, and what needs attention.
  • Share, then invite, in one place. Before you confirm, the pane shows
    what a share will publish (the lines, the sync server, how comments are
    handled). It says whether the section is on its server yet and offers the
    invitation only when it is ready. An invitation says "One-time link, does
    not expire; whoever opens it first joins." and you choose Read or
    Read + write each time. "Link copied" means the link is on the clipboard:
    Shared Tasks does not send it.
  • Join with a pasted link, then choose where it goes. "Join with a
    link…" shows each step (the server accepted the claim, your access, the
    section loaded), then inserts the section into a note you choose, with a
    readable preview. A join you give up on, or one whose answer was lost, can
    be checked again; it is never started a second time.
  • Problems with a direct way to each fix. A problem hub lists what needs
    attention and opens the matching conflict dialog or "Repair shared sections
    in this note". Local text that has not been sent is told apart from what
    the server has accepted and from an empty queue.
  • Unfinished steps stay in view. A share cut short by closing Obsidian
    resumes by itself after the restart. An unfinished insert or join is
    listed in the pane, where you continue it or check the result.
  • Tips on demand. Short tips explain an action when it is offered. "Hide
    tip" hides one in this vault; "Show tips again" brings them back. No tour
    opens on install or update.
  • Neutral wording. Texts about sections no longer speak of
    "collaborations"; the older shared-task commands no longer offer a shared
    section as if it were a task collaboration.
  • Faster pane. A cursor move redraws the pane at once.
  • From the keyboard. The pane and its dialogs work from the keyboard:
    opening the pane puts focus on it, Tab reaches its buttons, Enter activates
    them, Esc cancels joining, and focus stays inside a dialog and returns to
    the button that opened it. Commands have no default hotkeys; assign them in
    Obsidian's Hotkeys settings.

Fixed since 0.4.2

  • Pasted lines are not overwritten. A Task or paragraph pasted into a
    section that already syncs, which this device's sync record did not know,
    is held for your choice instead of being replaced by the shared version.
    This closes the known limit of 0.4.2
    (#41). "Repair shared
    sections in this note" shows both versions.
  • A line Obsidian's merge dropped comes back. The status says the line is
    missing and points to "Repair shared sections in this note", which offers
    to put it back.
  • A second Share is not stuck. Sharing two sections quickly, or Share
    right after the plugin loads, no longer leaves a section "hosting pending"
    without a message, and no longer creates its server record twice. A
    section already damaged this way is repaired
    (#72).
  • A deletion made while a section is suspended is kept. It is sent when
    the section resumes and no longer reads as a lost binding
    (#57).
  • A resumed edit is kept after a lost line. A batch of edits saved before
    a restart is no longer sent twice when a line it touched was lost in
    between.
  • The first click on a pane button counts ("Join with a link…" after a
    restart, "Remove access…").
  • An honest insert preview. It no longer says "Not inserted in any note
    yet" for the note the section came from.
  • Notes you delete. The local record of a deleted note is forgotten, a
    copy of its text you did not resolve is kept until you discard it, and a
    record of a note missing for 30 days is cleaned up. Your own text is never
    removed by that cleanup.
  • A clearer stopped-syncing notice. It names the section and says "the
    sync server" instead of printing the server address (the address stays in
    "Resource status"). A single conflict shows one "Review conflicts" button.
  • No work after unload. A pending status pass no longer runs after the
    plugin is unloaded.
  • Dialogs no longer overlap. In the insert dialog "Choose another
    note…" has a row of its own under the sentence; in "Repair shared sections
    in this note" and in the recovery dialog the Apply button sits below the
    choices instead of on top of their text.
  • "Link copied" is a short confirmation. It disappears a few seconds
    after the copy and after the invitation dialog closes, instead of staying
    in the pane.
  • Fewer races. Saving a note's sync record and its journal no longer
    interleave when two passes overlap.
  • Under the hood. The TypeScript SDK is @openlfcp/* 0.2.2; spec
    mvp-0.2-baseline.12; the project server runs the reference server 0.3.2,
    unchanged.

Install and upgrade

From Settings → Community plugins → Updates. Your identity, keys, shared
sections, queued edits and unfinished operations are kept. The update opens
no tour and no dialog, because the sync data format is the same (IndexedDB
database version 2). The upgrade from 0.4.1 and 0.4.2 was rehearsed in real
Obsidian (report).

Going from 0.3.x straight to 0.5.0 is as for 0.4: the sync data is upgraded
once and 0.3.x cannot open it afterwards (details).

By hand: put main.js, manifest.json and styles.css from the release
page into <vault>/.obsidian/plugins/shared-tasks/ and compare them with
these checksums.

File SHA-256
main.js 35fb226f28ddb6378ef85a425014873dbc96a63b0e6dcf348e8ed932ab9bae31
manifest.json 5500adc55a32565311a9ad93745946540501045bf2c1eb6715ab84eed9139667
styles.css 373028272ef8c3ed42c2c6b3b3c45ffaec3d030ee3ddd6b6163366d5f91a67c1

Built by CI from the commit the tag 0.5.0 points to (the release workflow
runs scripts/release-assets.mjs); the build was rehearsed on branch
mvp03/073-release-0.5.0 and gave these checksums in the native, performance
and release dry runs (candidate manifest).
@openlfcp/* 0.2.2, spec mvp-0.2-baseline.12, server lock 138030a. The
release page also carries a build provenance attestation: gh attestation verify main.js --repo openlfcp/obsidian.

Rolling back to 0.4.2

Install 0.4.2 over 0.5.0 (BRAT: choose version 0.4.2 for openlfcp/obsidian,
or put 0.4.2's three files into the plugin folder). It starts on the data
0.5.0 wrote: the same identity and sections, queued edits sent, an
unfinished share finished. The pane is a 0.5 feature and is not in 0.4.2;
hidden tips come back. Roll back to 0.4.2, not 0.4.1, which lacks the 0.4.2
fix for Task edits in copied sections. Going to 0.3.x is not supported.

Not rehearsed: after a rollback, a kept copy of a deleted note's text may not
show in the card (the text is not deleted); and if a crash cuts the cleanup
of a cancelled share before you roll back, 0.4.2 can list the section that
was never hosted as an ordinary one, with no data lost
(#53).

Known limits

  • Desktop first. Tested by hand on desktop only; automated runs use real
    Obsidian 1.13.4 and 1.14.4 on Linux, macOS and Windows runners. Not tested
    by hand: Windows or Linux desktops, an input method (IME), mobile. Shared
    sections are read-only on mobile and nothing about them was tried on a
    real device.
  • Wording of the pane was not checked with people before this release;
    expect rough edges.
  • A late move can be sent twice (#68).
  • Pane timing. Pane updates measured at p95 108.1–146.5 ms on a macOS CI
    runner for this build (goal 150 ms; the slowest case is the active note with
    Tasks on); slower machines may take longer.
  • Repeat signs do not sync. The recurrence of a Task (🔁) stays on the
    device that has it, by design, so two notes can show different titles of a
    repeating Task. The date and the done state sync.
  • Put back after a lost marker and an edit. If a line lost its marker and
    was edited in the same place, "Put back" can add a second copy. Check the
    line after Repair.
  • 0.4.1 and 0.4.2 keep the double-creation race and lack the fix for a
    newcomer who joins just after the inviter restarted; no 0.4.3 is planned.
  • Project server quotas. 24 open connections in all and 8 per network
    address, 200 collaborations per identity, 50 new ones a day from one
    address; past a limit an action is refused with "quota exceeded" and
    nothing already shared is lost.
  • No notion of "seen". A ✓✓ means shared, not read. There are no read
    receipts, no state of an invitation, no inbox, and no way to cancel an
    unused invitation ...
Read more

Shared Tasks 0.5.0-beta.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 09:09

Shared Tasks 0.5.0-beta.2 (candidate)

Candidate, not published. These are the notes for the 0.5.0-beta.2
candidate (LFCP-03-067). The files, their checksums and the commit they were
built from are fixed below. No tag and no release page exist yet: the
owner creates them. Nothing here says a release exists.

Shared Tasks 0.5.0-beta.2: the second pre-release of the 0.5 line, to be
checked before the stable 0.5.0 (no pilot). It keeps everything of
0.5.0-beta.1 (the Shared Tasks pane, share, invite and
join in one place) and fixes four things found since. Install it with BRAT.
Catalog users are not updated.

Requires Obsidian 1.13.4 or later, as 0.4.x.

New since 0.5.0-beta.1

  • A line you delete while a section is waiting is not forgotten. When a
    section is suspended (for example after a lost binding), a line you delete
    is kept and sent once the section resumes. Before, it could read as a lost
    binding on later passes until you ran "Repair shared sections in this
    note". No data was lost
    (#57). See Known limits
    for three edges.
  • The notice that syncing stopped names the section. When your access to
    a section is removed, the notice uses the section's shared title (folded to
    one line and cut at 80 characters) instead of "a shared section", and no
    longer prints the server address; the address stays in "Resource status".
  • One "Review conflicts…" button for one conflict. With a single conflict
    the pane drew the same button twice. With several conflicts each row still
    opens its own item.
  • No status pass after the plugin is unloaded. Disabling or reloading the
    plugin cancels a pending status refresh
    (#78).
  • Checked, no change needed: a Task completed with the Tasks plugin keeps
    its ref line hidden and bound. The screenshot that suggested otherwise shows
    the caret on the ref line, which reveals it by design
    (#68, C-7).

Unchanged from beta.1: the notes' Markdown format, the sync protocol, the sync
data format on this device (IndexedDB database version 2), @openlfcp/*
0.2.2, spec mvp-0.2-baseline.12, the reference server 0.3.2.

Install

Needs Obsidian 1.13.4 or later. Desktop first: this beta is tested by hand
only on desktop (see Known limits).

With BRAT (the way to try this beta):

  1. Install and enable BRAT
    from Settings → Community plugins.
  2. Run "BRAT: Add a beta plugin for testing", enter openlfcp/obsidian, and
    choose Latest version (a specific version is pinned and BRAT will not
    update it).
  3. Enable "Shared Tasks" in Settings → Community plugins and check that the
    version listed is 0.5.0-beta.2.

By hand: from the release page, download main.js, manifest.json and
styles.css into a new folder <vault>/.obsidian/plugins/shared-tasks/, then
enable the plugin. Compare the files with the checksums below before you
enable it.

File SHA-256
main.js 2292fd62bb68fbd03e2af1a6b3178a82db3a4199cbb4637de013af9104b369af
manifest.json 5c6136abd4c20b829b40d379634bcf13f0ae055a2158a2f89f177fa297ab8f74
styles.css b8dd6c368d0c194d127bb85105a2bf3bbb5654ad0d945916d6f1d7ff52c6bb30

Built from 0d69b98 (full SHA in the
candidate manifest; a branch
commit: the repository merges by rebase, so the tag commit has a new SHA but
the same src/, lockfile and styles, and the checksums are re-verified at
release). Its source is that of main 75cad16. The tag 0.5.0-beta.2 and
the release page will be created by the owner. @openlfcp/* 0.2.2, spec
mvp-0.2-baseline.12, server lock 138030a. The manifest.json asset is the
file manifest-beta.json.

The default server is the project server wss://sync.openlfcp.org/v1/ws; see
Choosing a sync server before you use it.

Upgrading

From 0.5.0-beta.1: BRAT's update check ("BRAT: Check for updates to all
beta plugins") installs it over the beta; with "Latest version" chosen it
arrives by itself. Nothing is migrated: the sync data format is the same, no
tour or dialog opens. The new field a suspended section may now keep for a
pending deletion is optional.

From 0.4.1 or 0.4.2: install the beta over it (BRAT does this when you add
it). Your identity, keys, shared sections, queued edits and unfinished
operations are kept; an unfinished share or insert is finished under its own
operation. The upgrade from 0.4.1 and 0.4.2 was rehearsed in real Obsidian on
this build (see Under the hood) and, with a queued edit and an unfinished
share, in the
report of beta.1.

Going from 0.3.x straight to this build is as for 0.4: 0.4 upgrades the sync
data once, and 0.3.x cannot open it afterwards
(details).

Rolling back

To 0.5.0-beta.1 or to 0.4.2: install that version over the beta (BRAT:
choose the version for openlfcp/obsidian, or put its three files into the
plugin folder). It starts on the data this beta wrote. A deletion this beta
was still holding for a suspended section is lost on the way back; the line
then reads as lost, as before the fix, and "Repair shared sections in this
note" puts it right. To 0.4.2, what you lose: the hidden tips come back if
0.4.2 saves its settings; the pane is a 0.5 feature and is not there. Roll back
to 0.4.2, not 0.4.1, which lacks the 0.4.2 fix for Task edits in copied
sections. Not supported: going to 0.3.x.

Not rehearsed: the rollback with the kept copies of a deleted note's text
that this beta keeps by section (the 048 change): 0.4.2 reads them by its
older rule, so a kept copy may not show in the card; the text is not deleted.
Nor a crashed share discard followed by a rollback: 0.4.2 can list a section
that was never hosted as an ordinary one; no data is lost
(#53). The rollback to
beta.1 was not rehearsed in real Obsidian; it reads the same data format.

Known limits

  • Pane timing. The pane's redraw after a cursor move was measured at
    p95 127 to 161 ms on a CI runner against a 150 ms goal before the redraw
    was made immediate (three of six series over). After that fix
    (#54) two runs on a
    macOS CI runner (runs 39063168092 and 39063609331, 200-task section, on a
    temporary branch with the same pane code) gave p95 119.0 to 136.5 ms, all
    six series within 150 ms, with a small margin. On the exact beta files
    (run 39215444645, macOS CI runner, Obsidian 1.14.4) p95 was 108.7 to
    123.3 ms in all six series, within 150 ms; another machine can come out
    slower.
  • Not tried by new users yet. The pane has been checked by automated
    tests in real Obsidian and by the maintainers, not in a study with new
    users; expect rough edges and report them in the
    issues.
  • Not tested by hand: a physical desktop other than CI runners, Windows
    or Linux by hand, an input method (IME), or mobile. Shared sections are
    read-only on mobile and nothing about them was tried on a real device.
  • A deletion made while a section is suspended. A line you delete while
    a section is waiting (for example after a lost binding) is now kept and sent
    once the section resumes
    (#57); it no longer
    reads as a lost binding. Three edges remain. The deletion goes out without
    a check of the line's revision: if a collaborator edited or moved that line
    during the wait, your deletion wins and Repair is not offered. If a change
    of yours is held back (a pasted line waiting for your choice, or an update
    not taken), the kept deletions are forgotten, the line reads as lost again
    and the section stays waiting until "Repair shared sections in this note".
    No data is lost. A crash between sending the deletion and saving that it was
    sent was not tested; the deletion may be sent twice.
  • Put back after a lost marker and an edit. If a line lost its marker and
    its text was changed in the same place, "Put back" can add a second copy of
    the line. Check the line after Repair.
  • A section damaged by the double creation of 0.4.x. Share right after
    the plugin loaded could create the server record twice in 0.4.1 and 0.4.2.
    This beta cannot do it again, and it repairs a section already damaged
    (#72): every save said
    "the DEK is not the one committed for epoch 0" and "Check the result"
    answered "not known". Run "Check the result", then "Share again"; the text
    of your note stays. 0.4.1 and 0.4.2 stay as they are: no 0.4.3 patch is
    planned.
  • Smaller known issues of the pane. A second node.move can be sent for
    one move (about one run in 40 on Windows), and a few smaller notes of the
    review remain
    (#68). The text of the
    stopped-syncing notice and the double "Review conflicts…" button are fixed
    in this beta.
  • Recurring Tasks. The recurrence of a Task (the 🔁 rule) is not shared:
    collaborators get the Task without it (by design; Shared Tasks flags it with
    a warning). Completing a recurring Task still gives you the
    next occurrence on your side.
  • 0.4.x. 0.4.1 and 0.4.2 have the double-creation race above and lack
    the fix for a newcomer who joins just after the inviter restarted: the
    invitation waits for the epoch's snapshot only in this beta
    (#73). The newcomer then
    cannot load the section until the inviter retries; no access is leaked. A 0.4.3
    patch is not planned; report it if you meet it.
  • Rolling back after a crashed discard. If...
Read more

Shared Tasks 0.5.0-beta.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 05:37

Shared Tasks 0.5.0-beta.1 (candidate)

Candidate, not published. These are the notes for the 0.5.0-beta.1
candidate (LFCP-03-027). The files, their checksums and the commit they were
built from are fixed below. No tag and no release page exist yet: the
owner creates them. Nothing here says a release exists.

Shared Tasks 0.5.0-beta.1: a pane that leads you through sharing a section,
inviting someone and joining, without needing the command palette. A
pre-release for a pilot with new users; install it with BRAT. Catalog users are
not updated.

Requires Obsidian 1.13.4 or later, as 0.4.x.

New since 0.4.2

  • The Shared Tasks pane. One pane per workspace, opened from the ribbon
    icon ("Open Shared Tasks pane"), the command of the same name, the section
    card, or the editor's context menu. It follows the note you are in and
    offers the next step for the cursor: "Share section…" on a heading,
    "Invite collaborator…" on a shared section, "Insert into a note…" for a
    section you joined and have not placed yet. It lists the shared sections
    this device knows, where each is used, and what needs attention. The
    command palette commands keep their names and still work.
  • Share, then invite, in one place. The pane shows what a share will
    publish (the lines, the sync server, how comments are handled) before you
    confirm, says whether the section is on its server yet, and offers the
    invitation only when it is ready. An invitation says "One-time link, does
    not expire; whoever opens it first joins." and you choose Read or
    Read + write each time. "Link copied" means the link is on the clipboard:
    Shared Tasks does not send it.
  • Join with a pasted link, then insert. "Join with a link…" takes a link
    you paste, shows each step (the server accepted the claim, your access, the
    section loaded), then inserts the section into a note you choose, with a
    readable preview. A join you give up on, or one whose answer was lost, can
    be checked again; it is never started a second time.
  • Problems with a direct way to each fix. A problem hub lists what needs
    attention and opens the matching conflict dialog or "Repair shared sections
    in this note". Local text that has not been sent is told apart from what
    the server has accepted and from an empty queue.
  • Unfinished work resumes after a restart. A share, an insert or a join
    cut short by closing Obsidian continues under its own operation instead of
    starting over.
  • A line Obsidian's merge dropped comes back. When Obsidian merges two
    views of a note and a shared line goes missing, the status says the line
    is missing and points to "Repair shared sections in this note", which
    offers to put it back. Nothing in the pane or the status calls it lost any
    more.
  • A second Share is not stuck. Sharing two sections quickly, or Share right
    after the plugin loads, no longer leaves one "hosting pending" without a
    message, and no longer creates the section's server record twice.
  • The first click on a pane button counts. "Join with a link…" after a
    restart and "Remove access…" act on the first click.
  • An honest insert preview. The preview no longer says "Not inserted in
    any note yet" for the note the section came from.
  • Notes you delete. The local record of a deleted note is forgotten, a
    copy of its text you did not resolve is kept until you discard it, and a
    record of a note missing from the vault for 30 days is cleaned up after the
    notes are read and then daily. Your own text is never removed by that
    cleanup.
  • Pasted lines are not overwritten. A Task or paragraph pasted into a
    section that already syncs, which this device's sync record did not know,
    is held for your choice instead of being replaced by the shared version.
    This closes the known limit of 0.4.2
    (#41). "Repair shared
    sections in this note" shows both versions.
  • A resumed edit is kept after a lost line. A batch of edits saved before
    a restart, whose note was not written yet, is no longer sent twice when a
    line it touched was lost in between.
  • Shared sections stay out of the 0.1 task pickers. The older shared-task
    commands no longer offer a shared section as if it were a task
    collaboration.
  • Tips on demand. Short tips explain an action when it is offered. "Hide
    tip" hides one in this vault; "Show tips again" brings them back. No tour
    opens on install or update.
  • Neutral wording on section surfaces. Texts about sections no longer
    speak of "collaborations".
  • Faster pane. A cursor move redraws the pane at once; only the moves
    right after it are grouped.
  • Fewer races. Saving a note's sync record and its journal no longer
    interleave when two passes overlap.
  • Under the hood: the TypeScript SDK is @openlfcp/* 0.2.2 (one commit
    for an invitation's grant and Key Package; a failing listener no longer
    interrupts a change). Spec mvp-0.2-baseline.12; the project server runs
    the reference server 0.3.2, unchanged.

Unchanged: the notes' Markdown format, the sync protocol and the sync data
format on this device (IndexedDB database version 2).

Install

Needs Obsidian 1.13.4 or later. Desktop first: this beta is tested by hand
only on desktop (see Known limits).

With BRAT (the way to try this beta):

  1. Install and enable BRAT
    from Settings → Community plugins.
  2. Run "BRAT: Add a beta plugin for testing", enter openlfcp/obsidian, and
    choose Latest version (a specific version is pinned and BRAT will not
    update it).
  3. Enable "Shared Tasks" in Settings → Community plugins and check that the
    version listed is 0.5.0-beta.1.

By hand: from the release page, download main.js, manifest.json and
styles.css into a new folder <vault>/.obsidian/plugins/shared-tasks/, then
enable the plugin. Compare the files with the checksums below before you
enable it.

File SHA-256
main.js a0257e138f395f32940d3431f3e570d003b0a2c31b819a71748a39d74982a220
manifest.json c755e547b8916986031139c78341e10739e88436f2dbcac9a0c1279e29ae398f
styles.css b8dd6c368d0c194d127bb85105a2bf3bbb5654ad0d945916d6f1d7ff52c6bb30

Built from 1eb1f28946f85110976651965ff1d28c15b50473 (a branch commit; the
repository merges by rebase, so the tag commit has a new SHA but the same
src/, lockfile and styles, and the checksums are re-verified at release).
Its source is that of main 3cd6969a96c54085b57b586e4c3daf3986e5663e. The tag
0.5.0-beta.1 and the release page will be created by the owner.
@openlfcp/* 0.2.2, spec mvp-0.2-baseline.12, server lock 138030a. The
manifest.json asset is the file manifest-beta.json. Details:
candidate manifest.

The default server is the project server wss://sync.openlfcp.org/v1/ws; see
Choosing a sync server before you use it.

Upgrading from 0.4.x

Install the beta over 0.4.1 or 0.4.2 (BRAT does this when you add it). Your
identity, keys, shared sections, queued edits and unfinished operations are
kept; an unfinished share or insert is finished under its own operation. The
update opens no tour and no dialog, and prints no "upgraded" notice, because
the sync data format is the same. The upgrade was rehearsed in real Obsidian
from 0.4.1 and 0.4.2 on macOS and Ubuntu with a queued edit and an unfinished
share (report).

Going from 0.3.x straight to this build is as for 0.4: 0.4 upgrades the sync
data once, and 0.3.x cannot open it afterwards
(details).

Rolling back to 0.4.2

To go back, install 0.4.2 over the beta (BRAT: choose version 0.4.2 for
openlfcp/obsidian, or put 0.4.2's three files into the plugin folder). It
starts on the data the beta wrote: the same identity and sections, queued
edits sent, an unfinished share finished, no "newer version" notice. This was
rehearsed (beta build, then 0.4.2, then the beta again). What you lose:
the hidden tips come back if 0.4.2 saves its settings; the pane is a 0.5
feature and is not there in 0.4.2. Roll back to 0.4.2, not 0.4.1, which lacks
the 0.4.2 fix for Task edits in copied sections. Not supported: going to
0.3.x.

Two things were not rehearsed. First, the rollback was tried without the kept
copies of a deleted note's text that this beta keeps by section (the 048
change): 0.4.2 reads them by its older rule, so after a rollback a kept copy
of a deleted note may not show in the card. The text is not deleted. Second, if you cancel a share and
a crash cuts the cleanup before you roll back, 0.4.2 can list the section
that was never hosted as an ordinary one; no data is lost
(#53).

Known limits

  • Pane timing. The pane's redraw after a cursor move was measured at
    p95 127 to 161 ms on a CI runner against a 150 ms goal before the redraw
    was made immediate (three of six series over). After that fix
    (#54) two runs on a
    macOS CI runner (runs 39063168092 and 39063609331, 200-task section, on a
    temporary branch with the same pane code) gave p95 119.0 to 136.5 ms, all
    six series within 150 ms, with a small margin. On the exact beta files
    (run 39185482345, macOS CI runner, Obsidian 1.14.4) p95 was 107.6 to
    118.1 ms in all six series, within 150 ms; another machine can come out
    slower.
  • Pilot first. No real people have used the pane yet. Whether new users
    find sharing without knowing a command is what the pilot of this beta
    checks, so expect rough edges in the wording.
  • Not tested by hand: a physical desktop other than CI runners, Windows
    or Linux by hand, an input method (IME), or mobile. Shared sections are
    read-only on mobile and nothing about them w...
Read more

Shared Tasks 0.4.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 08:37

Shared Tasks 0.4.2: a fix for a Task edit in a shared section that could be
lost without a warning. Update soon.

Requires Obsidian 1.13.4 or later, as 0.4.1.

Fixes

  • A Task edited in a copy of a shared section could be silently lost.
    When a shared section was copied into another note, or a note was
    opened without its sync record on this device, a change made there to a
    Task alone (its title, its checkbox, a date) was taken as the shared
    version.
    The next sync then wrote the shared Task back over the line: the edit
    disappeared and nothing was sent. 0.4.2 compares each Task's fields too.
    When they differ, your text stays as it is and the section waits for your
    choice; when the note shows the shared version (only the formatting
    differs), it syncs as before.
  • Repair lists every section that waits for a choice. "Repair shared
    sections in this note" now lists such a section and shows both versions.
    "Share my version" sends the note's Task fields; "Use the shared version"
    shows the shared one and keeps your text as a recovery copy on this
    device. If a Task in the section is still loading, is not a valid task in
    the shared version, or was deleted there, Repair says so, and "Share my
    version" keeps your text as it is without guessing.

Known limits

  • A Task or a paragraph pasted into a section that already syncs, where
    this device's sync record does not know that line yet, can still be
    replaced by the shared version on the next sync. This is rare (for
    example, pasting a line copied from another note of the same section);
    a fix is planned for 0.5.0
    (#41).

Under the hood

  • The TypeScript SDK stays @openlfcp/* 0.2.1; spec mvp-0.2-baseline.12;
    the project server runs the reference server 0.3.2, unchanged by this
    release.
  • Unit tests cover each Task field, a copied section, a Task not loaded
    yet, a conflicted title and a formatting-only difference; a live test with
    the plugin on the reference server keeps a Task title edited in a copied
    section across a restart.

Install and upgrade

From Community plugins (Settings → Community plugins → Updates), with BRAT
(openlfcp/obsidian), or by hand: put main.js, manifest.json and
styles.css from the release page into
<vault>/.obsidian/plugins/shared-tasks/. Your identity, collaborations and
settings are kept.

Shared Tasks 0.4.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 10:27

Shared Tasks 0.4.1: a fix for edits to shared sections that could be lost.
Update soon.

Requires Obsidian 1.13.4 or later, as 0.4.0.

Fixes

  • An edit to a shared section could be silently lost after a restart.
    When Obsidian started (or Shared Tasks was re-enabled), the same shared
    section could be opened twice at once. Your edits then went to a copy
    that nothing read: the section showed as current, your change (for
    example a task renamed while offline) disappeared from the note, and
    your collaborators' later changes never appeared. 0.4.1 opens a section
    only once, however many parts of the plugin ask for it at the same time.
    The same fix applies to collaborations of tasks (from 0.3).
  • An edit could be undone on your device after it was saved. If
    sending a saved change failed (for example the connection dropped at
    that moment), the change could be taken back out of the section on your
    device while it still went out to your collaborators. SDK 0.2.1 keeps a
    change once it is saved.
  • A section given up while it was opening is closed. A section whose
    creation was given up while it was still opening no longer stays open
    in the background.
  • Nothing keeps running after Shared Tasks is disabled. Disabling the
    plugin while it was still opening its sections at start could leave a
    connection behind; it no longer does.

Under the hood

  • The TypeScript SDK is @openlfcp/* 0.2.1 (exact versions, from npm with
    provenance): a section batch the durable store has committed is not
    rolled back when a step after the commit throws.
  • Spec mvp-0.2-baseline.12; the project server runs the reference server
    0.3.2, unchanged by this release.
  • A live test with two plugins on the reference server covers an edit kept
    across a restart and the server's absence, and a send that fails after
    the commit.

Install and upgrade

From Community plugins (Settings → Community plugins → Updates), with BRAT
(openlfcp/obsidian), or by hand: put main.js, manifest.json and
styles.css from the release page into
<vault>/.obsidian/plugins/shared-tasks/. Your identity, collaborations and
settings are kept.

Shared Tasks 0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 20:52

Shared Tasks 0.4.0: share a whole section of a note.

Requires Obsidian 1.13.4 or later, as 0.3.2 did.

New: shared sections

  • "Share section…". Put the cursor on a heading, or under it, and share
    the heading with everything under it: tasks, subtasks, paragraphs and
    lists, in order, down to the next heading of the same or a higher level.
    • A preview shows exactly what will be shared, and what under the
      heading stays private on your device.
    • Each section is a collaboration of its own, with its own key and its
      own invitation.
    • Whatever is added inside the section later is shared too.
  • Joining. Your collaborator runs "Join collaboration" with the
    one-time link, then "Insert shared section…" in any note of theirs. Their
    other text stays private.
  • Status marks. A double tick (✓✓) after a shared heading means
    "shared". A separate icon shows sync progress, for example "Saved
    locally; waiting to sync", "Offline; local updates will wait" or "Needs
    your attention". Click it, or run "Open shared section details", to see
    the details: the status, what is shared, and who has access, as last
    verified with the server.
  • Conflicts. A task moved to two places, or a field changed on both
    sides, shows as "Needs your attention". "Go to next shared section
    problem" finds it; "Review conflicts…" in the details lets you choose.
    Nothing is lost while a choice is open.
  • Removing access. "Remove access…" in the details removes someone's
    future access and gives the section a new key. Copies they already
    received cannot be erased, and the confirmation says so. On their side,
    the section says the sync server no longer accepts their changes; their
    new edits stay on their device.
  • Detach this section. Stops sharing a section in one note and keeps its
    text as your own. The shared section, your other notes and your
    collaborators are unchanged.
  • Copying. "Copy readable text (without sharing metadata)" copies the
    text without the section's markers. "Copy shared section" copies it with
    them: pasted into another note, it is another copy of the same section,
    and it gives nobody access.
  • Repair. "Repair shared sections in this note" puts a damaged boundary
    back, points to lines it cannot match, and lets you choose between your
    version and the shared one.
  • Moving 0.3 shared tasks into a section is an explicit copy offered by
    "Share section…". "Restore note before section import" undoes it in the
    note.

In the note, a section carries one comment after its heading, one at its
end and one beside each item. Live Preview hides them; Source mode, or
"Show or hide sharing metadata", shows them.

Shared sections are on in 0.4.0 and in its betas: nothing to turn on.

  • The 0.3 preview setting is gone. "sectionsPreview" in the plugin's
    data.json no longer does anything, whether true or false; the next
    save of the settings drops it.
  • To turn shared sections off, quit Obsidian, add
    "sectionsDisabled": true to .obsidian/plugins/shared-tasks/data.json,
    and start it again. Shared tasks (0.3) work as before either way.

Also new

  • "Export diagnostics…" prepares a report of versions, states and error
    codes, and shows it to you in full first. It holds no note text, names,
    paths, keys or invitation links. You copy it or save it as a file;
    nothing is sent.
  • Local sync data is encrypted at rest on each device, under a key kept
    on that device. "Rotate key" (Settings → Shared Tasks → "Local
    encryption") replaces it.
  • New members catch up faster. The owner's plugin publishes Snapshots,
    so a new member loads one plus the latest changes, not the whole history.
  • After a server restore, a member the server had forgotten gets back in
    by themselves.

Limits

  • Size. A section of about 200 tasks with their notes is the qualified
    size. A much larger one (2,000 tasks) works, but each edit blocks the
    editor for seconds.
  • Long history. After many thousands of edits, a section becomes slower
    (about half a second per edit). The details show how large its history
    is; past about 200,000 characters they suggest starting a new section for
    new material. Nothing happens automatically; compacting a section's
    history is planned after this release.
  • Project server quotas. The project server (sync.openlfcp.org)
    currently lets one identity host up to 200 collaborations (each shared
    section is one), up to 50 new ones a day from one network, 256 MiB of
    stored data per identity and 128 MiB per collaboration (the server holds
    3 GiB in all). Past a limit, the action is refused with "quota
    exceeded"; nothing already shared is lost.
    These values may change, and the server's operator can set other limits
    for an identity. A server you run yourself sets its own.
  • Mobile. Sections are read-only on mobile: they arrive and are shown,
    and your edits there stay on your device. "Share section…", inviting and
    removing access are not offered. Shared tasks work there as before.
  • No headings inside a section. Sharing offers to split it into
    sections.
  • Local tokens. Some Tasks-plugin tokens stay local to your note (🔁 🛫
    ➕ ❌ 🔼). The preview shows them.
  • Desktop platforms. Windows and macOS are checked by an automated
    smoke test in CI on each release. The plugin has not been tried by hand
    on Windows, nor with an input method (IME) for languages such as
    Chinese, Japanese or Korean.
  • A pilot with users follows this release. 0.4.0 was tested by the
    project; feedback from the first users may bring 0.4.x fixes.

Updating from 0.3

Updating to 0.4. Your shared tasks keep working as before. Shared
Tasks upgrades its sync data on this device the first time 0.4 starts: it
is encrypted at rest, and earlier versions can no longer open it.

Going back. After updating to 0.4, Shared Tasks cannot go back to
0.3.x on this device: its local sync data is upgraded and encrypted.
Downgrade only to 0.4.x or later. Your notes are not affected. If a 0.3.x
plugin shows "Shared Tasks could not start: VersionError", that is why:
install 0.4.x again, and its data is intact.

A collaborator still on 0.3.x cannot join a shared section: their plugin
says a newer version is needed, without using up the link.

Since the last betas (0.4.0-beta.16 to 0.4.0-beta.20)

For testers on the betas:

  • Updating from Shared Tasks 0.3.4 now always starts syncing. Updated
    in the same Obsidian window (as Obsidian's own plugin update and BRAT
    do), the new version could find the old one's data still in use and fail
    to start: nothing synced, sections stayed on "Loading shared section",
    and nothing said why until Obsidian was restarted. It now waits for the
    old version to finish and tries again for a few seconds. If the vault
    really is open in another Obsidian window, it says so once and starts by
    itself when that window closes.
  • A start that fails says so. For any other reason, one notice says
    "Shared Tasks could not start: …" and what to do (restart Obsidian; your
    notes are not affected), instead of staying silent.
  • A note open only in Reading view shows a collaborator's changes. If
    a note with a shared section was open only in Reading view, a
    collaborator's changes never appeared in it, although the section said
    it was up to date, and switching back to editing lost them from your
    note. They now show in Reading view and stay when you switch back; the
    collaborator's change is never undone.
  • A section stays fast as its history grows. In a section where tasks
    had been deleted, each change took longer the more the section had been
    edited: after a few thousand changes, a second or more. It now stays
    about as fast as in a new section, and its memory stays flat however
    long its history is. A two-hour soak with three editors kept a change's
    typical time at about 100 ms through about 5,000 changes.
  • A new member who can't insert a section yet is told what to do.
    "Insert shared section…" said only that the section "cannot be shown
    here yet". It now says the section has a conflict to resolve first: ask
    a member who already has it in a note to open its details and choose
    "Review conflicts…", then insert it again.
  • New tasks next to an unresolved conflict are saved. While a conflict
    waited for "Review conflicts…", new tasks typed next to it could fail
    with "Local save failed", and every task typed after them too. They are
    now placed next to the nearest task that can take them, and saved.
  • Moving a task by cut and paste keeps it whole. Cut with Shift+↓ from
    the start of a task's line when the next task is nested, the nested task
    now keeps its place and indentation, and the pasted task does not push
    the one it lands on under it. A task's whole line selected with the
    mouse and cut now takes its hidden link line along, so the paste restores
    the same task; deleted with Backspace or Delete, the task is removed for
    your collaborators too.
  • Tested before release: installing and updating on Obsidian 1.13.4
    and 1.14.4: a fresh install, an update from 0.3.4 and from
    0.4.0-beta.15, turning the plugin off and on, and reinstalling it. The
    details are in the
    support matrix.
  • Tested before release: themes, views and copying on Obsidian 1.13.4
    and 1.14.4, with a collaborator editing: light and dark theme in Source,
    Live Preview and Reading view, split view, the Tasks plugin on and off,
    and tasks copied into a note outside any section. Also in the
    support matrix.

Under the hood

  • The TypeScript SDK is @openlfcp/* 0.2.0 (exact versions, from npm with
    provenance).
  • Spec mvp-0.2-baseline.12; the project server runs the reference server
    0.3.2, unchanged by this release.
  • On start, Share...
Read more

Shared Tasks 0.4.0-beta.20

Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 17:49

Shared Tasks 0.4.0-beta.20: the twentieth beta with shared sections, and
the candidate for 0.4.0.

A pre-release for testers through BRAT: the community directory and
Obsidian's own updates keep offering 0.3.x.

New since 0.4.0-beta.19

Moving a task by cut and paste keeps it whole. A task moved by cut
and paste could lose the hidden line that links it to the shared section
(in Source view, the <!-- lfcp-ref … --> line under it): the section
then said "A binding line of the section is damaged", and the move was not
sent. Two ways to cut it no longer do that:

  • with Shift+↓ from the start of a task's line when the next task is
    nested (in Live Preview the selection ends after that task's
    indentation): the nested task keeps its place, and the pasted task does
    not push the one it lands on under it;
  • with the mouse, selecting exactly the task's line from its end to its
    start (or start to end): the cut takes its hidden link line along, so the
    paste restores the same task where you put it.

Deleting a selected task line removes the task cleanly. Selecting a
task's whole line and pressing Backspace or Delete removed only its text
and left the hidden link line behind ("binding line damaged"). The task is
now deleted, for your collaborators too.

Tested before release. The full native suite on Obsidian 1.13.4 and
1.14.4, including two new checks with a real keyboard and mouse: moving a
task with Shift+↓ next to a nested task while a collaborator nests it, and
moving and deleting a task line selected with the mouse. Before these
fixes both checks showed the damaged binding line; now they pass, with the
other cut, paste and move checks.

A two-hour soak of 0.4.0-beta.19 (three editors, offline periods,
server restarts, a member removed and a new one invited) kept a change's
typical time flat at about 100 ms through about 5,000 changes (0.4.0-beta.18:
over a second after 3,300), and every reconnect under 13 seconds.

Requires Obsidian 1.13.4 or later.

What it is

The features of 0.4.0, described in 0.4.0.md: share a whole
section of a note ("Share section…"), with its tasks, paragraphs and lists,
end-to-end encrypted, each section its own collaboration. Shared sections
are on in this beta: there is nothing to turn on.

Before you install

No way back to 0.3.x on this device. The first start of 0.4 upgrades
Shared Tasks' sync data on the device and encrypts it at rest. A 0.3.x
plugin can no longer open it ("Shared Tasks could not start:
VersionError"); install 0.4.x again and the data is intact. Your notes are
not affected.

  • Try it in a test vault first, or keep a copy of your vault.
  • A collaborator still on 0.3.x cannot join a shared section; their shared
    tasks keep working with yours.
  • Collaborators on a shared section should all update to this beta. A
    member on a beta before 0.4.0-beta.14 can keep undoing the others' edits
    while their note is open, and a member on a beta before 0.4.0-beta.4
    keeps seeing "Needs your attention" after someone else chose Keep it
    deleted
    .

Install with BRAT

  1. Install BRAT from the community plugins.
  2. Run "BRAT: Add a beta plugin for testing" with openlfcp/obsidian. In
    the version field choose Latest version: a specific version stays
    installed, and BRAT will not update it.
  3. Enable Shared Tasks. Settings → Community plugins lists it as
    version 0.4.0-beta.20. If it lists an earlier version, see below.

If an earlier 0.4.0 beta is installed, BRAT updates it ("BRAT: Check for
updates to all beta plugins"); your identity, collaborations and settings
are kept.

Stuck on an older beta? In BRAT's settings, find openlfcp/obsidian in
the beta plugin list. If it shows a version, it is pinned there: edit it and
choose Latest version (or remove it and add it again with Latest
version), then run "BRAT: Check for updates to all beta plugins". BRAT's
setting "Select latest plugin version by default" saves choosing.

To turn shared sections off, quit Obsidian, add "sectionsDisabled": true
to .obsidian/plugins/shared-tasks/data.json, and start it again.

What to report

"Export diagnostics…" prepares a report without note text, names, paths,
keys or links, and shows it to you first. Attach it to an issue at
https://github.com/openlfcp/obsidian/issues with what you did and what you
saw.

Known limits

The limits of 0.4.0.md apply: about 200 tasks per
section is the qualified size, sections are read-only on mobile, and there
are no headings inside a section.

  • Rejoining a section you were removed from isn't supported yet. Your
    local copy stays on your device.
  • Project server quotas. The project server (sync.openlfcp.org)
    currently lets one identity host up to 200 collaborations (each shared
    section is one), up to 50 new ones a day from one network, 256 MiB of
    stored data in all and 128 MiB per collaboration. Past a limit, the
    action is refused with "quota exceeded"; nothing already shared is lost.
    These values may change, and the server's operator can set other limits
    for an identity. A server you run yourself sets its own.

Under the hood

  • In a section, a cut that ends inside the next line's leading
    indentation ends at that line's start, and a paste at a line's start
    leaves out the indentation its text ends with (cutKeepsIndent,
    pasteWithoutTrailingIndent).
  • A range from a line's start to the end of a bound Task's line (with or
    without its line break) takes that Task's own binding lines, never the
    lines under it (withBindingLines): a cut widens its selection before
    the editor copies it (a cut DOM handler), a delete widens the range it
    removes.
  • New native specs section-shift-down-cut and section-whole-line-cut
    (real keys and mouse in Live Preview): before the fixes they show the
    owner's damaged bindings, with them every binding keeps its line.
  • Unchanged: @openlfcp/* 0.2.0-beta.10, spec mvp-0.2-baseline.12, the
    reference server at 138030a, 49 fixtures.

Shared Tasks 0.4.0-beta.19

Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 13:31

Shared Tasks 0.4.0-beta.19: the nineteenth beta with shared sections, and
the candidate for 0.4.0. (0.4.0-beta.18 was never released: everything in
it is here.)

A pre-release for testers through BRAT: the community directory and
Obsidian's own updates keep offering 0.3.x.

New since 0.4.0-beta.17

A section after a collaborator was removed loads for newcomers. When
someone's access to a section was removed, a collaborator invited
afterwards could stay at "no shared section on this device yet" for good,
in a section where nobody edited since. The section now loads for them
within seconds.

A new member who can't insert a section yet because of an unresolved
conflict is told what to do.
"Insert shared section…" said only that the
section "cannot be shown here yet". It now says that the section has a
conflict to resolve first: ask a member who already has it in a note to
open its details and choose "Review conflicts…", then insert it again.

"1 local update waiting" no longer stays after everything was sent.
After going offline or a server restart, a section could keep saying an
update was waiting although it had been sent and accepted. It now says the
section is up to date.

Reconnecting within 15 seconds. After the sync server or the network
was unreachable for a few minutes, Shared Tasks could take up to a minute
to reconnect after it came back. It now tries again at most every 15
seconds, and at once when you switch back to Obsidian's window.

Moving a task by cut and paste no longer deletes it for collaborators
when Obsidian is busy.
If you cut a task and pasted it elsewhere in the
section while Shared Tasks was still writing a change into the note, the
task could be deleted for your collaborators while your note still showed
it, and the section said it needed attention. The paste now always moves
the task.

New tasks next to an unresolved conflict are saved. While a conflict
in a section waited for "Review conflicts…", new tasks you typed next to
it could fail with "Local save failed", and every task typed after them
too. They are now placed next to the nearest task that can take them, and
saved.

No false "needs attention" after a collaborator deletes a task. When a
collaborator deleted a task, your section could say it differs from the
shared version, and "Review conflicts" offered to restore a task your note
no longer showed, until you next typed in that note. The task is now
removed and the section is up to date.

Review conflicts no longer offers a place it cannot apply. When a task
was moved by one collaborator while another deleted the task it was moved
under, "Review conflicts" offered to put it under the deleted task;
choosing that said it could not be applied, and the question stayed. Only
places that can be applied are offered now, and the top of the section
when no other is left.

A copy that differs says so when the shared version hides a task. A
task your note showed under another task that the shared version no
longer shows could stay in your note while your collaborators did not
have it, and the section said it was up to date. It now says your note
differs from the shared version.

No "Server confirmation unavailable" for changes that were saved.
After a long pause in Obsidian, a section could say "Server confirmation
unavailable" for changes the server had saved. It now says they are
confirmed.

A section with deleted tasks stays fast as its history grows. In a
section where tasks had been deleted, each change took longer the more
the section had been edited: after a few thousand changes, a second or
more, and the status could lag for several seconds. It now stays about
as fast as in a new section.

Memory stays flat as a section's history grows. A section's memory
grew with every change (in long sessions, hundreds of megabytes), and
editing slowed down with it. It now stays the same however long the
section's history is.

Tested before release. The full native suite on Obsidian 1.13.4 and
1.14.4 with a collaborator: sharing, joining, editing on both sides,
offline work and restarts, conflicts, removing someone and inviting
someone new, cut and paste, undo, the Reading view and the desktop
matrix (themes, views, split view, the Tasks plugin, copying).

Requires Obsidian 1.13.4 or later.

What it is

The features of 0.4.0, described in 0.4.0.md: share a whole
section of a note ("Share section…"), with its tasks, paragraphs and lists,
end-to-end encrypted, each section its own collaboration. Shared sections
are on in this beta: there is nothing to turn on.

Before you install

No way back to 0.3.x on this device. The first start of 0.4 upgrades
Shared Tasks' sync data on the device and encrypts it at rest. A 0.3.x
plugin can no longer open it ("Shared Tasks could not start:
VersionError"); install 0.4.x again and the data is intact. Your notes are
not affected.

  • Try it in a test vault first, or keep a copy of your vault.
  • A collaborator still on 0.3.x cannot join a shared section; their shared
    tasks keep working with yours.
  • Collaborators on a shared section should all update to this beta. A
    member on a beta before 0.4.0-beta.14 can keep undoing the others' edits
    while their note is open, and a member on a beta before 0.4.0-beta.4
    keeps seeing "Needs your attention" after someone else chose Keep it
    deleted
    .

Install with BRAT

  1. Install BRAT from the community plugins.
  2. Run "BRAT: Add a beta plugin for testing" with openlfcp/obsidian. In
    the version field choose Latest version: a specific version stays
    installed, and BRAT will not update it.
  3. Enable Shared Tasks. Settings → Community plugins lists it as
    version 0.4.0-beta.19. If it lists an earlier version, see below.

If an earlier 0.4.0 beta is installed, BRAT updates it ("BRAT: Check for
updates to all beta plugins"); your identity, collaborations and settings
are kept.

Stuck on an older beta? In BRAT's settings, find openlfcp/obsidian in
the beta plugin list. If it shows a version, it is pinned there: edit it and
choose Latest version (or remove it and add it again with Latest
version), then run "BRAT: Check for updates to all beta plugins". BRAT's
setting "Select latest plugin version by default" saves choosing.

To turn shared sections off, quit Obsidian, add "sectionsDisabled": true
to .obsidian/plugins/shared-tasks/data.json, and start it again.

What to report

"Export diagnostics…" prepares a report without note text, names, paths,
keys or links, and shows it to you first. Attach it to an issue at
https://github.com/openlfcp/obsidian/issues with what you did and what you
saw.

Known limits

The limits of 0.4.0.md apply: about 200 tasks per
section is the qualified size, sections are read-only on mobile, and there
are no headings inside a section.

  • Rejoining a section you were removed from isn't supported yet. Your
    local copy stays on your device.
  • Project server quotas. The project server (sync.openlfcp.org)
    currently lets one identity host up to 200 collaborations (each shared
    section is one), up to 50 new ones a day from one network, 256 MiB of
    stored data in all and 128 MiB per collaboration. Past a limit, the
    action is refused with "quota exceeded"; nothing already shared is lost.
    These values may change, and the server's operator can set other limits
    for an identity. A server you run yourself sets its own.

Under the hood

  • A member who may publish Snapshots publishes one as soon as the current
    Data Epoch (past 0) has none on this device, checked every 10 s: a
    member who joins after a removal receives only the new epoch's key and
    loads the history from that Snapshot. An invitation waits until the
    server has it.
  • The SDK status the host keeps (SdkStatusTracker) checks a batch in
    storage after each receipt release and each report that is not final: a
    batch the SDK no longer holds leaves the pending ones.
  • The reconnect policy waits 1 s, doubling, at most 15 s, each wait
    within ±20 %; focusing the window connects at once.
  • A pass's result describes the note as written: a node its remote patch
    removes is not reported shown again. A pass that wrote a collaborator's
    change and still reports the note as differing is followed by exactly
    one more pass, never a loop.
  • A paste made while a pass is still writing is not dropped: the source
    coordinator counts each route's changes, and a pass's write keeps a
    source that changed since the pass started, so the next pass sees the
    paste with its hints (soak finding #9).
  • The refusals of "Insert shared section…" come from one function
    (insertRefusalMessage); a section with a conflict says who can resolve it
    and how (LFCP-02-123 lifts the refusal itself).
  • A commit refused as INVALID_PREDECESSOR is planned again after the
    nearest earlier sibling the SDK may accept, or first, at most four times
    per pass (soak finding #12); other refusals are kept as before.
  • Review conflicts offers no placement under a deleted node.
  • A node active in the model but hidden, still shown in the note, counts
    as a divergence.
  • @openlfcp/* 0.2.0-beta.10: whether an edit was concurrent with a
    deletion is decided with vector clocks, the decoded history is reused
    between revisions, and the tree and snapshot are derived once per
    revision (a pass at 6,000 changes with 300 deleted tasks: 200 ms against
    746 ms, and the status read no longer derives the tree again).
  • @openlfcp/* 0.2.0-beta.9: an acknowledgement that arrives after a
    long pause is recorded as the server's confirmation; and a section's replica no longer keeps an old
    copy of the document per unchanged task (Automerge memory flat as the
    history grows: 10 MiB at 2,000 changes with 170 tasks, against 1.6 GiB).
  • New native spec section-remove-invite: remove someone, invite someone
    new, the newcomer l...
Read more