名称: 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来诊断环境 - 按平台安装指导:
- 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存储库存在但没有标签、里程碑或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:feature、type:bug、type:task、priority:high/low - 上下文网络特别重要(没有团队可问)
工作流:
- 开始会话:检查
context/status.md和gh issue list - 选择issue或为新工作创建一个
- 创建功能分支:
gh issue develop {number} - 工作并定期提交(在消息中引用issue)
- 创建PR:
gh pr create --fill - 自我审查:读取差异就好像别人写的
- 合并:
gh pr merge --squash - 如果重要,更新
context/status.md
团队模式(2-5人)
目的: 协作、代码审查、共享理解
适应:
- 合并前强制代码审查
- 分配约定(谁拥有什么)
- 同步仪式(站会、规划、回顾)
- 更结构化标签包括分配者相关
- 用于异步决策的讨论
工作流:
- 规划:创建/精炼issues,分配给里程碑
- 分配:分配issues,通过评论沟通
- 开发:功能分支,定期提交
- PR创建:详细描述,请求审查者
- 审查:批准、请求更改或评论
- 合并:批准后,压缩合并
- 同步:每周上下文网络更新,里程碑回顾
团队标签(添加):
status:needs-review- 等待代码审查status:changes-requested- 审查者请求更改needs:discussion- 在继续前需要团队输入
关键工作流
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. 功能开发工作流
触发: 开始新工作项
步骤:
- 确保issue存在(如果没有则创建):
gh issue create - 从issue创建功能分支:
gh issue develop {number} --base main # 或手动: git checkout -b feature/{number}-简短描述 main - 使用常规消息进行提交:
feat(scope): 描述 (#123) fix(scope): 描述 (#123) chore: 描述 - 定期推送:
git push -u origin HEAD - 准备就绪时创建PR:
gh pr create --fill # 或带明确模板: gh pr create --title "feat: 描述" --body-file .github/pull_request_template.md - 确保PR:
- 链接到issue(
Closes #123) - 有意义的描述
- 如果架构,引用上下文
- 链接到issue(
- 审查(自我或团队)
- 通过
gh pr merge --squash合并(压缩保持历史清洁) - Issue通过PR关键词自动关闭
- 删除分支:
git branch -d feature/{number}-description
3. 冲刺/里程碑同步
触发: 里程碑开始或结束
开始:
- 创建里程碑:
gh api repos/{owner}/{repo}/milestones -f title="Sprint X" -f due_on="YYYY-MM-DD" - 分配issues到里程碑
- 更新
context/status.md与里程碑焦点和目标 - 沟通优先级(单人:写下;团队:规划会议)
结束:
- 审查里程碑:
gh issue list --milestone "Sprint X" - 关闭完成里程碑
- 移动未完成issues到下一个里程碑或冰盒
- 在
context/decisions.md中记录回顾:- 什么工作得好?
- 什么没工作?
- 我们会改变什么?
- 更新
context/status.md与摘要
4. 上下文同步仪式
触发: 每周或重要工作后
步骤:
- 运行审计:
scripts/gh-audit.ts - 运行同步:
scripts/gh-sync-context.ts --dry-run(先审查) - 更新
context/status.md:- 当前里程碑/冲刺
- 活跃issues/PRs
- 最近完成
- 阻碍或需要决策
- 从关闭issues/PRs提取决策到
decisions.md - 如果工作流演进,更新
architecture.md - 验证:有人能从仅上下文恢复工作吗?
反模式
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(存储库未初始化)
方法:
- 运行
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进行跟踪,功能分支用于所有更改,PRs用于合并和历史。” - 为当前工作创建第一个issue
- 演示分支工作流:
gh issue develop 1
团队:积压清理
开发者: “我们有150个开放issues,没有人知道什么是重要的。”
诊断: 状态GH3(积压混乱)
方法:
- 运行
scripts/gh-audit.ts --stale 60- 识别范围 - 问:“当前优先级是什么?必须很快发布什么?”
- 为即时焦点创建里程碑
- 分类issues:
- 对里程碑关键 → 分配给里程碑,添加优先级标签
- 有效但不是现在 → 冰盒标签
- 陈旧没有前进路径 → 关闭并解释
- 重复 → 关闭并引用规范
- 更新
context/status.md与焦点 - 建立整理节奏:每周15分钟审查
单人开发者:上下文衰败
开发者: “我一个月后回到这个项目,不知道我在做什么。”
诊断: 状态GH7(上下文网络缺口)
方法:
- 检查GitHub状态:
gh issue list、gh pr status - 运行
scripts/gh-sync-context.ts --dry-run查看当前状态 - 初始化或更新上下文网络:
status.md:当前里程碑是什么?活跃issues?decisions.md:关闭PRs中是否有架构决策?
- 审查上次会话的关闭issues/PRs获取上下文
- 更新
status.md与“上次会话”摘要 - 建立习惯:每个会话结束时更新
status.md
输出持久性
输出发现
在做任何其他工作前:
- 检查项目中
context/output-config.md - 如果找到,查找这个技能的条目
- 如果未找到,问:“我应该在哪里保存GitHub工作流输出?”
- 建议:
context/用于上下文网络文件,.github/用于GitHub配置
- 建议:
- 存储偏好于
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(缺少集成点) |
参考
这个技能操作化:
- GitHub CLI文档:https://cli.github.com/manual/
- 上下文网络框架:
frameworks/context-networks/ - 功能分支工作流最佳实践
- 常规提交:https://www.conventionalcommits.org/