First stable release. No breaking changes from 0.1.0-beta.9 — the version number is a statement
about stability, not a rewrite. An existing install upgrades in place; the migrations run on boot
after taking a pre-migration backup.
Added
- A "Because you watched" row can cycle its seed instead of sitting on the newest watch for
weeks, so the row keeps moving even when someone's viewing does not. - The row editor is a page, showing what the row will actually do — and whether it is working —
beside the settings that decide it. Rows can be renamed and deleted from there. - A way back from Off, and a request filter that reaches past the 500-row inbox cap: picking a
name under "Wanted by" now asks the SERVER, so it searches every title on file rather than the
page that happened to load. - Two new row orders, for when the front of a row feels stuck (#63):
Just added puts whatever is new to the row at the front, and Taking turns advances the
front by one title a day so every pick gets a spell there. Both are presentation only — neither
changes which titles a row holds, or how often it refreshes, which is still Freshness.
"Newest" is now labelled Newest released, to keep it distinct from "Just added". - A rebuilt documentation site, split into eight task-shaped guides.
- The row editor leads with how the row is doing — delivered, watched, runs and last built,
across the top. Runs links to that row's own history, and counts the runs that list actually
holds, so the number and the page behind it can never disagree.
Fixed
- An un-watch is noticed within the night's read rather than waiting up to a week for the full
re-read. Only when the read proves it covered its window — a truncated walk deletes nothing, so a
PMS that omitstotalSizecan never be mistaken for "they un-watched everything". - A library removed from the server no longer counts as watched for ever. Its cached titles and
cursor are swept on the weekly pass. A library that is merely unshared is left alone — that
history is still true. fetch_sectionraises instead of returning an empty set when plex.tv will not mint a token.
Reported as "nothing watched", it made a full read wipe the section and stamp the sync a success.- The dashboard and Rows pages no longer scroll sideways on a phone (134px and 184px past a
390px screen; Rows put the Delete button out of reach entirely). Every route, the wizard, the nav
drawer and every dialog now fit 390px, enforced bytests/e2e/test_mobile_audit.py. - The drift check's off switch now turns it off.
- Pages no longer wait on Plex. The library list behind every row card was read live from the
server on each page load, so while a job was deleting collections — one DELETE took 15.8s inside
Plex's own write lock — every page queued behind it. It is cached now, concurrent misses collapse
into one read, and a failed refresh serves the last good answer instead of an error. - Turning a row off asks first. The next run takes that row off Plex for everyone who has it,
which a bare switch gave no hint of. Turning one back on is unchanged — it removes nothing. - Rename only offers itself when the name has changed, and now does the rename rather than
showing you another button to press. Pressed on an unchanged name it used to rewrite every
collection, for every person, to the name they already had. - Warnings look like warnings, small grey text is readable, and the settings are explained in words
a first-time user already knows.
Changed
- The read-only Plex audit moved out of the Danger zone into Advanced — it changes nothing, and
filing it under a destructive heading made the safest control on the page look like the riskiest. - Renaming moved off the Rows list and into the editor, beside the name it changes.