Raft 设计系统

决策 0042 · superseded · 2026-10-31

任务像待办清单一样用,有六种状态,状态变更不设限制

任务新增第六种状态 Backlog,它没有色相;任何状态都可以改成任何状态;每个任务都以圆形的完成控件开头,输入标题就能添加;负责人、审查和每个任务自己的讨论都保留。

部分被取代:In Review 后来已停用,只剩五种状态(决策 0043);任务页面上的行和卡片没有完成控件(决策 0045):在那里,行以它的选择复选框开头。这份记录的其余内容仍然有效,包括一个地方的视图里的完成控件。

背景

任务原来有五种状态(Todo、In Progress、In Review、Done 和 Closed),状态菜单只提供从当前状态允许的变更。完成一个任务要用菜单或拖动;添加一个任务要用 Create Task 对话框。任务 v2 的工作以 Google Tasks 为基准,要让任务在日常情况下像待办清单一样用:勾掉一个任务,输入下一个,把一个先放着留到以后。「先放着」没有去处:现在不打算做的任务要么留在 Todo 里,被算作当前要做的工作,要么被 Closed,而 Closed 的意思是不会做。

Raft 的任务还带着待办清单没有的东西:负责人可以是人,也可以是 Agent;Done 之前有一步审查;每个任务有自己的讨论。重新设计必须保留这些。

每种色相都已经有了含义(颜色),灰色属于 Closed。

决定

  • 第六种状态 Backlog(「现在不做」)放有人创建了、或者先放到一边、现在不打算做的工作。Closed 仍然是「不会做」。Backlog 不占用色相(颜色)。它不算作当前要做的工作,它的分组默认收起。
  • 任何状态都可以改成任何状态,人和 Agent 都可以,用状态菜单、详情里的 Status 属性或在看板上拖动都行;没有哪种状态要求先有负责人。完成控件只设置两种状态:从任何状态把任务标为 Done,以及把已完成的任务重新打开为 Todo。移到 Backlog 时会请人填一个可选的原因,记录在历史和任务的讨论里。看板只会因为状态以外的原因拒绝一张卡片,比如这个人不能修改的任务。
  • 每个任务行和卡片都以一个圆形的完成控件开头:点一下就把任务标为 Done(在 In Review 的任务上,这就是接受工作成果),在已完成的任务上点一下则把它重新打开为 Todo。
  • 在频道的 Tasks 分区里,在 "Add a task" 里输入标题就能添加任务。Create Task 可以设置状态(Backlog、Todo 或 In Progress)和负责人。标题和描述在详情里就地编辑。

项目负责人(stdrc)于 2026-10-31 批准了用 raft-ui 0.55.0 做的高保真设计稿。

影响

  • 规则写在任务、颜色、形状和任务组件的文档里。文档里每一处「五种状态」现在都写成六种。
  • Agent 工作的顺序,先 In Review 再 Done,是 Raft 的 Agent 指南里的指引,不是产品强制的限制(交接与审批)。谁在什么时候移动了任务,仍然记在它的事件行和历史里。
  • raft-ui 在 TASK_STATUS_IDS、TaskStatusIcon(TaskBacklogIcon)、TaskChip 和 Timeline 里绘制 Backlog,完成控件是 TaskCompletionControl。尚未实现:文档里的示例(任务面板、任务卡片、看板、Create Task)显示的是这个决定之前的任务。
  • 圆形的完成控件和 Android 的下拉刷新圆盘一样,是「圆形只用于开关、单选按钮和拖动条」的例外,记录在形状和 Checkbox 里。
  • 撤销这个决定:从状态列表和状态顺序里去掉 Backlog,恢复只列出允许变更的菜单,去掉完成控件和快速添加。没有别的东西依赖它们。

考虑过的其他方案

  • 给 Backlog 一种色相。 每种色相都已经有含义,而灰色的像素点会读成 Closed。空心的像素点表示「还什么都没填」,不需要新的颜色。
  • 保留状态变更的限制,再把 Backlog 加进去。 菜单藏起一部分变更,人们要把任务放到它的工作实际所在的状态,就得绕远路;而且事件行和历史已经记录了每一次移动。
  • 在行首放方形复选框。 那里的方框读作「选中这一行」,用于批量操作;圆圈是待办清单的惯例,读作「完成」。
  • 在服务器级的任务页面上快速添加。 任务总是属于一个地方,而那个页面汇集了多个地方的任务,在那里添加的任务就没有所属的地方。

被取代

这份记录的其余内容仍然有效。