新增 AGENTS.md 规则(§1-§22)、Hook 脚本和可复用工具脚本: - 重构 AGENTS.md:新增 16 条规则(任务分解、双轨验证、骨架占位禁止、 测试命令退出码保留、工具脚本可复用、完成前验证门禁、Flaky 测试门禁等) - 新增 .trae/hooks/:session-start / pre-agent-check / check-completeness / stop-check - 新增 .trae/settings.json:关联 4 个 Hook 到 SessionStart/PreToolUse/PostToolUse/Stop - 新增 scripts/:flaky-scan.sh / check-task-checklist.sh / check-issue-checklist.sh - 调整 .gitignore:保留 hooks/settings 纳入版本控制,忽略运行时状态文件
70 lines
1.9 KiB
Bash
70 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Issue 关闭门禁检查 — 扫描已关闭的 Issue 文档是否存在未勾选子项
|
|
# 用法:
|
|
# bash scripts/check-issue-checklist.sh # 检查所有 Issue
|
|
# bash scripts/check-issue-checklist.sh --quiet # 静默模式(仅退出码)
|
|
# bash scripts/check-issue-checklist.sh --help # 显示帮助
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
QUIET=0
|
|
|
|
usage() {
|
|
echo "Usage: $0 [options]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --quiet 静默模式(仅通过退出码表示结果)"
|
|
echo " --help 显示此帮助"
|
|
exit 0
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--quiet) QUIET=1; shift ;;
|
|
--help) usage ;;
|
|
*) echo "Unknown option: $1"; usage ;;
|
|
esac
|
|
done
|
|
|
|
# 检查 docs/plans/ 下的 Issue 文档
|
|
PLANS_DIR="${PROJECT_DIR}/docs/plans"
|
|
HAS_ERRORS=0
|
|
VIOLATIONS=()
|
|
|
|
if [ ! -d "$PLANS_DIR" ]; then
|
|
[ "$QUIET" -eq 0 ] && echo " 检查: ${PLANS_DIR} 不存在,跳过"
|
|
echo '{"status":"ok"}'
|
|
exit 0
|
|
fi
|
|
|
|
# 扫描已关闭的文档(包含 "status: closed" 或 "已关闭" 标记)
|
|
while IFS= read -r plan_file; do
|
|
[ -z "$plan_file" ] && continue
|
|
basename=$(basename "$plan_file" .md)
|
|
|
|
# 检查是否包含 closed 标记
|
|
if grep -qi "status.*closed\|已关闭\|已完成" "$plan_file" 2>/dev/null; then
|
|
# 检查是否有未勾选的 checklist 项
|
|
UNCHECKED=$(grep -cE '^\s*[-*]\s+\[[ ]\]' "$plan_file" 2>/dev/null || true)
|
|
if [ "$UNCHECKED" -gt 0 ]; then
|
|
VIOLATIONS+=("${basename}: ${UNCHECKED} 个未勾选子项")
|
|
HAS_ERRORS=1
|
|
fi
|
|
fi
|
|
done < <(find "$PLANS_DIR" -name '*.md' -type f 2>/dev/null)
|
|
|
|
if [ "$HAS_ERRORS" -eq 0 ]; then
|
|
[ "$QUIET" -eq 0 ] && echo " Issue 门禁: PASS"
|
|
echo '{"status":"ok"}'
|
|
exit 0
|
|
else
|
|
[ "$QUIET" -eq 0 ] && echo " Issue 门禁: FAIL"
|
|
for v in "${VIOLATIONS[@]}"; do
|
|
echo " - $v"
|
|
done
|
|
echo '{"status":"error"}'
|
|
exit 1
|
|
fi |