- 待办:任务恢复边界、注册断言、测试装配去重、大文件拆分、MP 对照 6.4 已完成并移除; BrowserService 类拆分与超长函数写明暂缓原因;真实环境验收列出所需条件; continuous-series 偶发超时改为观察项(已核实不是业务竞争) - CLAUDE.md:test/support、contracts api/ 与整理服务的文件布局、起子进程的测试进串行组 - lessons 第 26 条:检查命令不接管道 Co-Authored-By: Claude Opus 5.5 <[email protected]>
4.4 KiB
4.4 KiB
UHD Media Tool
影视自动化工具:站点 / RSS 获取 → 识别 → 下载(qB)→ 整理入库 → 刮削,带 Agent。后端 Deno + Hono + Kysely(PostgreSQL),前端 React Router 8 + Vite,同一个 workspace。业务逻辑以 MoviePilot v3 为参考(docs/porting/)。
面向团队内部使用,目前只有本机测试环境:避免过度设计和过度防御,只处理已确认会影响正常使用的问题。回复和文档用中文。
常用命令
deno task dev:up # 开发库(127.0.0.1:55433)+ 迁移到最新;拉代码后先跑
deno task dev # API 4390 + web 5180(4380 是本机部署版,别占)
deno task test:all # 全量测试,逐包跑完汇总;连不上测试库直接失败
deno task typecheck # tsc + deno check
deno task lint # biome;deno task fmt 会写文件,只对自己改的路径用
deno task ci # 提交前完整检查(含 web 构建与编译产物自检)
deno task release # 测试环境发布,见下
REST 端点定义按领域分在 packages/contracts/src/api/*.ts,api.ts 按顺序合并成 Api(顺序即路由注册顺序)。整理服务按阶段分在 organize-plan / -exec / -finalize / -records / -types.ts,外部仍从 organize.ts 引用。
只改一个包时可在包目录跑 deno run -A npm:vitest run <文件>;web 包用 ../../node_modules/.bin/vitest run(Node)。改迁移后跑 deno task gen:types 重新生成 packages/db/src/types.ts,contracts 枚举顺序与数据库保持一致(packages/contracts/test/db-sync.test.ts 会查)。
约定
- 先提交再部署。发布只走
deno task release:工作区不干净直接拒绝;版本取根deno.json(所有成员包同一版本);CHANGELOG.md必须先有## [x.y.z]条目;脚本打 tagvx.y.z、构建镜像、只替换 app 容器(启动时自动迁移)、核对健康接口版本。测试环境不需要备份、在途任务清单、源码指纹等重流程。 - 功能在分支上做,完成后合回 main;提交按功能拆,别把不相关的改动带进同一个提交。
- 说"检查通过"只认
deno task test:all/deno task ci的实际输出;跳过的用例不算通过。 - 新增 Agent 能力要登记到某个 Skill(
packages/agent/skills/*/SKILL.md)和能力地图(packages/agent/src/prompt/layers/capabilities.ts),否则 agent 测试会红。 - 界面文案守
docs/design/glossary.md的术语与标点(deno task check:copy);状态色只表示状态(StatusBadge带圆点,别拿来显示数量)。 - 主工作区不留常驻 dev 进程(
--watch会改写deno.lock);构建前确认deno.lock没被改。
测试
- 位置:server 的测试统一放
apps/server/test/<模块>/(不再用src/**/__tests__);web 与 adapters 测试和源码放同目录*.test.ts;其它包放test/。 - 命名按测的行为(
crash-recovery.test.ts、two-stage-search.test.ts),不要用任务编号(e4-、w5a2、-md1)。 - server 分三组(
apps/server/vitest.config.ts):unit不碰 PG;pg真实 PG + 假引擎,文件并行;serial起真实引擎 / worker / 子进程的集成与 e2e,串行。新文件缺省进pg,起真实 worker / 引擎 / 子进程的必须加进SERIAL。 - server 测试的建库、schema 锁、假引擎统一用
apps/server/test/support/(pg.ts、engine.ts),各模块 harness 只写自己的装配。 - 每个 PG 测试文件用自己的 schema;等待异步结果用轮询到条件,不写固定 sleep。
- 真机测试用
*.real.test.ts,靠环境变量开启,缺省跳过。
文档放哪
- 正在推进的计划与待办:
docs/plan/README.md;做完的计划、验收、发布记录直接删除(git 历史可查),不留归档。 - 版本变化:
CHANGELOG.md,每版几行,不另写长篇发布记录。 - 运维与使用:
docs/runbook/;设计规范:docs/design/;架构决策:docs/adr/;MP 对照:docs/porting/。 - 证据、截图、构建日志放
.local/(不进 git)。 - 踩过的坑:
docs/plan/lessons.md,派子代理或并行开发前先读。
参考
- MoviePilot 固定源码(只读):
/tmp/umt-moviepilot-v3-review-20261001(v3.0.10-1,0aa8571),对照结论见docs/porting/moviepilot-v3-comparison.md。 - 本机部署:
docker compose --env-file .env.deploy …,app 经 Caddy 暴露在https://<host>:4380,容器 HTTP 在127.0.0.1:4381。