Commit graph

9 commits

Author SHA1 Message Date
8fb16b3220 feat(library): local canonical conversion for id-less notes 2026-08-05 20:55:42 +08:00
1e4567e844 feat(library): two-line candidate picker entries with per-type detail 2026-08-05 16:00:33 +08:00
d7162d3ac2 feat(library): interactive candidate picker for ambiguous resolves 2026-08-05 15:24:50 +08:00
3eb89772c7 fix(library): exclude light novels from anilist manga resolve 2026-08-05 15:00:16 +08:00
8a046a0ea2 feat(library): anilist-primary manga metadata with jikan fallback 2026-08-05 14:46:31 +08:00
49d7779bc1 feat(library): book author-hint resolve + ambiguous candidate logging 2026-08-05 11:05:04 +08:00
ea5ddd9454 fix(library): seed-pass flip guard, manga null-sentinel, mangadex resolve
- comic/manga sync(): a note's first-ever observed issue/chapter number
  (no prior latest_issue/latest_chapter) now seeds the baseline without
  flipping read_status or notifying. Previously `prev === null` counted
  as "newer", so a Read note with no stored baseline flipped to Unread
  on its very first real sync. Flips now require a prior value AND a
  strictly greater candidate AND read_status Read, mirroring the
  watchlist build.ts `prevLast &&` guard.
- manga rss/last_chapter_date: quotedOrNull renders an unset value as
  the literal `null` token; on the next parse that string came back
  truthy, so an unset rss field was fetched as the URL "null" and
  isActive treated it as "has rss -> active" forever. Sentinel is now
  stripped back to '' everywhere it's read from frontmatter.
- manga resolve(): best-effort MangaDex id lookup by title (unique-exact
  match against attributes.title + altTitles) runs alongside the
  existing MAL lookup when the note has no mangadex_id yet. Any failure
  (no match, ambiguous, network error) is logged and skipped, leaving
  the mal_id patch intact.
2026-08-03 22:08:40 +08:00
c14da19c47 feat(library): rating line, manga finish-flip notify, game links, dedupe
- render **Rating:** line in manga/book/game/comic body (after read/play
  status, gated on rating != '0' + stars non-empty), matching watchlist's
  render.ts convention
- manga finish-flip now notifies user (final chapters out), matching
  chapter-flip's existing notify path
- game renderGame emits ## Links (Steam by appid, RAWG by url) — fixes
  latent owned-heading strip where user-added Links sections silently
  vanished since games never re-rendered the heading
- move duplicated deriveReadStatus/deriveRating/parseNumOrNull into
  library/convert.ts, import across specs; zero behavior change
2026-08-03 16:29:02 +08:00
abc3489d27 feat(library): manga spec — jikan enrich, rss/mangadex chapter flip 2026-08-03 15:28:01 +08:00