ResearchPocket 2.2.1
ResearchPocket 2.2.1
ResearchPocket 2.2.1 adds Research Zen: bounded authored documents — prose,
lists, and todos — that live beside your saves, synchronize between devices, and
can mention saved links inline. It also fixes a repository-growth bug that could
accumulate redundant snapshots in a private data repository indefinitely.
2.2.1 is the first release of this line. A v2.2.0 tag exists in the repository
but was never built or published.
Install
With Rust installed:
cargo install --locked --force researchOr download the verified archive for Linux, macOS, or Windows from the GitHub
release and check it against SHA256SUMS.
What changed
- Research Zen. A zen document is Markdown bounded to 256 KiB, stored as its
own aggregate rather than inside the item library. Documents carry a title,
tags, prose, GFM task lists, andresearch:item/<uuid>mentions that resolve
against your local saves. Saved items remain URL-first and unchanged: a
document is not a save without a link, it is a different thing. - Todo counts are derived from the body, never stored. A checkbox toggled by
clicking and one edited by hand are indistinguishable, and there is no counter
that can fall out of step with the text. - Concurrent edits merge at character level. A checkbox toggle is a text
splice, so two devices flipping different boxes in the same list keep both
changes, as do a toggle and a prose edit in the same paragraph. - Zen documents synchronize. Both clients now carry the aggregate generation
after their protocol-v1 phase. An operation whose causal predecessor has not
arrived is deferred and retried rather than partially applied, and uploads are
confirmed by reading the remote object rather than assumed from the write. research zenin the CLI:list,add,show,edit,delete, and
restore. Bodies come from a file or standard input, because a document is
prose and shells mangle prose. Listing reads projected metadata only;show
is the one command that loads a body.- The web workspace opens as a new-tab surface: the time, one input that
both filters and creates, and the documents. Opening it costs nothing
proportional to how much you have written, because no body is read to draw it. - Checkpoint selection fix. A device that edited between building a
checkpoint and confirming its upload never selected the checkpoint it had just
published. Because tail thresholds are measured from the selected checkpoint,
every later cycle minted and uploaded another full-library snapshot. Protocol
v1 never prunes, so those accumulated permanently. Selection now requires only
that this replica has already applied everything the checkpoint covers. - A returning owner lands in their library. Opening the site with a library
already on the device goes straight to the app instead of asking again how to
create one.?choosestill reaches the chooser for adding or restoring a
library. - The web app no longer emits module preloads its own Content-Security-Policy
forbids, which broke first load in strict browsers.
Upgrade an existing private library
Upgrade the native client, verify the version, and run one normal sync:
cargo install --locked --force research
research --version
research sync runThe expected version is research 2.2.1.
Zen documents are a new aggregate namespace under sync/v2/ops/zen/. They do
not touch protocol-v1 history, which remains immutable and is not pruned. A
2.1.x client that has not been upgraded will not see documents written by a
2.2.1 client; it continues to synchronize saves normally. Upgrade every device
you want documents on.
This release does not perform the item-aggregate migration. Saves continue to
synchronize over protocol v1.
GitHub release archives
| Platform | Release asset |
|---|---|
| Linux GNU/glibc x86-64 (glibc 2.35 or newer) | research-v2.2.1-linux-amd64.tar.gz |
| Windows x86-64 | research-v2.2.1-windows-amd64.zip |
| macOS Intel | research-v2.2.1-macos-amd64.tar.gz |
| macOS Apple Silicon | research-v2.2.1-macos-arm64.tar.gz |
The archives remain unsigned. Verify the selected file with SHA256SUMS, or
build the exact tag with the pinned toolchain:
git clone --branch v2.2.1 --depth 1 \
https://github.com/ResearchPocket/researchpocket.github.io.git
cd researchpocket.github.io
cargo build --locked --release