- separate qB sync timer from the planning timer
- threshold cleanup, reserved-plan and pending-import sweeps, 6h reconcile enqueue
engine tasks with time-slot idempotency keys instead of running inline
- pending-import sweep selects by completed_at (sync refreshes updated_at every round)
- POST /download-cache/cleanup and /library/reconcile return {taskId, runId} (202);
web jumps to the engine run page
- test: a 50MB verifyAndImport in progress does not delay qB sync
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@umt/web
React Router 7 SPA 控制台(ssr:false),沿用 uhd_web 设计系统(token 见 app/app.css,规范见 docs/design/)。只通过 /api/v1 与 server 通信,请求/响应类型一律来自 @umt/contracts,不手写重复 DTO。开发端口 5180,/api 代理到 http://localhost:4380。