go-backend-dev-harness
Installation
SKILL.md
go-backend-dev-harness:初始化文档导航
将当前功能的文档清单(计划、架构、操作手册、测试记录、评审记录)写入 tasks/todo.md 的 ## 参考文档 小节,供后续开发流程按名查文。
步骤 1:确保 tasks/todo.md 存在
不做任何前置判断,直接执行:
mkdir -p {project_root}/tasks
[ -f {project_root}/tasks/todo.md ] || printf '# Todo\n\n## 参考文档\n\n' > {project_root}/tasks/todo.md
grep -q '^## 参考文档' {project_root}/tasks/todo.md || printf '\n## 参考文档\n\n' >> {project_root}/tasks/todo.md
执行完成后,tasks/todo.md 必定存在且含有 ## 参考文档 小节。
步骤 2:确定功能文档目录
如果调用时提供了目录名:
先区分目录是否在项目根目录下:
arg_dir="{传入的目录参数}"
resolved=$(realpath "$arg_dir" 2>/dev/null || echo "$arg_dir")
project_abs=$(realpath {project_root})
case "$resolved" in
"$project_abs"/*) echo "INSIDE:${resolved#$project_abs/}" ;;
*) echo "OUTSIDE:$resolved" ;;
esac
- 输出
INSIDE:<rel>→ 使用相对项目根目录的路径<rel> - 输出
OUTSIDE:<abs>→ 原样使用绝对路径,不做 relpath 转换(适用于用户以外部文档仓库管理计划文件的场景)
再将转换后的路径与 ## 参考文档 小节中已记录的目录名按同样规则归一化后比较:
- 一致:沿用已有规划,继续步骤 3
- 不一致或小节为空:清空
## 参考文档小节,按新目录名重新生成,继续步骤 3
如果调用时未提供目录名:
根据当前功能名(从会话上下文或需求分析/技术设计文档标题提取)在 docs/ 下确定子目录名,格式:docs/{feature-name}。
步骤 3:扫描功能文档目录,为每类文件赋值
必须执行以下命令,不得跳过或替换为主观判断。已有文件取最近修改的一个,没有则生成新文件名({feature-name} 为功能简称,{today} 为今天日期 yyyy-mm-dd):
d="{resolved_dir}"
feat="{feature-name}"
today="{today}"
FILE_PLAN=$(ls -t "$d"/plan-*.md 2>/dev/null | head -1); [ -z "$FILE_PLAN" ] && FILE_PLAN="plan-${feat}-${today}.md" || FILE_PLAN=$(basename "$FILE_PLAN")
FILE_ARCH=$(ls -t "$d"/arch-*.md 2>/dev/null | head -1); [ -z "$FILE_ARCH" ] && FILE_ARCH="arch-${feat}-${today}.md" || FILE_ARCH=$(basename "$FILE_ARCH")
FILE_OPS_MD=$(ls -t "$d"/ops-*.md 2>/dev/null | head -1); [ -z "$FILE_OPS_MD" ] && FILE_OPS_MD="ops-${feat}-${today}.md" || FILE_OPS_MD=$(basename "$FILE_OPS_MD")
FILE_OPS_SH=$(ls -t "$d"/ops-*.sh 2>/dev/null | head -1); [ -z "$FILE_OPS_SH" ] && FILE_OPS_SH="ops-${feat}-${today}.sh" || FILE_OPS_SH=$(basename "$FILE_OPS_SH")
FILE_REPORT=$(ls -t "$d"/report-*.md 2>/dev/null | head -1); [ -z "$FILE_REPORT" ] && FILE_REPORT="report-${feat}-${today}.md" || FILE_REPORT=$(basename "$FILE_REPORT")
FILE_REVIEW=$(ls -t "$d"/review-*.md 2>/dev/null | head -1); [ -z "$FILE_REVIEW" ] && FILE_REVIEW="review-${feat}-${today}.md" || FILE_REVIEW=$(basename "$FILE_REVIEW")
echo "PLAN: $FILE_PLAN"
echo "ARCH: $FILE_ARCH"
echo "OPS_MD: $FILE_OPS_MD"
echo "OPS_SH: $FILE_OPS_SH"
echo "REPORT: $FILE_REPORT"
echo "REVIEW: $FILE_REVIEW"
输出即为最终文件名,直接用于步骤 4,不得修改。
步骤 4:将清单写入 tasks/todo.md
将步骤 3 的赋值结果写入 tasks/todo.md 的 ## 参考文档 小节(覆盖该小节已有内容):
## 参考文档
- 当前功能文档目录:{resolved_dir}
- 当前功能计划文档:{FILE_PLAN}
- 当前功能架构文档:{FILE_ARCH}
- 当前功能操作手册:{FILE_OPS_MD}
- 当前功能操作脚本:{FILE_OPS_SH}
- 当前功能测试记录文档:{FILE_REPORT}
- 当前功能评审记录文档:{FILE_REVIEW}
写入后执行验证并展示结果:
cat {project_root}/tasks/todo.md
输出 tasks/todo.md 已更新 ✓,完成。