- server 的 src/modules/*/__tests__ 挪到 test/<模块>/;e2e 去掉 eN- 前缀, w5a2 / v2 / search2 / *-dh1 / *-md1 / *-md2、web 的 agui3 / search2、domain 的 id2 / id3 改为按行为命名 - vitest 分三组:unit、pg(真实 PG + 假引擎,文件并行,最多 6 个)、serial(真实引擎 / worker / e2e,串行); pg 组用例超时放宽到 60s(迁移类用例并行时排队等 schema 锁)。server 测试 615s → 约 350s - CLAUDE.md 补测试约定;待办补 harness 去重与 continuous-series 偶发超时(疑似 Slot 评估竞争) - ADR-004 补充:维持 Deno,记录实际只用到 --allow-run 白名单 Co-Authored-By: Claude Opus 5.5 <[email protected]>
50 lines
4.0 KiB
Markdown
50 lines
4.0 KiB
Markdown
# UHD Media Tool
|
||
|
||
影视自动化工具:站点 / RSS 获取 → 识别 → 下载(qB)→ 整理入库 → 刮削,带 Agent。后端 Deno + Hono + Kysely(PostgreSQL),前端 React Router 8 + Vite,同一个 workspace。业务逻辑以 MoviePilot v3 为参考(`docs/porting/`)。
|
||
|
||
面向团队内部使用,目前只有本机测试环境:**避免过度设计和过度防御**,只处理已确认会影响正常使用的问题。回复和文档用中文。
|
||
|
||
## 常用命令
|
||
|
||
```sh
|
||
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 # 测试环境发布,见下
|
||
```
|
||
|
||
只改一个包时可在包目录跑 `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]` 条目;脚本打 tag `vx.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`。
|
||
- 每个 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`。
|