Skip to content

feat(task): 多层嵌套子任务(v2.1 切片) - #17

Merged
allan852 merged 6 commits into
mainfrom
allan852/feat-sub-task
Sep 8, 2026
Merged

allan852 merged 6 commits into
mainfrom
allan852/feat-sub-task

Conversation

@allan852

@allan852 allan852 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

概要

为任务实现多层嵌套子任务(真·完整任务,非轻量检查项),对应路线图中的「多层子任务」方向(docs/post-v1-iteration-design.md 第 13 节)。

数据模型(迁移 0022)

  • tasks.parent_id 自引用(邻接表)+ tasks.child_order 同父兄弟排序 + idx_tasks_parent_active 索引
  • task_tree_expanded 表:树形展开状态数据库持久化(默认展开)
  • 嵌套深度上限 5 层(创建与归巢双路校验,防循环)

核心行为

  • 完成聚合(两个全局开关,默认开启,设置页可关):
    • 向上双向:子任务全部完成 → 父任务自动完成;子任务取消 → 父任务恢复
    • 向下双向:父任务完成 → 级联所有后代;父任务取消 → 后代恢复
    • 事务内完成;series spawn 仅对显式目标任务执行
  • 归巢/提升:拖拽到任务中带(30%-70%)→ 成为子任务;拖到间隙 → 同父重排;list_id 保持不变
  • 删除处置:有子任务时弹窗选择「级联删除 / 仅删父任务(子任务提升为顶层)」;无子任务直接删除
  • 归档:archive/unarchive 级联后代
  • 可见性:子任务是完整任务,独立参与今日/搜索/智能列表/提醒/托盘/CLI/CSV;列表视图树形聚合展示

变更清单

后端(src-tauri)

  • 迁移 0022_task_subtasks.sql;TASK_ROW_SELECT/map_task_row 扩展两列;schema 断言 21→22
  • TaskService:create_task(parent_id)、set_task_parent(循环/深度/活跃校验)、reorder_subtasks、query_tree(匹配集 + 祖先/后代闭包)、delete_task_tree、tree_expanded_list/set_tree_expanded、完成聚合与归档级联
  • 新 IPC:task_query_tree / task_set_parent / task_reorder_subtasks / task_delete_tree / task_tree_expanded_list / task_set_tree_expanded
  • AppSettings 新增 subtaskAutoCompleteParent / subtaskCascadeChildren(serde 默认 true,旧数据兼容)
  • 各服务 CreateTaskInput 调用点补充 parent_id: None(机械改动)

前端(src)

  • TasksPage:清单视图切树形渲染(缩进/chevron/进度徽标 x/y)、dnd 归巢与同父重排、展开状态读写
  • taskTree.ts 纯函数(buildForest/flattenVisible/siblingIds,孤儿根防御)+ 单测
  • TaskDetailPanel + SubtaskSection:列表/添加/勾选/改名/上下移/删除处置/点开子任务详情;完成后冻结只读(与检查项一致)
  • SettingsPage:子任务区块两个开关
  • ipc/client.ts:类型与绑定同步

验证

  • cargo test --lib:179 通过(新增 12 个子任务单测:创建继承/深度上限/循环防护/聚合默认/开关关闭/归档级联/删除处置/树闭包/兄弟排序/展开状态)
  • pnpm typecheck / pnpm build:通过
  • pnpm test:unit:46 通过(含 4 个树纯函数测试)
  • 已知预存环境失败:eval_provider_key_stays_outside_database_and_settings(AI 探针网络可达性,main 上同样失败,与本 MR 无关)

范围外(注记)

  • 任务依赖、附件(路线图另两项)
  • 每任务覆盖完成策略(当前全局配置)
  • 级联/聚合的非显式目标任务不触发自动化规则

@allan852
allan852 merged commit 98f9841 into main Sep 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant