Repository navigation
v0.21.0 — an export appears all at once, or not at all
The three worthwhile items from the second review's architecture list.
An export appears all at once, or not at all. Every file is written into a staging folder inside the destination and moved into place in one step at the end. Before this, output went straight to your chosen folder one file at a time, so stopping an export, running out of disk, or a crash part-way left a folder holding some files from this run and some from the last one.
Because of it, "Stopped. Nothing was written." is now a promise the code can keep, and the machinery added in 0.18.0 to admit which files had already landed is gone along with the situation that needed it. A by-reviewer/ file left over from an earlier run is also no longer kept alongside current output.
The log is the one exception and is still written live, since it is what you read when an export fails and never reaches the end.
The settings file is created owner-only rather than made owner-only. It used to be written and then chmodded, so a live Overleaf session sat in a world-readable file for as long as that took. It is created 0600 now, written beside the real file and moved into place, so a crash part-way cannot leave a truncated one either.
The cross-implementation parity test runs a matrix instead of one happy path. Seven scenarios go through both Python and the browser extension and are compared: the baseline, orphan-only threads, a stale offset past the end of the file, a quoted title with Greek and Chinese in the comments, one thread with two anchors, a long reply chain, and tracked changes with no comments at all.
A single fixture is how the JSONL contract drifted apart without anything noticing. Dropping orphan records from the extension's JSONL is caught now, and only the orphan-only scenario catches it.
pip install --upgrade "overleaf-comments-export[gui,pdf]"