PMFlow/scripts/gen_task_brief.sh

65 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT_DIR"
BASE_REF="${1:-}"
HEAD_REF="${2:-HEAD}"
if [[ -z "$BASE_REF" ]]; then
if git rev-parse --verify origin/master >/dev/null 2>&1; then
BASE_REF="origin/master"
elif git rev-parse --verify origin/main >/dev/null 2>&1; then
BASE_REF="origin/main"
else
BASE_REF="HEAD~1"
fi
fi
TS="$(date '+%Y%m%d_%H%M%S')"
OUT_DIR="docs/task_briefs"
OUT_FILE="$OUT_DIR/task_brief_${TS}.md"
mkdir -p "$OUT_DIR"
CHANGED_FILES_RAW="$(git diff --name-only "$BASE_REF"..."$HEAD_REF" || true)"
if [[ -z "$CHANGED_FILES_RAW" ]]; then
CHANGED_FILES="- (no file changes detected)"
else
CHANGED_FILES="$(printf '%s\n' "$CHANGED_FILES_RAW" | sed 's#^#- #')"
fi
SCOPE_SUMMARY="- Backend/API: $(printf '%s\n' "$CHANGED_FILES_RAW" | grep -c '^backend/' || true) files\n- Frontend: $(printf '%s\n' "$CHANGED_FILES_RAW" | grep -c '^frontend/' || true) files\n- Docs/Scripts/CI: $(printf '%s\n' "$CHANGED_FILES_RAW" | grep -E -c '^(docs/|scripts/|\.github/)' || true) files"
RISKS="- Contract drift risk when backend API changes without TS sync.\n- Routing regression risk when function_name or route tier changes.\n- Async planner failure should not block signal main flow."
{
echo "# Task Brief"
echo
echo "## Meta"
echo "- Generated At: $(date '+%Y-%m-%d %H:%M:%S %z')"
echo "- Base Ref: $BASE_REF"
echo "- Head Ref: $HEAD_REF"
echo
echo "## Changed Files"
printf '%b\n' "$CHANGED_FILES"
echo
echo "## Scope"
printf '%b\n' "$SCOPE_SUMMARY"
echo
echo "## Risks"
printf '%b\n' "$RISKS"
echo
echo "## Verification"
echo "- Backend: \`python3 -m py_compile backend/app\`"
echo "- Frontend: \`npm run build\` + \`npx tsc --noEmit\`"
echo
echo "## Delivery Checklist"
echo "- [ ] Code completed"
echo "- [ ] Contracts synchronized"
echo "- [ ] Docs synchronized"
echo "- [ ] Build/lint/tests passed"
} > "$OUT_FILE"
echo "$OUT_FILE"