The gallery led with download dates because newest/oldest key off effective_date = the PRIMARY post's date (often the repost/download the file came from). Adds a materialized earliest_post_date = MIN(post_date) across ALL of an image's provenance posts (original publish), mirroring the effective_date pattern so the sort stays an index scan.
alembic 0071: earliest_post_date column + index (DESC, id DESC); backfill created_at baseline then MIN over image_provenance ⋈ post.
importer recomputes it whenever a dated post is linked.
gallery_service: new sorts posted_new/posted_old; cursor + year/month grouping follow the active column.
api: accepts posted_new|posted_old; default is now posted_new so the grid leads with original publish date. newest/oldest (effective_date) still available.
frontend: dropdown gains "Newest/Oldest post date" (default), old sorts relabelled "Newest/Oldest added".
tests: service test asserts the new sort keys off earliest_post_date; frontend default-omission test updated.
CI green on dev (run 1824, incl. integration + migration). No behavioral risk to existing sorts.
The gallery led with download dates because newest/oldest key off `effective_date` = the PRIMARY post's date (often the repost/download the file came from). Adds a materialized `earliest_post_date` = MIN(post_date) across ALL of an image's provenance posts (original publish), mirroring the effective_date pattern so the sort stays an index scan.
- alembic 0071: `earliest_post_date` column + index (DESC, id DESC); backfill created_at baseline then MIN over image_provenance ⋈ post.
- importer recomputes it whenever a dated post is linked.
- gallery_service: new sorts `posted_new`/`posted_old`; cursor + year/month grouping follow the active column.
- api: accepts `posted_new|posted_old`; **default is now `posted_new`** so the grid leads with original publish date. newest/oldest (effective_date) still available.
- frontend: dropdown gains "Newest/Oldest post date" (default), old sorts relabelled "Newest/Oldest added".
- tests: service test asserts the new sort keys off earliest_post_date; frontend default-omission test updated.
CI green on dev (run 1824, incl. integration + migration). No behavioral risk to existing sorts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The gallery's newest/oldest sort keys off image_record.effective_date =
COALESCE(primary post's post_date, created_at). The primary post is often the
repost/download the file came from, so the grid led with download dates rather
than when content was first posted (operator-flagged).
Add a second materialized sort key, earliest_post_date = MIN(post_date) across
ALL of an image's provenance posts (every post it appears in), else created_at —
the original publish date. Mirrors the effective_date pattern so the sort stays a
forward index scan.
- alembic 0071: add earliest_post_date + index (DESC, id DESC); backfill
created_at baseline then MIN over image_provenance ⋈ post.
- importer: recompute earliest_post_date whenever a dated post is linked (MIN over
the image's provenance, which now includes the just-added row).
- gallery_service: new sorts posted_new / posted_old key off earliest_post_date;
cursor + year/month grouping follow the active column transparently.
- api: accept posted_new|posted_old; DEFAULT is now posted_new so the grid leads
with original publish date. newest/oldest (effective_date) still available.
- frontend: sort dropdown gains "Newest/Oldest post date" (default Newest post
date); existing effective-date sorts relabelled "Newest/Oldest added".
- tests: service test asserts posted_new/posted_old key off earliest_post_date;
frontend default-sort omission test updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The gallery led with download dates because newest/oldest key off
effective_date= the PRIMARY post's date (often the repost/download the file came from). Adds a materializedearliest_post_date= MIN(post_date) across ALL of an image's provenance posts (original publish), mirroring the effective_date pattern so the sort stays an index scan.earliest_post_datecolumn + index (DESC, id DESC); backfill created_at baseline then MIN over image_provenance ⋈ post.posted_new/posted_old; cursor + year/month grouping follow the active column.posted_new|posted_old; default is nowposted_newso the grid leads with original publish date. newest/oldest (effective_date) still available.CI green on dev (run 1824, incl. integration + migration). No behavioral risk to existing sorts.
🤖 Generated with Claude Code