Skip to content

Remove the four pinned settings from the schema - #981

Merged
ajslater merged 1 commit into
developfrom
claude/remove-pinned-settings-1e888a
Oct 19, 2026
Merged

ajslater merged 1 commit into
developfrom
claude/remove-pinned-settings-1e888a

Conversation

@ajslater

Copy link
Copy Markdown
Owner

Summary

#910 pinned dynamic covers, custom covers and finish-on-last-page on, and read-RTL-in-reverse off. It kept their columns so the toggles could come back with a revert. This PR removes them for good.

  • Migration 0057 removes SettingsBrowser.custom_covers / dynamic_covers and SettingsReader.finish_on_last_page / read_rtl_in_reverse with four RemoveField ops. All four shipped in 0038, so this has to be a new migration, not an edit to an old one. It is reversible: the browser columns have defaults and the reader columns are nullable. Historical migrations are untouched.
  • Defaults, serializers, session payload: the keys are gone from BROWSER_DEFAULTS / READER_DEFAULTS, the reader, browser and session-defaults serializers, and get_reader_defaults (which now iterates READER_DEFAULTS). BrowserCoverInputSerializerBase is folded into BrowserSettingsSerializerBase.
  • Telemetry and admin stats: the 3 sessions buckets and 8 per-user buckets are removed. The payload is still counts and closed enums only.
  • User-data sidecar: the two columns are gone from the schema, the dump and the restore. SCHEMA_VERSION is unchanged because the store only adds columns and restore reads named columns. The legacy _browser_row restore fixture keeps both keys as a regression guard for restoring an old sidecar.
  • Dead code removed:
    • the sort-name fuzzy cover match and parent_route in cover.py, plus the custom-cover early return;
    • the unused BrowserCoverInputSerializer;
    • the coverSettings getter and COVER_KEYS / DYNAMIC_COVER_KEYS;
    • setReadRTLInReverse;
    • the parked browser-settings-covers.vue;
    • every PENDING SCHEMA REMOVAL note.
  • NEWS line under v2.5.5.

Test plan

  • make fix, make lint, make ty: all clean
  • make test: backend 1683 passed, 1 xfailed; frontend 994 passed (97 files)
  • manage.py makemigrations --check --dry-run: no changes
  • Grep for the four names (snake_case and camelCase), PENDING SCHEMA REMOVAL, parent_route and parentRoute: the only hits are 0038, 0057, the legacy restore fixture, and identifiers of the separate CustomCover upload feature
  • Manual, on a copy of a dev DB:
    • migrate applies 0057, and migrate codex 0056 reverses it
    • the browse page shows collection and custom covers
    • a book is marked finished on its last page
    • an RTL book still reads right to left
    • the admin Stats tab renders without the removed rows
    • a user-data dump and restore works against a sidecar made before this change

Chronicle still charts dynamic_covers and tolerates the missing keys. Retiring that panel is a follow-up in that repo.

🤖 Generated with Claude Code

#910 pinned dynamic covers, custom covers and finish-on-last-page on and
read-RTL-in-reverse off, and removed their checkboxes, but kept the columns,
serializer fields, defaults, telemetry buckets and sidecar export so the
toggles could come back with a revert. Nobody needs them back, so they go:

- Migration 0057 drops SettingsBrowser.custom_covers/dynamic_covers and
  SettingsReader.finish_on_last_page/read_rtl_in_reverse. They shipped in
  0038, so this is a real RemoveField migration, not a fold edit.
- BROWSER_DEFAULTS/READER_DEFAULTS, the browser, reader and session
  serializers, the telemetry and admin stats buckets, and the user-data
  sidecar schema/dump/restore lose the keys. The sidecar SCHEMA_VERSION is
  unchanged: the store only adds columns and restore reads named columns,
  so a pre-removal sidecar still restores (the legacy restore fixture keeps
  the two keys as the regression guard).
- Dead code the pin left behind goes too: the sort-name fuzzy cover match
  and parent_route, the custom-cover early return, the unused
  BrowserCoverInputSerializer, the coverSettings getter and its key lists,
  setReadRTLInReverse, and the parked browser-settings-covers component.
  BrowserCoverInputSerializerBase folds into BrowserSettingsSerializerBase,
  and get_reader_defaults now iterates READER_DEFAULTS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ajslater
ajslater merged commit 0f78256 into develop Oct 19, 2026
9 checks passed
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