Skip to content

[Step][#1080] Issues: a page listing the books to repair - #1081

Closed
Yoldark34 wants to merge 8 commits into
Listenarrs:canaryfrom
Yoldark34:repair/issues-page
Closed

Yoldark34 wants to merge 8 commits into
Listenarrs:canaryfrom
Yoldark34:repair/issues-page

Conversation

@Yoldark34

@Yoldark34 Yoldark34 commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Draft, and it stays a draft for now. Second step of the Repair epic, #1080. This PR needs groundwork that doesn't exist yet, and it won't create it:

Built before that groundwork, this screen would have to be redone each time a piece of it lands. It's opened now so the design and its captures can be discussed.

Stacked on #1054: its first commit is #1054's (the Repair buttons). Only the last commit belongs to this PR.

Change

Issues page (under System, always in the menu; its orange count is the books with a real issue, and ignored books never count)

  • GET /library/issues lists the books with no title, no ASIN, an ASIN that isn't one, or an ASIN without its region. Each row has a Repair button, and "Repair Selected Books (n)" repairs the selection.
  • A book's problems can be ignored (with confirmation). A "Show ignored books (n)" switch lists them (the choice is kept in the browser). They can be un-ignored, and repairing one asks whether it stays ignored. Stored in a new table, AudiobookIssueIgnores (migration AddAudiobookIssueIgnores).
  • With nothing left to repair, the page stays and one row says no issues were found (and how many ignored books are hidden).

Repair dialog: each book's current problems show in orange (GET /library/issues/{id}), and the Issues count is refreshed after a repair.

With the other PRs

Rollback

This PR has a migration. The rollback branch is one commit that reverts the PR, keeps its migration and adds a forward DropAudiobookIssueIgnores migration, so a database that ran it moves forward to a clean schema. The current rollback/repair-books covers the old, larger #1054. It will be rebuilt on this PR before it leaves draft.

Tests

Backend: LibraryIssueServiceTests and the migration history: 3770 passed. Frontend: Issues page, issues store, and the Repair dialog's problem pills: 702 passed. dotnet format, type-check, eslint and prettier are clean.

Captures

The Issues page:
image

Repair from the Issues page:
image

Ignoring a book's issues:
image

Showing ignored books (this capture shows the earlier checkbox, now a switch):
image

Issues in the main menu, ignored books not counted:
image

🤖 Generated with Claude Code

…he library

A Repair button on the book page and "Repair Selected" in the library open
the Repair dialog. For each book: its ASIN and Region, and Find Match, the
same Find Match as Library Import, opened on the book's title, author and
region. Picking a result takes its ASIN and the region it was found in. An
ASIN typed by hand is checked in its region with the same search before it
is saved. Every region is offered, ordered by the book's current region, the
configured one and US, then alphabetically.

Repairing saves the ASIN as the primary one with its region (identifiers of
the old match are dropped, manual ones kept), rescans the metadata from it,
then offers to Organize the repaired books. Revert per book.

Find Match now also takes a plain target (name, query, author, region)
instead of a Library Import row; Library Import still passes its row and
keeps waiting for its searches before importing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Repair Selected (n)" in the library, like "Delete Selected (n)". The library
button and the Repair button on the book page are orange (the warning color),
like the problems Repair fixes, with dark text and icon to stay readable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The book page's icon buttons get their colors from the shared button styles,
which force every nav icon button that isn't primary or danger to grey. A
warning variant (orange, dark icon) joins primary and danger there, and the
Repair button uses it.

The dialog's info line, selection count and results inherited the page's
dark text color: they now use the same styles as the Organize dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…whole row

Each book has Title and Author fields again, prefilled with its title and
first author. Find Match (or Enter in either field) searches what they hold,
in the selected region; Revert restores them with the ASIN and region.
ASIN, Region, Title, Author and Find Match share the whole row (two columns
on narrow screens).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Repair: ASIN, Title, Author, Region, then Find Match. Find Match (shared
with Library Import): each field has its name above it (Title or ASIN,
Author, Region) instead of a placeholder only, in that order; the spinner
sits next to the "Title or ASIN" name while a search runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Yoldark34 and others added 3 commits October 21, 2026 12:00
Another title, author or region describes another record, so the ASIN that
was there no longer matches: it is emptied until Find Match picks the book
again (or its ASIN is typed), and the dialog says so in its note. An empty
ASIN gets its own hint, and Repair waits for one. A record picked in Find
Match keeps its ASIN and region.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An Issues page under System, always in the menu; its orange count is the
books with a real issue (ignored books never count). GET /library/issues
lists books with no title, no ASIN, an ASIN that isn't one, or an ASIN
without its region, with a Repair button per row and "Repair Selected Books
(n)" for the selection. With nothing left to repair, one row says so.

A book's problems can be ignored (with confirmation). A "Show ignored books
(n)" switch lists them (the choice is kept in the browser); they can be
un-ignored, and repairing one asks whether it stays ignored. Stored in a new
table, AudiobookIssueIgnores (migration AddAudiobookIssueIgnores).

The Repair dialog shows each book's current problems in orange
(GET /library/issues/{id}) and refreshes the Issues count after a repair.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Yoldark34 Yoldark34 changed the title [Epic #1080] Issues: a page listing the books to repair [Step][#1080] Issues: a page listing the books to repair Oct 21, 2026
@Yoldark34

Copy link
Copy Markdown
Contributor Author

Closing this draft: the direction changed.

The Repair work moved on with more involved improvements and fixes (#1054 now uses a book card shared with Find Match, and #1086 shares Add New's search), and this page was built on the earlier design. The Issues screen is still a natural step of #1080 and will come back when its time comes, once its groundwork exists (#1076, #1078).

Keeping this branch updated and mergeable in the meantime isn't productive, so the Issues screen will be rewritten from scratch then. I'm keeping this branch locally as a reference for that rewrite.

@Yoldark34 Yoldark34 closed this Oct 22, 2026
@Yoldark34
Yoldark34 deleted the repair/issues-page branch October 22, 2026 10:25
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