From 9250d1b85aee48c47bf682cfb8c054aba7725e32 Mon Sep 17 00:00:00 2001 From: trz-21 Date: Tue, 16 Jun 2026 09:09:42 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20spec-sync-check=20=ED=9B=85=EC=9D=98=20W?= =?UTF-8?q?iki=20=EB=A6=AC=EB=A7=88=EC=9D=B8=EB=93=9C=20=ED=83=80=EC=9D=B4?= =?UTF-8?q?=EB=B0=8D=C2=B7=EB=B2=94=EC=9C=84=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wiki 동기화가 반복 누락된 구조적 원인 2가지를 수정한다. 1. 타이밍: git diff(워킹트리)만 보던 것을 merge-base main...HEAD 커밋 diff와 합집합으로 확장. 피처 브랜치에서 커밋 후에도 Stop 시 리마인드가 유지된다(기존엔 커밋되면 diff가 비어 침묵). 2. 범위: frontend/src/features 만 매칭하던 패턴에 frontend/{app,src/shared} → Frontend, frontend/tests·backend/tests· .github/workflows → Harness 추가. #31(tests/e2e)이 탐지 안 되던 문제 해소. Closes #32 Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/hooks/spec-sync-check.sh | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/.claude/hooks/spec-sync-check.sh b/.claude/hooks/spec-sync-check.sh index 62e4288..d239732 100755 --- a/.claude/hooks/spec-sync-check.sh +++ b/.claude/hooks/spec-sync-check.sh @@ -9,16 +9,32 @@ git rev-parse --git-dir &>/dev/null || exit 0 # 스펙의 최종 현황은 GitHub Wiki(canonical). 구조적 코드 변경 시, # 갱신이 필요할 수 있는 Wiki 페이지를 비차단으로 리마인드한다. (.claude/github-workflow.md) -CHANGED=$(git diff --name-only 2>/dev/null; git diff --name-only --cached 2>/dev/null) -CHANGED=$(echo "$CHANGED" | sort -u) +# +# 탐지 소스 = 워킹트리/스테이징 diff ∪ 피처 브랜치 커밋 diff. +# diff(uncommitted)만 보면 커밋 직후 리마인드가 사라진다(작업 마무리 시점엔 이미 커밋됨). +# 따라서 현재 브랜치가 main/master가 아니면 merge-base 이후 커밋분도 함께 본다. (refs #32) +WORKING=$(git diff --name-only 2>/dev/null; git diff --name-only --cached 2>/dev/null) + +COMMITTED="" +BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) +if [ -n "$BRANCH" ] && [ "$BRANCH" != "main" ] && [ "$BRANCH" != "master" ]; then + BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD origin/main 2>/dev/null) + [ -n "$BASE" ] && COMMITTED=$(git diff --name-only "$BASE"...HEAD 2>/dev/null) +fi + +CHANGED=$(printf '%s\n%s\n' "$WORKING" "$COMMITTED" | sort -u | grep -v '^$') [ -z "$CHANGED" ] && exit 0 PAGES=() echo "$CHANGED" | grep -qE "^backend/src/(application|domain|adapters)/" && PAGES+=("Backend") echo "$CHANGED" | grep -qE "^backend/src/http/(handlers/|router\.rs)" && PAGES+=("API") -echo "$CHANGED" | grep -qE "^frontend/src/features/" && PAGES+=("Frontend") +echo "$CHANGED" | grep -qE "^frontend/(src/features/|src/shared/|app/)" && PAGES+=("Frontend") +echo "$CHANGED" | grep -qE "^(frontend/tests/|backend/tests/|\.github/workflows/)" && PAGES+=("Harness") [ ${#PAGES[@]} -eq 0 ] && exit 0 +# 중복 페이지 제거 +PAGES=($(printf '%s\n' "${PAGES[@]}" | sort -u)) + echo "⚠️ 코드 변경 감지 — GitHub Wiki 페이지 갱신이 필요한지 확인하세요:" >&2 -printf " - Wiki: %s\n" "${PAGES[@]}" >&2 +printf " - Wiki: %s\n" "${PAGES[@]}" >&2 \ No newline at end of file