197 lines
12 KiB
Markdown
197 lines
12 KiB
Markdown
# biliup-next Todo - 2026-04-06
|
||
|
||
## 今日待办
|
||
|
||
### P0
|
||
|
||
- 修正任务级 `running` 状态缺失问题。
|
||
- 当前 step 会进入 `running`,但 task 不会进入 `running`,导致控制台“处理中”筛选、优先级判断和注意力状态失真。
|
||
- 相关位置:
|
||
- `src/biliup_next/app/task_engine.py`
|
||
- `src/biliup_next/app/api_server.py`
|
||
- `src/biliup_next/modules/*/service.py`
|
||
|
||
- 收敛 `full_video_bvid` 的单一事实源。
|
||
- 当前 `task_contexts`、`session_bindings`、`session/full_video_bvid.txt` 三处状态可能不一致。
|
||
- `rebind_session_full_video_action()` 没有同步更新 `session_bindings`,后续新任务 ingest 仍可能继承旧 BV。
|
||
- 相关位置:
|
||
- `src/biliup_next/app/task_actions.py`
|
||
- `src/biliup_next/modules/ingest/service.py`
|
||
- `src/biliup_next/infra/task_repository.py`
|
||
|
||
- 补强 SQLite 并发配置。
|
||
- 当前 API 与 worker 可并行运行,但数据库连接仍是最基础配置,缺少 `busy_timeout`、`WAL`、`foreign_keys=ON` 等保护。
|
||
- 后续任务量或并发操作增加时,容易出现 `database is locked` 一类问题。
|
||
- 相关位置:
|
||
- `src/biliup_next/infra/db.py`
|
||
|
||
### P1
|
||
|
||
- 消除 API 路径上的重复初始化。
|
||
- `ensure_initialized()` 目前会重复执行配置加载、DB 初始化、插件扫描和 provider 实例化。
|
||
- API 每次请求都可能再次触发整套装配,后续会拖慢控制面并增加维护成本。
|
||
- 相关位置:
|
||
- `src/biliup_next/app/bootstrap.py`
|
||
- `src/biliup_next/app/api_server.py`
|
||
|
||
- 优化 `/tasks` 的全量扫描和 N+1 查询。
|
||
- 当前 `attention/delivery` 过滤会先拉最多 5000 条任务,再逐条补 task payload、step、context 和文件系统状态。
|
||
- 任务规模上来后会明显拖慢列表页和筛选体验。
|
||
- 相关位置:
|
||
- `src/biliup_next/app/api_server.py`
|
||
- `src/biliup_next/infra/task_repository.py`
|
||
|
||
- 收敛文档状态机与代码实现。
|
||
- 文档中存在 `ingested`、`completed`、`cancelled`,并声明不再依赖 flag 文件作为权威状态。
|
||
- 实际实现中这些状态并未完整落地,评论/合集完成态仍依赖多个 flag 文件。
|
||
- 需要统一“文档模型”和“代码真实状态机”,避免后续继续漂移。
|
||
- 相关位置:
|
||
- `docs/state-machine.md`
|
||
- `src/biliup_next/app/api_server.py`
|
||
- `src/biliup_next/modules/comment/providers/bilibili_top_comment.py`
|
||
- `src/biliup_next/modules/collection/providers/bilibili_collection.py`
|
||
|
||
### P2
|
||
|
||
- 为状态机、重试和手工干预流程补测试。
|
||
- 当前仓库没有看到 `tests/` 或自动化回归覆盖。
|
||
- 优先覆盖:
|
||
- `task_engine`
|
||
- `task_policies`
|
||
- `task_actions`
|
||
- `retry_meta`
|
||
- `task_reset`
|
||
|
||
- 明确两套控制台的维护策略。
|
||
- 当前 React 控制台和 classic 控制台并存。
|
||
- 需要决定 classic 是长期保留、冻结维护,还是逐步退役。
|
||
|
||
## 备注
|
||
|
||
- 以上问题来自 2026-04-06 对 `biliup-next` 当前重构实现的代码审查。
|
||
- 优先顺序按“状态一致性 / 数据一致性 / 运行稳定性 / 控制面性能 / 可维护性”排列。
|
||
|
||
## 过程记录
|
||
|
||
- 2026-04-06:完成首轮代码审查,确认当前优先问题。
|
||
- 2026-04-06:基于问题清单拆出分阶段改造计划,见 `docs/refactor-plan-2026-04-06.md`。
|
||
- 2026-04-06:确定首批执行范围为 task `running` 状态落地、`full_video_bvid` 写路径统一、SQLite 连接加固。
|
||
- 2026-04-06:已完成首轮代码改造。
|
||
- task 在 step 被 claim 后会进入 `running`。
|
||
- `bind/rebind/webhook` 已统一复用 `full_video_bvid` 持久化路径。
|
||
- SQLite 连接已增加 `foreign_keys`、`busy_timeout`、`WAL`、`synchronous=NORMAL`。
|
||
- 已执行 `python -m compileall biliup-next/src/biliup_next` 验证语法通过。
|
||
- 2026-04-06:已完成第二轮控制面改造。
|
||
- `ensure_initialized()` 已改为进程内复用,避免 API 请求重复装配全套应用状态。
|
||
- `PUT /settings` 后会主动失效并重建缓存状态,避免新旧配置混用。
|
||
- `/tasks` 列表已改为批量预取 task context 和 steps,减少列表页 N+1 查询。
|
||
- 已再次执行 `python -m compileall biliup-next/src/biliup_next` 验证语法通过。
|
||
- 2026-04-06:已完成状态机文档对齐。
|
||
- `state-machine.md` 与 `architecture.md` 已改成当前代码真实状态集合:`created/running/transcribed/songs_detected/split_done/published/commented/collection_synced/failed_*`。
|
||
- 已明确 `ingested/completed/cancelled` 当前未落地,不再作为现阶段实现口径。
|
||
- 已明确工作区 flag 仅表示交付副作用和产物标记,不作为 task 主状态事实源。
|
||
- 2026-04-06:已补最小回归测试集。
|
||
- 新增 `tests/test_task_engine.py`
|
||
- 新增 `tests/test_retry_meta.py`
|
||
- 新增 `tests/test_task_actions.py`
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 7 个测试全部通过。
|
||
- 2026-04-06:已继续收口 `task_actions` 的写路径。
|
||
- `rebind_session_full_video_action()` 不再重复 upsert session binding。
|
||
- `merge_session_action()` 在继承 `full_video_bvid` 时已复用统一持久化路径。
|
||
- 已补对应测试,当前测试数为 8,全部通过。
|
||
- 2026-04-06:已补第二层状态流转测试。
|
||
- 新增 `tests/test_task_policies.py`
|
||
- 新增 `tests/test_task_runner.py`
|
||
- 已覆盖 disabled step fallback、publish 重试调度、reset 后回退状态、step claim 后 task 进入 `running`
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 12 个测试全部通过。
|
||
- 2026-04-06:已完成一轮 API 代码清理。
|
||
- `api_server.py` 新增批量 task payload 组装 helper。
|
||
- `/tasks` 与 `/sessions/:session_key` 已复用同一套 task payload 预取与组装逻辑。
|
||
- 已重新执行测试,当前 12 个测试全部通过。
|
||
- 2026-04-06:已整理专业化路线图。
|
||
- 新增 `docs/professionalization-roadmap-2026-04-06.md`
|
||
- 按平台边界、领域模型、接口契约、测试体系、运维成熟度五个维度拆解后续改进方向。
|
||
- 已明确下一批优先项为 adapter 边界、session/delivery 领域服务收敛、serializer 层、SQLite/API 测试与 OpenAPI 对齐。
|
||
- 2026-04-06:已开始落最小 adapter 边界。
|
||
- 新增 `infra/adapters/codex_cli.py`
|
||
- 新增 `infra/adapters/biliup_cli.py`
|
||
- 新增 `infra/adapters/bilibili_api.py`
|
||
- `codex`、`biliup_cli`、`bilibili_top_comment`、`bilibili_collection` provider 已改为依赖 adapter
|
||
- 已执行 unittest 与 `python -m compileall biliup-next/src/biliup_next`,当前验证通过。
|
||
- 2026-04-06:已开始落 serializer 层。
|
||
- 新增 `app/serializers.py`
|
||
- task list / task detail / session detail 的 payload 组装已从 `api_server.py` 抽到 `ControlPlaneSerializer`
|
||
- `api_server.py` 进一步收敛为路由、鉴权和响应控制
|
||
- 已执行 unittest 与 `python -m compileall biliup-next/src/biliup_next`,当前验证通过。
|
||
- 2026-04-06:已继续收口 serializer 层。
|
||
- task timeline 的组装逻辑已从 `api_server.py` 抽到 `ControlPlaneSerializer.timeline_payload()`
|
||
- `api_server.py` 中 task 详情相关展示逻辑继续变薄
|
||
- 已重新执行 unittest 与 `python -m compileall biliup-next/src/biliup_next`,当前验证通过。
|
||
- 2026-04-06:已补 serializer 层测试。
|
||
- 新增 `tests/test_serializers.py`
|
||
- 已覆盖 task payload、session payload、timeline payload 的控制面展示契约
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 15 个测试全部通过。
|
||
- 2026-04-06:已补 repository 的 SQLite 集成测试。
|
||
- 新增 `tests/test_task_repository_sqlite.py`
|
||
- 已覆盖 `query_tasks`、批量 context/steps 查询、`session_bindings` upsert 与 fallback 读取
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 18 个测试全部通过。
|
||
- 2026-04-06:已补 API 行为测试。
|
||
- 扩展 `tests/test_api_server.py`
|
||
- 已覆盖 `GET /tasks`、`GET /tasks/:id/timeline`、`GET /sessions/:session_key`、`PUT /settings`
|
||
- 已覆盖 control token 鉴权分支
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 2026-04-06:已继续补执行面 API 行为测试。
|
||
- `tests/test_api_server.py` 已新增 `POST /tasks`、`POST /tasks/:id/actions/run`、`POST /tasks/:id/actions/retry-step`、`POST /tasks/:id/actions/reset-to-step`
|
||
- 已覆盖写操作成功分支与 `missing step_name` 参数校验
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 28 个测试全部通过。
|
||
- 2026-04-06:已补人工干预相关 API 行为测试。
|
||
- `tests/test_api_server.py` 已新增 `POST /tasks/:id/bind-full-video`、`POST /sessions/:session_key/rebind`、`POST /sessions/:session_key/merge`、`POST /webhooks/full-video-uploaded`
|
||
- 已覆盖成功分支、参数校验,以及 `TASK_NOT_FOUND/SESSION_NOT_FOUND` 的状态码映射
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 37 个测试全部通过。
|
||
- 2026-04-06:已补运行面 API 行为测试。
|
||
- `tests/test_api_server.py` 已新增 `POST /worker/run-once`、`POST /scheduler/run-once`、`POST /runtime/services/:name/:action`、`POST /stage/import`
|
||
- 已覆盖 action record 落库、副作用返回值、`invalid action` 和 `missing source_path` 错误分支
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 43 个测试全部通过。
|
||
- 2026-04-06:已补剩余控制面 GET 与上传接口测试。
|
||
- `tests/test_api_server.py` 已新增 `GET /history`、`GET /modules`、`GET /scheduler/preview`、`GET /settings/schema`、`POST /stage/upload`
|
||
- `stage/upload` 成功分支已通过 patch `cgi.FieldStorage` 固定最小 handler 契约,避免 multipart 解析细节导致测试脆弱
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 49 个测试全部通过。
|
||
- 2026-04-06:已开始收口 session / delivery 领域服务。
|
||
- 新增 `app/session_delivery_service.py`,承接 `bind/rebind/merge/webhook` 的核心规则与持久化路径
|
||
- `app/task_actions.py` 已改为薄封装,仅保留 `ensure_initialized()`、审计记录与 service 调用
|
||
- 新增 `tests/test_session_delivery_service.py`
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 51 个测试全部通过。
|
||
- 2026-04-06:已继续收口 task control 领域服务。
|
||
- 新增 `app/task_control_service.py`,承接 `run/retry/reset` 编排
|
||
- `app/task_actions.py` 已进一步变薄,`run_task_action/retry_step_action/reset_to_step_action` 改为纯 service 封装 + 审计
|
||
- 新增 `tests/test_task_control_service.py`
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 54 个测试全部通过。
|
||
- 2026-04-06:已将 POST 路径分发从 API handler 中下沉。
|
||
- 新增 `app/control_plane_post_dispatcher.py`,统一承接 POST 路径的用例分发、状态码映射和运行面 action record
|
||
- `app/api_server.py` 的 `do_POST()` 已收敛为请求解析、dispatcher 调用和响应写出
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 54 个测试全部通过。
|
||
- 2026-04-06:已补 dispatcher 直测。
|
||
- 新增 `tests/test_control_plane_get_dispatcher.py`
|
||
- 新增 `tests/test_control_plane_post_dispatcher.py`
|
||
- 已覆盖 dispatcher 层的状态码映射、过滤逻辑、运行面 action record 与创建任务冲突映射
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 62 个测试全部通过。
|
||
- 2026-04-06:已开始做可迁移交付清理。
|
||
- `config/settings.json` 与 `config/settings.staged.json` 已替换为 standalone 默认模板,不再携带本机绝对路径和真实密钥
|
||
- `runtime/cookies.json` 与 `runtime/upload_config.json` 已替换为可分发模板
|
||
- 新增 `docs/cold-start-checklist.md`
|
||
- `README.md` 已补充冷启动入口说明
|
||
- 已执行 `PYTHONPATH=biliup-next/src python -m unittest discover -s biliup-next/tests -v`
|
||
- 当前 63 个测试全部通过。
|