任务生命周期

Backlog.md 中每个任务都是一份独立的 Markdown 文件,从想法萌芽到最终归档,经历完整的状态流转。

状态流转

任务从创建到完结的完整流程如下:

Draft(草稿) → To Do → In Progress → Done → Archived / Completed
状态 说明
Draft 草稿状态,使用独立 ID 空间(如 draft-1),不占用正式任务编号
To Do 新建任务的默认状态,等待开始
In Progress 开始工作时手动标记,或通过 AI 代理自动更新
Done 工作已完成,任务仍保留在 backlog/tasks/ 目录中
Archived 执行 backlog task archive 后移入 backlog/archive/tasks/,属于软删除
Completed 执行 backlog cleanup 后,Done 任务被移入 backlog/completed/ 目录

状态机

上表是默认状态列;项目的实际状态列由 backlog/config.yml 的 statuses 配置声明,支持带语义的对象形式:

字段 说明
name 状态名(列标签)
category 六类之一:initial / active / wip / blocked / done / dropped,取代「末位即终态」的位置约定
exit 终态的离开动作(如 archive)
display false 时看板隐藏该列(列内任务一并隐藏)
next 转换边数组,每条边可声明 when / requires / evidence / ai 权限

要点:

  • 新初始化的项目使用内置七列默认状态机(To Do → Planning → Plan Review → In Progress → In Review → Done,另含留档终态 Dropped)。CLI 的 config 只有 get/set/list 子命令,没有重置命令;要恢复默认状态机,需在 Web 设置页的状态机编辑器中点 Default 按钮——该按钮只把默认状态机载入编辑器,仍需保存才生效
  • 默认机器已内置收尾门禁:In Progress → In Review 要求任务文件按 task-finalization 完成、In Review → Done 要求按 task-finalization 验收通过——新项目开箱即带,无需手动配置(BACK-816 把定稿门禁同步进了四语言默认机器)
  • 状态机只声明、不强制:越界推进不报错,但 CLI/MCP 指南(backlog instructions overview)会渲染完整的状态表、类别、迁移边与「停下等人工」清单,AI 代理按声明的机器工作
  • 旧式字符串数组配置仍兼容;设置页提供可视化状态机编辑器维护对象形式配置
  • 完整语义见 wiki 概念页 状态机语义

任务文件结构

每个任务文件顶部包含 YAML frontmatter,用于存储结构化元数据;正文部分记录任务描述、验收标准、实现计划等信息。

---
id: back-10
title: "任务标题"
status: "In Progress"
assignee: ["@user"]
reporter: "@user"
created_date: "2026-05-06"
updated_date: "2026-05-06"
completed_date: "2026-05-06"
labels: ["feature", "backend"]
priority: high
milestone: "M1 - CLI"
dependencies: ["back-1", "back-2"]
references: ["https://docs.example.com", "src/api.ts"]
docs: ["doc-1"]
ordinal: 1000
type: feature
dueDate: "2026-05-20"
plannedStart: "2026-05-10"
plannedEnd: "2026-05-18"
actual_start: "2026-05-10 09:00"
actual_end: "2026-05-15 18:30"
parentTaskId: "back-4"
---

核心字段说明

字段 说明 示例
id 任务唯一标识,支持自定义前缀 back-10、proj-42
title 任务标题,单行文本 "实现用户登录"
status 当前状态,必须在项目配置的 config.statuses 列表中 "To Do"、"In Progress"
assignee 负责人列表,使用 @username 格式 ["@alice", "@bob"]
reporter 创建人 "@alice"
priority 优先级,可选 high、medium、low high
milestone 所属里程碑的 ID 或标题 "M1 - CLI"
dependencies 依赖的其他任务 ID 列表 ["back-1", "back-2"]
ordinal 自定义排序权重,数值越小越靠前 1000
type 任务类型,如 bug、feature、enhancement、docs feature
dueDate 截止日期(ISO 格式,date-only) "2026-05-20"
plannedStart 计划开始日期(ISO 格式,date-only) "2026-05-10"
plannedEnd 计划结束日期(ISO 格式,date-only) "2026-05-18"
actual_start 实际开始时间(UTC datetime) "2026-05-10 09:00"
actual_end 实际结束时间(UTC datetime) "2026-05-15 18:30"
parentTaskId 父任务 ID,存在时该任务为子任务 "back-4"
labels 标签列表 ["backend", "api"]
references 外部引用链接或文件路径 ["src/api.ts"]
docs 关联文档 ID ["doc-5"]

实际时间自动填充

actualStart 和 actualEnd 用于追踪任务实际开始和完成时间,系统会在特定条件下自动填充:

  • 当任务状态从其他状态变更为 In Progress 时,若 actualStart 为空,自动设置为当前日期时间
  • 当任务状态变更为 Done(或其他终态)时,若 actualEnd 为空,自动设置为当前日期时间
  • 创建任务时直接指定 --status "In Progress" 或 --status "Done" 也会触发自动填充
  • 自动填充仅在字段为空时执行,你可以随时手动覆盖

状态变更方式

通过 CLI

# 标记为进行中
backlog task edit <id> --status "In Progress"

# 标记为已完成(将状态设为终端状态,通常为 Done)
backlog task edit <id> --status "Done"

# 归档任务
backlog task archive <id>

通过 TUI 看板

运行 backlog board 启动终端看板,选中任务卡片后使用方向键或快捷键在不同状态列之间移动。

通过 Web UI

运行 backlog browser 启动浏览器界面,在看板视图中拖放任务卡片到目标状态列。

通过 AI 代理(MCP)

AI 代理可直接调用 update_task 工具变更任务状态,无需人工介入。

重复任务 ID 检测与修复

正常情况下,任务 ID 在创建时即保证唯一。但跨分支合并、零填充等价(back-1 与 back-01)、外部或手动编辑仍可能产生重复的任务 ID,导致任务在视图、搜索和编辑中静默坍缩。

使用 backlog doctor 检测并修复重复 ID:

# 预览冲突(列出冲突组、文件路径、计划的重命名、需人工审查的引用)
backlog doctor

# 确认修复并丢弃 .bak 备份(最终化)
backlog doctor --commit

# 回滚修复(恢复 .bak 备份)
backlog doctor --rollback

修复原则:只改动任务文件名与 frontmatter 中的 id,保留内容;重命名与 frontmatter 同步进行(原子性);对歧义结构 fail-closed 不猜测引用;操作可回滚(生成 .bak 备份),--commit/--rollback 均需人工确认后执行。

序号变更不影响 updated_date

仅调整任务序号(如看板重排、批量排序)时,任务的 updated_date 不会被刷新,避免产生无意义的 Git diff 噪音。只有当任务内容或元数据真正变化时,updated_date 才会更新。

results matching ""

    No results matching ""