docs: requirements coverage matrix and next-phase plan
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
57346d438c
commit
c1c8dc81a9
4 files changed
+376
No files matched your search
@@ -2,6 +2,26 @@
|
||||
|
||||
版本号遵循 [SemVer](https://semver.org/lang/zh-CN/)。所有成员包(`apps/*`、`packages/*`)与根 `deno.json` 使用同一个版本号;`/api/v1/health` 与备份清单里的版本取自 `apps/server/deno.json`。
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### 已知限制
|
||||
|
||||
需求逐条覆盖见 `docs/plan/11-requirements-coverage.md`:当前相当于 REQ 的 M0 大部分 + M1(仅 mock 环境)+ M2 约三分之一。
|
||||
|
||||
- 综艺只识别内容类型与上 / 下分段,不计算正片覆盖,也没有节目级附加内容策略。
|
||||
- `require_distinct_asset` 只保存设置,同一个文件仍可同时满足两个版本目标。
|
||||
- 旧库只有库根"只登记 / 纳管"两种模式,没有首次扫描登记和启用前的影响预览。
|
||||
- Agent 不做主观选片,也没有规则学习与样本回放;策略预览只对最近 200 条已识别资源试算。
|
||||
- Emby 查询结果不参与收录决策,也没有本地资产与 Emby 的对账。
|
||||
- 站点 HTTP 访问失败不会自动转浏览器;原站视图是 1.5 秒截图轮询,没有在真实 camofox 上核验。
|
||||
- 观众、馒头、HHClub、CHD 只对 mock 与解析样本验证过,没有连真实账号。
|
||||
- 用户委托换源时,新提交与原任务的处置不在同一个计划里。
|
||||
- 站点限流按进程计数,api 与 worker 各算各的;跨进程令牌桶在 c2a 分支进行中。
|
||||
- 定时任务里的"备份"是占位,备份靠宿主机 cron 调 `umt backup`,恢复没有自动化演练。
|
||||
- 没有身份巡检;同一挂载根离线引起的多条待处理不按根因合并。
|
||||
- 没有调查整个 qB 实例(含未纳管任务)的能力。
|
||||
- AT18(恶意标题)、AT29(部分入库不清理)、AT42(未纳管占用)、AT73(多下载器同 hash)与流程版本升级没有测试。
|
||||
|
||||
## [0.2.0] - 2026-09-28
|
||||
|
||||
Agent 上游全覆盖与订阅登录、控制台信息架构重排、定时任务看板、全站文案第二轮审校;W9 与前端波补上站点中心、订阅重做、统一规则、命名模板、全局搜索、文件管理 v2 与统一任务页。基线见 `docs/plan/08-v0.2-closeout.md`(W8-A 与"W10 集成记录")、`docs/plan/09-visual-qa.md`、`docs/design/{console-ia,site-center,subscriptions,naming-template,file-manager-v2,pi-providers,agent-ui-reference}.md`、`docs/runbook/{schedules,agent,sites,rules}.md`。
|
||||
|
||||
@@ -2,6 +2,22 @@
|
||||
|
||||
内部使用、Agent 自动化优先的媒体整理入库平台。需求基线见 [media_automation_requirements_architecture_v0.7.md](media_automation_requirements_architecture_v0.7.md),v0.1 工程任务书见 [docs/plan/00-first-version-plan.md](docs/plan/00-first-version-plan.md)。
|
||||
|
||||
## 功能
|
||||
|
||||
已实现(全部只在 mock 服务上验证过,没有连过真实 PT、qB、Emby、camofox 与模型上游;逐条对照见 [docs/plan/11-requirements-coverage.md](docs/plan/11-requirements-coverage.md)):
|
||||
|
||||
- 来源:多 RSS(条件请求、重叠窗口、多层去重、补漏)、站点中心(观众 / 馒头 / HHClub / CHD 等 23 个站点定义,凭证、账号数据、健康检查)、站点快照与实时补查、全局搜索。
|
||||
- 识别:MP 对齐的标题解析、TMDB + 本地别名召回、本地实体优先、临时季集单元、待识别池、人工纠错与字段锁。
|
||||
- 订阅与规则:单次 / 持续追更、多版本目标(Slot)、总集数账本、覆盖矩阵、日历;规则组(兼容 MP 规则字符串)、偏好标签与抑制记录;新作品 / 追更 / 升级三种收录模式。
|
||||
- 下载:多 qB、管理标签接管、缓存卷硬阈值与恢复水位、无进展只记录不换源、缓存清理(入库已验证 + 保留期 + H&R)。
|
||||
- 整理:Copy / Move(跨卷可恢复、fsproxy 看门狗)、路径绑定固定、命名模板、文件管理 v2 与整理向导、回收站、公开整理记录增量接口。
|
||||
- Agent:Pi 内核、27 个能力、服务端授权(持续授权 / 一次性审批)、步骤清单 / 方案选择 / 内联审批、子会话、后台自动调查与授权内恢复、41 个上游 provider 与订阅登录。
|
||||
- 接口:REST + OpenAPI、MCP 服务端(API Key 鉴权)、SSE 带序号补读。
|
||||
- 浏览器:camofox BrowserProvider、原站视图(截图 + 坐标输入)、接管租约、下载捕获走统一提交。
|
||||
- 运维:管理员登录(TOTP / Passkey)、API Key 分级、主密钥轮换、定时任务看板、统一任务页、运行状态页、审计、备份与只读对账恢复。
|
||||
|
||||
未做:综艺正片覆盖、双版本组合校验、旧库分范围接管、Agent 偏好选片、规则学习与回放、Emby 库存参与决策。
|
||||
|
||||
## 快速启动
|
||||
|
||||
需要 Deno 2.9.7(锁定版本:`curl -fsSL https://deno.land/install.sh | sh -s v2.9.7`)和 Docker。不需要 Node.js / pnpm。
|
||||
|
||||
@@ -117,3 +117,32 @@ A 订阅收尾(日历、重置、keywords/库根/保存路径接入搜索与下
|
||||
- **Agent 交互改为自动化优先(用户 2026-09-28)**:取消 plan_only/execute 模式;每会话默认执行;`agent.plan` 工具产出结构化计划 → 会话页 TodoList 实时更新;需授权动作在步骤处内联审批卡;`agent.propose_options` 让模型给 2–3 个方案供用户选择;"先给方案"作为会话内选项。**工具与 MCP 可视化**:设置 → Agent → 工具与 MCP:能力清单(id/作用域/风险/幂等/重放/当前授权状态/7 天调用与失败率)、我们对外的 MCP 服务端点(补实现:同一能力集,API Key 鉴权,REQ R13)与状态;会话页工具卡片可看 schema 与本次 IO。C1-B 提交后实施。
|
||||
- **缓存与限流(用户 2026-09-28 讨论定稿)**:不引入 Redis/Deno KV。站点限流改跨进程:PG 令牌桶表(`SELECT … FOR UPDATE` 扣令牌),api/worker/worker:agent 共用;搜索结果、TMDB 响应等短期缓存进 PG `UNLOGGED` 表 + TTL + 定时清理;站点快照保持普通表;进程内只留小 LRU 热点缓存。TMDB 图片可用 Web Cache API 落盘。
|
||||
- **TMDB 缓存与图片(对照 MP 定稿)**:不用 Web Cache API。TMDB 原始响应(搜索/详情/季集)进 PG `UNLOGGED` 表 + 24h TTL(未命中 30 分钟),三进程共享;识别结果本身是账本(external_identity/identity_candidate)。海报显示 + 图片代理(`/img/*`,参考 MP application/image.py):`DATA_DIR/cache/images` 按 URL 哈希落盘、ETag、大小上限与清理任务。
|
||||
|
||||
## 10. 需求覆盖与后续计划(2026-09-28)
|
||||
|
||||
逐条对照见 `11-requirements-coverage.md`。当前 main 相当于 REQ 的 M0 大部分 + M1 全部(仅 mock 环境)+ M2 约三分之一:R01–R32 已做 18、部分 11、未做 0、待真实环境验证 3;AT01–AT80 完整测试 44、部分测试 26、仅手工 2、未覆盖 8。不能称为 M2 首版候选。
|
||||
|
||||
### 10.1 v0.3(M2)建议范围
|
||||
|
||||
按 `11` §6 的优先级,分三组:
|
||||
|
||||
1. **核心差异化(必做)**:综艺分段与正片覆盖(节目级附加内容策略、完整版与分段的替换规则);`require_distinct_asset` 接进 Slot 落定;旧库分范围接管(首次扫描 → 登记 → 预览影响 → 按库根 / 作品开启,先修 `scanIncremental`)。
|
||||
2. **真实环境核验(拿到环境即做)**:四站账号核验并补观众 H&R 选择器;camofox 按 `docs/runbook/browser.md` §6 核验同会话接管;一个真实 Pi 上游跑 e2 纵切;真实 Emby 验证后让已确认库存参与收录决策。
|
||||
3. **自动化与可靠性**:Agent 偏好选片(独立预算、理由落计划);规则学习与样本回放;委托换源的替换计划;备份恢复演练自动化;测试补缺(AT18、AT29、AT42、AT73、流程版本升级)。
|
||||
|
||||
NFO / 图片投影、身份巡检与挂载根因聚合、HTTP 失败自动切浏览器、调查整个 qB 实例放在 v0.3 后半或 v0.3.x;Transmission / Plex、Skill 管理、业务 CLI 仍属 M3。c2a(跨进程限流与 PG 缓存)合入后再开 v0.3 的真实站点核验,避免真实站点在多进程下超限。
|
||||
|
||||
### 10.2 需要用户提供才能推进
|
||||
|
||||
| 项 | 用途 |
|
||||
| --- | --- |
|
||||
| 观众、馒头、HHClub、CHD 各一个可用账号(Cookie / 账密 / 馒头 API Key) | 四站真实核验、真实样本集、H&R 字段 |
|
||||
| HHWEB 所指站点的准确域名;另外 1–2 个要接的站点 | 确认是否就是 HHClub,补站点定义 |
|
||||
| qB WebUI 地址、账号、管理标签名;下载目录在容器内外的路径 | 下载器实例与路径映射 |
|
||||
| 媒体库根路径与共享挂载方式(NFS / FUSE / mergerfs);现有目录命名样例 | 库根登记、旧库接管、命名模板默认值 |
|
||||
| Emby / Jellyfin 地址、API Key、版本 | 真实库存查询与分页 / 认证验证 |
|
||||
| camofox-browser 的仓库或 fork、版本、服务地址、访问凭据 | 原站视图与同会话接管核验 |
|
||||
| Pi 上游:至少一个 API Key 上游,可选一种订阅登录 | 真实模型纵切、思考档位与压缩验证 |
|
||||
| 综艺节目清单与 3–5 个节目的真实发布标题 | 分段覆盖规则与评估集 |
|
||||
| 电影 / 剧集 / 综艺各自的版本目标(Slot)范围、Copy / Move 默认、H&R 与保留天数、缓存阈值 | 默认策略,避免把示例值当授权 |
|
||||
| 升级后旧版本保留多久;合并版出现后是否替换分段 | REQ §17.2 未定的两项默认值 |
|
||||
@@ -0,0 +1,311 @@
|
||||
# 需求覆盖矩阵与后续计划
|
||||
|
||||
2026-09-28。对照 REQ v0.7(`../../media_automation_requirements_architecture_v0.7.md`)逐条核对 main HEAD `57346d4` 的实现。证据来自代码 grep、测试文件与已有验收文档(`04`、`07`、`08`、`10-v0.2.1-check.md`),没有跑新的测试。
|
||||
|
||||
标记:
|
||||
- **已做**:代码与自动化测试都在,mock 环境下行为符合 REQ。
|
||||
- **部分**:只做了其中一段,缺口写在最后一列。
|
||||
- **未做**:没有对应实现。
|
||||
- **待真实环境验证**:代码完成,只在 mock(RSS / 站点 / TMDB / qB / Emby / camofox / fake 模型)下验证过,没有连过用户的真实服务。
|
||||
|
||||
所有"已做"都隐含一个前提:**没有连过真实 PT 账号、qB、Emby、camofox 和真实模型上游**。下文"待真实环境验证"只标那些核心价值就在真实交互上的条目。
|
||||
|
||||
进行中(不在 main,不计入本文统计):`c2a` 分支(工作区 `/opt/uhd_media_tool-c2a`)在做跨进程限流与缓存(PG 令牌桶、`UNLOGGED` 缓存表、TMDB 响应缓存、图片代理,见 `00` §9 最后两条);检查子代理的 `10-v0.2.1-check.md` 尚未提交。
|
||||
|
||||
## 1. R01–R32 覆盖矩阵
|
||||
|
||||
统计:已做 18,部分 11,未做 0,待真实环境验证 3(R26、R30、R32)。"部分"里 R06、R24、R31 同时也需要真实环境验证。
|
||||
|
||||
| 编号 | 需求 | 状态 | 证据 | 缺口 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| R01 | 多个 RSS 并存 | 已做 | `feed_source` / `observation`;`ingest.test`「三个 Feed 看到同一资源只建一条 source_release」「窗口零重叠 → feed.gap_suspected」;`docs/runbook/sites.md` | 没有并发 ingest 的测试(现有用例是顺序抓取) |
|
||||
| R02 | 综艺正片齐全,附加内容可选 | 部分 | `release-parser` 输出 `contentType`(main / extra / performance_only…)与 `segment`(upper / lower / full);`content_unit.content_type` 列;订阅覆盖矩阵显示分段 | 没有"上 + 下 = 一期正片"的覆盖计算,没有节目级"附加内容全部收录"配置,完整性不按正片覆盖判定 |
|
||||
| R03 | TMDB 滞后不阻断 | 已做 | 临时季 / 集单元(`resolve.test`「剧集:建 series 作品与临时季/集单元」);总集数账本 0025;`e7-tv-series`「总集数未知,Slot 不判满足」 | 一对多 / 多对一编号关系(`unit_relation`)没有建表 |
|
||||
| R04 | 按规则收录双版本 | 部分 | 每作品多 Slot、Slot × 单元预留(`e9-continuous-series`);订阅"自动补全其他版本";`require_distinct_asset` 列与表单开关 | `checkDistinctAssets`(`domain/slot/completion.ts`)没有接进服务端,同一文件仍可同时满足两个 Slot |
|
||||
| R05 | 根据 PT 每日新增自动收录 | 已做 | 策略 `newTitle` 规则与 `new_title` 模式(`rules-api.test`「new_title:not_new_release」);新作品 / 追更 / 升级三种模式(`domain/acquisition/mode.ts`) | 没有"每日汇总"视图 |
|
||||
| R06 | 部分 PT 需要浏览器 | 部分 | camofox BrowserProvider(`packages/adapters/src/browser`)、会话 / 租约、凭证服务端注入、验证码转待处理(`browser-api.test`、`browser-e2e.test`);`docs/runbook/browser.md` | 站点适配器 HTTP 失败后不会自动切到浏览器(REQ §4.4);只对 mock camofox 验证过 |
|
||||
| R07 | 保持最终路径结构 | 已做 | `path_binding_active_key`;`organize-move.test`「路径绑定固定:译名变化后新集仍进旧目录」;命名模板对已有绑定只用于新目录(`docs/design/naming-template.md` 样例 24) | — |
|
||||
| R08 | 不绑定 TMDB 身份 | 已做 | 本地 UUID;`external_identity` (provider, entity_type, external_id) 部分唯一;合并保留 `merged_into_id` 跳转(`resolve.test`「合并重复作品」) | — |
|
||||
| R09 | 数据库存映射并定期校验 | 部分 | 资产对账 `reconcileLibrary`(哨兵 + 增量 stat,suspected → confirmed);元数据 6 小时刷新;`vertical.test`「资产对账」 | 没有 Identity Reconciler(外部对象存在性 / 类型核对)和 Server Reconciler(本地资产 ↔ Emby);备份恢复只有人工演练 |
|
||||
| R10 | 必要时 Agent 辅助刮削 | 部分 | `identity.resolve`、`catalog.lookup` 能力;待识别事项自动调查(`e5-auto-investigate`);字段锁 | 没有字段级 `metadata.apply` 能力;NFO / 图片写入返回 `not_implemented`(`file-manager/probe.ts`) |
|
||||
| R11 | 以 MP / MovieClaw 实现为基线迁移 | 已做 | `docs/porting/`(识别、刮削、转移、订阅、站点框架、Rust 逻辑差分、许可账本 `license-and-provenance.md`);`scripts/mp-sync` 差分脚本 | MP 多文件 / 整季包 / 目标冲突的运行对照(REQ §14.1.1)只到源码层 |
|
||||
| R12 | Pi Agent 作为推理内核 | 已做 | `@earendil-works/[email protected]`,`AgentRuntimePort`,显式白名单(`agent/test/runtime.test`);ADR-003 | — |
|
||||
| R13 | 公开 API / MCP | 已做 | 195 个端点定义(`packages/contracts/src/api.ts`)+ OpenAPI;Streamable HTTP MCP(`modules/mcp`,`test/mcp/mcp.test`);27 个能力 | — |
|
||||
| R14 | qB 标签管理 | 已做 | 提交打管理标签、已有种子接管只补标签(`vertical.test`「already_exists」);`e8-tag-removal` 去标签 / 任务消失 | — |
|
||||
| R15 | Copy / Move 与缓存清理 | 已做 | `verifyAndImport`、跨卷 Copy→核验→删源、EXDEV 不降级、fsproxy 看门狗;`vertical.test`「缓存清理」「H&R 未满足时 Move 变冲突」 | 硬链接工作流、蓝光原盘整目录未做(REQ 本身不把硬链接作主流程) |
|
||||
| R16 | 条件选片与 Agent 偏好选片 | 部分 | 确定性 `evaluateAcquisition`、规则组分级优先级与逐级 trace | Agent 主观选片(偏好判断、独立预算、选片理由)没有实现;Agent 只能在会话里按用户委托提交 |
|
||||
| R17 | 自动执行为主、按操作授权 | 已做 | 策略发布即生成持续授权;服务端授权器(`authorize.ts`);`approvals.test`;e1 / e7 无逐次确认 | — |
|
||||
| R18 | 旧库分范围接管 | 部分 | 库根 `management_mode`(register_only / managed);资产对账;文件管理可逐项识别整理 | 没有首次全库扫描登记、没有"启用前预览影响"、没有作品级覆盖;`scanIncremental` 出错仍返回 complete |
|
||||
| R19 | 控制台与 Agent 双入口 | 已做 | 同一能力注册表服务 Web / Agent / MCP;Agent 抽屉带页面上下文;凭证与原站接管走专用 UI | — |
|
||||
| R20 | 偏好标签编辑与学习 | 部分 | 偏好标签作为规则展示形态,抑制记录(`rules-api.test`、`rule-groups.test`「Agent 不能加回(409)」);修订历史 | "重复反馈调整软排序"的学习没有;标签不参与订阅评估(`CHANGELOG` 0.1.0 已知限制 3) |
|
||||
| R21 | 下载缓存硬阈值 | 已做 | 按 `cache_volume_key` 汇总多 qB 同卷(`services/volumes.ts`);`vertical.test`「硬阈值……低于恢复水位只恢复阈值暂停项」 | 未纳管任务的占用与不暂停没有测试(AT42) |
|
||||
| R22 | 跨季综合召回 | 部分 | TMDB + `title_alias` pg_trgm 召回;待识别池可按原始标题检索;`identity_unresolved` 有界复查 | 同名重启、简称变化、特别篇与下一季的区分没有专项逻辑和样本;没有召回率 / 误关联报告 |
|
||||
| R23 | 整理记录公开接口 | 已做 | `/organization-records`、`/organization-records/changes`(游标,含状态更新);scope `organize.read` / `organize.execute`;`vertical.test`「整理记录 API」 | — |
|
||||
| R24 | Emby 兼容辅助查询 | 部分 | 多实例并行查询,失败为 unknown(`emby.test`、`inventory/media-servers.test`) | 库存结果不参与收录决策("已有则满足目标");没有 server_mapping 对账;没连过真实 Emby / Jellyfin |
|
||||
| R25 | 站点缓存优先 | 已做 | 站点独立启停、快照、实时补查并发合并(`sources-identity/api.test`);全局搜索短缓存 | 限流器是进程内的,跨进程令牌桶在 c2a 进行中 |
|
||||
| R26 | Pi 原生能力配置 | 待真实环境验证 | 上游 / 模型 / 思考档位 / 上下文预算 / 压缩 / 子会话开关;41 个 provider + 8 种订阅登录 | 只有 fake 与 OpenAI 兼容本地端点有自动化覆盖 |
|
||||
| R27 | 禁止默认自动换源 | 已做 | 无进展只记证据 + 待处理(`downloads.ts`);恢复白名单不含换源(`e6-auto-recover`「换源被拒」) | 用户委托换源没有"替换计划"把新提交与原任务处置绑在一起 |
|
||||
| R28 | 单管理员、多服务实例 | 已做 | 管理员登录 + TOTP / Passkey;API Key 四档 scope,可撤销;多 qB / 多 Emby / 路径映射 | — |
|
||||
| R29 | 交互执行模式 | 已做 | 会话默认执行,`agent.plan` 步骤清单、`agent.propose_options`、内联审批、"先给方案"(`e12-interaction`) | — |
|
||||
| R30 | PT 站点工作台 | 待真实环境验证 | 站点页整理视图:列表 / 搜索 / 详情 / 库存叠加 / 统一下载入口;全局搜索 | 四个主力站没有连过真实账号;观众站定义无 H&R 选择器 |
|
||||
| R31 | 同会话原站接管 | 部分 | 原站视图:截图轮询 + 坐标点击 / 输入 + 接管租约,交还后强制重读页面(`browser-api.test`) | 画面是 1.5 秒截图轮询,不是实时流;同一标签页人 / Agent 连续操作没在真实 camofox 上核验(`browser.md` §6 清单全空) |
|
||||
| R32 | 可配置浏览器后端 | 待真实环境验证 | `BrowserProvider` 合同 + camofox 实现;按站点 / 账号隔离 profile | 用户 camofox 的 fork / 版本 / 地址未提供;只实现 camofox 一种 |
|
||||
|
||||
## 2. §2.1 五原则
|
||||
|
||||
| 原则 | 保障点 | 已知违背或风险 |
|
||||
| --- | --- | --- |
|
||||
| 身份≠名字,路径≠外部 ID | `external_identity_accepted_key`(`0005_identity.ts`);本地 UUID 主键;合并留 `merged_into_id`;`resolve.test`「人工纠错映射:旧映射退役留修订」 | domain 匹配仍要求本地候选带 externalId(W1 建议项,未修) |
|
||||
| 已建立的路径绑定不随元数据重算 | `path_binding_active_key`;命名模板只在首次建绑定时生成目录;`organize-move.test`「路径绑定固定」;文件管理显式 move 才修订绑定(`file-manager/write.test`) | 无 |
|
||||
| 模型不是业务事实唯一来源 | 服务端授权器忽略模型声称的"已同意"(`e2`「没有授权:download.submit 被拒」);汇报取自整理记录,模型文本标"未经核查";审批只接受管理员会话 | 能力统计把挂起重放算成失败(`10-v0.2.1-check` #4),只影响统计 |
|
||||
| 失败≠不存在 | 对账库根离线只标 unavailable;TMDB 失败记 `lookup_failed`;Emby 失败为 unknown;文件管理根离线返回 503 不返回空列表(`browse.test`) | `scanIncremental` 出错仍返回 complete(旧库接管会用到,目前服务端未调用) |
|
||||
| 清理按明确授权 | `assertSafeToDeleteData`(已入库、无失败文件、无引用、保留期与 H&R);只读对账 / 总开关关闭时拒绝自动 execute;回收站代替直接删除,永久删除默认关闭 | 部分文件入库后不整种清理(AT29)只有代码保障,没有测试 |
|
||||
|
||||
## 3. §15 分期对照
|
||||
|
||||
**结论:当前版本相当于"M0 大部分 + M1 全部(仅 mock 环境)+ M2 约三分之一"。** 不是 M2 首版候选:REQ §15.3 明确 M2 才构成覆盖全部核心痛点的首版,而综艺分段覆盖、双版本组合校验、旧库接管、Agent 选片与规则学习都还没做,四站与浏览器也没连过真实环境。
|
||||
|
||||
### M0
|
||||
|
||||
| 项 | 状态 | 证据 / 缺口 |
|
||||
| --- | --- | --- |
|
||||
| 固定 Deno / Pi / PG / OpenWorkflow 版本与骨架 | 已做 | Deno 2.9.7、pi 0.87.1、openworkflow 0.10.1、PG 16;ADR-002 / 003 / 004 |
|
||||
| Deno 下 Pi / PG / MCP / OpenWorkflow 实际兼容 | 已做 | `docs/spikes/`,MCP 用官方 SDK 实连(`mcp.test`) |
|
||||
| Pi 白名单、无隐式扩展 | 已做 | `runtime.test`「未注册工具(bash)被拒」 |
|
||||
| 执行器崩溃恢复 | 已做 | `tasks/test/crash-recovery`、e4 |
|
||||
| 流程版本升级 | 部分 | 只在 spike 验证,产品代码没有测试 |
|
||||
| 提前审批不丢失 | 已做 | `engine.test`「waitForFact 事实先于等待到达不丢失」、`approvals.test` |
|
||||
| 多 Feed 并发不重复提交 | 部分 | 顺序 ingest 去重 + outbox 并发投递有测试;并发 ingest 没有 |
|
||||
| 改名与映射修订后路径不变 | 已做 | `organize-move.test`、`resolve.test` |
|
||||
| MP 多文件 / 整季包 / 目标冲突源码对照 | 部分 | `docs/porting/moviepilot-transfer.md`,只到源码层 |
|
||||
| 浏览器连用户现有 camofox,验证同会话交接 | 未做(待用户提供) | 只对 mock 验证;linuxserver/chrome / Selkies 适用性未记录 |
|
||||
| 脱敏真实样本 | 部分 | MP 差分样本(识别 / 规则 / 命名);没有四站真实 RSS 与综艺样本 |
|
||||
| 自动执行关闭、影子决策 | 已做 | 自动化总开关;`resolve.test`「自动化关闭:证据足够也只提议」 |
|
||||
|
||||
### M1
|
||||
|
||||
| 项 | 状态 | 证据 / 缺口 |
|
||||
| --- | --- | --- |
|
||||
| 观众 + 馒头、多 RSS | 已做(mock) | `api.test`、`mteam-tasks.test`、`ingest.test` |
|
||||
| qB 标签接管、Copy / Move | 已做 | `vertical.test`、`organize-move.test`、e8 |
|
||||
| 一个电影目标 + 一部常规剧集 | 已做 | e1 / e2(电影)、e7 / e9(剧集) |
|
||||
| 整理记录 API、可选 Emby 查询 | 已做 | 见 R23 / R24 |
|
||||
| 备份、审计、恢复、停用自动化开关 | 部分 | 备份脚本与 `umt backup`;恢复只有人工演练;定时任务里的"备份"是占位 |
|
||||
| 工作台列表 / 详情 / 库存标注 / 统一下载入口 | 已做(mock) | 站点页、全局搜索、`/search/releases/{siteId}/{rid}/plan` |
|
||||
| Agent 自然语言目标 → 查库存 / 搜索 / 选片 / 提交 → 持续流程入库 → 真实汇报 | 已做(fake 模型) | e2「有持续授权:……汇报来自整理记录」 |
|
||||
| 授权内异常调查与恢复 | 已做 | e6「task.inspect → download.recheck → 系统核实已恢复」 |
|
||||
| 关闭聊天后台继续 | 已做 | e3 |
|
||||
|
||||
### M2
|
||||
|
||||
| 项 | 状态 |
|
||||
| --- | --- |
|
||||
| 综艺内容分类与分段覆盖 | 部分(只到标题解析) |
|
||||
| 本地临时集账本 | 已做 |
|
||||
| 独立双版本 | 部分(`require_distinct_asset` 未生效) |
|
||||
| 新作品 / 追更 / 升级三种规则 | 已做 |
|
||||
| 浏览器 Adapter、工作台双视图、同会话接管 | 部分(mock;截图轮询) |
|
||||
| 映射巡检与辅助刮削 | 部分(资产对账、元数据刷新;无身份巡检、无 NFO) |
|
||||
| 旧库分范围接管 | 未做(只有库根两种模式) |
|
||||
| 授权规则优化、条件 / Agent 选片 | 部分(只有条件选片;策略预览 = 对最近 200 条已识别资源试算) |
|
||||
| 缓存硬阈值与清理 | 已做 |
|
||||
| 偏好标签 | 已做(学习未做) |
|
||||
| 站点快照缓存 | 已做 |
|
||||
| 跨季召回与待识别治理 | 部分 |
|
||||
| 双入口待处理 | 已做(顶栏收件箱 + 首页 + 页面内联) |
|
||||
| HHClub / CHD 适配 | 待真实环境验证(定义来自 MovieClaw v0.27.0 MIT,有解析单测) |
|
||||
| 媒体级主动整理 | 已做(文件管理 v2、整理向导、命名模板) |
|
||||
| 影子模式比较人工选择 | 未做 |
|
||||
|
||||
### M3
|
||||
|
||||
| 项 | 状态 |
|
||||
| --- | --- |
|
||||
| 更多 PT | 部分:23 个站点定义 + MP 专用 spider / 用户信息解析器已移植,均未真实核验 |
|
||||
| Transmission / Plex | 未做 |
|
||||
| 历史样本回放、规则迁移 | 未做 |
|
||||
| Skill 管理 | 未做 |
|
||||
| CLI | 部分:`umt backup` / `--role export-mappings` 等运维入口,没有业务 CLI |
|
||||
| MCP 扩展 | 已做(提前到 v0.2.1) |
|
||||
| 页面提取修复提案 | 未做 |
|
||||
|
||||
## 4. §16 AT01–AT80
|
||||
|
||||
分类:**测试** = 有自动化测试覆盖通过标准;**部分** = 有测试但只覆盖一段;**手工** = 只能手工验证;**未覆盖** = 没有测试也没有对应实现或手工流程。标 (mock) 的只在 mock 服务上跑过。
|
||||
|
||||
统计:测试 44(55%),部分 26(32.5%),手工 2(2.5%),未覆盖 8(10%)。有自动化测试的(测试 + 部分)合计 70 / 80 = 87.5%;完整覆盖率按 55% 计。
|
||||
|
||||
| AT | 状态 | 测试 / 说明 |
|
||||
| --- | --- | --- |
|
||||
| 01 | 测试 | `ingest.test`「三个 Feed 看到同一资源只建一条 source_release」 |
|
||||
| 02 | 部分 | e10「按作品选 Slot」;没有两站不同版本分进各自 Slot 的用例 |
|
||||
| 03 | 测试 | `ingest.test`「窗口零重叠 → feed.gap_suspected,并路由到有预算的补漏快照」 |
|
||||
| 04 | 部分 | `release-parser.test` 把加更识别为 extra;分段覆盖未实现 |
|
||||
| 05 | 部分 | `release-parser.test` 会员版样本;节目级规则未实现 |
|
||||
| 06 | 测试 | `resolve.test`「剧集:建 series 作品与临时季/集单元」、e7 |
|
||||
| 07 | 测试 | `organize-move.test`「路径绑定固定:译名变化后新集仍进旧目录」 |
|
||||
| 08 | 测试 | `resolve.test`「人工纠错映射」 |
|
||||
| 09 | 部分 | e9 多版本延后;没有"两个 Slot 同时缺失分别执行"的专项 |
|
||||
| 10 | 测试 | `rules-api.test`「new_title:not_new_release」 |
|
||||
| 11 | 测试 (mock) | `browser-api.test`「租约到期 → 等待处理 + 待处理事项」、`browser-e2e.test` 验证码转接管 |
|
||||
| 12 | 测试 | e4「download.submit 途中 kill worker → 不重复提交」 |
|
||||
| 13 | 测试 | `organize-move.test` 跨卷 kill 后 resumed |
|
||||
| 14 | 测试 | `vertical.test`「资产对账:库根离线只标 unavailable」 |
|
||||
| 15 | 测试 | `tasks/engine.test` waitForFact 先到;`approvals.test` |
|
||||
| 16 | 测试 | `approvals.test` 改计划 → 被拒 → 重批 → 只消费一次;`rules-api` 旧授权吊销 |
|
||||
| 17 | 部分 | `runtime.test` 预算超限;e6 预算超限;没有"模型断网时确定性链继续"的用例 |
|
||||
| 18 | 未覆盖 | 只有系统提示词约束,没有恶意标题 e2e |
|
||||
| 19 | 部分 | `vertical.test` 删数据安全检查;硬链接工作流未做 |
|
||||
| 20 | 手工 | `docs/runbook/backup-restore.md` 演练记录 |
|
||||
| 21 | 测试 | `resolve.test`「用户锁定字段不被覆盖」(海报锁随 NFO 未做) |
|
||||
| 22 | 测试 | `emby.test`、`inventory/media-servers.test`「异常实例 unknown」 |
|
||||
| 23 | 测试 | `vertical.test`「already_exists:……只补管理标签」 |
|
||||
| 24 | 测试 | e8 去标签 / 任务消失 |
|
||||
| 25 | 测试 | `vertical.test`「缓存清理」、e8「缓存清理」 |
|
||||
| 26 | 部分 | `space_insufficient` 事项有代码;没有"全部仍需保留"的专项用例 |
|
||||
| 27 | 测试 | `organize-move.test` 跨卷 Move resumed |
|
||||
| 28 | 测试 | `vertical.test`「H&R 未满足时 Move 变冲突」、`organize-guard.test` |
|
||||
| 29 | 未覆盖 | 代码有文件级结果检查,无测试 |
|
||||
| 30 | 部分 | 条件选片有测试;Agent 偏好选片未实现 |
|
||||
| 31 | 部分 | 人工纠错有测试;Agent 规则优化未实现 |
|
||||
| 32 | 测试 | e1 / e7 发布策略 → 持续授权 → 自动执行 |
|
||||
| 33 | 未覆盖 | 旧库接管未实现 |
|
||||
| 34 | 部分 | e7 / e9 持续追更;追新季开关没有测试 |
|
||||
| 35 | 部分 | `browser-e2e.test` 凭证注入登录 (mock);HTTP → 浏览器自动切换未实现 |
|
||||
| 36 | 测试 | `rules-api.test` revision 乐观锁 |
|
||||
| 37 | 测试 | `file-manager/write.test`、`organize-move.test` |
|
||||
| 38 | 部分 | `domain/slot.test`、`rules-slot.test` 升级档位;没有服务端 4K WEB-DL → 蓝光压制用例 |
|
||||
| 39 | 部分 | e10「重复评估只留一条候选」;Agent 选片未实现 |
|
||||
| 40 | 测试 | `rules-api.test`、`rule-groups.test` 抑制记录 |
|
||||
| 41 | 测试 | `vertical.test`「硬阈值……只恢复阈值暂停项」 |
|
||||
| 42 | 未覆盖 | 同卷汇总已实现(`volumes.ts`),未纳管任务没有测试 |
|
||||
| 43 | 未覆盖 | 没有调查整个 qB 实例(含未纳管任务)的能力 |
|
||||
| 44 | 部分 | `seasonScope` 已实现;来源默认值没有测试 |
|
||||
| 45 | 部分 | `resolve.test` 本地召回、合并;同名重启 / 简称变化没有样本 |
|
||||
| 46 | 测试 | `resolve.test`「no_match 进池并开未识别事项」 |
|
||||
| 47 | 测试 | `ingest.test`「站点关闭后 Feed 不再抓取」、`browser-api.test`「站点停用」 |
|
||||
| 48 | 测试 | `vertical.test`「changes 游标增量(含既有记录状态更新)」、`w5a2.test` partial |
|
||||
| 49 | 部分 | Emby unknown 有测试;来源版本未知的专项没有 |
|
||||
| 50 | 部分 | `download-state.test`「无进展判定」;服务端 e2e 没有 |
|
||||
| 51 | 部分 | e11 开关关闭时拒绝派生;思考档位能力表达只有 `upstreams.test` |
|
||||
| 52 | 测试 | e11 预算共享、父中止级联取消 |
|
||||
| 53 | 测试 | e12「先看方案时执行被拒」 |
|
||||
| 54 | 部分 | e7 整季包只覆盖实际文件;MP 对照样本没有 |
|
||||
| 55 | 部分 | `op-ledger`「租约丢失旧 attempt 提交被拒」;流程升级没有 |
|
||||
| 56 | 部分 | `auth.test` 撤销后 401;恢复与路径改变没有自动化 |
|
||||
| 57 | 部分 | 站点 mock 列表 / 详情;四站真实页面没有 |
|
||||
| 58 | 部分 | `vertical.test`「首页、媒体库、库存叠加 API」;Emby 叠加没有 |
|
||||
| 59 | 测试 | `sources-identity/api.test` 实时补查并发合并、关闭站点 |
|
||||
| 60 | 部分 | e10 去重、浏览器下载转 `/acquisition-plans`;并发触发没有 |
|
||||
| 61 | 测试 (mock) | `browser-api.test`「输入类动作要先接管;他人接管中 409」 |
|
||||
| 62 | 测试 (mock) | `browser-api.test`「交还后需重新读取页面」 |
|
||||
| 63 | 测试 (mock) | `browser-api.test`「服务重启……标签页标 lost」「站点停用」 |
|
||||
| 64 | 测试 | `browser-api.test` 快照遮蔽密码与 passkey;`redact-consistency.test` |
|
||||
| 65 | 测试 (mock) | `browser-api.test` 下载暂存、sha256 / infohash 核验 |
|
||||
| 66 | 未覆盖 | 不适用:没有接独立 Chrome |
|
||||
| 67 | 测试 | e2 |
|
||||
| 68 | 测试 | e5 自动调查、e6 授权内恢复 |
|
||||
| 69 | 测试 | e3、e4 |
|
||||
| 70 | 测试 | e2「已提交≠已入库」 |
|
||||
| 71 | 测试 | e5「重复事件只一个 run」、e6 尝试上限 |
|
||||
| 72 | 测试 | `mcp.test`「execute Key……有授权后执行并记账本」 |
|
||||
| 73 | 未覆盖 | 多下载器相同 hash 没有测试 |
|
||||
| 74 | 未覆盖 | 待处理按 `dedupe_key` 去重,但没有挂载根因聚合 |
|
||||
| 75 | 手工 | 待处理事项有 dismissed 状态,无测试 |
|
||||
| 76 | 测试 | `search.test`「两站成功 + 一站超时 → partial」 |
|
||||
| 77 | 测试 | `w5a2.test` 目录复制 partial;`vertical.test` 文件明细 |
|
||||
| 78 | 部分 | `agent-mock.test` 生产禁 mock;卡片引用失效没有测试 |
|
||||
| 79 | 测试 | `sse.test`、`sse-pg.test` resync |
|
||||
| 80 | 部分 | `logger.test`、`redact-consistency.test`、`runtime.test` 脱敏;"未知用量不填零"没有测试 |
|
||||
|
||||
## 5. §17 待落实事项
|
||||
|
||||
### 5.1 §17.2 部署配置(界面都已可配,缺的是用户的真实值)
|
||||
|
||||
| 项 | 状态 |
|
||||
| --- | --- |
|
||||
| HHWEB 所指站点的域名 / 身份 | 待用户提供(目前按 HHClub `hhanclub` 定义处理) |
|
||||
| 另外 1–2 个站点 | 待用户提供(23 个定义可选) |
|
||||
| 实例地址与凭据(qB、Emby、站点) | 待用户提供 |
|
||||
| qB 管理标签 | 可配(每个下载器实例 `managedTag`) |
|
||||
| 容器路径与共享挂载 | 待用户提供(路径映射有 verify 端点) |
|
||||
| 现有目录模板 | 可配(命名模板三级覆盖);需用户确认默认模板 |
|
||||
| 电影 / 剧集 / 综艺的 Slot 作用范围 | 待用户提供 |
|
||||
| Copy / Move 默认范围 | 可配 |
|
||||
| H&R / 保留要求及单位 | 可配;观众站缺 H&R 选择器 |
|
||||
| 缓存阈值 / 恢复水位 | 可配,默认 90% / 85% / 清理目标 80% |
|
||||
| 新旧媒体保留策略 | 部分:替换时旧文件进回收站,没有独立的旧版本保留策略 |
|
||||
| NFO / 海报权限 | 未做(写 NFO / 图片未实现) |
|
||||
| 快照周期 | 可配 |
|
||||
| Pi 上游、思考档位、上下文 / 压缩预算、子会话开关 | 可配;待用户提供真实上游 |
|
||||
| camofox 仓库 / 版本 / 地址 / 认证 | 待用户提供 |
|
||||
| Move 遇未满足 H&R | 已定:409 + 待处理,不自动改 Copy |
|
||||
| 升级后旧文件何时清理 | 未定,目前进回收站按回收站过期清理 |
|
||||
| 合并版是否替换既有分段 | 未定(综艺分段未做) |
|
||||
|
||||
### 5.2 §17.3 技术准入
|
||||
|
||||
| 项 | 状态 |
|
||||
| --- | --- |
|
||||
| 业务核心 Deno | 已定 2.9.7 锁版本(ADR-004) |
|
||||
| PostgreSQL | 已定 PG 16 + Kysely,迁移到 0040;大库规模性能未测 |
|
||||
| 执行引擎 | 已定 openworkflow 0.10.1(ADR-002);旧流程跨版本升级未做产品测试 |
|
||||
| Agent | 已定 pi 0.87.1;子会话自研(`agent.spawn` / `agent.await`) |
|
||||
| 前端 / API | 已定 Hono + React Router 7 SPA,REST / OpenAPI / MCP |
|
||||
| 浏览器 | camofox 适配完成;fork / 版本 / 画面交接待真实实例 |
|
||||
| 文件工具 | 静态 ffprobe 9.0.2;真实挂载基准 B1–B3 未跑 |
|
||||
|
||||
### 5.3 §17.4 下一阶段产物
|
||||
|
||||
| # | 产物 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 两项目实现迁移对照 | 已做(`docs/porting/`),运行对照未做 |
|
||||
| 2 | 固定版本兼容原型 | 已做(`docs/spikes/`、ADR) |
|
||||
| 3 | Agent 发起并跟踪的恢复纵切 | 已做(mock,e2 / e6) |
|
||||
| 4 | 四站真实脱敏样本集 | 未做,待用户提供账号 |
|
||||
| 5 | 正式接口与数据迁移草案 | 已做(`packages/contracts`,旧库接入部分未做) |
|
||||
| 6 | 可观测性合同 | 部分(任务流、时间线、运行状态页;根因聚合与版本覆盖矩阵只做了订阅侧) |
|
||||
| 7 | PT 工作台原型 | 已做(mock);真实实例核验清单见 `docs/runbook/browser.md` §6 |
|
||||
|
||||
## 6. 未做功能清单(按优先级)
|
||||
|
||||
估算按一个开发子代理的工作日粗估,不含等待用户提供环境的时间。
|
||||
|
||||
| # | 功能 | 实施建议 | 估算 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | 综艺分段与正片覆盖(REQ §5、R02) | 覆盖计算从"集号"改为"内容单元 × 分段":上 + 下或完整版任一满足一期;节目级策略(附加内容收录、是否等完整版、完整版出现后是否替换分段);待识别池加分段歧义事项;先收集 3–5 个节目的真实标题样本 | 5–8 天 |
|
||||
| 2 | 四站真实核验(观众 / 馒头 / HHClub / CHD) | 用户给账号后逐站跑列表、详情、下载、促销、H&R、登录过期;补观众 H&R 选择器;结果写 `docs/runbook/sites.md` | 2–3 天(拿到账号后) |
|
||||
| 3 | camofox 真实实例核验 | 按 `browser.md` §6 六项逐条核验,写 `verified`;决定截图轮询是否够用,不够再评估 VNC / 流式 | 2 天(拿到实例后) |
|
||||
| 4 | 双版本组合校验(R04) | `checkDistinctAssets` 接进 Slot 落定与计划预留;同一资产满足第二个 Slot 时转 attention | 1–2 天 |
|
||||
| 5 | 旧库分范围接管(R18、AT33) | 首次扫描任务(续扫游标,复用 `reconcileLibrary` 批处理)→ 识别登记 → 预览影响(作品数、缺口、预计下载量)→ 按库根 / 作品开启;先修 `scanIncremental` 的 partial | 5–7 天 |
|
||||
| 6 | Emby 库存参与收录决策(R24) | 已确认的外部库存可满足 Slot(需证据与策略开关);Server Reconciler 写 `server_mapping`;真实 Emby / Jellyfin 验证分页与认证 | 3–4 天 |
|
||||
| 7 | Agent 偏好选片(R16、AT30 / 39) | 策略增加"Agent 判断"层:确定性过滤后把候选交给有界 Agent 任务,独立预算,理由存 `acquisition_plan.evaluation`;硬排除仍由代码执行 | 4–5 天 |
|
||||
| 8 | 规则学习与样本回放(R20、AT31) | 人工纠错写标注样本;策略新旧版本对历史样本回放,展示新增命中 / 误排除;Agent 发布需额外授权并可回滚 | 5–7 天 |
|
||||
| 9 | 委托换源的替换计划(R27 例外流程) | 新能力生成"替换计划":新候选 + 原任务处置(保留 / 暂停 / 移除 / 删数据分别授权),一次审批或持续授权覆盖 | 2–3 天 |
|
||||
| 10 | 备份恢复演练自动化(AT20 / 56) | compose 夜间任务:备份 → 清库 → 恢复 → 只读对账 → 映射行数比对;定时任务"备份"从占位改为真实执行 | 2 天 |
|
||||
| 11 | Pi 上游真实验证(R26) | 用户提供 1–2 个真实上游(API Key 与一种订阅登录)跑 e2 纵切;Codex `_randomBytes` spike | 1–2 天 |
|
||||
| 12 | 测试补缺 | AT18 恶意标题 e2e、AT29 部分入库不清理、AT42 未纳管占用、AT73 多下载器同 hash、流程版本升级回归 | 3 天 |
|
||||
| 13 | NFO / 图片投影(R10) | 遵守字段锁,临时文件 + 原子提交,写入受库根策略控制 | 2–3 天 |
|
||||
| 14 | 身份巡检与挂载根因聚合(R09、AT74) | Identity Reconciler 周期核对外部对象;同一库根离线的事项按根因合并 | 3 天 |
|
||||
| 15 | HTTP 失败自动切浏览器(R06、AT35) | 站点适配器在登录失效 / 挑战时按策略转浏览器会话,仍失败再进待处理 | 2–3 天 |
|
||||
| 16 | 调查整个 qB 实例(AT43) | 只读能力列出实例全部任务(含未纳管),一次性操作不写管理标签 | 1–2 天 |
|
||||
| 17 | 通知渠道 | REQ 未列为必需;若要做,先做 webhook 出站(待处理新增 / 解决),Telegram 之后 | 2 天 |
|
||||
| 18 | Transmission / Plex、Skill 管理、业务 CLI | M3 范围,真实需求出现后再排 | — |
|
||||
|
||||
说明:任务书里曾列为缺口的"多 qB 缓存卷汇总"已实现(`services/volumes.ts` 按 `cache_volume_key` 汇总),缺的只是未纳管任务的测试(第 12 项)。
|
||||
|
||||
## 7. 与 REQ 的有意偏离
|
||||
|
||||
| 偏离 | 说明 | 记录位置 |
|
||||
| --- | --- | --- |
|
||||
| 运行时先 Node 后改 Deno | REQ 首选 Deno;W0 曾用 Node 24,W1 后迁到 Deno 2.9.7,现已符合 REQ | ADR-001(已取代)、ADR-004 |
|
||||
| 不引入 Redis / Deno KV | 与 REQ §9.1 一致;限流与短期缓存放 PG(令牌桶、`UNLOGGED` 表),c2a 进行中 | `00` §9 |
|
||||
| MP 站点定义文件加密不可用,改用 MovieClaw v0.27.0(MIT)定义 | MP `user.sites.v3.bin` 加密;MovieClaw 只取 MIT 版本,之后的附条件许可内容未使用 | `packages/adapters/src/sites/definitions/NOTICE-MovieClaw.md`、`docs/porting/license-and-provenance.md` |
|
||||
| Agent 取消 plan_only / execute 模式 | REQ §10.6 的"只规划"改为会话内"先给方案"选项与 `agent.plan` 步骤清单;旧 `mode=plan_only` 兼容为 `proposeFirst` | `00` §9、`docs/runbook/agent.md` |
|
||||
| 子代理自研 | REQ 说不假定 SDK 提供子代理;实现为 `agent.spawn` / `agent.await`,继承授权上限、共享预算 | `docs/runbook/agent.md`、CHANGELOG 0.2.0 |
|
||||
| 命名模板与 MP 输出的差异 | 10 处:非法字符全变量转全角、空白规整、合集集号范围、扩展名小写、长度截断、安全子集不支持 for / 属性访问、已有绑定目录优先、末段必须有扩展名 | `docs/design/naming-template.md` §5、§10 |
|
||||
| 识别与 MP 的故意差异 | 125 处 intentional(未知发布组兜底、期号记为 issue 等) | `docs/porting/mp-rust-logic-parity.md` §2.3 |
|
||||
| 转移行为必须偏离 MP 的点 | 不覆盖、路径绑定优先、跨卷可恢复等 | `docs/porting/moviepilot-transfer.md` §3 |
|
||||
| OpenWorkflow 面板自研 | 官方面板 Proprietary,只参考信息架构,直查同一 schema;后并入统一任务页 | `docs/design/openworkflow-dashboard-reference.md`、`docs/design/console-ia.md` |
|
||||
| 原站视图用截图轮询 | REQ 要求同会话可视接管,传输方案待验证;先用截图 + 坐标输入,未冒充实时画面 | `docs/runbook/browser.md` |
|
||||
| 永久删除开关是环境变量 | 规格原为设置项,改为 `FILES_ALLOW_PERMANENT_DELETE`,需重启生效 | `07` §3.2 |
|
||||
Reference in new issue
Block a user