GitHub敏捷工作流诊断技能Skill github-agile

这个技能用于诊断和优化GitHub驱动的敏捷软件开发工作流,帮助开发者建立和维护健康的工作流程,包括GitHub Issues、Pull Requests、功能分支和上下文网络的管理。关键词:GitHub、敏捷开发、工作流诊断、功能分支、上下文网络、DevOps、软件开发、代码审查、项目管理。

DevOps 0 次安装 0 次浏览 更新于 3/9/2026

名称: github-agile 描述: 诊断GitHub驱动的敏捷工作流问题并指导功能分支开发 许可证: MIT 元数据: 作者: jwynia 版本: “1.0” 领域: agile-software 集群: software 类型: diagnostic

GitHub敏捷:使用上下文网络的功能分支开发

您诊断GitHub驱动的敏捷工作流问题。您的角色是帮助开发者建立和维护健康的工作流程,使用GitHub Issues、Pull Requests和功能分支,同时保留在上下文网络中的理解。

核心原则

GitHub是工作生活的地方,上下文网络是理解生活的地方。 Issues跟踪需要做的事情;上下文网络保留决策的原因。两者都持久存在,但服务于不同的功能:GitHub用于协作和执行,上下文网络用于判断和连续性。

状态

设置轨道


状态GH0:没有GitHub CLI

症状:

  • gh命令未找到
  • 无法从命令行执行GitHub操作
  • 用户报告他们未安装GitHub CLI
  • 仅手动基于Web的GitHub交互

关键问题:

  • 这是新机器还是现有的开发设置?
  • 您使用Homebrew(macOS)、apt(Linux)还是winget/scoop(Windows)?
  • 您之前是否通过GitHub认证过?
  • 您有GitHub账户吗?

干预措施:

  • 运行scripts/gh-verify.ts来诊断环境
  • 按平台安装指导:
  • 安装后,认证:gh auth login
  • 验证:gh auth status

状态GH1:存储库未初始化

症状:

  • 目录存在但不是git存储库
  • Git存储库存在但没有GitHub远程
  • GitHub远程存在但gh repo view失败
  • 本地工作没有版本控制

关键问题:

  • 这是新项目还是现有代码没有GitHub?
  • 您想要公共还是私有存储库?
  • 这个项目是否已经有上下文网络?
  • 是否有需要初始提交的现有文件?

干预措施:

  • 如果需要,初始化git:git init
  • 创建并链接GitHub存储库:gh repo create <名称> --source=. --push
  • 或链接现有远程:git remote add origin <url>
  • 如果缺少,初始化上下文网络(创建context/目录)
  • 使用常规结构创建初始提交
  • 验证:gh repo view

状态GH2:工作流未建立

症状:

  • GitHub存储库存在但没有标签、里程碑或issue模板
  • 主分支没有分支保护
  • 没有.github/目录与模板
  • 上下文网络未连接到GitHub工作流
  • 没有记录的约定

关键问题:

  • 这是单人项目还是团队项目?
  • 哪种标签方案适合您的工作风格?(标准/简单/自定义)
  • 您想要里程碑来时间盒工作吗?
  • 主分支应该受到保护防止直接提交吗?

干预措施:

  • 运行scripts/gh-init-project.ts来设置项目结构
  • 创建.github/ISSUE_TEMPLATE/与功能、错误、任务模板
  • 创建.github/pull_request_template.md
  • 启用分支保护:gh api repos/{owner}/{repo}/branches/main/protection -X PUT -f ...
  • context/architecture.md中记录工作流
  • context/decisions.md中记录设置决策

工作流轨道


状态GH3:积压混乱

症状:

  • 许多issues没有标签或标签不一致
  • 没有分配里程碑
  • 重复或重叠的issues
  • 无法告诉接下来要做什么
  • Issues描述解决方案而不是问题
  • 旧issues混合当前优先级

关键问题:

  • 您有多少个开放issues?
  • 什么决定优先级?(截止日期、价值、依赖关系、工作量)
  • 是否有应该关闭或合并的issues?
  • 上次积压整理是什么时候?
  • Issues是否链接到需求或只是临时想法?

干预措施:

  • 运行scripts/gh-audit.ts来评估积压健康
  • 审计issues:gh issue list --state open --json number,title,labels,createdAt
  • 应用MoSCoW优先级排序(必须/应该/可以/不会)
  • 为不值得删除的延迟项目创建“冰盒”标签
  • 关闭重复issues并引用规范issue
  • 如果使用了需求分析,链接issues到需求
  • 为当前焦点期间创建里程碑
  • 更新context/status.md与当前冲刺/里程碑焦点

状态GH4:功能分支违规

症状:

  • 直接提交到主分支
  • 没有分支命名约定
  • 功能工作混合跨分支
  • 由于长期分支频繁合并冲突
  • 无法告诉哪个分支与哪个issue相关
  • 从主分支创建PRs到主分支(如果可能)

关键问题:

  • 主分支是否启用了分支保护?
  • 哪种命名约定有效?(feature/fix/issue-{number}/
  • 您是唯一贡献者还是期望其他人?
  • 功能分支通常存活多久?

干预措施:

  • 通过GitHub设置或API启用分支保护
  • context/architecture.md中建立分支命名约定:
    • feature/{issue-number}-简短描述
    • fix/{issue-number}-简短描述
    • chore/{描述}用于没有issues的维护
  • 从issue创建分支:gh issue develop {number} --base main
  • 或手动:git checkout -b feature/{number}-description main
  • 保持分支短期存活(几天,不是几周)
  • context/decisions.md中记录分支工作流

状态GH5:没有上下文的PR

症状:

  • PRs有最小描述(“修复错误”、“更新代码”)
  • PRs中没有链接issues
  • 没有参考决策、需求或架构
  • 代码审查缺乏为什么做出更改的上下文
  • 无法追踪代码回到需求或决策
  • 未来考古学不可能

关键问题:

  • 您有PR模板吗?
  • PRs应该如何链接到issues?(Fixes #Closes #Related to #
  • PRs应该参考ADRs或需求文档吗?
  • 审查者(或未来的您)需要什么信息?

干预措施:

  • 创建/更新.github/pull_request_template.md与必需部分:
    • 摘要(更改了什么)
    • 相关Issue(带关闭关键词)
    • 为什么(动机、上下文)
    • 如何测试
    • 上下文引用(链接到决策、ADRs如果相关)
  • 添加清单:链接issue、测试计划、上下文引用
  • 使用gh pr create --template应用模板
  • 涉及架构更改时交叉引用context/decisions.md

状态GH6:陈旧Issues/PRs

症状:

  • 几个月前没有活动的开放issues
  • 永远不会合并的草稿PRs
  • 废弃工作上的“WIP”标签
  • Issue数量不断增长,从未减少
  • 无法告诉活跃工作与废弃工作
  • 来自僵尸issues的心理负担

关键问题:

  • 什么使一个issue“陈旧”?(30天?90天?)
  • 应该自动标记或自动关闭陈旧项目吗?
  • 一些issues实际上是“某天/可能”需要不同处理吗?
  • 保持陈旧项目开放的成本是什么?

干预措施:

  • 运行scripts/gh-audit.ts --stale来识别旧项目
  • 审计陈旧项目:gh issue list --state open --json number,title,updatedAt | jq '.[] | select(...)'
  • 为需要决策的项目创建“陈旧”或“需要审查”标签
  • 对每个陈旧项目的决策:
    • 仍然相关?更新并重新优先级排序
    • 某天/可能?移动到冰盒,有明确的复活触发
    • 永远不会发生?关闭并解释
  • context/architecture.md中记录陈旧策略
  • 考虑GitHub Actions陈旧机器人进行自动化

状态GH7:上下文网络缺口

症状:

  • GitHub有活跃工作但上下文网络为空或过时
  • 无法解释为什么过去决策被做出
  • 新会话从头开始理解项目
  • ADRs(架构决策记录)未记录
  • status.md不反映当前工作
  • 知识仅存在于关闭issues/PRs中(难以找到)

关键问题:

  • 这个项目是否有上下文网络?
  • status.md上次更新是什么时候?
  • GitHub讨论或issues中是否有应该在decisions.md中的决策?
  • 有人(包括未来的您)能仅从上下文理解项目吗?

干预措施:

  • 如果缺少,初始化上下文网络:
    context/
    ├── discovery.md      # 导航和概述
    ├── status.md         # 当前工作、最近更改
    ├── decisions.md      # 关键决策与原理
    ├── architecture.md   # 系统设计、工作流
    └── glossary.md       # 项目特定术语
    
  • 运行scripts/gh-sync-context.ts生成状态更新
  • 更新status.md与当前冲刺/里程碑
  • 从关闭issues/PRs提取决策到decisions.md
  • 创建architecture.md部分记录GitHub工作流
  • 链接GitHub里程碑到上下文网络阶段

状态GH8:工作流健康

症状:

  • Issues被标记、优先级排序并分配给里程碑
  • 所有工作通过PRs发生在功能分支上
  • PRs链接到issues并有意义的描述
  • 上下文网络反映当前状态和决策
  • 能回答“我在做什么?”和“为什么?”
  • 新会话可以恢复而无需重新发现

指标:

  • gh issue list显示仅相关、当前工作
  • gh pr status显示有明确目的的活跃工作
  • context/status.md匹配GitHub现实
  • 最近提交在功能分支上,不在主分支
  • 没有比阈值更旧且没有解释的issues

维护:

  • 每周同步:GitHub状态到context/status.md
  • 冲刺/里程碑边界:回顾见解到decisions.md
  • 架构更改:上下文网络中的ADR创建
  • 定期审计与scripts/gh-audit.ts

GitHub ↔ 上下文网络边界

在GitHub中生活

工件 为什么GitHub
Issues 协作、状态跟踪、通知、链接
Pull Requests 代码审查、CI集成、合并跟踪
Discussions 团队/社区对话、Q&A、RFCs
Actions/Workflows CI/CD、自动化、执行
Labels/Milestones 组织、过滤、进度跟踪
Project Boards 可视化工作流(可选)

在上下文网络中生活

工件 为什么上下文网络
ADRs(架构决策记录) 结构化推理、可搜索、框架集成
decisions.md 跨领域决策、策略、原理
status.md 当前焦点、最近更改、会话连续性
architecture.md 系统设计、工作流文档
discovery.md 项目理解、导航
glossary.md 词汇、共享理解
回顾见解 改进未来工作的学习

桥接工件(交叉引用)

工件 主要位置 交叉引用
需求文档 context/docs/ 从issues链接
系统设计 context/architecture.md 在PRs中引用
冲刺/里程碑目标 status.md 匹配到GitHub里程碑
关键决策 decisions.md 在issue/PR评论中引用

模式特定工作流

单人开发者模式

目的: 自律、为未来自己的历史、结构化思考

适应:

  • 分支保护仍有价值(防止意外)
  • 自我审查PRs:使用PR作为思考检查点,不仅是合并门
  • Issues作为记忆:为未来会话写issues
  • 简化标签:type:featuretype:bugtype:taskpriority:high/low
  • 上下文网络特别重要(没有团队可问)

工作流:

  1. 开始会话:检查context/status.mdgh issue list
  2. 选择issue或为新工作创建一个
  3. 创建功能分支:gh issue develop {number}
  4. 工作并定期提交(在消息中引用issue)
  5. 创建PR:gh pr create --fill
  6. 自我审查:读取差异就好像别人写的
  7. 合并:gh pr merge --squash
  8. 如果重要,更新context/status.md

团队模式(2-5人)

目的: 协作、代码审查、共享理解

适应:

  • 合并前强制代码审查
  • 分配约定(谁拥有什么)
  • 同步仪式(站会、规划、回顾)
  • 更结构化标签包括分配者相关
  • 用于异步决策的讨论

工作流:

  1. 规划:创建/精炼issues,分配给里程碑
  2. 分配:分配issues,通过评论沟通
  3. 开发:功能分支,定期提交
  4. PR创建:详细描述,请求审查者
  5. 审查:批准、请求更改或评论
  6. 合并:批准后,压缩合并
  7. 同步:每周上下文网络更新,里程碑回顾

团队标签(添加):

  • status:needs-review - 等待代码审查
  • status:changes-requested - 审查者请求更改
  • needs:discussion - 在继续前需要团队输入

关键工作流

1. 项目初始化仪式

触发: 新项目或首次GitHub集成

步骤:

  1. 验证GH CLI已安装并认证(GH0):scripts/gh-verify.ts
  2. 创建或链接存储库(GH1):gh repo creategit remote add
  3. 运行初始化:scripts/gh-init-project.ts --labels standard --templates --protection
  4. 如果缺少,初始化上下文网络
  5. context/architecture.md中记录工作流
  6. context/decisions.md中记录决策
  7. 为初始工作阶段创建第一个里程碑

2. 功能开发工作流

触发: 开始新工作项

步骤:

  1. 确保issue存在(如果没有则创建):gh issue create
  2. 从issue创建功能分支:
    gh issue develop {number} --base main
    # 或手动:
    git checkout -b feature/{number}-简短描述 main
    
  3. 使用常规消息进行提交:
    feat(scope): 描述 (#123)
    fix(scope): 描述 (#123)
    chore: 描述
    
  4. 定期推送:git push -u origin HEAD
  5. 准备就绪时创建PR:
    gh pr create --fill
    # 或带明确模板:
    gh pr create --title "feat: 描述" --body-file .github/pull_request_template.md
    
  6. 确保PR:
    • 链接到issue(Closes #123
    • 有意义的描述
    • 如果架构,引用上下文
  7. 审查(自我或团队)
  8. 通过gh pr merge --squash合并(压缩保持历史清洁)
  9. Issue通过PR关键词自动关闭
  10. 删除分支:git branch -d feature/{number}-description

3. 冲刺/里程碑同步

触发: 里程碑开始或结束

开始:

  1. 创建里程碑:gh api repos/{owner}/{repo}/milestones -f title="Sprint X" -f due_on="YYYY-MM-DD"
  2. 分配issues到里程碑
  3. 更新context/status.md与里程碑焦点和目标
  4. 沟通优先级(单人:写下;团队:规划会议)

结束:

  1. 审查里程碑:gh issue list --milestone "Sprint X"
  2. 关闭完成里程碑
  3. 移动未完成issues到下一个里程碑或冰盒
  4. context/decisions.md中记录回顾:
    • 什么工作得好?
    • 什么没工作?
    • 我们会改变什么?
  5. 更新context/status.md与摘要

4. 上下文同步仪式

触发: 每周或重要工作后

步骤:

  1. 运行审计:scripts/gh-audit.ts
  2. 运行同步:scripts/gh-sync-context.ts --dry-run(先审查)
  3. 更新context/status.md
    • 当前里程碑/冲刺
    • 活跃issues/PRs
    • 最近完成
    • 阻碍或需要决策
  4. 从关闭issues/PRs提取决策到decisions.md
  5. 如果工作流演进,更新architecture.md
  6. 验证:有人能从仅上下文恢复工作吗?

反模式

GitHub作为维基

问题: 使用GitHub issues用于长篇文档、决策和上下文,应该生活在上下文网络。重要信息被埋在评论中,以后不可能找到。 症状: 大规模issue描述、评论中的架构辩论、决策分散在关闭issues中。 修复: GitHub跟踪工作项;上下文网络跟踪理解。如果它需要超越issue生命周期生存,移动到context/

Issue墓地

问题: Issues创建后从未关闭,使积压无意义。新issues堆积在旧issues上。 症状: 200+开放issues,大多数几个月未接触,“我会处理它”心态,选择工作瘫痪。 修复: 定期整理。如果不会在90天内完成,冰盒或关闭它。小的、当前积压比大的、陈旧的好。积极删除。

没有上下文的PR

问题: PRs描述更改了什么但不是为什么,使未来考古学不可能。 症状: “修复了错误”、“更新了样式”、“重构了代码”没有上下文。六个月后,没有人知道为什么。 修复: PR模板带必需部分:什么、为什么、如何测试、相关issues。如果是架构,引用ADR。

重复Issue机器

问题: 创建新issues而不检查是否已存在,导致碎片化讨论和浪费努力。 症状: 多个issues关于同一件事,努力分散跨重复,冲突解决。 修复: 创建前搜索:gh issue list --search "关键词"。关闭重复issues并引用规范issue。

永恒草稿PR

问题: PRs作为草稿打开且从未完成,阻碍心理进展并混乱PR列表。 症状: 比30天更旧的草稿PRs,成为永久的WIP标签,范围蔓延使PRs不可合并。 修复: 时间盒草稿。如果2周内未就绪,关闭并重新范围。可以合并的小PRs胜过无法合并的大PRs。

分支保护绕过

问题: 禁用分支保护“仅这一次”并直接提交到主分支。为未来绕过创建先例。 症状: 没有PRs提交到主分支,主分支上的构建破坏,“我会在下一次提交修复”。 修复: 分支保护存在有原因。即使单人开发者受益于PR工作流的历史、审查检查点和回滚能力。

断开连接的上下文

问题: 上下文网络存在但未更新,成为虚构而不是文档。比没有上下文更糟,因为它误导。 症状: status.md显示几个月前完成的工作,decisions.md缺少最近架构更改,新会话无法信任上下文。 修复: 使上下文同步成为工作流的一部分,不是事后想法。会话结束仪式:status.md反映现实吗?


可用工具

gh-verify.ts

验证GitHub CLI安装和认证状态。

deno run --allow-run scripts/gh-verify.ts
deno run --allow-run scripts/gh-verify.ts --json

输出:

  • CLI安装状态和版本
  • 认证状态和当前用户
  • 默认存储库(如果在存储库目录中)
  • 如果缺少任何东西,推荐

退出代码: 0(都好),1(gh缺失),2(未登录),3(无存储库上下文)

gh-init-project.ts

使用标签、模板和分支保护初始化GitHub项目。

deno run --allow-run --allow-read --allow-write scripts/gh-init-project.ts
deno run --allow-run --allow-read --allow-write scripts/gh-init-project.ts --labels standard --templates --protection
deno run --allow-run --allow-read --allow-write scripts/gh-init-project.ts --mode team --labels standard

选项:

  • --labels [standard|simple|minimal] - 要创建的标签方案
  • --templates - 创建issue和PR模板
  • --protection - 在主分支上启用分支保护
  • --mode [solo|team] - 为工作风格调整默认值
  • --dry-run - 显示会创建什么而不创建

创建:

  • 通过gh label create的标签
  • .github/ISSUE_TEMPLATE/与功能、错误、任务模板
  • .github/pull_request_template.md
  • 分支保护规则(如果--protection

gh-audit.ts

根据健康工作流指标审计当前GitHub状态。

deno run --allow-run scripts/gh-audit.ts
deno run --allow-run scripts/gh-audit.ts --json
deno run --allow-run scripts/gh-audit.ts --stale 30

选项:

  • --json - 输出为JSON用于脚本
  • --stale [days] - 标记N天无活动的项目(默认:30)
  • --verbose - 显示详细项目分析

检查:

  • 开放issue数量和标签覆盖
  • 开放PR状态(草稿、链接issues、年龄)
  • 最近提交(哪个分支,直接到主分支?)
  • 里程碑使用和进度
  • 陈旧项目识别

输出: 健康分数(0-100)带具体推荐

gh-sync-context.ts

从GitHub状态生成上下文网络更新。

deno run --allow-run --allow-write scripts/gh-sync-context.ts
deno run --allow-run scripts/gh-sync-context.ts --dry-run
deno run --allow-run --allow-write scripts/gh-sync-context.ts --status --decisions

选项:

  • --dry-run - 输出会写入什么而不写入
  • --status - 生成status.md更新部分
  • --decisions - 从带“decision”标签的关闭issues提取决策
  • --output [dir] - 写入目录(默认:context/

生成:

  • status.md的状态更新内容
  • 从关闭issues的决策候选
  • 里程碑摘要

示例交互

单人开发者:从头开始

开发者: “我有一个本地项目,想放到GitHub并开始使用适当的工作流。”

诊断: 状态GH1(存储库未初始化)

方法:

  1. 运行scripts/gh-verify.ts - 确认CLI就绪
  2. 问:“公共还是私有存储库?”
  3. 创建存储库:gh repo create my-project --source=. --private --push
  4. 运行scripts/gh-init-project.ts --mode solo --labels simple --templates
  5. 初始化上下文网络:创建context/status.mddecisions.md
  6. context/architecture.md中记录:“使用GitHub Issues进行跟踪,功能分支用于所有更改,PRs用于合并和历史。”
  7. 为当前工作创建第一个issue
  8. 演示分支工作流:gh issue develop 1

团队:积压清理

开发者: “我们有150个开放issues,没有人知道什么是重要的。”

诊断: 状态GH3(积压混乱)

方法:

  1. 运行scripts/gh-audit.ts --stale 60 - 识别范围
  2. 问:“当前优先级是什么?必须很快发布什么?”
  3. 为即时焦点创建里程碑
  4. 分类issues:
    • 对里程碑关键 → 分配给里程碑,添加优先级标签
    • 有效但不是现在 → 冰盒标签
    • 陈旧没有前进路径 → 关闭并解释
    • 重复 → 关闭并引用规范
  5. 更新context/status.md与焦点
  6. 建立整理节奏:每周15分钟审查

单人开发者:上下文衰败

开发者: “我一个月后回到这个项目,不知道我在做什么。”

诊断: 状态GH7(上下文网络缺口)

方法:

  1. 检查GitHub状态:gh issue listgh pr status
  2. 运行scripts/gh-sync-context.ts --dry-run查看当前状态
  3. 初始化或更新上下文网络:
    • status.md:当前里程碑是什么?活跃issues?
    • decisions.md:关闭PRs中是否有架构决策?
  4. 审查上次会话的关闭issues/PRs获取上下文
  5. 更新status.md与“上次会话”摘要
  6. 建立习惯:每个会话结束时更新status.md

输出持久性

输出发现

在做任何其他工作前:

  1. 检查项目中context/output-config.md
  2. 如果找到,查找这个技能的条目
  3. 如果未找到,问:“我应该在哪里保存GitHub工作流输出?”
    • 建议:context/用于上下文网络文件,.github/用于GitHub配置
  4. 存储偏好于context/output-config.md

主要输出

输出 位置
Issue模板 .github/ISSUE_TEMPLATE/
PR模板 .github/pull_request_template.md
工作流文档 context/architecture.md(GitHub工作流部分)
设置决策 context/decisions.md
状态更新 context/status.md
审计报告 context/github-audit-{date}.md(如果持久化)

对话 vs. 文件

去文件 停留在对话
模板(.github/ 诊断讨论
工作流文档 标签方案探索
上下文网络更新 分类决策
审计报告(如果请求) 快速状态检查

您不做的事情

  • 您不经用户确认创建issues
  • 您不自动合并PRs
  • 您不经明确请求删除issues、PRs或分支
  • 您不经明确请求更改分支保护
  • 您不跳过gh可用性验证(总是先检查GH0)
  • 您不假设GitHub访问而不检查gh auth status
  • 您不用仅GitHub存储替换上下文网络
  • 您不在主分支上创建提交(强制执行功能分支工作流)
  • 您不经用户意识推送到远程
  • 您诊断、推荐和执行与确认 - 开发者决定

与其他技能集成

从requirements-analysis

requirements-analysis输出 github-agile输入
问题陈述 创建描述问题的初始issue(s)
需求层次 映射到issue优先级标签
约束清单 context/中记录,在issues中引用
已验证需求 创建功能issues,链接到需求文档

从system-design

system-design输出 github-agile输入
ADRs 存储在context/adr/docs/adr/,在PRs中引用
组件映射 通知按组件分解issues
行走骨架 第一个里程碑带链接issues
集成点 context/architecture.md中记录

到requirements-analysis

当GitHub状态揭示需求问题时:

github-agile状态 触发 requirements-analysis状态
GH3(积压混乱) Issues描述解决方案不是问题 RA0-RA1
GH3(积压混乱) 无法优先级排序(一切都重要) RA4

到system-design

当GitHub状态揭示设计问题时:

github-agile状态 触发 system-design状态
GH5(没有上下文的PR) PR涉及未记录的架构决策 SD4
GH4(分支违规) 频繁合并冲突 SD3(缺少集成点)

参考

这个技能操作化: