- POST /organization-records: sourcePaths must resolve (realpath) under a
registered library_root or downloader path-mapping host path; `..` and
symlink escapes rejected (400), dryRun included. Move requires an admin
session, or an API key with an automation_grant covering the entity or a
matching one-time approval (consumed on use), else 403. Manual Move from a
managed download_task with unsatisfied H&R returns 409 and opens a
decision; never silently downgraded to Copy.
- Series slot completion: total episode count is unknown while units are
provisional, so the slot is not satisfied and the subscription keeps
tracking; coverage is registered per actual file (creating provisional
episode units), and already_in_library files count as verified presence.
- POST /engine/runs/{id}/retry (admin): re-enqueue by original task name and
raw input with idempotency key retry:<id>:<n>, audited; retry button on
the run detail page.
- E7 regular series e2e, E8 AT24 tag removal / task disappearance e2e.
- All workspace members and root set to version 0.1.0; CHANGELOG.md.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
5.3 KiB
5.3 KiB
Changelog
版本号遵循 SemVer。所有成员包(apps/*、packages/*)与根 deno.json 使用同一个版本号;/api/v1/health 与备份清单里的版本取自 apps/server/deno.json。
[0.1.0] - 2026-09-27
第一个可用版本:REQ v0.7 的 M0 + M1 纵切。全链路在没有真实 PT 账号的情况下用 mock(RSS / 站点 / TMDB / qBittorrent / Emby)验证。范围与验收依据见 docs/plan/00-first-version-plan.md §3.1 和 docs/plan/04-v0.1-acceptance.md。
W0 底座
- Deno workspace 单仓(
apps/server、apps/web、packages/{adapters,agent,contracts,db,domain,mapping,tasks,testkit}),迁入 uhd_web 设计系统。 - OpenWorkflow 与 Pi SDK 兼容性 spike,结论写入 ADR-002 / ADR-003;Deno 2.9.7 + TypeScript 7 spike 写入 ADR-004。
- MoviePilot / MovieClaw 迁移对照账本(识别、刮削、转移入库、站点框架)。
W1 领域与适配
@umt/domain:发布标题解析、身份判定、Slot 状态机与完成条件、收录模式判定、路径模板与路径绑定、整理计划、下载状态机,全部是纯函数。@umt/adapters:qBittorrent(多实例、管理标签、带数据删除前的安全检查)、文件系统(Copy/Move、跨卷 Copy→核验→删源、EXDEV 不静默降级、全量 sha256)、TMDB、Emby、RSS、PT 站点(NexusPHP 观众、馒头 API,移植 MoviePilot 开放站点框架)。@umt/testkit提供对应 mock。@umt/db:36 张表的全量迁移;@umt/contracts:共享 zod 契约与 API 注册表;@umt/mapping:domain 与 contracts 之间的映射集中在一处。@umt/tasks:基于 OpenWorkflow 的持久任务引擎、任务注册表、outbox 中继、操作账本 fencing(旧 attempt 的提交会被拒绝)。@umt/agent:能力注册中心、Pi AgentRuntimePort、fake 模型、输出脱敏。
W2 服务编排
- 认证与设置:管理员登录门禁(argon2id、会话 cookie、CSRF 双提交、登录限速、可选 TOTP)、API Key scope(read / organize.read / organize.execute / admin)、密钥加密存储、实例与路径映射、审计、PG 通知驱动的 SSE(带序号,可补读)、自动化总开关与只读对账模式、工作流引擎面板 API。
- 来源与身份:站点与 Feed 管理、多 RSS 抓取与多层去重、站点快照与实时补查、TMDB 识别与本地实体优先、待识别池、人工纠错映射。
- 规则、下载与入库:订阅、Slot、策略版本(发布即生成持续授权)、确定性 evaluateAcquisition、每日预算与并发、qB 同步与标签接管、缓存卷硬阈值与恢复水位、verifyAndImport(Copy/Move)、路径绑定固定、整理记录与公开增量 API、媒体库与首页聚合。
- Agent:14 个能力接到服务,服务端授权(持续授权 / 一次性审批),会话 API + SSE 增量,后台事件触发有界调查任务。
W3 控制台
- 20 个路由:首页、媒体库、订阅与规则、偏好标签、待处理中心、身份与元数据、PT 站点工作台、来源 / Feed / 快照、下载与任务、整理记录、Agent 会话、系统设置、工作流引擎面板、审计。
W4 集成验收与修复
- 单容器打包(API + worker + 静态前端,compose 只有 app 和 pg),
DATA_DIR,备份与恢复脚本,runbook。 - 控制台接入真实端点;Playwright 全路由冒烟(
deno task test:web:smoke)。 - BrowserProvider 接口与 camofox-browser 适配骨架(只落接口)。
- 主循环解耦:后台循环只做编排,清理 / 对账 / 入库一律入队到任务引擎;io / agent worker 分组;外部 IO 能力调用限流;事件循环延迟探针。
- 安全修复:审批只能由管理员会话决定,共享一份脱敏表,TMDB 错误信息不带 api_key,生产构建不能打开 Agent mock。
- 授权内异常调查与恢复:有持续授权时,调查结论可在授权范围内自动重试并继续。
- 手动整理守卫(
POST /organization-records):sourcePaths必须在已登记的媒体库根或下载器路径映射之下(realpath 后按目录前缀匹配,拒绝..与符号链接逃逸,dryRun 同样受限);Move 需要管理员会话,或 API Key 同时有覆盖目标作品的持续授权 / 与本次请求一致的一次性审批;来源是纳管下载任务且做种义务未满足时返回 409 并建待处理,不改成 Copy。 - 剧集完成判定:总集数未知(集单元都是临时单元)时 Slot 不判满足,订阅继续追踪;覆盖按实际文件登记,整季包不因包名覆盖整季;已在库的相同文件算作核验到的内容。
- 工作流引擎面板支持重跑:
POST /engine/runs/{id}/retry(仅 admin,新幂等键retry:<id>:<序号>,写审计),run 详情页有"重跑"按钮。 - 新增 e2e:E7 常规剧集纵切、E8 管理标签移除与 qB 任务消失(AT24)。
已知限制
- v0.1 明确不做的内容见
docs/plan/00-first-version-plan.md§3.2:国产综艺分段、双版本 require_distinct_asset 组合校验、浏览器接入与原站视图、HHClub / CHD、旧库接管、Agent 主观选片与规则学习、媒体级主动整理 UI、多用户。 - 验收报告
docs/plan/04-v0.1-acceptance.md§1.2 的应修项和 §1.3 的建议项里,未标"已修"的条目留在 v0.1.x 处理。 - 剧集总集数目前没有来源会把集单元确认为
confirmed,所以持续追踪的剧集 Slot 在 v0.1 不会进入 satisfied。 - 恢复流程只有人工演练记录,没有自动化测试。