切片 slice

这是一个用于项目管理和开发自动化的技能,能够将复杂计划分解为可执行的依赖切片,生成和验证SLICES.md文件,并智能选择下一个工作项。它支持生成模式来创建或修复切片,以及下一个模式来选取工作项,适用于敏捷开发、DevOps流程和架构设计,帮助团队高效协作和跟踪进度。关键词:切片、依赖图、计划分解、项目自动化、SLICES.md、工作流管理、DAG、DevOps、软件开发。

架构设计 0 次安装 0 次浏览 更新于 3/8/2026

name: 切片 description: “将计划切分为SLICES.md中的依赖图(DAG);验证它;并选取/标记下一个准备好的切片以执行。当被要求将计划切分为切片、生成或修复SLICES.md,或选择下一个要工作的切片时使用。”

切片

概述

切片是一个计划空间工作流,它将Markdown计划转换为仓库根目录SLICES.md中的依赖感知DAG的可PR切片,然后使用该文件作为规范源来选择下一个要工作的切片。

它支持两种模式:

  • 生成模式:从计划创建/修复SLICES.md,并(重新)构建合理的DAG,包括显式依赖和子任务清单。
  • 下一个模式:验证SLICES.md,选择下一个准备好的切片执行,将其标记为in_progress,并将其作为工作项返回给用户。

默认行为是自动

  • 如果SLICES.md缺失、无效或有零个切片记录:运行生成模式。
  • 如果SLICES.md有效:运行下一个模式。

重要提示:

  • 生成模式从不在同一次调用中自动选择工作切片;它只写入SLICES.md。选择/开始工作发生在后续显式调用(模式=next或自动当有效时)。
  • 在自动模式中,选择切片仅在调用开始时SLICES.md已有效的情况下发生。

输入

  • 计划路径(在SLICES.md中的可选元数据):
    • 在首次运行时提供以创建/修复SLICES.md
    • 下一个模式不需要;SLICES.md是可移植的。
  • 模式:
    • 不需要;从调用文本+SLICES.md状态推断。
    • 如果人类想要强制生成,可以说“生成”/“重建”/“重新生成”。
    • 如果人类想要强制选择,可以说“下一个切片”/“我应该做什么”。
  • 分配者(协调器ID):
    • 在下个模式中使用以支持并发的in_progress切片(每个分配者一个)。
    • 如果从SLICES.md头部或调用上下文中不可用,询问人类一次。
  • 可选:范围边界、排序约束、优先级指导和流程约束。

默认值(如果用户另有说法则覆盖)

  • 并行优先:构建DAG,而不是单一线性链。
  • blocks仅用于真正前提;对软排序使用tracks/related
  • 中等粒度:每个叶子切片应独立可PR。
  • 包括显式契约切片(API/模式/接口/配置格式)以解耦工作流。
  • 包括检查点/集成切片作为连接点(强制反馈循环)。

SLICES.md(仓库根工作空间)

  • 路径:仓库根目录的SLICES.md
  • 规范:SLICES.md是切片状态的规范源。
  • 切片只读取计划文件和SLICES.md,并且只写入到SLICES.md

文件头部

SLICES.md应以最小元数据开始,以便下一个模式无需任何计划引用即可运行:

schema_version: 1
default_assignee: opencode

default_assignee是可选的;如果存在,下一个模式将其用作协调器ID。plan_path仅是可选元数据。

切片记录格式

每个切片表示为一个包含单个YAML对象的部分,该对象具有一致的问题记录模式。

SLICES.md中的规范Markdown布局:

# 切片

## <标题> (<ID>)
```yaml
id: sl-...
...
```

惯例:

  • ID:sl-<短哈希>(在SLICES.md内稳定)。
  • priority:整数0…4(0最高)。
  • issue_typetask|bug|feature|epic|chore|docs|question(或自定义字符串)。
  • statusopen|in_progress|blocked|closed|tombstone
  • dependencies{type, depends_on_id}对象列表。
    • 允许的依赖类型:blocks|tracks|related

推荐添加:

  • subtasks:切片内部步骤的有序清单(2-10项)。
  • verification:至少一个具体信号(命令或手动检查)证明切片完成。
  • parent_id:可选;如果存在,此切片是史诗的子项。
  • assignee:可选字符串;当status: in_progress时需要。

每个切片的最小推荐键:

  • id, title, status, priority, issue_type
  • description, acceptance_criteria, notes(可以为空字符串但应收敛)
  • dependencies(省略或空列表)

如果status: in_progressassignee是必需的。

如果存在,subtasks应为YAML字符串列表。

史诗/子惯例:

  • 优先使用parent_id,而不是将父/子编码为依赖关系。
  • 如果任何切片有parent_id: <id>,则<id>是史诗。
  • 史诗是组织性的;不要在父和子之间添加blocks边。

推荐元数据页脚(在notes中,用于选择/评分):

工作流: <名称>
角色: 契约 | 实现 | 集成 | 检查点
并行性影响: 解锁 <n> 切片

角色 ↔ 双钻石(指导):

  • contract:定义
  • implementation:开发 / 交付
  • integration / checkpoint:交付

示例切片:

id: sl-1a2b3c4d
title: "后端API:认证契约"
status: open
priority: 1
issue_type: task
description: |
  决定并记录认证API表面,以便前端/集成工作可以继续进行。
acceptance_criteria: |
  - 记录端点(请求/响应)包括错误形状。
  - 定义令牌/会话生命周期。
verification: |
  - 文档:打开规范并确认所有端点+错误形状存在。
subtasks:
  - 草拟端点列表和认证模型。
  - 指定请求/响应JSON形状。
  - 指定错误形状和令牌/会话生命周期。
notes: |
  工作流: 后端API
  角色: 契约
  并行性影响: 解锁3切片
dependencies:
  - type: blocks
    depends_on_id: sl-deadbeef

工作流

0) 调用门 + 模式选择

  1. 确认显式调用。
  2. 确定模式(推断;不需要显式标志):
    • 如果用户明确要求“生成”/“(重新)构建”切片:模式=generate
    • 如果用户明确要求“下一个切片”/“我应该做什么”:模式=next
    • 否则模式=auto
  3. 如果模式需要计划路径并提供,读取计划文件。

1) 确保 + 验证 SLICES.md

  1. 如果SLICES.md不存在:

    • 如果没有计划路径可用,询问人类。
    • 否则创建SLICES.md,包括头部元数据和空# 切片部分。
  2. 验证SLICES.md(结构 + 语义)。将失败视为:

    • 硬无效(必须在下一个模式继续之前修复)。
    • 警告(可以继续,但打印警告)。

    硬无效检查:

    • 头部:有schema_version
    • 可解析性:每个切片部分包含恰好一个有效的YAML对象(映射)。
    • 必需键:每个切片至少id,title,status,priority,issue_type
    • 优先级合理性:priority是0…4的整数。
    • 唯一性:切片ID唯一。
    • 状态合理性:状态在允许集中。
    • 依赖类型合理性:依赖typeblocks|tracks|related之一。
    • 引用性:每个dependencies[*].depends_on_id引用现有切片。
    • 史诗引用性:如果parent_id存在,它引用现有切片。
    • 进行中分配者:每个status: in_progress切片有非空assignee
    • 进行中唯一性:每个assignee最多一个切片有status: in_progress
    • 进行中就绪性:in_progress切片没有未满足的blocks依赖。
    • 依赖合理性:blocks边是无环的(拓扑排序/DFS;如果不确定,询问)。

    警告检查:

    • status: blocked但没有未满足的blocks依赖(自动翻转为open)。
    • status: open但有未满足的blocks依赖(推荐切换为blocked)。
    • status: closed但有未满足的blocks依赖(可能是簿记错误)。
    • 叶子切片缺少verification或有意义的接受标准。

    规范化 + 自动修复(与$select重叠):

    • 在硬失败前应用确定性规范化:
      1. ID规范化 + 别名:修剪/小写ID和depends_on_id,去掉前导#,并在明确时映射唯一数字后缀别名。
      2. 状态令牌规范化:将in progress, in-progress, 和in_progress视为等效;写回规范in_progress
      3. 安全状态漂移修复:保持自动翻转blocked -> open当没有未满足的blocks依赖时。
    • 规范化后,未解决的未知依赖ID保持硬无效。
    • 将应用的修复记录为auto_fix键,用于下一个模式输出。

    歧义护栏:

    • 如果验证失败需要人类意图(例如,in_progress切片缺少assignee,或同一assignee有多个in_progress切片),询问人类如何解决后再修复。
  3. 如果验证失败:

    • 切换到模式=generate(自动修复),并(重新)读取计划(如果可用)。
    • 在写入修复的SLICES.md后停止;不选择/标记任何切片in_progress
  4. 如果模式=autoSLICES.md包含零个切片记录:

    • 切换到模式=generate,并读取计划(如果提供)。
    • 在写入SLICES.md后停止。

派生集(尽力而为):

  • 叶子 vs 史诗:史诗如果issue_type=epic或任何切片有parent_id指向它。
  • 被阻止集:任何blocks依赖到非closed切片。
  • 准备就绪工作集:status in {open}且没有阻止依赖且非史诗。
  • 准备就绪执行集:准备就绪工作且满足可PR叶子标准如下。
  • 解锁候选:被阻止叶子切片按同一风险层内最高解锁影响排名。

定义“可PR叶子”为:

  • 足够小以单个PR,
  • 清晰的接受标准,
  • verification(或显式验证信号在acceptance_criteria内),
  • 包括subtasks(清单)或显然是单步。

2) 生成模式:创建/修复DAG

生成模式要么创建初始DAG,要么修复无效DAG。

如果SLICES.md没有切片记录(或正在重建):

  1. 从计划提取主要工作流、里程碑、风险和隐含前提。
  2. 按工作流创建史诗。
  3. 创建解锁并行工作的契约切片(API/模式/接口决策)。
  4. 创建实现切片和至少一个检查点/集成切片每个工作流。
  5. 对每个切片,添加subtasks(2-10项)和至少一个verification信号。
  6. 连线依赖:
    • blocks:仅硬前提(消费切片无法安全启动)。
    • tracks:软排序/“如果可能先做这个”。
    • related:仅信息关系。
  7. 在生成可用DAG后停止(不在第一遍详尽阐述每个切片)。

生成模式不标记任何切片in_progress

依赖识别启发式:

  • 契约阻止消耗它们的实现(API/模式/CLI/接口决策)。
  • 数据模型/迁移阻止任何读取/写入受影响数据的。
  • 基础设施/配置(环境变量、密钥、数据库设置、CI管道)阻止运行时/集成切片。
  • 检查点/集成切片通常track多个实现;它们很少block它们。
  • 如果依赖不确定并会成为blocks边,在添加前询问人类。

3) 下一个模式:选择下一个切片执行

如果有零个切片记录:

  • 报告:未找到切片;使用计划路径运行生成模式的切片。

确定self_assignee(协调器ID):

  • 优先使用SLICES.md头部中的default_assignee(如果存在)。
  • 否则从调用上下文推断;如果未知,询问人类。

如果已经有切片status: in_progressassignee: <self_assignee>

  • 返回该切片(不选取新切片)。

否则,从准备就绪执行集中选择下一个切片,使用以下准则。

如果准备就绪执行集为空但准备就绪工作集非空,报告切片存在但未充分指定(缺少verification/接受)并推荐运行生成模式以丰富它们。

如果准备就绪执行集为空且存在被阻止叶子切片,返回顶部解锁推荐(不标记它in_progress)并识别必须先关闭的缺失前提切片。

选择准则(改编自select):

  • 功能优先:如果任何就绪切片是issue_type=feature,评估所有就绪功能优先。
  • 类型顺序(回退):task > bug > feature > chore > epic > docs > question
  • 优先级:0 > 1 > 2 > 3 > 4。
  • 风险:迁移、认证/安全、基础设施、数据丢失/一致性、破坏API/CLI、性能回归、模糊接受。
  • 难度:模糊范围、多个子系统、未知依赖、沉重验证。
  • 影响半径:广泛使用的模块、共享配置、CI/构建管道、核心用户路径。
  • 并行性影响(与风险平衡):当风险在同一层时,偏好解锁更多被阻止切片或建立契约/检查点的切片。
  • 软依赖:如果就绪切片tracks/relates另一个就绪切片,应用软惩罚并偏好被跟踪优先项。
  • 平局打破:优先级 -> 最强信号 -> 文件顺序最早。

评分笔记(轻量):

  • 基础分数来自风险/难度/影响/优先级。
  • 并行性微调(仅在同一风险层内应用):
    • 角色:契约/检查点 +2;集成 +1;实现 +0。
    • 解锁计数:+1每个解锁的被阻止切片(上限+3)。
    • 软依赖:-2如果它tracks/relates另一个就绪切片;0否则。

就绪门:

  • 从不选择执行切片如果它有缺失前提。
  • 下一个模式非创造性:不在选择时添加新切片或依赖。
  • 如果选择表面缺失决策/契约或模糊前提,切换到生成模式以更新DAG并在写入SLICES.md后停止(不标记任何切片in_progress)。

4) 更新SLICES.md

如果模式=next(或自动选择下一个):

  1. 标记所选切片status: in_progress
  2. 设置assignee: <self_assignee>in_progress需要)。
  3. 不重写无关切片;应用尽可能小的编辑。

如果在验证期间识别出任何安全规范化编辑(例如,自动翻转blocked -> open当没有blocks依赖时),应用它们且差异最小。

如果模式=generate(或自动选择生成):

  1. 如果现有切片太大或多PR,分割为2-6个子切片。
  2. 确保每个叶子切片有subtasksverification
  3. 可能时用最小差异更新SLICES.md;如果文件无效/不可解析,重新生成# 切片部分并保留任何未知内容在# 附录(遗留)部分。

5) 全局审查(快速)

在任何写入后:

  • 审计本地依赖子图以获取并行性;如果大多线性,重构为工作流+契约+连接点。
  • 确保blocks边仅是真正前提。
  • 确保每个叶子切片独立可PR且有接受+验证(+必要时subtasks)。
  • 运行审查者通过以重叠间隙从$select:未解决的未知依赖、循环风险、以及可能近期叶子工作缺少验证。

输出

  • 如果模式=generate:打印生成切片: <n>并列出新/更新切片ID。
  • 如果模式=generate(包括自动修复):指示人类审查SLICES.md并稍后重新运行切片以选择工作。
  • 如果模式=next:打印下一个切片: <id> - <标题>并包括所选切片YAML完整内容。
  • 如果模式=next:包括紧凑选择跟踪,含counts, pick, next2, warnings, 和auto_fix
  • 如果没有准备就绪工作项存在,报告原因(所有closed,或剩余项blocked)并在需要时询问针对性问题。
  • 如果没有准备就绪工作项存在但存在被阻止叶子切片,也打印顶部解锁器: <id> - <标题>并前提ID。

示例

最小SLICES.md骨架(可移植;无计划引用需要):

---
schema_version: 1
---

# 切片

## 后端工作流 (sl-0a1b2c3d)
```yaml
id: sl-0a1b2c3d
title: "后端工作流"
status: open
priority: 2
issue_type: epic
description: |
  后端工作的组织史诗。
acceptance_criteria: |
  - 所有子切片关闭。
verification: |
  - 审查:sl-0a1b2c3d的所有子项关闭。
subtasks: []
notes: |
  工作流: 后端
  角色: 检查点
dependencies: []
```

## 后端API:认证契约 (sl-1a2b3c4d)
```yaml
id: sl-1a2b3c4d
parent_id: sl-0a1b2c3d
title: "后端API:认证契约"
status: open
priority: 1
issue_type: task
description: |
  决定并记录认证API表面以便其他工作可以继续进行。
acceptance_criteria: |
  - 记录端点(请求/响应)包括错误形状。
  - 定义令牌/会话生命周期。
verification: |
  - 文档:打开规范并确认端点+错误形状存在。
subtasks:
  - 草拟端点列表和认证模型。
  - 指定请求/响应JSON形状。
  - 指定错误形状和令牌/会话生命周期。
notes: |
  工作流: 后端API
  角色: 契约
dependencies: []
```

## 后端:实现认证端点 (sl-2b3c4d5e)
```yaml
id: sl-2b3c4d5e
parent_id: sl-0a1b2c3d
title: "后端:实现认证端点"
status: open
priority: 2
issue_type: feature
description: |
  按照契约实现认证端点。
acceptance_criteria: |
  - 端点实现并返回预期响应。
verification: |
  - 运行: <测试命令>
subtasks:
  - 实现路由+处理器。
  - 添加测试。
notes: |
  工作流: 后端
  角色: 实现
dependencies:
  - type: blocks
    depends_on_id: sl-1a2b3c4d
```