Merge branch 'md2'
Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
commit
afe30a2255
22 files changed
+887
-38
No files matched your search
@@ -204,6 +204,6 @@ NFO / 图片投影、身份巡检与挂载根因聚合、HTTP 失败自动切浏
|
||||
- **文件预览不加 ffmpeg(用户 2026-09-30)**:视频缩略图 / 截图条不做,镜像不引入 ffmpeg(+141MB);`docs/design/file-preview-research.md` 对应项标为不做。
|
||||
- 用户 2026-09-30:BR-4 直接做完上线;《征途》重复单元不再处理(刷新时自动合并即可)。
|
||||
- **用户 2026-09-30 决定**:短剧补全(META-1 后续)继续做;文件预览的音频 / 压缩包 / 原盘目录不做;修完零碎问题后接其他站点真机测试。
|
||||
- **每集简介英文(MD-2,用户以《心动的信号》为例)**:协调者核对——TMDB 匹配正确(103147),每期标题为 zh-CN;但 TMDB 上这些集没有中文简介,只有英文"简介"(实为标题英译),MD-1 的语言回退链把 en-US 填进了简介。改法:简介的回退链只到中文变体(zh-CN→zh-SG→zh-TW→zh-HK),不回退到英文,没有就留空并显示"暂无简介";标题仍可回退英文;存量数据按新规则重算(只读 dry-run 后应用)。
|
||||
- **每集简介英文(MD-2,用户以《心动的信号》为例)**:协调者核对——TMDB 匹配正确(103147),每期标题为 zh-CN;但 TMDB 上这些集没有中文简介,只有英文"简介"(实为标题英译),MD-1 的语言回退链把 en-US 填进了简介。改法:简介的回退链只到中文变体(zh-CN→zh-SG→zh-TW→zh-HK),不回退到英文,没有就留空并显示"暂无简介";标题仍可回退英文;存量数据按新规则重算(只读 dry-run 后应用)。**状态:已实现(分支 md2,待合并)**——adapters `overviewLanguages`(简介链)+ 设置 `metadata.overviewNonChineseFallback`(缺省关)+ 详情页「暂无简介」+ 存量重算 `scripts/overview-recompute.ts`(只读 kv_cache,缺省 dry-run);见 runbook metadata.md「存量简介重算(MD-2)」。
|
||||
- **零碎问题(2026-09-30 讨论)**:跨进程限流已在迁移 0041 做完,CHANGELOG「已知限制」过期条目删除;子会话思考英文 → 子会话系统提示补中文要求 + 测试;`agent.spawn` 重复调用 → 同目标去重(返回已有子会话);camofox 空闲 5 分钟回收 → 桌面接管 / 智能体会话打开期间由 app 定期保活,关闭后照常回收;憨憨 UA"待切换"→ 站点页「刷新登录」即可切换,不另做。
|
||||
- **智能体提示词与 Skill 工程化(AG-5,用户 2026-09-30)**:用户贴出一份汇报反例(`docs/design/agent-report-sample-bad.md`),要求"结构化地编写提示词和 Skill,充分考虑我们的情况做工程适配"。方向:系统提示分层(角色 / 环境事实 / 能力地图按意图 / 行为规则 / 汇报规则);按任务类型做 Skill(巡检、收录一部作品、入库问题排查、订阅追更、数据清理…),用 Pi agent-core 的 harness Skill 机制按意图加载;汇报规则:结论先行、人话单位、不直出内部字段、不让用户提供自己能查的 ID、授权缺失一句话 + 按钮;用固定提示集做前后对比评测(fake 模型 + 少量 DeepSeek V4.1 Flash 真跑)。
|
||||
@@ -5,8 +5,8 @@
|
||||
- 设置 → 元数据 → TMDB →「语言回退链」,即 `settings.metadata.languages`,缺省 `zh-CN, zh-SG, zh-TW, zh-HK, en-US`。
|
||||
- 作品标题:按链逐个语言查 TMDB `translations`(语言 + 地区精确匹配);该语言译名为空时查同地区、文字相符的 `alternative_titles`(类型为空的优先);原始语言等于链中语言时原名也算。全部落空用请求语言下的 name / 原名。对照 MP `__update_tmdbinfo_cn_title`(中文名 → CN 别名 → SG 译名)。
|
||||
- 中文名 `titleZh`:只在链里的中文语言中按顺序取(zh-CN 优先),值必须含汉字。链首改成 en-US 时标题变英文,`titleZh` 不变。
|
||||
- 简介 / 标语:按链取 `translations` 的第一个非空值。
|
||||
- 季 / 集:先按链首请求 `/tv/{id}/season/{n}`;已播出的集缺标题(TMDB 占位名"第 N 集""Episode N")或缺简介时,按链逐个语言补拉同一端点,补齐即停;链走完仍没有标题的集保留占位名(语言记为空)。未播出的集不触发补拉。
|
||||
- 简介 / 标语(MD-2):只按「简介链」取 `translations` 的第一个非空值,取不到留空(界面显示「暂无简介」)。简介链 = 回退链里第一个中文之前的语言 + 链里全部中文,之后的非中文去掉;缺省链得到 `zh-CN, zh-SG, zh-TW, zh-HK`。链里没有中文时简介链就是原链。设置 → 元数据 → TMDB「简介回退到非中文」(`metadata.overviewNonChineseFallback`,缺省关)打开后简介链 = 原链(旧行为)。原因:TMDB 上很多剧集(如《心动的信号》103147)只有英文"简介",而且常是标题英译;MP 每集信息只按配置语言取,简介为空就为空。请求语言下的原值若等于链外某语言的译文(TMDB / 反代把缺失字段回退了),不当作链内的值。标题 / 别名不受影响。
|
||||
- 季 / 集:先按链首请求 `/tv/{id}/season/{n}`;已播出的集缺标题(TMDB 占位名"第 N 集""Episode N")或缺简介时,按链逐个语言补拉同一端点,补齐即停(简介只从简介链里的语言取;只缺简介且剩下的语言都不在简介链里时不再补拉);链走完仍没有标题的集保留占位名(语言记为空)。未播出的集不触发补拉。
|
||||
- 每个字段的来源值写 `metadata_field`,`language` 记实际取到的语言;同字段语言变了,旧语言的 tmdb 行删掉。
|
||||
- `translations` 与 `alternative_titles` 写 `title_alias`(来源 tmdb,标语言;别名只在地区与文字相符时标,如 CN + 汉字 → zh-CN)。已有同文本别名(繁简归一化后同键)不重复登记,只给语言为空的 tmdb 行补语言。
|
||||
|
||||
@@ -44,6 +44,25 @@ curl -s -H "Authorization: Bearer $KEY" "$BASE/api/v1/media-entities?limit=200"
|
||||
while read -r id; do curl -s -X POST -H "Authorization: Bearer $KEY" "$BASE/api/v1/media-entities/$id/refresh?full=1"; done
|
||||
```
|
||||
|
||||
## 存量简介重算(MD-2)
|
||||
|
||||
MD-1 的回退链把 en-US 等非中文简介写进过作品 / 季 / 集。新规则上线后,刷新会按新规则清掉;不想等刷新、或想先看范围时用脚本:
|
||||
|
||||
```sh
|
||||
# 看清单(只读):按作品列出每项「旧语言 旧值 → 新语言 新值(依据)」和合计
|
||||
DATABASE_URL=postgres://umt:***@<host>:5432/umt deno run -A scripts/overview-recompute.ts
|
||||
DATABASE_URL=… deno run -A scripts/overview-recompute.ts --entity <作品 id> # 只看一部
|
||||
DATABASE_URL=… deno run -A scripts/overview-recompute.ts --json # 清单 JSON
|
||||
DATABASE_URL=… deno run -A scripts/overview-recompute.ts --apply # 写库(单个事务 + 审计 metadata.overview_recompute)
|
||||
```
|
||||
|
||||
- 对象:来源 tmdb、`language` 不为空且不在简介链里的 `overview`(作品 / 季单元 / 集单元,未退役,有已接受的 TMDB 身份)。语言链与开关取库里的设置。
|
||||
- **不请求 TMDB**:用只读 `kv_cache`(region `tmdb.request`)的客户端跑同一套 `fetchRichDetail` / `fetchRichSeason`,读缓存不续期、不改最近使用时间,过期但还没被清理的行也用。依据写在清单里:
|
||||
- `缓存`:按缓存的响应重算,可能改成某个中文变体的简介,也可能为空;作品的标语一起按缓存重算;
|
||||
- `无缓存→清空`:缓存已淘汰。当初能落到非中文,说明那时简介链里的语言都没有简介,按新规则直接清空。
|
||||
- 写库与刷新同一套:写字段来源(语言变了删旧语言行)再投影;用户锁定 / 覆盖的字段最终值不变。重跑幂等(第二次清单为空)。
|
||||
- 按 lesson 22:对真实库先跑 dry-run,由协调者过目清单再 `--apply`。代码:`apps/server/src/modules/sources-identity/service/overview-recompute.ts`。
|
||||
|
||||
## 集字段(字段级,可锁)
|
||||
|
||||
- 集单元字段:`name`(投影到 `content_unit.title`)、`overview`、`airDate`(投影到 `air_date`)、`runtime`、`stillPath`、`voteAverage`、`voteCount`;季单元另有 `posterPath`。最终值在 `content_unit.metadata`,每个字段带来源 / 语言 / 时间 / 锁。
|
||||
@@ -65,6 +84,7 @@ curl -s -H "Authorization: Bearer $KEY" "$BASE/api/v1/media-entities?limit=200"
|
||||
| 现象 | 看哪里 |
|
||||
|---|---|
|
||||
| 标题仍是英文原名 | 作品详情「字段来源与锁」里 `标题` 的来源与语言;是否被锁;设置里的语言链;对作品跑 `full=1` |
|
||||
| 简介显示「暂无简介」 | TMDB 该作品 / 集在简介链的语言里都没有简介,属正常(MD-2 不再用英文顶替);要英文时打开「简介回退到非中文」再刷新;也可在每集行手动填写并锁定 |
|
||||
| 某集没有中文标题 | 该集在 TMDB 各语言都没有译名时保留占位名 / 英文名,属正常;可在每集行手动改并锁定 |
|
||||
| 季里没有集 | 默认刷新不为未追踪的季建集单元,点「更新每集信息」(full) |
|
||||
| 没有特别篇 | TMDB 该剧有没有季 0;设置 `metadata.includeSpecials` 是否关了;对作品跑 `full=1` |
|
||||
|
||||
Reference in new issue
Block a user