#!/bin/bash
# .claude/hooks/stop-check-sync.sh
# arcrun Stop hook
#
# 職責：session 結束前檢查 code 變動是否有對應的 SDD / tasks.md 更新
# 退出 code：不 block，只警告

set -o pipefail

# 檢查 docs/3-specs 下本次 session 是否有變動
SPECS_DIFF=$(git -C "$(pwd)" status --porcelain -- 'docs/3-specs/' 2>/dev/null | head -20)
CODE_DIFF=$(git -C "$(pwd)" status --porcelain -- '*.go' '*.ts' '*.tsx' '*.py' 'cypher-executor/' 'registry/' 'cli/' 2>/dev/null | head -20)

if [[ -n "$CODE_DIFF" && -z "$SPECS_DIFF" ]]; then
  cat >&2 <<EOF

⚠️  Stop hook 警告（by arcrun hook）

偵測到本 session 有程式碼變動，但 docs/3-specs/ 下的 SDD 文件沒有任何變動。

未 commit 的程式碼變動：
$(echo "$CODE_DIFF" | head -10)

請在結束前確認：
  1. 對應的 tasks.md 是否已更新 [x]？
  2. 是否有架構變動需要更新 design.md？
  3. 是否有 SDD 範圍外的 change 未標記？

SDD 協議要求：code 和 SDD 必須同步更新。
參考：.claude/rules/00-sdd-protocol.md

EOF
fi

# 若有暫存的 tasks.md 變動，提醒 commit
TASKS_DIFF=$(git -C "$(pwd)" status --porcelain -- 'docs/3-specs/**/tasks.md' 2>/dev/null | head -5)
if [[ -n "$TASKS_DIFF" ]]; then
  cat >&2 <<EOF

📝 提醒：tasks.md 有未 commit 的變動
$(echo "$TASKS_DIFF")
記得在結束前 commit。

EOF
fi

exit 0
