GATE D

SORTED

moved to canonical home
0
items here now
aggregate size

What this gate means

An item is at SORTED once its bytes have moved to their canonical home. For photos that's /RAID/photos/<year>/<month>/; for emails it's /RAID/email/<account>/; for purchase docs it might be pa.gf.cx records. Derivatives mirror to R2 (per the negatives-stay-home pattern); originals live only on the RAID.

Sub-routines · operational playbook

Photos → RAID + Immich indexing
rsync → /RAID/photos/// (Immich auto-indexes)
Photos sort by capture date, not import date. Use exiftool's FileModifyDate rewrite mode to fix mtimes from EXIF before rsync, then rsync into year/month buckets. Immich watches the RAID photos dir and indexes automatically — search/browse via the Immich web UI.
exiftool '-FileModifyDate/photos/
rsync -av --no-perms --no-owner /Volumes//photos/ /Volumes/RAID/photos/
when: Photo-heavy intakes after metadata extracted
Email → RAID maildirs
rsync → /RAID/email// in maildir format
Takeout delivers Gmail as mbox. Convert to maildir for faster random access (mb2md or python mailbox module). One subdirectory per account. Mail clients can later mount these via IMAP gateway if needed.
mb2md -s /Volumes//Takeout/Mail/All\ mail.mbox -d /Volumes/RAID/email//
when: Gmail / Workspace Mail intakes
Docs → pa.gf.cx records
OCR + retag → pa.gf.cx purchase / asset / service records
Receipts, invoices, manuals, service records get OCR'd and routed into pa.gf.cx as proper records — not dumped into a 'docs' folder. The pa.gf.cx ingest pipeline already exists (see pa_ebay_gdpr_process / pa_purchases_dashboard). Drop docs into ~/Desktop/Sort/ for pa to pick up.
# AirDrop / move scanned docs into ~/Desktop/Sort//
# then trigger pa ingest as documented at pa.gf.cx/service-records
when: Personal paper digitized · receipts / asset docs from cloud archives
Derivatives → R2 mirror
~1500px JPG + 1080p MP4 + thumb + sidecar JSON
Per the derivatives-in-R2 / originals-on-RAID pattern: every photo and video gets three R2 artifacts (preview, thumb, sidecar). The RAID keeps the master. Immich's ingest pipeline produces these natively; rsync only the preview + thumb + sidecar dirs to R2, exclude originals.
rclone sync /RAID/immich/preview/ r2:photos.gf.cx/preview/ --transfers=8
rclone sync /RAID/immich/thumb/   r2:photos.gf.cx/thumb/   --transfers=8
when: After photos/videos land in their canonical RAID home
Manifest update
set target_home in migrations.yml + re-bake
Update each item's target_home field to the canonical path it landed in, flip state to sorted, re-run ./bake.py. The dashboard now reflects the gate transition; the items-by-gate section shifts the entry from SOURCED down to SORTED.
$EDITOR migrations.yml  # state: sorted, target_home: /RAID/photos/...
./bake.py && git commit -am 'sort: '
when: After bytes land in canonical home

Items at this gate

No items currently at this gate.

Gate-exit checklist

Verify before moving items into ARCHIVED:

Gate D · SORTED · baked 2026-05-29 from migrations.yml + GATE_DETAIL