skills/jssfy/k-skills/go-backend-dev-harness

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 已更新 ✓,完成。

Weekly Installs
2
Repository
jssfy/k-skills
GitHub Stars
2
First Seen
9 days ago