- remove racy watch(loading)+loadIfSentinelVisible fallback that fired before RecycleScroller set virtual height
- add hasMore guard and total reset in useBookQuery for defensive correctness
- drop tags field and bookTags fan-out query from all BookCard paths
- drop metadataScore from BookCard select (only used in BookDetail)
- fix durationSeconds: was never selected in DB; derive audiobook badge from file format using FORMAT_TO_GROUP instead
- replace broken HSL approach with pure JS oklch-to-hex using exact --primary L/C from accents.css
- remove --chart-1..10 and --chart-icon-* CSS tokens
- remove dead --color-chart-* Tailwind bridge aliases
- inline CSS relative color syntax in ChartCard and StatisticsSummaryCard
- fix MetadataScoreDistributionChart mark area to rgba (ECharts-compatible)
- resolve all 69 client type-checking errors for stricter TS compliance
- remove obsolete type-check baseline scripts and files
- overhaul project root with updated README.md and new DEVELOPMENT.md
- migrate to unified baseline migration strategy and cleanup docker configs
- remove redundant production and dev-specific shell scripts
- replace shared 'providerId' key in pickedSources with provider-specific
field names (googleBooksId, goodreadsId, etc.) so each provider's ID
pick is independent and not overwritten when switching tabs
- extract candidate relevance scoring into candidate-relevance.ts with
Levenshtein-based title/author scoring, ISBN exact match, and junk
title filtering; remove duplicate inline scoring from goodreads provider
- implement HardcoverProvider (IdentifiableProvider) with ISBN, title+author, title-only search fallback chain
- add HardcoverClient with fixed-delay rate limiter using atomic slot reservation
- add hardcover.mapper.ts and hardcover.types.ts for clean separation of concerns
- fix cached_contributors as JSONB scalar (no subfield selection)
- fix null series position normalisation to undefined
- fix edition publishedYear fallback to book-level dates
- add 37 unit tests across mapper and provider
- update metadata-fetch.module.test.ts for HardcoverProvider registration
- split MetadataPreferencesSettings into Providers tab and new Field Rules tab
- update Hardcover favicon to assets.hardcover.app/static/favicon.ico