Skip to content

feat(detect): 뜻이 같은 이전 값도 되돌림으로 표시 (SIL-104) - #59

Merged
k0nghaa merged 7 commits into
mainfrom
feat/sil-104-revert-mark-same-meaning
Oct 15, 2026
Merged

k0nghaa merged 7 commits into
mainfrom
feat/sil-104-revert-mark-same-meaning

Conversation

@k0nghaa

@k0nghaa k0nghaa commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

관련 이슈

SIL-104 [개발] 뜻이 같은 이전 값도 되돌림으로 표시하기 (detect.change.revert-mark) — https://linear.app/pj-3/issue/SIL-104 (SIL-66 하위)

무엇을 바꿨나요

1. 글자 다듬기 규칙 (core + DB)

  • 되돌림을 비교할 때만 글자를 다듬어요: 전각→반각(NFKC), 공백 모두 지우기, 끝 마침표(. 。) 지우기.
  • 저장되는 값은 사람이 쓴 글자 그대로예요.
  • core normalizeStandardValue와 DB normalize_standard_value는 같은 규칙이에요. 공백 글자 목록도 두 쪽에 똑같이 직접 적었어요.
  • 새 마이그레이션 20261015100000_revert_normalize.sql은 save_standard의 되돌림 비교 부분만 바꿔요. 나머지는 직전 정의와 같아요.
  • 검사 파일 supabase/tests/revert_normalize.test.sql을 더했어요. 예: "4개" → "5개" → "4 개."이면 v1 되돌림으로 표시.

2. T1 (작업 중 바뀐 결정 사항 확인)

  • 결정 사항을 읽자마자(CLAUDE.md 1-1) 바꿀 값을 예전 버전과 비교해요.
  • 띄어쓰기 등만 다르거나 뜻이 같으면 되돌림으로 봐요. 이때 값을 그 버전의 글자 그대로 바꿔서 save_standard로 저장해요. DB는 글자를 비교해서 되돌림으로 표시해요.
  • 되돌림이면 선택 창 질문만 바꿔요. 선택지는 그대로예요(T1_COPY.revert).
    • 처음 묻기: "v{N}의 값으로 되돌리는 작업이에요. 그래도 진행할까요?"
    • ③ 뒤: "v{N}의 값으로 되돌려 등록할까요?"
    • ③ 뒤, 직접 요청일 때: "달라지게 되는 기존 결정 사항 내역을 확인했나요? v{N}의 값으로 되돌려 등록할까요?"
  • "vN으로 되돌려 줘"나 "이전 버전으로 되돌려 줘" 같은 요청도 직접 요청으로 T1 화면을 거쳐요.
    • 화면 순서: 다른 결정 사항 화면 → ③ → 되돌림 질문 → save_standard → ④
    • ③·④ hook이 save_standard에만 붙어 있어서 revert 도구는 쓰지 않아요.
  • 되돌릴 버전의 값이 지금 값과 이미 같으면 저장하지 않고 안내를 띄워요(revertSame). 그 뒤에는 정해진 한 줄만 써요.
    ▌이전 버전 중 지금 값과 같은 결정 사항이 있어서 되돌리지 않았어요.
      [detect] v2: …
      지금 값: …
    반영하지 않았어요. 어떻게 진행할지 알려 주세요.
    

3. PR 경로

이 PR에서는 코드와 테스트만 만들었고, 실제 PR로 돌려 댓글·저장 결과를 보지는 않았어요. 머지 길("머지 전 저장", SIL-97)을 시험할 때 마이그레이션과 함께 확인해요.

  • 새 값이 예전 버전과 글자는 다르고 뜻만 같아 보이면(Claude findSameMeaning), 저장하지 않고 작성자에게 댓글로 물어요(maybe-revert). 댓글에는 할 일을 적어요: "Claude Code에서 '결정 사항 {id}를 v{N}으로 되돌려 줘'라고 말해 주세요".
  • Claude가 고른 버전은 실제 버전 목록에 있을 때만 써요.
  • 다른 모델이 대신 답한 경우에는 그 판단을 믿지 않고 unsure로 물어요.
  • "이미 반영됨" 판단도 같은 다듬기 규칙으로 비교해요.

4. 문서

  • CLAUDE.md T1 절차(1-1, 2, 5, 8, 9)를 고쳤어요.
  • apps/detect/README.md와 docs/설계-지침서.md를 바뀐 동작에 맞췄어요.

왜 바꿨나요

전에는 앞뒤 공백만 지운 뒤 글자가 똑같을 때만 되돌림으로 표시해서, "4개"↔"4 개"나 "4개"↔"네 개"는 잡히지 않았어요.

  • 뜻 비교는 AI가 하고, 되돌림 표시는 사람이 선택 창에서 확인한 뒤에 해요. "최대 4개"/"최소 4개"처럼 AI가 틀리기 쉬운 경우가 있고, is_revert는 알림과 지표에 바로 쓰이기 때문이에요.
  • 확인되면 예전 버전 글자를 그대로 저장해요. 그래서 최종 판단은 DB의 글자 비교 하나로 남아요.
  • DB의 글자 다듬기는 AI가 글자를 바꿔 주지 않는 경로(PR 경로, save_standard 직접 호출)를 위한 안전망이에요.

어떻게 확인했나요

  • pnpm check 통과 (vitest 239개 통과, 원래 건너뛰던 1개, notify node:test 83개 통과).
  • 별도 리뷰 에이전트가 검토했고, 지적 사항을 반영했어요(버전 기록 50개 읽기, 공백 목록 통일, 다른 모델이 대신 답한 경우 등).
  • 실제 Claude Code 세션에서 T1 되돌림 흐름을 직접 돌려 봤어요(경하).
    • 이전 버전으로 되돌리기: 다른 결정 사항 화면 → ③ → 되돌림 질문 → 저장
    • 지금 값과 같은 버전으로 되돌리기: revertSame 안내와 마지막 한 줄

직접 확인하지 못한 부분

  • SQL: 로컬에 psql이 없어서 마이그레이션과 revert_normalize.test.sql을 실제 DB에서 돌려 보지 못했어요. SIL-97 시험 때 Supabase SQL Editor에서 마이그레이션을 올린 뒤 검사 파일을 실행해요(특히 정규식 대괄호 안의 \uXXXX). T1 되돌림은 예전 글자를 그대로 저장하므로 마이그레이션 없이도 표시돼요.
  • PR 판단 정확도: 판단 지시문(prompt.ts)을 바꿨지만, PR 10개 정확도 시험과 findSameMeaning 실제 Claude 호출은 돌리지 않았어요(SIL-97에서 확인).
  • 문구: T1 되돌림 문구(T1_COPY.revert, notices.revertSame)와 PR 댓글 문구는 초안이라 부건님 확인이 필요해요.
  • 되돌린 버전 기록: 같은 값을 가진 예전 버전이 여럿이면 가장 최근 버전으로 기록해요(처음부터 있던 save_standard 방식). 예: v1=v3=v5 값일 때 v5는 v3 되돌림으로 남아요. 실제로 취소된 변경(v4)과 맞아서 이렇게 두기로 했어요. 다만 "v1으로 되돌려 줘"라고 해도 v3으로 기록돼요.
  • 위키: detect.change.revert-mark의 값("같으면"의 범위)과 적용 범위 경로(packages/detect/src/judge/**, 지금 없는 경로)는 나중에 T1로 정리하기로 했어요.

🤖 Generated with Claude Code

@k0nghaa
k0nghaa merged commit 9fa6290 into main Oct 15, 2026
@github-actions

Copy link
Copy Markdown

바뀐 결정 사항 찾기 · PR #59

지금은 결정 사항을 저장하지 않고 결과만 알려 주는 기간이에요. 저장했다면 아래처럼 했을 거예요.

@k0nghaa 같은 PR을 두 번 판단했는데 결과가 달라서 저장하지 않았어요.

detect.change.revert-mark 새 값이 이전 버전과 같으면 되돌림으로 표시한다

  • 지금 값: 새로 저장할 값이 이전 버전 중 하나의 값과 같으면 되돌림으로 표시하고 어느 버전으로 돌아갔는지 적는다
  • 바뀐 것 같은 값: 새로 저장할 값이 이전 버전 중 하나의 값과 같으면(띄어쓰기·끝 마침표·전각 글자만 다른 값도 같은 값으로 본다) 되돌림으로 표시하고 어느 버전으로 돌아갔는지 적는다
  • 코드에서 바뀐 것: 되돌림인지 비교할 때 예전에는 글자가 똑같아야만 같은 값으로 봤는데, 이제는 띄어쓰기·끝 마침표·전각 글자만 다른 값도 같은 값으로 보고 되돌림으로 표시해요.
  • PR에 적힌 이유: 전에는 앞뒤 공백만 지운 뒤 글자가 똑같을 때만 되돌림으로 표시해서, "4개"↔"4 개"나 "4개"↔"네 개"는 잡히지 않았어요.
+    -- 공백·끝 마침표·전각 글자만 다르면 같은 값으로 봐요. 저장하는 값은 넣은 글자 그대로예요
+    if public.normalize_standard_value(v_latest.value) <> public.normalize_standard_value(v_value) then
+        and public.normalize_standard_value(value) = public.normalize_standard_value(v_value);
+export function normalizeStandardValue(text: string): string {
+| detect.change.revert-mark   | ✔ DB가 다듬은 글자로 되돌림을 표시해요. 뜻만 같으면 AI가 물어요                   |

결정 사항은 그대로 두었어요. 바뀐 게 맞으면 Claude Code에서 "결정 사항을 바꿔 줘"라고 말해 주세요. 바뀐 게 아니면 이 댓글은 넘어가셔도 돼요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant