关于 milestone-review
milestone-review 是用于汇总里程碑进展与代码库状况的 Claude 技能,面向项目评审流程。它要求先核实输入数据是否存在,对缺失数据明确标记未评估,并生成 Go/No-Go 建议。
主要功能
- 01核查里程碑和冲刺报告
- 02标记缺失数据为未评估
- 03汇总代码标记与未解决 Bug
- 04检查风险登记表和阻塞事项
- 05生成里程碑 Go/No-Go 评审
适用场景
- 01评估里程碑是否按计划推进
- 02在输入数据不完整时标明评审范围
- 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 中的默认值。
里程碑审查
输入不足 — 生成任何报告前先检查
如果此技能所需的输入不存在,答案应为“无法运行”—— 而不是填写好的报告。 请先检查,如果检查失败,则停止。
- 列出此技能读取的输入(数据文件、先前的报告、分析器输出、 测试结果、注册表、源代码)。
- 对每项记录
FOUND或ABSENT,不要写“假定存在”。 - 如果某个章节所需的输入为 ABSENT,该章节应标记为
NOT ASSESSED — NO DATA。不要估算,不要根据相邻产物推断,也不要将必须填写的单元格留给下一位阅读模板的人。 - 如果所有必需输入均为 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下,由于没有冲刺,应改为调整简报中的构建顺序)。