#!/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"