feat(identity): escalate ambiguous/no_match via site detail-page IDs (ID-3)

Fetch the detail page (cached, rate-limited, per-site hourly cap
identity.detailIdsPerSiteHour) for search results, subscription-related
candidates, pool enrich and manual re-identify; resolve IMDb/TMDB via TMDB,
douban via cached douban subjects (site detail info block / META-2 snippets).
No identity_unresolved decisions for releases with site IDs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-01 00:15:20 +08:00
1 parent cba214e93e
commit 3d5a50b30a
9 files changed
+867 -10

No files matched your search

+7
View File
@@ -496,6 +496,11 @@ export const IdentitySettings = z.object({
* 缺省开;关掉后只用白名单网站的摘要与网页。旧设置没有这个键,按开处理
*/
enrichSnippetAllSites: z.boolean().optional(),
/**
* ID-3 识别升级:标题识别不确定时,每个站点每小时最多为识别抓多少个详情页(取 IMDb / TMDB / 豆瓣 ID);0 = 不抓。
* 只在搜索结果、订阅相关的候选、池条目补全和手动重新识别时抓,RSS 批量入库不抓。旧设置没有这个键,按缺省 10
*/
detailIdsPerSiteHour: z.number().int().min(0).max(200).optional(),
});
export type IdentitySettings = z.infer<typeof IdentitySettings>;
@@ -699,6 +704,7 @@ export const DEFAULT_SETTINGS: GlobalSettings = {
enrichDailyBudget: 20,
enrichDomains: DEFAULT_ENRICH_DOMAINS,
enrichSnippetAllSites: true,
detailIdsPerSiteHour: 10,
},
search: { defaultSiteMode: "default", siteIds: [] },
storage: DEFAULT_STORAGE_SETTINGS,
@@ -998,6 +1004,7 @@ export const SETTINGS_SECTIONS: readonly SettingsSectionDef[] = [
"identity.enrichDailyBudget",
"identity.enrichDomains",
"identity.enrichSnippetAllSites",
"identity.detailIdsPerSiteHour",
"cache.globalImageCache",
"cache.globalImageCacheDays",
],