名称: github-agile 描述: 诊断GitHub驱动的敏捷工作流问题并指导特性分支开发 许可证: MIT 元数据: 作者: jwynia 版本: “1.0” 领域: 敏捷软件 集群: 软件 类型: 诊断
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以诊断环境 - 按平台提供安装指导:
- macOS:
brew install gh - Linux:
sudo apt install gh或参见https://github.com/cli/cli/blob/trunk/docs/install_linux.md - Windows:
winget install --id GitHub.cli或scoop install gh
- macOS:
- 安装后,认证:
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仓库存在但没有标签、里程碑或问题模板
- 主分支无分支保护
- 无
.github/目录和模板 - 上下文网络未连接到GitHub工作流
- 无文档化约定
关键问题:
- 这是个人项目还是团队项目?
- 哪种标签方案适合您的工作风格?(标准/简单/自定义)
- 您是否希望使用里程碑进行时间盒工作?
- 主分支是否应受保护防止直接提交?
干预措施:
- 运行
scripts/gh-init-project.ts以设置项目结构 - 创建
.github/ISSUE_TEMPLATE/包含特性、错误、任务模板 - 创建
.github/pull_request_template.md - 启用分支保护:
gh api repos/{所有者}/{仓库}/branches/main/protection -X PUT -f ... - 在
context/architecture.md中记录工作流 - 在
context/decisions.md中记录设置决策
工作流轨道
状态GH3:积压混乱
症状:
- 许多问题无标签或标签不一致
- 未分配里程碑
- 重复或重叠问题
- 无法判断下一步该做什么
- 问题描述解决方案而非问题
- 旧问题与当前优先级混合
关键问题:
- 您有多少个开放问题?
- 什么决定优先级?(截止日期、价值、依赖项、工作量)
- 是否有应关闭或合并的问题?
- 上次积压梳理是什么时候?
- 问题是否链接到需求还是仅临时想法?
干预措施:
- 运行
scripts/gh-audit.ts以评估积压健康度 - 审计问题:
gh issue list --state open --json number,title,labels,createdAt - 应用MoSCoW优先级排序(必须/应该/可以/不会)
- 创建“冰盒”标签用于不删除的延迟项
- 关闭重复问题并引用规范问题
- 如果使用需求分析,将问题链接到需求
- 为当前关注期间创建里程碑
- 使用当前冲刺/里程碑焦点更新
context/status.md
状态GH4:特性分支违规
症状:
- 直接提交到主分支
- 无分支命名约定
- 特性工作跨分支混合
- 由于长期分支导致频繁合并冲突
- 无法判断哪个分支与哪个问题相关
- 从主分支到主分支创建PR(如果可能)
关键问题:
- 主分支是否启用了分支保护?
- 哪种命名约定有效?(
特性/、修复/、问题-{编号}/) - 您是唯一贡献者还是期望他人?
- 特性分支通常存在多久?
干预措施:
- 通过GitHub设置或API启用分支保护
- 在
context/architecture.md中建立分支命名约定:特性/{问题编号}-简短描述修复/{问题编号}-简短描述杂项/{描述}用于无需问题的维护
- 从问题创建分支:
gh issue develop {编号} --base main - 或手动:
git checkout -b 特性/{编号}-描述 main - 保持分支短期存在(几天,非几周)
- 在
context/decisions.md中记录分支工作流
状态GH5:无上下文的PR
症状:
- PR描述极少(“修复错误”、“更新代码”)
- PR中无链接问题
- 无引用决策、需求或架构
- 代码评审缺乏更改原因的上下文
- 无法追溯代码到需求或决策
- 未来考古不可能
关键问题:
- 您是否有PR模板?
- PR应如何链接到问题?(
修复 #、关闭 #、相关 #) - PR应引用ADR或需求文档吗?
- 评审者(或未来的您)需要什么信息?
干预措施:
- 创建/更新
.github/pull_request_template.md包含必需部分:- 摘要(更改内容)
- 相关问题(使用关闭关键词)
- 原因(动机、上下文)
- 如何测试
- 上下文引用(链接到决策、ADR如相关)
- 添加检查清单:链接问题、测试计划、上下文引用
- 使用
gh pr create --template应用模板 - 当涉及架构更改时,交叉引用
context/decisions.md
状态GH6:陈旧问题/PR
症状:
- 开放问题几个月无活动
- 草稿PR永远不会合并
- 废弃工作的“WIP”标签
- 问题计数持续增长,从不减少
- 无法区分活跃工作与废弃工作
- 僵尸问题的心理负担
关键问题:
- 什么使问题“陈旧”?(30天?90天?)
- 陈旧项应自动标记或自动关闭吗?
- 某些问题实际是“将来/可能”需要不同处理吗?
- 保持陈旧项开放的成本是什么?
干预措施:
- 运行
scripts/gh-audit.ts --stale以识别旧项 - 审计陈旧项:
gh issue list --state open --json number,title,updatedAt | jq '.[] | select(...)' - 为需要决策的项创建“陈旧”或“需要评审”标签
- 对每个陈旧项做决策:
- 仍相关?更新并重新优先级
- 将来/可能?移至冰盒并明确复活触发条件
- 永远不会发生?关闭并解释
- 在
context/architecture.md中记录陈旧性策略 - 考虑GitHub Actions陈旧机器人自动化
状态GH7:上下文网络间隙
症状:
- GitHub有活跃工作但上下文网络为空或过时
- 无法解释过去决策原因
- 新会话从零开始理解项目
- ADR(架构决策记录)未记录
status.md未反映当前工作- 知识仅存在于封闭问题/PR中(难以找到)
关键问题:
- 此项目是否有上下文网络?
status.md上次更新是什么时候?- 是否有GitHub讨论或问题中的决策应放入
decisions.md? - 有人(包括未来的您)能否仅从上下文理解项目?
干预措施:
- 如果缺失,初始化上下文网络:
context/ ├── discovery.md # 导航和概述 ├── status.md # 当前工作、最近更改 ├── decisions.md # 关键决策及理由 ├── architecture.md # 系统设计、工作流 └── glossary.md # 项目特定术语 - 运行
scripts/gh-sync-context.ts以生成状态更新 - 使用当前冲刺/里程碑更新
status.md - 从封闭问题/PR提取决策到
decisions.md - 创建
architecture.md部分记录GitHub工作流 - 将GitHub里程碑链接到上下文网络阶段
状态GH8:工作流健康
症状:
- 问题已标记、优先级排序并分配到里程碑
- 所有工作在特性分支上通过PR进行
- PR链接到问题并有意义的描述
- 上下文网络反映当前状态和决策
- 能回答“我在做什么?”和“为什么?”
- 新会话可恢复无需重新发现
指标:
gh issue list显示仅相关、当前工作gh pr status显示有明确目的的活跃工作context/status.md匹配GitHub现实- 最近提交在特性分支上,非主分支
- 无问题超过阈值无解释
维护:
- 每周同步:GitHub状态到
context/status.md - 冲刺/里程碑边界:回顾洞察到
decisions.md - 架构更改:在上下文网络中创建ADR
- 定期审计使用
scripts/gh-audit.ts
GitHub ↔ 上下文网络边界
存在于GitHub
| 工件 | 为何GitHub |
|---|---|
| 问题 | 协作、状态跟踪、通知、链接 |
| Pull Requests | 代码评审、CI集成、合并跟踪 |
| 讨论 | 团队/社区对话、问答、RFC |
| 动作/工作流 | CI/CD、自动化、执行 |
| 标签/里程碑 | 组织、过滤、进度跟踪 |
| 项目板 | 可视化工作流(可选) |
存在于上下文网络
| 工件 | 为何上下文网络 |
|---|---|
| ADRs(架构决策记录) | 结构化推理、可搜索、框架集成 |
decisions.md |
跨领域决策、政策、理由 |
status.md |
当前焦点、最近更改、会话连续性 |
architecture.md |
系统设计、工作流文档 |
discovery.md |
项目理解、导航 |
glossary.md |
词汇表、共享理解 |
| 回顾洞察 | 改进未来工作的学习 |
桥接工件(交叉引用)
| 工件 | 主要位置 | 交叉引用 |
|---|---|---|
| 需求文档 | context/或docs/ |
从问题链接 |
| 系统设计 | context/architecture.md |
在PR中引用 |
| 冲刺/里程碑目标 | status.md |
匹配GitHub里程碑 |
| 关键决策 | decisions.md |
在问题/PR评论中引用 |
模式特定工作流
单人开发者模式
目的: 自律、为未来自我的历史、结构化思维
调整:
- 分支保护仍有用(防止事故)
- 自评审PR:使用PR作为思维检查点,非仅合并门
- 问题作为记忆:为未来会话写问题
- 简化标签:
类型:特性、类型:错误、类型:任务、优先级:高/低 - 上下文网络尤其重要(无团队可问)
工作流:
- 开始会话:检查
context/status.md和gh issue list - 选择问题或为新工作创建问题
- 创建特性分支:
gh issue develop {编号} - 工作并有规律提交(在消息中引用问题)
- 创建PR:
gh pr create --fill - 自评审:阅读差异如同他人编写
- 合并:
gh pr merge --squash - 如重要,更新
context/status.md
团队模式(2-5人)
目的: 协作、代码评审、共享理解
调整:
- 合并前强制代码评审
- 分配约定(谁负责什么)
- 同步仪式(站会、计划、回顾)
- 更结构化标签包括分配者相关
- 讨论用于异步决策
工作流:
- 计划:创建/精炼问题,分配到里程碑
- 分配:分配问题,通过评论沟通
- 开发:特性分支,有规律提交
- PR创建:详细描述,请求评审者
- 评审:批准、请求更改或评论
- 合并:批准后,压缩合并
- 同步:每周上下文网络更新,里程碑回顾
团队标签(附加):
状态:需要评审- 等待代码评审状态:更改请求- 评审者请求更改需要:讨论- 在继续前需要团队输入
关键工作流
1. 项目初始化仪式
触发: 新项目或首次GitHub集成
步骤:
- 验证GH CLI安装并认证(GH0):
scripts/gh-verify.ts - 创建或链接仓库(GH1):
gh repo create或git remote add - 运行初始化:
scripts/gh-init-project.ts --labels standard --templates --protection - 如果缺失,初始化上下文网络
- 在
context/architecture.md中记录工作流 - 在
context/decisions.md中记录决策 - 为初始工作阶段创建第一个里程碑
2. 特性开发工作流
触发: 开始新工作项
步骤:
- 确保问题存在(如果没有则创建):
gh issue create - 从问题创建特性分支:
gh issue develop {编号} --base main # 或手动: git checkout -b 特性/{编号}-简短描述 main - 使用常规消息提交:
特性(范围): 描述 (#123) 修复(范围): 描述 (#123) 杂项: 描述 - 定期推送:
git push -u origin HEAD - 准备就绪时创建PR:
gh pr create --fill # 或使用显式模板: gh pr create --title "特性: 描述" --body-file .github/pull_request_template.md - 确保PR:
- 链接到问题(
关闭 #123) - 有意义的描述
- 如架构相关,引用上下文
- 链接到问题(
- 评审(自评或团队)
- 通过
gh pr merge --squash合并(压缩保持历史清晰) - 通过PR关键词问题自动关闭
- 删除分支:
git branch -d 特性/{编号}-描述
3. 冲刺/里程碑同步
触发: 里程碑开始或结束
开始:
- 创建里程碑:
gh api repos/{所有者}/{仓库}/milestones -f title="冲刺 X" -f due_on="YYYY-MM-DD" - 分配问题到里程碑
- 使用里程碑焦点和目标更新
context/status.md - 沟通优先级(单人:写下;团队:计划会议)
结束:
- 评审里程碑:
gh issue list --milestone "冲刺 X" - 关闭完成里程碑
- 将未完成问题移至下一个里程碑或冰盒
- 在
context/decisions.md中记录回顾:- 什么运作良好?
- 什么未运作?
- 我们将更改什么?
- 使用摘要更新
context/status.md
4. 上下文同步仪式
触发: 每周或重大工作后
步骤:
- 运行审计:
scripts/gh-audit.ts - 运行同步:
scripts/gh-sync-context.ts --dry-run(先评审) - 更新
context/status.md:- 当前里程碑/冲刺
- 活跃问题/PR
- 最近完成
- 阻塞或需要决策
- 从封闭问题/PR提取决策到
decisions.md - 如工作流演变,更新
architecture.md - 验证:有人能否仅从上下文恢复工作?
反模式
GitHub作为Wiki
问题: 使用GitHub问题进行长篇文档、决策和上下文,应存在于上下文网络。重要信息被埋没在评论中,未来无法找到。
症状: 大量问题描述、架构争论在评论中、决策分散在封闭问题中。
修复: GitHub跟踪工作项;上下文网络跟踪理解。如需存活超出问题生命周期,移至context/。
问题墓地
问题: 创建问题从不关闭,使积压无意义。新问题堆积在旧问题上。 症状: 200+开放问题,大多数数月未动,“我会处理”心态,选择工作瘫痪。 修复: 定期梳理。如90天内不会完成,冰盒或关闭。小型当前积压优于大型陈旧积压。积极删除。
无上下文PR
问题: PR描述更改内容但无原因,使未来考古不可能。 症状: “修复错误”、“更新样式”、“重构代码”无上下文。六个月后,无人知道原因。 修复: PR模板必需部分:什么、为什么、如何测试、相关问题。如架构相关,引用ADR。
重复问题机器
问题: 创建新问题不检查是否已存在,导致碎片化讨论和浪费努力。
症状: 多个问题关于相同内容,努力分散在重复项中,冲突解决方案。
修复: 创建前搜索:gh issue list --search "关键词"。关闭重复项并引用规范问题。
永恒草稿PR
问题: PR作为草稿打开从不完成,阻碍心理进展并杂乱PR列表。 症状: 草稿PR超过30天,WIP标签成为永久,范围蔓延使PR无法合并。 修复: 时间盒草稿。如2周内未就绪,关闭并重新范围。小PR可合并优于大PR不可合并。
分支保护绕过
问题: 禁用分支保护“仅此一次”并直接提交到主分支。为未来绕过创造先例。 症状: 无PR提交到主分支,主分支构建破坏,“我下次提交修复”。 修复: 分支保护存在有原因。即使单人开发者从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 [标准|简单|最小]- 要创建的标签方案--templates- 创建问题和PR模板--protection- 启用主分支保护--mode [单人|团队]- 调整工作风格默认值--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 [天数]- 标记N天无活动的项(默认:30)--verbose- 显示详细项分析
检查:
- 开放问题计数和标签覆盖
- 开放PR状态(草稿、链接问题、年龄)
- 最近提交(哪个分支,直接到主?)
- 里程碑使用和进度
- 陈旧项识别
输出: 健康分数(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- 从带有“决策”标签的封闭问题提取决策--output [目录]- 写入目录(默认:context/)
生成:
- 用于
status.md的状态更新内容 - 从封闭问题的决策候选
- 里程碑摘要
示例交互
单人开发者:全新开始
开发者: “我有一个本地项目想放在GitHub上并开始使用适当工作流。”
诊断: 状态GH1(仓库未初始化)
方法:
- 运行
scripts/gh-verify.ts- 确认CLI就绪 - 询问:“公开还是私有仓库?”
- 创建仓库:
gh repo create my-project --source=. --private --push - 运行
scripts/gh-init-project.ts --mode solo --labels simple --templates - 初始化上下文网络:创建
context/带status.md、decisions.md - 在
context/architecture.md中记录:“使用GitHub Issues跟踪,所有更改用特性分支,PR用于合并和历史。” - 为当前工作创建第一个问题
- 演示分支工作流:
gh issue develop 1
团队:积压清理
开发者: “我们有150个开放问题,无人知道什么重要。”
诊断: 状态GH3(积压混乱)
方法:
- 运行
scripts/gh-audit.ts --stale 60- 识别范围 - 询问:“当前优先级是什么?什么必须很快发布?”
- 为即时焦点创建里程碑
- 分类问题:
- 对里程碑关键 → 分配到里程碑,添加优先级标签
- 有效但现在不需要 → 冰盒标签
- 陈旧无前进路径 → 关闭并解释
- 重复项 → 关闭并引用规范
- 使用焦点更新
context/status.md - 建立梳理节奏:每周15分钟评审
单人开发者:上下文衰减
开发者: “一个月后回到这个项目,不知道当时在做什么。”
诊断: 状态GH7(上下文网络间隙)
方法:
- 检查GitHub状态:
gh issue list、gh pr status - 运行
scripts/gh-sync-context.ts --dry-run查看当前状态 - 初始化或更新上下文网络:
status.md:当前里程碑是什么?活跃问题?decisions.md:封闭PR中有任何架构决策吗?
- 从上个会话评审封闭问题/PR获取上下文
- 使用“上个会话”摘要更新
status.md - 建立习惯:每个会话结束更新
status.md
输出持久性
输出发现
在做任何其他工作前:
- 在项目中检查
context/output-config.md - 如找到,查找此技能条目
- 如未找到,询问:“应保存GitHub工作流输出到哪里?”
- 建议:
context/用于上下文网络文件,.github/用于GitHub配置
- 建议:
- 在
context/output-config.md中存储偏好
主要输出
| 输出 | 位置 |
|---|---|
| 问题模板 | .github/ISSUE_TEMPLATE/ |
| PR模板 | .github/pull_request_template.md |
| 工作流文档 | context/architecture.md(GitHub工作流部分) |
| 设置决策 | context/decisions.md |
| 状态更新 | context/status.md |
| 审计报告 | context/github-audit-{日期}.md(如持久化) |
对话 vs. 文件
| 进入文件 | 保持在对话 |
|---|---|
模板(.github/) |
诊断讨论 |
| 工作流文档 | 标签方案探索 |
| 上下文网络更新 | 分类决策 |
| 审计报告(如请求) | 快速状态检查 |
您不做的事
- 未经用户确认,您不创建问题
- 您不自动合并PR
- 无明确请求,您不删除问题、PR或分支
- 无明确请求,您不更改分支保护
- 您不跳过
gh可用性验证(总是先检查GH0) - 您不假设无
gh auth status检查的GitHub访问 - 您不替换上下文网络为仅GitHub存储
- 您不在主分支上创建提交(强制执行特性分支工作流)
- 无用户意识,您不推送到远程
- 您诊断、建议和执行带确认 - 开发者决定
与其他技能集成
从需求分析
| 需求分析输出 | github-agile输入 |
|---|---|
| 问题陈述 | 创建初始问题描述问题 |
| 需求层次 | 映射到问题优先级标签 |
| 约束清单 | 在context/中记录,在问题中引用 |
| 验证需求 | 创建特性问题,链接到需求文档 |
从系统设计
| 系统设计输出 | github-agile输入 |
|---|---|
| ADRs | 存储在context/adr/或docs/adr/,在PR中引用 |
| 组件地图 | 通知按组件分解问题 |
| 行走骨架 | 带链接问题的第一个里程碑 |
| 集成点 | 在context/architecture.md中记录 |
到需求分析
当GitHub状态揭示需求问题时:
| github-agile状态 | 触发 | 需求分析状态 |
|---|---|---|
| GH3(积压混乱) | 问题描述解决方案而非问题 | RA0-RA1 |
| GH3(积压混乱) | 无法优先级(所有重要) | RA4 |
到系统设计
当GitHub状态揭示设计问题时:
| github-agile状态 | 触发 | 系统设计状态 |
|---|---|---|
| GH5(无上下文PR) | PR涉及未文档化架构决策 | SD4 |
| GH4(分支违规) | 频繁合并冲突 | SD3(缺失集成点) |
参考
此技能操作化:
- GitHub CLI文档:https://cli.github.com/manual/
- 上下文网络框架:
frameworks/context-networks/ - 特性分支工作流最佳实践
- 常规提交:https://www.conventionalcommits.org/