Skip to content

Feat/season names in dropdown - #195

Closed
nakenyon wants to merge 892 commits into
dannyvfilms:devfrom
nakenyon:feat/season-names-in-dropdown
Closed

Feat/season names in dropdown#195
nakenyon wants to merge 892 commits into
dannyvfilms:devfrom
nakenyon:feat/season-names-in-dropdown

Conversation

@nakenyon

@nakenyon nakenyon commented May 6, 2026

Copy link
Copy Markdown

Summary

  • Describe what changed and why.

Validation

  • List commands run and outcomes.

Migration Sync Gate (Required for dev -> latest sync PRs)

  • Conflicts resolved with upstream files preserved and fork behavior merged intentionally.
  • Migration conflicts handled per policy (no rewrite of shared/released migrations).
  • cd src && python manage.py makemigrations --merge run for affected apps.
  • cd src && python manage.py check_migration_hygiene --strict passed.
  • scripts/replay_upgrade_matrix.sh --from-tag <previous_release_tag> --to-ref latest --db sqlite,postgres --with-drift-scenarios passed.
  • coverage run src/manage.py test app users integrations lists events --parallel passed.

Notes

  • Link relevant issues (for example: Refs #101).

dannyvfilms and others added 30 commits February 24, 2026 17:35
- Move recommend/recommendations split action to the header on both list detail and smart list detail pages.

- Remove the in-toolbar recommend split controls and recommendation chips; keep hero action conditional on recommendation availability.

- Keep list/smart-list filter toggle groups right-aligned by restoring auto left margin in shared mobile/desktop toolbar CSS.
- Allow list-detail filter menus to render outside the mobile toolbar by removing clipping overflow rules.

- Keep view toggles right-aligned by preserving auto left margin in shared list-detail toolbar styles.

- Anchor the List Detail All Types dropdown to the left on mobile so the menu stays on-screen.
- Persist reading author credits via Person/ItemPersonCredit across providers.
- Render linked authors in media details and support author-aware person/history views.
- Add author as a multi-filter option for books, comics, and manga with regression tests.

Refs dannyvfilms#94
- Merge AniDB/Hama webhook routing with existing Plex GUID and TMDB fallback behavior.

- Keep upstream provider/settings updates for Redis prefix, Steam key access, and TMDB Letterboxd links.

- Preserve release-side playback/list compatibility fixes and aligned webhook regression tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Scope anime daily fallback to the branch where activity-local timestamp is defined.
- Add a regression test for All Time statistics refresh with anime date ranges.

Fixes dannyvfilms#98
- Allow public smart-list requests to apply transient filter params without mutating saved smart rules.
- Render smart filter UI/JS on public list pages while keeping edit-only controls hidden.
- Prevent stale HTMX responses from reverting filtered grids by syncing smart filter requests.

Fixes dannyvfilms#97
- Refresh provider metadata cache when reading details have author text but missing authors_full IDs.

- Backfill author credits and rebuild linked author rows after refresh to keep author names clickable.

- Add regression coverage and update caching documentation for the new self-heal path.

Fixes dannyvfilms#99
- add TOTP/recovery-code model, forms, views, routes, and migration for self-service recovery

- update account, login, signup, and password-recover templates for authenticator-first flows and recovery-code fallback

- add and update view tests for password recovery and profile authenticator management
- Reproduced dannyvfilms#101 by dropping boardgame_sort_valid before users.0068 and confirming migrate failed with UndefinedObject.\n- Replaced raw AddConstraint/RemoveConstraint in users.0067 and users.0068 with Postgres-safe if-exists/if-not-exists wrappers.\n- Verified the same migration path succeeds after the patch and users migration tests pass.\n\nRefs dannyvfilms#101
- Add check_migration_hygiene management command with strict graph and risky-op checks for fork migrations.\n- Add replay_upgrade_matrix.sh to run SQLite/Postgres upgrade replay plus drift scenario coverage for dannyvfilms#101-class failures.\n- Update AGENTS workflow, add migration sync playbook, tests, and PR checklist hard-gate items.\n\nRefs dannyvfilms#101
- Prefer explicit collection platform values over inferred item platforms for game filtering and platform options.

- Apply status filtering against each item's latest aggregated status so stale sessions don't leak into In Progress results.

- Add regression coverage for PlayStation 5 + In Progress with duplicate game sessions.
- Backfill invalid legacy last_search_type values to 'tv' before adding last_search_type_valid.

- Add migration regression tests for normalization SQL and constraint operation flow.

Fixes dannyvfilms#100
- Store filter/sort/layout query state in localStorage per user and media type.

- Restore saved filters when returning to a media list without explicit query params.

- Keep URL query params synchronized after HTMX list filter requests.
- Replace deprecated django.utils.timezone.utc with datetime.UTC in ABS import datetime parsing.

- Add regression coverage for millisecond startedAt/finishedAt values on completed audiobook imports.

Refs dannyvfilms#102
- Accept slash-containing media IDs in lists modal URL patterns.
- Preserve season/episode route precedence with specific patterns first.
- Add a regression test for media_view_url with a Pocket Casts gid media_id.

Fixes dannyvfilms#103
- Add a scheduled Celery task that enqueues genre, runtime, episode-runtime, and credits backfill batches.

- Reuse existing queue/retry helpers and add targeted credits candidate selection for bounded nightly scans.

- Add task tests covering credits candidate filtering and nightly orchestration behavior.
Implements FuzzyGrim#562. Users can now create personal tags
and attach them to any media item (movies, TV, games, etc.) via the
detail page Actions section. Tags support include/exclude filter
semantics in media list views and compose cleanly with existing
status/genre/sort filters.

- Add Tag and ItemTag models with case-insensitive uniqueness per user
- Add tags_modal, tag_item_toggle, and tag_create views + URL patterns
- Add include/exclude tag filter to media_list() view
- Add tag filter UI (include + exclude) to media list dropdown
- Integrate tag/tag_exclude rules into smart lists (builder + matching)
- Fix smart list live preview not applying tag filter from GET params
- Sync smart list membership on ItemTag save/delete via signals
- Rename list form "Tags" label to "List Tags" to avoid confusion

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- add Discover routes, service layer, provider adapters, cache models, and templates

- wire movie rows 1-6 with row-specific subtitle confidence display and cache/version handling

- include supporting tests, admin/task/management updates, and regenerated frontend assets
- add phase/tag affinity profile fields, cache/model wiring, and migration support

- retune comfort and Top Picks scoring with unrated inclusion, rewatch/seasonality handling, and debug outputs

- remove movie wildcard row, adjust all-time dedupe behavior, and update discover templates/views/tests
- Add  to the mobile badge so HTMX updates can target it.

- Keep desktop badge on the same shared selector for unified updates.

- Update  handler to refresh all count badges, not just .
- Apply the standardized five-row discover layout and provider wiring beyond movies/tv/anime.

- Add provider-side coming-soon sourcing and provider artwork hydration for board games and music rows.

- Expand discover service/registry coverage tests for row presence, dispatch, and rendering behavior.
- Normalize Audiobookshelf cover URLs and enrich missing book metadata via provider fallback.

- Persist enriched book fields on Item and expose them in local Audiobookshelf metadata responses.

- Add importer tests covering relative cover paths and provider-based cover metadata enrichment.

Refs dannyvfilms#102
- Preserve fork rating-scale and list admin behavior while integrating upstream admin/test refactors.

- Keep list recommendation/activity admin coverage and remove duplicate admin registration paths.

- Resolve remaining merge conflicts and run quick-pass validation (makemigrations check, lint, targeted tests).
The previous out-of-season penalty (-0.14) was too weak to suppress
Christmas movies (e.g. The Grinch, Jack Frost) in the "Top Picks For You"
and "Comfort Rewatches" rows during non-holiday months. A highly-rated
Christmas movie could score ~0.46 even after the penalty, still ranking
in the top results.

Two changes:
- Increase the out-of-season penalty from -0.14 to -0.40, which drops
  a full-strength holiday item from ~0.60 to ~0.20, pushing it well
  below typical non-holiday candidates.
- Expand HOLIDAY_STRONG_TERMS to include "grinch", "krampus", and
  "nutcracker", and HOLIDAY_SOFT_TERMS to include "jack frost" and
  "santa claus", so iconic Christmas characters in titles are caught
  even when TMDB keyword tags are absent.

https://claude.ai/code/session_01XpYeZusWXu9yNUZiZMqzVw
…al-recommendations-z6c2u

Strengthen out-of-season holiday filtering in discover recommendations
dannyvfilms and others added 29 commits May 3, 2026 13:22
…issing-start-date

Fix HLTB imports without start date columns
Add support for X-Forwarded-* headers in order to deal better with reverse proxy;
…sync

Fix podcast episode sync: per-show UUID uniqueness and episode creati…
The datetime auto-fill for new play records was capturing the time once
at component initialisation and reusing that stale value. For the main
track modal (mediaStatusDateHandler.js) this meant the status-change
handler always inserted the page-load time rather than the time the user
actually changed the status. For the episode track modal
(fill_track_episode.html) the time was baked in server-side via Django's
{% now %} tag, so it was frozen at page render.

Fix: call getCurrentDateTime() at the moment each field is written
(mediaStatusDateHandler.js), and replace the server-rendered default with
an Alpine x-effect that recomputes the current time whenever the episode
modal opens (fill_track_episode.html).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- derive media-list filter persistence from the hidden filter form instead of a hardcoded key list
- reuse the shared serializer for localStorage sync and grid/table layout toggle URLs
- add regression coverage for tag filters and shared serializer wiring
- keep the tags hover preview visible even when an item has no tags yet
- make the empty preview state open the existing manage-tags modal trigger
- cover the empty tag preview messaging and click-through wiring with view tests
- add inline trash-can deletion and modal refresh for library tags
- restyle tag add/remove actions to match the modal action group
- cover modal delete flows with tag view regressions
- return the surviving album from scrobble-time album dedupe so later track creation never uses a deleted album row
- add a regression covering placeholder-to-canonical album collapse before track creation
- keep the existing richer-metadata and music/track reassignment dedupe paths intact
- move list detail metadata, chips, actions, and descriptions into the media-details order for manual and smart lists
- restyle smart-list chips to match regular lists and hide the smart-rules summary on public smart-list pages
- cover the public header order and smart-list visibility behavior with focused list detail tests
- add focused list-detail regressions for owner views of manual and smart public lists
- verify internal headers keep the same metadata, chip, action, and description order as the public layouts
- preserve the editable smart-rules summary as the only intentional post-description owner-only section
- move the Hide Completed Recommendations control to the full-width dropdown pattern used elsewhere in Preferences
- keep the existing user preference storage and recommendation filtering logic unchanged
- add a sidebar regression covering the form submission path
- add a Home Screen settings page with persisted per-library row configuration, list search, and row-driven Home rendering
- preserve legacy Home behavior by seeding seasons as upcoming, other libraries as recent, and upgrading untouched first-pass defaults automatically
- remove the old planned-home preferences UI and cover the new Home configuration flow with focused regressions
- tighten the Home Screen editor into compact single-line row controls with working media-list-style menus
- remove the extra Home header/edit affordances and refresh the Home Screen settings regression coverage
- skip Sonarr-seeded season and episode rows from the generic initial metadata queue
- stamp Sonarr-imported season and episode items as locally seeded and add regressions
- replace the Home Load All button with horizontal infinite loading batched by offset
- keep Home rows single-height with fixed-width cards and auto-fill rows until they overflow
- cover the main Home row markup and batch endpoint behavior
- avoid rebuilding dynamic filter metadata when summarizing Home library rows
- fast-path simple smart-rule row matching so status/search-only rows skip collection and rating scans
- add focused regressions around both optimized paths
- balance the sort control gap across filtered and unfiltered rows
- keep the inline filter suffix styling aligned with the row title
- update Home regressions for the new header contract
- add TV and Anime progress filter states in the media list dropdown
- isolate time-left cache keys by progress state
- add regressions for TV, Anime, visibility, and cache separation
- add next-episode air-date sorting and fallback handling for TV, Season, and grouped Anime lists
- surface the date in table and grid layouts with focused visibility regressions
- widen persisted media sort choices and include the migration for the new choice
- try literal IGDB game search first, then retry with tokenized punctuation-insensitive terms
- version the IGDB game search cache key to avoid stale empty results
- add regressions for Shakedown Hawaii and exact punctuated queries
- switch HLTB search to the live bleed API flow
- keep exact-title, platform, and Steam verification logic intact
- add Iron Meat resolver and media-details regressions
- detect legacy TV/anime Home Screen rows even when the old title-sort direction differs
- migrate single-row and original seeded defaults to Not Caught Up and Episode Air Date defaults
- add focused regressions while preserving non-TV/anime manual direction toggles
- add matching left inset/offset on the horizontal home row scroll container
- preserve the top hover-ring clearance so leading cards render without clipping
- keep the existing empty-state paragraph formatting update in the same template
- keep library-query rows from surfacing duplicate items when a newer aggregated status no longer matches the requested filter
- restore standard podcast card width on the home page and cover both behaviors with focused regressions
- add the generated integrations index-rename migration expected by Django 5.2.12
- add a dedicated home-row card wrapper class so mobile grid modes can size row cards independently of media grids
- update the home view assertions for the new wrapper class and commit the regenerated Tailwind output
- exclude dropped-season episodes from caught-up checks so TV progress matches time-left sorting
- add regressions for dropped-season TV shows and preserve anime progress coverage
Display the actual season name (e.g. "Fantasy High", "Never Stop Blowing
Up") in the season dropdown instead of the show title. Falls back to
"Season X" for shows with generic season names, so existing behaviour
is unchanged for those.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@nakenyon nakenyon closed this May 6, 2026
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.

8 participants