Commit Graph
5 Commits
Author SHA1 Message Date
dank 8f2c3bb378 docs(scripts): --after names the trigger's epoch, never a file mtime
Both drivers' help text recommended `--after "$(stat -c %Y <journal>)"`. Measured
2026-11-04 that epoch is answered by whatever scan finished before the question was
asked: on Jellyfin it reads an earlier task's EndTimeUtc, and the Plex door cannot be
a waiter at all, since PMS stamps section_locations.scanned_at when it accepts the
request. The laws are on the vault pages (main 146c28d); this puts the warning at
point of use, in the text an agent reads before calling the door.
2026-11-04 12:24:56 -08:00
dank 146c28da9f docs(plex,jellyfin): the scan doors are not waiters; supersedes b82655d
`status` compares a recorded timestamp with `--after`. Measured 2026-11-04: Plex
answered `settled` in the same second its own trigger was accepted (stamp
19:46:59Z for a request accepted 19:46:58Z) and still answered `settled` from that
one stamp 30 minutes later while the walk ran. So no epoch survives it — a journal
mtime fails and the trigger's epoch fails, because the trigger satisfies the door it
was asked to wait for. That is the correction of b82655d, which prescribed the
trigger's epoch for this door.

Jellyfin's `EndTimeUtc` only advances when a scan finishes, so there the trigger's
epoch is sound and a file mtime is not; its `wait` already refuses an epoch an
earlier task passes. The proof a scan did its work stays `media-verify.py`
replaying the journal: a scan can clear rows but cannot invent one.
2026-11-04 12:20:59 -08:00
dank b82655d30a docs(plex): --after takes the trigger's epoch; a file mtime reports a false settle
The page's own example passed the journal mtime. Measured 2026-11-04: a chain
using it fell straight through its wait loop, because status only asks whether
the section has scanned since that epoch and the section had been walked earlier
the same day. The verify that followed read a database that had not yet processed
that day's renames — a false success, which is the direction that gets believed.
2026-11-04 12:17:20 -08:00
dank e519f6b554 docs(vault): the promo-clip hold is purged; merge main's purge record 2026-11-04 11:59:00 -08:00
dank 71e7e94b94 docs(media): the 2026-11-04 purge, and the gate that proves a hold is safe to delete
The duplicate-prune, TV-duplicate, Ghibli and promo-clip holds went out of the
array trash on Frank's word: ~1.2 TB back. This replaces the three "purge pending
Frank's word" rows with what happened.

Two procedures the page did not carry:

- The purge gate. `REAL: 0` in both databases only says no row points at a moved
  path; it says nothing about whether the film survived. Every held file needs a
  same-work carrier in the live library at >= its size, re-derived at purge time,
  because the relayout renames folders AND keeper files, accents defeat ASCII
  matching (Nausicaä), and a carrier is usually another container at another
  size. That supersedes the 2026-11-01 "re-verify by size" law, which is exactly
  the test that reports survivors as lost.
- The purge mechanics. The repo purger acts on a root's own .AGENTTRASH and
  nothing else, so a partial purge is staged into a scratch root while the
  unapproved buckets sit parked at the array root as .HOLD-<date>-*.

./tests/run.sh: 824 assertions, all pass.
2026-11-04 11:58:21 -08:00