LogoSkills

/cc-quality:cleanup — 검증하다 남긴 것 되돌리기

QA·검증이 공유 환경에 남긴 변경을 대장(TMR)에 따라 자동 정리하고 되돌림을 재확인합니다 — 되묻지 않고 실행, 멱등.

/cc-quality:cleanup — 검증하다 남긴 것 되돌리기#

항목내용
실행 명령/cc-quality:cleanup
난이도●●○ 보통
인자[scope — 예: console-banner. 생략하면 .claude/qa/ 전체의 pending 을 처리]

한마디로#

QA를 하면서 스테이징에 남긴 변경(테스트 계정 등급 변경, 임시로 만든 데이터 등)을 기록에 따라 원래대로 되돌리고, 진짜 되돌아갔는지 다시 확인해 주는 명령입니다. "되돌릴까요?"를 묻지 않고 종류별 기본 규칙대로 실행합니다.

누가·언제 쓰나요#

  • QA 세션이 끝났는데 스테이징에 바꾼 것이 남아 있을 때
  • 이전 세션이 중간에 끊겨서 정리가 안 된 채로 남았을 때 (기록의 pending 을 이어받습니다)
  • 자동 파이프라인이 검증 단계 뒤에 스스로 호출합니다 — 사람이 직접 부르는 것은 뒷정리 확인용입니다

무엇을 해주나요#

  • 변경 기록(.claude/qa/{scope}/mutations.jsonl)을 읽어 아직 정리되지 않은 항목을 찾습니다.
  • 종류별 기본 규칙대로 처리합니다 — 내가 만든 것은 삭제, 남의 것을 고쳤으면 적어 둔 원래 값으로 복원, 로그처럼 지우면 안 되는 것은 그대로 둡니다.
  • 되돌린 뒤 다시 읽어서 확인합니다. 확인 안 된 되돌림은 완료로 세지 않습니다.
  • 무엇을 되돌렸고, 무엇을 일부러 남겼고, 무엇을 못 되돌렸는지 표로 보고합니다.
  • 원래 값이 기록에 없어 되돌릴 수 없는 항목만 사람에게 올립니다(권고안과 함께).
  • 여러 번 실행해도 안전합니다 — 이미 정리된 항목은 건너뜁니다.

어떻게 쓰나요#

# 전체 — 모든 스코프의 미정리 항목 처리
/cc-quality:cleanup

# 특정 스코프만
/cc-quality:cleanup console-banner

# 무엇을 할지만 보기 (실제로 되돌리지 않음)
/cc-quality:cleanup --dry-run

# 일부러 남긴 항목까지 전부 정리 (스프린트 종료 시)
/cc-quality:cleanup --include-intentional
옵션기본값설명
--dry-runoff처리 계획만 출력 (되돌리지 않음)
--include-intentional off 의도적으로 남긴 항목(C6)까지 정리 — 재현용 데이터를 더 이상 쓰지 않을 때
--scope <name>전체대상 스코프 (인자로 줘도 동일)

⚙️ 상세 옵션·실행 명세 (개발자 / AI 에이전트용)

Design Principle#

qa-environment-hygiene 스킬의 명시 호출 래퍼다. 환경 등급(E0/E1/E2), CBM 규칙, 변이 등급 C1~C6 별 기본 처리, 에스컬레이션 2종, TMR 포맷은 전부 그 스킬이 SoT 이며 여기 복제하지 않는다. 이 커맨드가 추가하는 것은 ① 대장 탐색 ② 처리 순서 ③ 멱등 재개 ④ 보고 형식뿐이다.

Steps#

  1. 대장 수집.claude/qa/*/mutations.jsonl (또는 --scope 의 것) 을 읽는다. 파일이 없으면 "정리할 것 없음"으로 정상 종료한다 (에러 아님).
  2. 대상 선별statuspending 인 것 + --include-intentionalleft-intentional. 이미 reverted-verified / irreversible / escalated 인 항목은 건너뛴다 (멱등성의 근거).
  3. 처리 순서 — 의존 역순으로 되돌린다: 나중에 만든 것부터(LIFO), 자식 레코드 → 부모 레코드, 필드 복원 → 레코드 삭제. 순서를 어기면 외래키·참조 때문에 되돌림이 실패한다.
  4. 등급별 실행 (스킬의 C1~C6 표 그대로):
    • C1 → 생성한 레코드 삭제 (프로젝트에 soft-delete 관례가 있으면 그것을 따른다 — cc-serverpod:serverpod-soft-delete)
    • C2 → 복원 전 충돌 확인 필수 (스킬의 "C2 복원 전 충돌 확인" 표): 현재 값을 먼저 읽어 current == afterbefore 로 복원 / current == before 면 쓰지 않고 no-op 기록 / 그 외(제3의 값)면 복원하지 않고 escalated(충돌)before/after/current 를 함께 남긴다. before 를 무조건 쓰면 재확인이 통과하면서 남의 변경을 지운다 (조용한 데이터 손실)
    • C3 → 실행하지 않고 에스컬레이션 1 로 모은다 (추측 복구 금지)
    • C4 → 남긴다 (지우려 시도하지 않는다)
    • C5 → 되돌릴 수 없음. 통지 문안만 정리
    • C6 → 기본은 남김. --include-intentional 이면 C1/C2 규칙으로 처리
  5. 되돌림 재확인 — 각 항목을 되돌린 뒤 다시 읽어 before 와 일치하는지 확인한다. 불일치면 1회 재시도 → 그래도 불일치면 escalated (성공으로 기록하지 않는다).
  6. 대장 갱신 — 각 TMR 의 status 를 확정 상태로 갱신한다. 대장은 append-only 이므로 갱신은 상태 전이 레코드를 덧붙이는 방식으로 남긴다 (원본 줄을 고쳐 쓰지 않는다).
  7. 보고 — 아래 형식.

Output#

🧹 QA 환경 정리 — scope: console-banner

| TMR | 대상 | 등급 | 처리 | 확인 |
|-----|------|------|------|------|
| TMR-01 | test01.memberType | C2 | 교강사 → 일반 복원 | ✅ 재조회 일치 |
| TMR-02 | banner #12 | C2 | 필드 변화 없음 | ✅ 저장 전후 동일 |
| TMR-03 | 콘솔 조회 이력 12| C4 | 남김 (감사 로그) ||

정리 3/ 남김 1/ 에스컬레이션 0

에스컬레이션이 있으면 표 아래에 권고안 1개 + 근거를 먼저 출력한 뒤 확인 질문 1개. --dry-run 은 "처리" 열을 계획형("→ 복원 예정")으로 출력하고 대장을 갱신하지 않는다.

Error Handling#

상황행동
대장 파일 없음"정리할 것 없음" 정상 종료 (0건 보고)
대장 줄이 깨짐(JSON 파싱 실패)그 줄만 건너뛰고 경고 — 나머지는 정리한다. 건너뛴 줄은 보고에 남긴다
되돌림 API/화면 접근 실패1회 재시도 → 실패면 pending 유지 (다음 실행이 이어받는다). 성공으로 기록하지 않는다
before 필드 없음C3 로 취급 → 에스컬레이션 1
복원 직전 현재 값이 after/before 둘 다 아님복원하지 않고 escalated(충돌) → 에스컬레이션 1-b. 쓰지 않는 쪽이 항상 되돌릴 수 있다
E2(실서비스) 대상 발견정리 시도하지 않고 즉시 에스컬레이션 2 (영향 범위·식별자 보고)
  • qa-environment-hygiene 스킬 — 판정 로직 SoT (환경 등급·CBM·C1~C6·TMR·에스컬레이션)
  • /cc-quality:bug-report — 재현 시도가 변이를 만드는 지점 (CBM 선기록의 주 발생지)
  • /cc-quality:feature-qa — 정적 채점이라 변이 없음. 이 커맨드와 무관
  • cc-dev:parallel-test-env · cc-serverpod:serverpod-local-fullstack — 애초에 E1 변이를 피하는 경로