Skip to content

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Issue Planner

Issue Planner 把一句“我要完成什么”,变成一条完整、可执行、没有被悄悄抢占的 GitHub Issue 链。

它不是 Issue 生成器,也不直接写代码。它负责在工作开始前回答这些问题:

  • 为了完成目标,到底需要哪些 Issue?
  • 现有 Issue 是否完整覆盖目标?
  • 哪些 Issue 缺内容、缺决策或缺依赖?
  • 哪些任务已经有人在做?我现在安全地能推进到哪里?
  • 用户确认开始后,哪些 Issue 可以被领取并标记为处理中?

它负责什么

角色 责任
Issue Planner 理解目标、搜索 Issue、检查覆盖、构建依赖链、检查就绪状态、识别占用冲突、协调领取
Issue Creator 编写、拆分并创建确认缺失的 Issue;创建前仍需要用户授权
架构决策者 决定系统契约、数据隔离、安全边界、迁移策略等长期选择
Issue-to-PR 根据已经就绪的 Issue 实现代码并创建 PR

默认的规划模式是只读的。只有用户确认了准确的变更预览后,Issue Planner 才会修改负责人或项目状态。

Case 1:从一句目标找到完整 Issue 链

用户说:

我要上线移动端结账,帮我找出完整的 Issue 链。

仓库里已经有:

  • #101 定义结账 API
  • #102 接入移动端支付 SDK,依赖 #101
  • #103 完成结账页面,依赖 #102
  • #104 增加端到端回归测试,依赖 #103

Issue Planner 会给出:

覆盖结论
完整 — API、支付接入、页面和回归验证均有 Issue 覆盖。

Issue 链
#101 -> #102 -> #103 -> #104

就绪状态
#101 READY
#102 READY
#103 READY
#104 READY

下一步
从 #101 开始;当前只是规划,没有修改负责人或状态。

关键点:它不会因为用户只提到了 #103,就假设 #103 足以完成整个目标。

Case 2:发现普通缺口,交给 Issue Creator

用户说:

我要让管理员可以批量禁用用户。

搜索结果只有:

  • #201 批量禁用 API
  • #202 管理后台批量操作界面

但合规要求规定所有批量禁用操作必须写入审计日志,而现有 Issue 都没覆盖。

Issue Planner 会判断:

覆盖结论
缺失 — 审计日志没有对应 Issue。

缺口或决策
需要新增一个“记录批量禁用审计日志”的普通 Issue。

下一步
询问是否授权调用 Issue Creator 创建该 Issue。

只有用户授权后,它才会暂停规划、调用 Issue Creator 创建 Issue,然后重新读取仓库状态并规划完整链路。它不会自己偷偷执行 gh issue create。

Case 3:遇到架构决策,不替团队拍脑袋

用户说:

我要支持企业租户导出全部业务数据。

分析时发现团队还没有决定:导出任务使用共享队列,还是每个租户使用隔离队列。这个选择会改变安全边界、成本和后续 Issue 集合。

Issue Planner 会返回:

覆盖结论
等待决策 — 队列隔离方式尚未确定,会改变所需工作。

缺口或决策
由已配置的架构决策者确认共享队列或租户隔离队列,并记录决定。

下一步
决策记录完成后重新运行 Issue Planner。

它不会自行选择一种架构,再把这个未经确认的选择写进 Issue。

Case 4:发现占用冲突,只给出安全推进边界

已确认的链路是:

#301 结账基础接口
 ├─> #302 风控校验(@alice 处理中) -> #303 支付提交
 └─> #304 埋点统计(无人领取)

如果当前用户想开始整条链,Issue Planner 会报告:

占用冲突
当前可做: #301,完成后可做 #304
阻塞点: #302 — 处理中,负责人 @alice
受阻下游: #303
选择: 等待 #302 完成,或只领取已确认的不冲突工作

它不会移除 @alice、抢占 #302,也不会把依赖 #302 的 #303 伪装成“已经开始”。

Case 5:开始工作前先预览,再安全领取

用户在看过完整链后说:

开始做这条链。

Issue Planner 会先展示准确的变更:

Issue 当前负责人/状态 计划负责人/状态
#401 无 / Todo @current-user / 处理中
#402 @current-user / Todo @current-user / 处理中

用户确认后,它会立即重新读取状态:

  • #401 无人领取:添加当前用户,并设置仓库已有的“处理中”状态。
  • #402 已分配给当前用户:只更新状态,不重复修改负责人。
  • 如果预检发现任何 Issue 已变化:取消旧授权,重新计算并展示新预览。
  • 如果写入中途失败:停止后续操作,重新读取全部 Issue,分别报告成功、未变化、失败和未尝试项。

它不会凭空创建 in-progress label,也不会把一次宽泛的“开始做”理解为授权修改尚未展示的 Issue。

Case 6:聊天里临时加需求,不塞进当前 PR

执行 #501 时,用户临时补充:

顺便再支持导出 CSV 吧。

如果 CSV 导出改变了原 Issue 的目标或验收范围,Issue Planner 会要求把它记录为新 Issue,或通过仓库明确支持的 Issue 更新流程补充原 Issue,然后重新计算覆盖和链路。

当前 PR 仍以已记录的 Issue 为准。这样以后只看 Issue 和 PR,也能追溯需求为什么出现、在哪个周期被实现。

输出长什么样

每次规划都会用相同的七段结构:

  1. 目标理解
  2. 覆盖结论:完整、部分、缺失、冲突 或 等待决策
  3. Issue 链
  4. 缺口或决策
  5. 就绪状态
  6. 占用与可推进边界
  7. 下一步

规划结果不会包含实现步骤;实现细节由后续的 issue-to-PR 流程根据 Issue 和当前代码决定。

使用示例

使用 $issue-planner:我要完成管理员批量禁用用户,帮我找出完整的 Issue 链。
使用 $issue-planner:检查 #101、#102、#103 是否足以完成移动端结账,并告诉我现在能推进到哪里。
使用 $issue-planner:开始做刚才确认的 Issue 链。

文件结构

issue-planner/
├── SKILL.md
├── agents/
│   └── openai.yaml
└── references/
    ├── planning-workflow.md
    └── start-work.md

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors