关于 blueprint-adr-list
这是一个从 `docs/adrs/` 文件动态生成架构决策记录(ADR)索引的 skill。它兼容不同的 Markdown 和 YAML 元数据格式,可生成表格与状态统计。
主要功能
- 01列出 ADR 标题和状态
- 02提取日期和领域标签
- 03读取 Markdown 标题与 YAML frontmatter
- 04生成 Markdown 索引表
- 05汇总 ADR 状态数量
适用场景
- 01为 README 创建 ADR 索引
- 02审查架构决策的状态
- 03查看 ADR 日期和领域
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill blueprint-adr-list安装后在 Claude Code 中输入/blueprint-adr-list确认已加载。
详细介绍
从文件系统动态列出架构决策记录。
何时使用此技能
| 在以下情况下使用此技能…… | 在以下情况下改用 blueprint-docs-list…… |
|---|---|
| 你只需要包含标题、状态、日期和领域的 ADR 专属输出 | 你想要跨 ADR、PRD 和 PRP 的综合索引 |
| 你要为 README 生成 ADR 索引 | 你想快速统计/汇总所有蓝图文档类型 |
| 你要在 Markdown 表格中审查 ADR 状态 | 如需检查关系/冲突,请改用 blueprint-adr-validate |
使用场景:为 README 文件生成 ADR 索引表、审查 ADR 状态,或快速查看所有架构决策。
步骤:
1. 检查是否存在 ADR
ls docs/adrs/*.md 2>/dev/null | head -1
如果未找到 ADR:
No ADRs found in docs/adrs/
Run `/blueprint:derive-plans` to generate ADRs from project analysis.
2. 生成 ADR 表格
ADR 格式各不相同:有些使用 Markdown 标题(## Status、## Date),另一些使用 YAML frontmatter(status:、date:)。提取过程会处理这两种格式。
生成 Markdown 表格的命令:
printf "| ADR | Title | Status | Date |\n|-----|-------|--------|------|\n" && \
fd '^[0-9]{4}-.*\.md$' docs/adrs -x awk '
# Extract title from H1 header
/^# ADR-/ {gsub(/^# ADR-[0-9]+: /, ""); title=$0}
# Extract status from ## Status section (next non-empty line)
/^## Status/ {p_status=1; next}
p_status && NF {status=$0; p_status=0}
# Extract date from ## Date section (next non-empty line)
/^## Date/ {p_date=1; next}
p_date && NF {date=$0; p_date=0}
# Fallback: YAML frontmatter fields
/^status:/ && !status {gsub(/^status:[[:space:]]*/, ""); status=$0}
/^date:/ && !date {gsub(/^date:[[:space:]]*/, ""); date=$0}
END {
# Extract ADR number from filename (path-depth independent)
fname = FILENAME
sub(/.*\//, "", fname)
num = substr(fname, 1, 4)
if (title == "") title = "(untitled)"
if (status == "") status = "-"
if (date == "") date = "-"
printf "| [%s](%s) | %s | %s | %s |\n", num, FILENAME, title, status, date
}
' {} | sort
3. 显示结果
输出生成的表格。示例:
| ADR | Title | Status | Date |
|-----|-------|--------|------|
| [0001](docs/adrs/0001-use-react.md) | Use React for Frontend | Accepted | 2024-01-15 |
| [0002](docs/adrs/0002-use-postgres.md) | Use PostgreSQL for Database | Accepted | 2024-01-20 |
| [0003](docs/adrs/0003-migrate-to-vite.md) | Migrate from CRA to Vite | Accepted | 2024-02-01 |
4. 可选:包含领域的扩展表格
如果使用了领域标签,则生成扩展表格:
printf "| ADR | Title | Status | Date | Domain |\n|-----|-------|--------|------|--------|\n" && \
fd '^[0-9]{4}-.*\.md$' docs/adrs -x awk '
/^# ADR-/ {gsub(/^# ADR-[0-9]+: /, ""); title=$0}
/^## Status/ {p_status=1; next}
p_status && NF {status=$0; p_status=0}
/^## Date/ {p_date=1; next}
p_date && NF {date=$0; p_date=0}
/^domain:/ {gsub(/^domain:[[:space:]]*/, ""); domain=$0}
/^status:/ && !status {gsub(/^status:[[:space:]]*/, ""); status=$0}
/^date:/ && !date {gsub(/^date:[[:space:]]*/, ""); date=$0}
END {
fname = FILENAME; sub(/.*\//, "", fname); num = substr(fname, 1, 4)
if (title == "") title = "(untitled)"
if (status == "") status = "-"
if (date == "") date = "-"
if (domain == "") domain = "-"
printf "| [%s](%s) | %s | %s | %s | %s |\n", num, FILENAME, title, status, date, domain
}
' {} | sort
5. 汇总统计
在表格后显示汇总:
echo ""
echo "**Summary**:"
echo "- Total: $(fd '^[0-9]{4}-.*\.md$' docs/adrs | wc -l | tr -d ' ') ADRs"
echo "- Accepted: $(grep -rl '^Accepted$\|^status:.*Accepted' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
echo "- Superseded: $(grep -rl '^Superseded\|^status:.*Superseded' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
echo "- Deprecated: $(grep -rl '^Deprecated\|^status:.*Deprecated' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
提示:将列出 ADR 的命令添加到 docs/adrs/README.md,方便任何人重新生成索引。请参阅 /blueprint:derive-plans 生成的 ADR README 模板。
评论
支持 Markdown