mcpField
M
milestone-review

milestone-review

github.com/donchitos开发28.5k480 次安装1 周前更新
代码仓库

关于 milestone-review

milestone-review 是用于汇总里程碑进展与代码库状况的 Claude 技能,面向项目评审流程。它要求先核实输入数据是否存在,对缺失数据明确标记未评估,并生成 Go/No-Go 建议。

主要功能

  1. 01核查里程碑和冲刺报告
  2. 02标记缺失数据为未评估
  3. 03汇总代码标记与未解决 Bug
  4. 04检查风险登记表和阻塞事项
  5. 05生成里程碑 Go/No-Go 评审

适用场景

  1. 01评估里程碑是否按计划推进
  2. 02在输入数据不完整时标明评审范围
  3. 03根据进展和风险形成发布建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/donchitos/claude-code-game-studios --skill milestone-review

安装后在 Claude Code 中输入/milestone-review确认已加载。

详细介绍

!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys review_mode,automation,workflow

以上内容已解析,请直接使用;--review 会覆盖本次运行的 review_mode。未提供区块 → 使用 .claude/docs/config-resolution.md 中的默认值。

里程碑审查

输入不足 — 生成任何报告前先检查

如果此技能所需的输入不存在,答案应为“无法运行”—— 而不是填写好的报告。 请先检查,如果检查失败,则停止。

  1. 列出此技能读取的输入(数据文件、先前的报告、分析器输出、 测试结果、注册表、源代码)。
  2. 对每项记录 FOUND 或 ABSENT,不要写“假定存在”。
  3. 如果某个章节所需的输入为 ABSENT,该章节应标记为 NOT ASSESSED — NO DATA。不要估算,不要根据相邻产物推断,也不要将必须填写的单元格留给下一位阅读模板的人。
  4. 如果所有必需输入均为 ABSENT,则停止并将 NOT ASSESSED — NO DATA 作为整体结论,说明缺少哪些内容,以及由哪个技能生成。

NOT ASSESSED 结论是成功的。 当没有数据时,这是对“数据说明了什么?”这一问题正确且有用的回答。此处要防止的具体失败模式是:结论枚举中没有“无法运行”状态的报告会造成虚假的干净通过——例如,项目没有资产也没有标准,资产审计却返回 COMPLIANT;或在没有分析器数据且从未设置预算的情况下,性能分析报告声称“相对于 16.67ms 预算有超过 99% 的余量”。

没有证据绝不等于不存在的证据。 如果扫描时没有文件可供扫描,因此未找到任何匹配项,这并不能证明任何事情。请说明发生的是哪一种情况——仅凭绿色结果,读者无法判断。


阶段 0:解析参数

提取里程碑名称(current 或特定名称)。

完整的检查模式请参阅 .claude/docs/director-gates.md。各个门禁的定义位于 .claude/docs/director-gates/[gate-id].md——启动的 Agent 会读取自己的门禁文件;不要在父会话中读取该文件。

每次调用 AskUserQuestion 都遵循 .claude/docs/automation-modes.md (协作模式始终询问 · 引导模式仅询问重大事项 · 自主模式记录并继续; automation_always_ask 类别始终提示)。


阶段 1:加载里程碑数据

如果存在,从 production/milestones/ 读取里程碑定义。如果参数为 current,则使用最近修改的里程碑文件。

没有任何技能会写入 production/milestones/——定义是根据 .claude/docs/templates/milestone-definition.md 手动编写的,因此大多数项目都没有定义。目录不存在或为空时,请说明这一点,并仅根据冲刺报告进行审查;不要捏造定义。谨慎处理 current:此技能会将自身输出写入 [milestone-name]-review.md,因此最近修改的匹配项可能是之前的审查,而非定义。选择时跳过以 -review.md 结尾的文件。

从 production/sprints/ 收集此里程碑内各冲刺的报告。确定分母(使用 glob 匹配文件,计数为 N),然后扫描里程碑审查实际汇总的部分,而不是通读每份报告:

Grep pattern="^## (Sprint Goal|Capacity|Tasks|Carryover|Risks|Progress|Burndown Assessment|Emerging Risks|Definition of Done)" glob="production/sprints/sprint-*.md" output_mode="content" -A 12

这些备用标题是 /sprint-plan 生成的标题(## Sprint Goal,而不是 ## Goal)——不一定是里程碑审查预期的标题。即使模式只匹配到一个实际标题,也会返回非零计数,因此下面的零匹配补救措施不会触发,审查便会汇总每份报告的一部分,却声称覆盖了全部内容。

如果扫描到的部分引用了其他内容,或者没有匹配到任何内容,则完整阅读该冲刺报告;零匹配的报告早于模板,必须阅读,绝不能悄然从里程碑历史中剔除。报告任何没有贡献内容的冲刺:悄然遗漏某个冲刺的里程碑摘要,会低估工作量和进度延误。

受阻故事——Blocked 表格和传递给 PR-MILESTONE 的受阻故事数——不在冲刺报告的已扫描部分中。请在记录这些信息的位置读取:production/sprint-status.yaml 中 status: blocked 的故事(及其 blocker 字段);对于不属于该冲刺的故事,再执行一次 grep:

Grep pattern="^> \*\*Status\*\*: Blocked|BLOCKED:" glob="production/epics/**/story-*.md" output_mode="content"

每个受阻故事都应根据其 epic 文件夹实现的功能,列入对应功能下的 Blocked 表格,并注明阻塞原因(yaml 中的 blocker 字段或故事的 BLOCKED: 注释)。如果没有故事文件,也没有 sprint-status.yaml,则 Blocked 表格和受阻故事数应为 NOT ASSESSED — NO DATA,而不是零。


阶段 2:扫描代码库健康状况

  • 扫描 TODO、FIXME、HACK 标记,查找未完成的工作
  • 从 production/qa/bugs/ 按严重程度统计未解决的 Bug,用于质量指标(按照 /bug-triage 的做法,对 **Severity** 和 **Status** 行执行一次 grep);如果没有 Bug 文件,Bug 行应为 NOT ASSESSED — NO DATA,而不是零
  • 如果存在,检查 production/risk-register/ 中的风险登记表(根据 .claude/docs/templates/risk-register-entry.md 手动编写;没有技能会写入该文件,因此不存在很正常——请注明这一点,而不是悄然跳过风险评估)

阶段 3:生成里程碑审查

# Milestone Review: [Milestone Name]

## Overview
- **Target Date**: [Date]
- **Current Date**: [Today]
- **Days Remaining**: [N]
- **Sprints Completed**: [X/Y]

## Feature Completeness

### Fully Complete
Only a feature whose Status is `Complete` goes here or counts toward the completion percentage; a Deferred feature stays in its denominator, named with the milestone it moved to.

| Feature | Acceptance Criteria | Test Status |
|---------|-------------------|-------------|

### Partially Complete
| Feature | % Done | Remaining Work | Risk to Milestone |
|---------|--------|---------------|------------------|

### Blocked
A started feature whose stories are Blocked goes here, not under Partially
Complete — name the blocker, so the review says why it stalled, not only that
the count moved.

| Feature | Blocked Stories | Blocker | Next Action / Owner |
|---------|----------------|---------|---------------------|

### Not Started
| Feature | Priority | Can Cut? | Impact of Cutting |
|---------|----------|----------|------------------|

## Quality Metrics
- **Open S1 Bugs**: [N] -- [List]
- **Open S2 Bugs**: [N]
- **Open S3 Bugs**: [N]
- **Test Coverage**: [X%]
- **Performance**: [Within budget? Details]

## Code Health
- **TODO count**: [N across codebase]
- **FIXME count**: [N]
- **HACK count**: [N]
- **Technical debt items**: [List critical ones]

## Risk Assessment
| Risk | Status | Impact if Realized | Mitigation Status |
|------|--------|-------------------|------------------|

## Velocity Analysis
- **Planned vs Completed** (across all sprints): [X/Y tasks = Z%]
- **Trend**: [Improving / Stable / Declining]
- **Adjusted estimate for remaining work**: [Days needed at current velocity]

## Scope Recommendations
### Protect (Must ship with milestone)
- [Feature and why]

### At Risk (May need to cut or simplify)
- [Feature and risk]

### Cut Candidates (Can defer without compromising milestone)
- [Feature and impact of cutting]

## Go/No-Go Assessment

**Recommendation**: [NOT ASSESSED / GO / CONDITIONAL GO / NO-GO]

**Conditions** (if conditional):
- [Condition 1 that must be met]
- [Condition 2 that must be met]

**Rationale**: [Explanation of the recommendation]

## Action Items
| # | Action | Owner | Deadline |
|---|--------|-------|----------|

阶段 3b:制作方风险评估

检查评审模式 — 在启动 PR-MILESTONE 前应用:

  • solo → 跳过。注明:“已跳过 PR-MILESTONE — Solo 模式。”展示 Go/No-Go 部分,但不提供制作方结论。
  • lean → 跳过(不是 PHASE-GATE)。注明:“已跳过 PR-MILESTONE — Lean 模式。”展示 Go/No-Go 部分,但不提供制作方结论。
  • full → 按常规启动。

生成 Go/No-Go 建议前,通过 Agent 使用 PR-MILESTONE 门禁(.claude/docs/director-gates/pr-milestone.md)启动 producer。

传入:里程碑名称和目标日期、当前完成百分比、受阻用户故事数量、冲刺报告中的速度数据(如有),以及待删减候选项列表。

在 Go/No-Go 部分中内嵌展示制作方的评估。制作方的结论(ON TRACK / AT RISK / OFF TRACK)会影响整体建议。

如果结论为 OFF TRACK,生成建议前使用 AskUserQuestion:

  • 提示:“制作方结论:OFF TRACK。里程碑岌岌可危。本次评审将建议 NO-GO。你想如何继续?”
  • 选项:
    • [A] 接受 NO-GO — 生成包含该建议的完整评审
    • [B] 覆盖为 CONDITIONAL GO — 我会自行记录所接受的风险
    • [C] 停止 — 我想先处理阻塞项,再生成评审

如果结论为 AT RISK,使用 AskUserQuestion:

  • 提示:“制作方结论:AT RISK。里程碑可能延期。Go/No-Go 部分应如何表述?”
  • 选项:
    • [A] CONDITIONAL GO — 在评审中纳入制作方的条件
    • [B] NO-GO — 无法及时满足这些条件
    • [C] GO — 我接受风险并希望继续

如果为 NOT ASSESSED:指出缺失的输入 — 这不代表 ON TRACK,且绝不可据此建议 GO。补充输入并重新运行 PR-MILESTONE,或建议 NOT ASSESSED — 也可在评审本身的发现有此要求时建议 CONDITIONAL GO / NO-GO(请参阅 .claude/docs/director-gates.md 中的等级)。

不得针对 OFF TRACK 结论给出 GO;仅当用户明确选择上述 [B] 时,才可给出 CONDITIONAL GO。


阶段 4:保存评审

向用户展示评审。

询问:“我可以将其写入 production/milestones/[milestone-name]-review.md 吗?”

如果可以,则写入文件;如有需要,创建目录。结论:COMPLETE — 里程碑评审已保存。

如果不可以,则在此停止。结论:BLOCKED — 用户拒绝写入。


阶段 5:后续步骤

  • 如果此里程碑标志着开发阶段的边界,请运行 /gate-check,获取正式的阶段门禁结论。
  • 运行 /sprint-plan,根据上述范围建议调整下一次冲刺(在 workflow: minimal 下,由于没有冲刺,应改为调整简报中的构建顺序)。

评论

支持 Markdown