feat(metadata): overview falls back to Chinese variants only (MD-2)

- adapters: overviewLanguages() limits overview/tagline chain to Chinese
  variants (zh-CN→zh-SG→zh-TW→zh-HK); titles keep full chain; season
  supplement fetch skips languages useless for overview
- setting metadata.overviewNonChineseFallback (default off) + UI switch
- media detail shows "暂无简介" for empty entity/episode overview
- scripts/overview-recompute.ts: recompute stored non-Chinese overviews
  from kv_cache only (no TMDB requests), dry-run by default, --apply
- tests: chain unit tests, Heart Signal (103147) fixture, server
  recompute test, MP differential for episode overview
- runbook + CHANGELOG

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 18:04:23 +08:00
1 parent 081db4651c
commit f9901b514b
22 files changed
+887 -38

No files matched your search

@@ -183,7 +183,7 @@ export function MediaHero({ facts, badges }: { facts: MediaFacts; badges?: React
className="mt-2 max-w-3xl text-caption leading-relaxed text-on-media"
/>
) : (
<p className="mt-3 text-caption text-on-media-tertiary">没有简介。</p>
<p className="mt-2 text-meta text-on-media-tertiary">暂无简介</p>
)}
{dates.length || facts.externalLinks.length ? (
<div className="mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-meta text-on-media-tertiary">
@@ -332,7 +332,11 @@ export function EpisodeRow({ e }: { e: EpisodeRowData }) {
</div>
</div>
<p className="mt-0.5 text-meta text-muted-foreground tabular-nums">{meta.join(" · ")}</p>
{e.overview ? <ClampText text={e.overview} lines={2} className="mt-1 text-caption text-foreground/85" /> : null}
{e.overview ? (
<ClampText text={e.overview} lines={2} className="mt-1 text-caption text-foreground/85" />
) : (
<p className="mt-0.5 text-meta text-muted-foreground">暂无简介</p>
)}
{e.extra}
</div>
</li>