状态与工作流

工作项(Issue)的 状态 表示它处于生命周期的哪个阶段。Specivo 自带一套合理的默认状态,每个状态都归属于一个 类别,看板的列和报表都以类别为依据。

工作项看板

默认状态

状态 类别 含义
New(新建) 待办列表 已报告,尚未开始
In Progress(进行中) 活跃 有人正在处理
Resolved(已解决) 已完成 工作已完成(完成百分比 设为 100)
Feedback(待反馈) 活跃 等待他人输入或评审后才能继续
Closed(已关闭) 已关闭 已完成并经过验证(完成百分比 设为 100)
Rejected(已拒绝) 已关闭 不会处理:重复、无效或超出范围

报表和看板按 待办列表、活跃、已完成、已关闭 这四个类别分组,因此状态的具体名称并不重要,重要的是它属于哪个类别。

典型流转

大多数工作项的路径很简单:

New → In Progress → Resolved

领取一个新工作项时把它设为 In Progress,完成工作后再设为 Resolved。工作项需要等待某人时用 Feedback,验证通过后用 Closed,确定不再处理时用 Rejected。

状态如何驱动看板

看板视图按状态类别分列,工作项随着状态变化在看板上移动:从待办列表列开始,开始处理后进入活跃列,完成后进入已完成/已关闭列。看板和列表视图见 查找工作项,冲刺(Sprint)看板见 冲刺。

自定义工作流

状态转换由管理员控制

上面列出的是自带的默认状态。项目管理者可以自定义 工作流:每个状态可以转换 到 哪些状态,以及哪些角色有权执行每一种转换。因此在你的项目里,某些转换可能受限,或者根据你的角色附加了额外规则。

字段规则

管理员还可以按追踪器(Tracker)和角色,把某个工作项字段在特定状态下设为 必填 或 只读,例如“转为 In Progress 的工作项必须有负责人”,或“一旦 Resolved 就不能再改主题”。字段规则目前只能通过 REST API 设置(/api/v1/admin/workflows/field-rules/),还没有对应的界面。规则可以指定 assigned_to_id、category_id、fixed_version_id、sprint_id、priority_id、tracker_id、subject、description、start_date、due_date、estimated_hours、original_estimate、remaining_estimate、done_ratio 或 parent_id,其他名称一律拒绝。元数据字段则由它们的 架构 负责约束。

规则作用于处于该状态的工作项的每一次保存,并根据这次保存改了什么来判断:

  • 只读:拒绝为该字段写入新值。字段不变地保存表单没有问题。
  • 必填:状态发生变化时,要求变更后该字段必须有值。工作项停留在该状态期间,只有清空该字段会被拒绝,因此规则生效前就缺少该字段的工作项仍然可以编辑。

被拒绝的保存返回 422,并附带 workflow_field_required 或 workflow_field_readonly 以及字段名。管理员不受字段规则约束。只有当你在项目中的所有角色都把某字段标记为只读时,只读规则才生效;而只要其中任一角色把它标记为必填,必填规则就生效。

从代码仓库触发的状态变更遵循同样的规则:提交信息中的 Fixes ACME-12 只有在提交作者的角色允许该转换时才会移动工作项;合并自动化则只有在 Automation(自动化)角色(或为其指定的角色)允许时才会生效。在启用了工作流规则的实例上,Automation 角色在被授权之前没有任何可用的转换。见 代码仓库集成。