Skip to content

feat(releases): sortable inbox columns and split observed/released dates#29

Merged
AshDevFr merged 1 commit into
mainfrom
release-ledger-sort
May 31, 2026
Merged

feat(releases): sortable inbox columns and split observed/released dates#29
AshDevFr merged 1 commit into
mainfrom
release-ledger-sort

Conversation

@AshDevFr
Copy link
Copy Markdown
Owner

Add clickable column sorting to the releases inbox (Series, Observed, Released), with the choice persisted per-user in a Zustand store backed by localStorage. Sorting is applied server-side before pagination so it orders the whole result set, not just the current page.

Split the overloaded observed_at timestamp into two distinct fields:

  • observed_at now means when Codex detected the release (set by the plugin to poll time).
  • released_at is a new nullable column holding the upstream publish date (the feed's pubDate), shown as a dedicated, sortable column and rendered as a dash when the source provides no date.

The MangaUpdates and Nyaa plugins now emit observedAt and releasedAt separately; the dedup key (externalReleaseId) is unchanged so re-polls still collapse onto existing rows. The plugin contract addition is backward compatible: releasedAt is optional and absent values persist as NULL.

A migration adds the nullable released_at column, backfills existing rows (released_at = old observed_at, observed_at = created_at), and adds a partial index for release-date sorting.

The Released sort orders NULL dates last in both directions with a stable id tiebreaker, and the default Series ordering is preserved. Narrow the Series cell and allow it to wrap so the date columns stay on a single line.

Regenerate the OpenAPI spec and TypeScript types. Add backend and frontend tests for sorting, the new field, and the preferences store.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 31, 2026

Deploying codex with  Cloudflare Pages  Cloudflare Pages

Latest commit: bf8c06f
Status: ✅  Deploy successful!
Preview URL: https://8c8d5fc9.codex-asm.pages.dev
Branch Preview URL: https://release-ledger-sort.codex-asm.pages.dev

View logs

Add clickable column sorting to the releases inbox (Series, Observed,
Released), with the choice persisted per-user in a Zustand store backed
by localStorage. Sorting is applied server-side before pagination so it
orders the whole result set, not just the current page.

Split the overloaded `observed_at` timestamp into two distinct fields:
- `observed_at` now means when Codex detected the release (set by the
  plugin to poll time).
- `released_at` is a new nullable column holding the upstream publish
  date (the feed's pubDate), shown as a dedicated, sortable column and
  rendered as a dash when the source provides no date.

The MangaUpdates and Nyaa plugins now emit `observedAt` and `releasedAt`
separately; the dedup key (externalReleaseId) is unchanged so re-polls
still collapse onto existing rows. The plugin contract addition is
backward compatible: `releasedAt` is optional and absent values persist
as NULL.

A migration adds the nullable `released_at` column, backfills existing
rows (released_at = old observed_at, observed_at = created_at), and adds
a partial index for release-date sorting.

The Released sort orders NULL dates last in both directions with a
stable id tiebreaker, and the default Series ordering is preserved.
Narrow the Series cell and allow it to wrap so the date columns stay on
a single line.

Regenerate the OpenAPI spec and TypeScript types. Add backend and
frontend tests for sorting, the new field, and the preferences store.
@AshDevFr AshDevFr force-pushed the release-ledger-sort branch from fd00254 to bf8c06f Compare May 31, 2026 01:00
@AshDevFr AshDevFr merged commit d9b4ce1 into main May 31, 2026
19 checks passed
@AshDevFr AshDevFr deleted the release-ledger-sort branch May 31, 2026 01:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant