bibimbap/.atp/work-session/20260622-092800/report.md

251 lines
22 KiB
Markdown

---
schema_version: 2
sid: 20260622-092800
resumed_from: 20260618-145152
started_at: 2026-06-22T09:28:00+09:00
ended_at: 2026-06-22T10:05:00+09:00
user_request: |
W3-2 댓글/리뷰 고도화 구현 — 직전 인터뷰 세션(20260618-145152)의 FINAL SPEC 으로 구현 재개.
진행 방식 = FINAL SPEC 전체 한 번에 구현(옵션1, 사용자 확정). 단계 분리 없음.
스코프: 다축 평점(game_review_axes) + 육각형 SVG 레이더 + A1~A3 일관성 + B1~B3 목록/검증
+ C1~C6 UX + game_review_stats 집계뷰. 검증: L1 31건 회귀 PASS + 신규 단위테스트, L3 스모크.
mode: team (orchestrator + advisors + workers)
---
# Advisor Invocation Decision Log
# 각 advisor 호출/스킵 판단 즉시 1줄 append
- advisor: requirements-advisor
decision: skip
rationale: '직전 인터뷰 세션이 FINAL SPEC 까지 요구 분해 완료. 사용자 결정 잠금(옵션1). 재분해 불필요.'
checked_at: 2026-06-22T09:28:00+09:00
- advisor: research-advisor
decision: skip
rationale: 'Grounded Baseline(직전 report) + design-advisor 자체 코드 재확인으로 충분. graphify-lookup 도 생략 — 변경 대상 7파일이 직전 세션에 정밀 grounding 됨, 코드 무드리프트(W3-2 코어 이후 dev seed 커밋만).'
checked_at: 2026-06-22T09:28:30+09:00
- advisor: design-advisor
decision: call
rationale: 'FINAL SPEC → 오픈질문0 확정 설계도. 미결 마이크로결정(is_rating_manual·axis 저장형·sort enum·SVG 좌표·a11y·B3 유틸·테스트목록) 확정 필요.'
checked_at: 2026-06-22T09:28:30+09:00
- advisor: implementation-advisor
decision: call
rationale: '14파일 영향(신규6+변경8) 멀티파일 + worker 분산 필요. design 산출이 파일소유권맵까지 확정 — 직접구현 대신 implementation-advisor 의 worker fan-out 으로 충돌회피.'
checked_at: 2026-06-22T09:34:00+09:00
# C3 정정 (직전 report 오분류 교정 — 근거 확정)
# 직전 report: C3 를 "W2-3 동결 해제·고위험·§6 게이트"로 표기 → 과한 분류.
# 근거 (docs/work-log/2026-06-17-jam-platform-roadmap.md):
# :63 "범위 = 잼 평가만. 댓글/리뷰 스키마 자체는 W3에서 설계(동결 묶음 아님)"
# :201 "잼 평가(심사/투표/시상) 스키마만 동결. 댓글/리뷰 스키마는 W3-2에서 별도 설계"
# :202 "댓글/리뷰 분리 = 일반기능으로 재분류"
# 판정: game_review_stats = game_reviews(W3-2 테이블) 위 읽기전용 집계뷰. 동결 잼평가 테이블 무관.
# → §6 파괴적 게이트·사용자 재확인 불필요. 일반 CREATE VIEW.
# → game-reviews-ddl.sql:63 "집계뷰 미신설" 보수 주석도 갱신.
# Summary
W3-2 댓글/리뷰 고도화 FINAL SPEC 전체 한 묶음 구현 완료. resumed_from 20260618-145152.
- C3 정정: game_review_stats 집계뷰 = W3-2 일반 DDL(고위험 게이트 해제, roadmap:63,201,202 근거).
- DDL: game_review_axes(6축·리뷰당6행)·game_comments.updated_at·game_reviews.is_rating_manual·game_review_stats 뷰 — 멱등 ALTER/CREATE (ddl + db/schema.sql 동기화, C3 보수주석 갱신).
- 백엔드: A1 commentView 통일·A2 하이브리드 작성자명+탈퇴자 마스킹(QG-2 해결)·A3 edited/updated_at, B1 페이지네이션(limit+1 hasMore)+sort 화이트리스트(@SelectProvider, ${}0), B2 본문10자, B3 TextNormalizer, 다축 overall 자동평균/수동(is_rating_manual).
- 프론트(frontend-design 스킬): 육각형 SVG 레이더(요약+카드)·6축 radiogroup(roving tabindex+키핸들러)·C1~C6, production-grade 폴리시.
- 검증: L1 ./mvnw test 43/43 GREEN(회귀0). FIX LOOP 1회(테스트 계약 미갱신 8건, 컨트롤러 무버그 — body<10자 정당거부). L2 skip. L3 = needs_user_verification.
- 신규 4파일 + 13 수정. 미커밋(프로젝트 정책: 명시 요청 시만).
# Invocations
- agent: design-advisor
phase: design
model_choice: { tier: large, slug: opus, effort: high, rationale: '신규 SVG 좌표수학+스키마설계+보안민감 sort enum+a11y 판단천장 높음' }
artifact: .atp/work-session/20260622-092800/implementation/design.md
result: 'PASS 오픈질문0 확정 설계도. concerns 7건. self-verification passed.'
- agent: implementation-advisor
phase: implementation
model_choice: { tier: large, slug: opus, effort: high, rationale: '멀티파일 멀티워커 조율 + 보안가드(${}금지)+회귀보호 천장 높음' }
result: 'PASS BUILD SUCCESS(main+test, JDK21). 16파일. ${} 0건(rg 3매치=주석). axis_key 6키 4곳 정합. 리뷰 INNER JOIN 보존. is_rating_manual 실사용. advisor 직접보정 4건(GameController 영향맵누락/테스트 worker충돌 재작성/NUL escape/@MockBean).'
artifact: .atp/work-session/20260622-092800/implementation/ownership.md
concerns: ['설계 §1 영향맵에 GameController.gameDetail SSR 호출지점 누락컴파일깨짐(보정완료)', 'applyReviewGate: 본인리뷰 첫페이지밖일때 폼노출 가능(서버 409 최종차단, 비차단)', '댓글 더보기 낙관삽입 2페이지+ 정렬어긋남 가능(리뷰는 page0 재조회로 정합, 비차단)']
- agent: frontend-design (skill pass)
phase: implementation-fe
model_choice: { tier: large, slug: opus, effort: high, rationale: 'production-grade UI 디자인 사용자 명시 요청(frontend-design 스킬 활용)' }
result: '(L1 green 진입)'
- agent: verification-advisor (1차)
phase: verification
model_choice: { tier: medium, slug: sonnet, effort: medium, rationale: 'L1 테스트 실행+AC 판정' }
result: 'RED GameReviewControllerTest 8건 FAIL(전부 400). AC-5/4/6 PASS. 댓글·CSRF·context 무회귀.'
- agent: implementation-advisor (FIX LOOP §2.6)
phase: implementation-fix
model_choice: { tier: large, slug: opus, effort: high, rationale: '회귀단계 진단+수정' }
result: 'PASS 근본원인=테스트 계약 미갱신(컨트롤러 무버그). body<10자 7곳10자+ 교체, 행위 assertion 보존, 계약 무약화. main 무수정. ./mvnw test 43/43 GREEN 회귀0.'
artifact: .atp/work-session/20260622-092800/implementation/fix-L1.md
- agent: verification-advisor (2차 재판정)
phase: verification
model_choice: { tier: medium, slug: sonnet, effort: medium, rationale: 'L1 독립 재판정 + 신규행위 AC 커버리지' }
result: 'GREEN 확정 43/43(Failures 0). AC-1/3 PASS, AC-7~13 전부 테스트 실재+assertion 확인, AC-4/5/6 재확인. 로그 clean. L2 skip(원격DB). GAP 0.'
artifact: .atp/work-session/20260622-092800/verification.md
- agent: frontend-design (skill pass, fork)
phase: implementation-fe
model_choice: { tier: large, slug: opus, effort: high, rationale: 'production-grade UI 사용자 명시 요청(frontend-design 스킬)' }
result: 'PASS game-detail.jsp 단일파일 승격. 육각형 레이더 시그니처화(방사 그라디언트·글로우·등장모션), 미터바 범례, 히어로 요약카드, 6축입력/정렬토글/더보기 폴리시. 기존 앰버/크림 언어 확장( 디자인시스템0·외부의존0). JS로직 보존(유일변경=poly fillpresentation attr). a11y/데이터계약 보존. 프리뷰 HTML 산출.'
artifact: .atp/work-session/20260622-092800/artifacts/w3-2-ui-preview.html
# Decisions
- C3 재분류: game_review_stats 집계뷰 = 일반 DDL(고위험 게이트 해제). roadmap:63,201,202 근거. [2026-06-22]
- is_rating_manual 컬럼 채택: overall 자동평균(false)/수동선택(true) 출처 구분. 멱등 ADD COLUMN DEFAULT false. [2026-06-22]
- axis_key 저장형 = 영문 snake 6종 순서고정(immersion/creativity/controls/completeness/sound/visual) = 육각형 0~5 1:1. [2026-06-22]
- sort 안전 = @SelectProvider 컴파일타임 상수 ORDER BY 5분기. 사용자입력enum 매칭만, ${} 보간 0. offset/limit=#{}. [2026-06-22]
- pagination = limit+1 hasMore (COUNT 회피). axes 재저장 = delete-all+insert-6 (TX 원자성). [2026-06-22]
- SVG 육각형 = JS 런타임 buildHexRadar(scores,cx,cy,R). role=img + 축점수 텍스트대체. [2026-06-22]
- db/schema.sql 동기화 필수 (dev 컨테이너 부트스트랩). game-reviews-ddl.sql:63 + schema.sql:136-137 C3 보수주석 갱신. [2026-06-22]
# user_signals
positive: []
negative: []
# verified_by_me
- L1: unit+regression ./mvnw test 43/43 GREEN (Failures 0, Errors 0). 기존 31건 무회귀. verification-advisor 2차 독립 재판정.
- L1 신규행위: AC-7(6축필수 400AC-8(자동평균/수동 overallAC-9(B2 10자 경계AC-11(A1 commentView 8키AC-12(A2 마스킹 CASEAC-13(A3 updated_at) 전부 테스트 실재+PASS.
- 보안: AC-5 ${} 동적치환 0건(sort=enum 고정 ORDER BY 상수, offset/limit=#{}). AC-4 sort5 분기. AC-6 axis_key 6키 4곳 정합.
- L2: contract-DB skipped:원격DB/dev 미기동.
- 로그 스캔: clean (Mockito JDK agent warn·trailing-slash warn = known-ok 비차단).
# needs_user_verification
- **DDL 적용**: docs/game-reviews-ddl.sql 멱등 블록(+ db/schema.sql) dev/운영 DB 적용. 신규 객체 = game_review_axes 테이블·game_review_stats ·game_comments.updated_at·game_reviews.is_rating_manual. 전부 비파괴 ADD/CREATE. (dev = schema.sql 재부트 or ddl 수동 실행.)
- **L3 브라우저 스모크**(DDL 적용 dev 실게임 대상 seed-dev.sql 더미게임. 폴백 정적게임은 댓글/리뷰 미동작):
- 육각형 레이더 렌더(요약 + 개별 리뷰 카드), 라이트/다크 테마.
- 6축 별점 키보드(Tab 1회 진입 roving, ←→↑↓·Home·End, aria-checked 토글), 6위젯 독립.
- 페이지네이션 "더보기"(21건+ append, hasMore=false 숨김), 정렬 토글(댓글 oldestnewest, 리뷰 newest/rating_desc/rating_asc).
- 다축 입력overall 자동평균 표시 + 수동 덮어쓰기, B2 10자 안내, C4 글자수 카운터, C2 상대시각, C1 submit 잠금.
- 서버집계 요약(평균 소수1자리, review_count=0 "아직 평가 없음").
- **UI 프리뷰 열람**(선택): .atp/work-session/20260622-092800/artifacts/w3-2-ui-preview.html 브라우저로 열어 컴포넌트 시각 확인.
# graph_refresh
판정: fully-stale (src + docs scope). graph-refresh-checker 근거 = W3-2 코어(커밋됨)+본세션 고도화로 컨트롤러2·매퍼·data·DDL 신규 기존 384노드/613엣지에 댓글/리뷰 토폴로지 부재. 삭제대상 없음.
처리: 완료(no-defer 준수). 커밋 b9d836d 직후 /graphify src/ + docs/ 재생성(메인스레드 fork Agent spawn 제약으로 폴백). src=536노드/1206엣지/20커뮤니티(리뷰 다축·댓글 commentView·edited 토폴로지 반영), docs=119노드/164엣지/15커뮤니티(C3 재분류·육각형·axes/stats DB스키마·검증교훈 군집). docs/graph/index.md source_commit=b9d836d·Scopes 2행 갱신. transient 캐시 정리 확인. graph 메타 커밋 375a2de(본체 .gitignore).
# open_items
- 미커밋 변경(작업단위 속함): 13 수정 + 4 신규(data/ReviewAxisRow.java·mapper/GameReviewAxesMapper.java·mapper/GameReviewStatsMapper.java·util/TextNormalizer.java). 커밋은 CLAUDE.md 정책상 사용자 명시 요청 시만 세션 종료 사용자 확인.
- work-session 디렉토리(20260622-092800, 20260618-145152) untracked 동일 커밋 정책.
- 비차단 후속(차기 세션 후보): GET /reviews/mine(본인리뷰 즉시식별 applyReviewGate 정밀화), 댓글 더보기 page0 재조회 전환(낙관삽입 정렬정합), 기존 리뷰 axes 백필(현재 NULL 허용), 설계 영향맵에 SSR 호출지점(GameController.gameDetail) 포함.
# Retrospective
```yaml
Retrospective:
signals:
positive:
- quote_or_paraphrase: "(세션 report) frontend-design 스킬 fork 위임 → 스킬 호출+단일파일 폴리시+프리뷰 render-verify, 가드레일(JS로직·a11y·계약 보존) 준수. 다축/육각형/sort안전(${}0) 한 묶음 구현 + L1 43/43 GREEN."
about: frontend-design 스킬을 컨텍스트 상속 fork 로 위임하고, 단일 JSP 파일 폴리시·프리뷰 HTML 산출·가드레일 준수까지 한 단계에 완료한 패턴 전체
- quote_or_paraphrase: "(invocation log) implementation-advisor 직접보정 4건 완료 — 영향맵 누락 보정·테스트 worker충돌 재작성·NUL escape·@MockBean"
about: 설계 누락이 발생했음에도 implementation-advisor 가 자가 보정으로 컴파일 깨짐을 세션 내에서 흡수해 사용자 에스컬레이션 없이 완료한 점
negative:
- quote_or_paraphrase: "(implementation-advisor concerns) 설계 §1 영향맵에 GameController.gameDetail SSR 호출지점 누락 → 컴파일깨짐(보정완료)"
about: design-advisor 가 §1 파일 영향맵 작성 시 API 컨트롤러만 기재하고, 변경된 매퍼/data 심볼을 SSR 뷰모델에서 호출하는 GameController.gameDetail 을 누락한 것
structural: true
- quote_or_paraphrase: "(verification-advisor 1차) GameReviewControllerTest 8건 FAIL — 전부 400. 근본원인=테스트 계약 미갱신(body<10자). 컨트롤러 무버그."
about: B2 본문 최소 10자 검증계약 신규 도입 시, W-TEST worker 가 기존 테스트 fixture body 를 계약 정합 감사 없이 재작성하여 기존 픽스처가 여전히 10자 미만 문자열을 전송한 것
structural: true
what_went_well:
- "frontend-design 스킬 fork 위임 패턴: 컨텍스트 상속으로 BE API 계약·기존 JS 로직·a11y 가드레일을 그대로 이어받아, 육각형 SVG 레이더·6축 radiogroup·C1~C6 를 단일 JSP 파일 승격 + 프리뷰 HTML 산출까지 한 묶음 완료. 외부 의존 0·기존 디자인 언어 확장·a11y 보존 전부 통과. 비자명 판단(스킬 fork + 단일파일 폴리시 조합)이 검증됨."
- "C3 phantom 게이트 해소: 직전 report 의 '동결 해제·고위험·§6 게이트' 표기를 근거 문서(roadmap:63,201,202) 직접 확인으로 일반 DDL 재분류. 불필요한 사용자 재확인 경로 없이 세션 내 정정 완료."
- "FIX LOOP 자가흡수: 테스트 RED 8건 발생 후 implementation-advisor 가 '컨트롤러 무버그/테스트 계약 미갱신' 근본원인을 정확히 진단하고, 행위 assertion 전부 보존·계약 약화 없이 픽스처만 교체 → 사용자 에스컬레이션 0."
- "sort 안전 패턴: @SelectProvider + enum 화이트리스트 → 고정 ORDER BY 상수 5분기. ${} 동적 보간 0건 rg 전수 확인. 보안 AC-5 최초 시도 PASS."
what_to_improve:
- "design-advisor 영향맵에 SSR/뷰모델 호출지점 포함 필수: §1 파일 영향맵은 API 컨트롤러뿐 아니라 변경 심볼(매퍼 메서드 시그니처·data 필드)을 호출하는 SSR 컨트롤러(GameController.gameDetail 등) 와 JSP 뷰모델 바인딩 지점까지 포함해야 한다. 누락 시 implementation 단계 컴파일 깨짐."
- "계약 강화(최소길이·필수필드) 시 기존 테스트 fixture 전수 계약 정합 감사 필수: 신규 검증계약(B2 본문 10자·6축 필수)을 도입할 때, 신규 테스트 케이스 추가만이 아니라 기존 테스트 fixture 가 신규 계약을 충족하는지 전수 감사를 W-TEST 체크리스트에 명시해야 한다. 이번 8건 FAIL 은 모두 컨트롤러 버그 없이 fixture 미갱신 단독 원인."
- "freeze/동결 인접성만으로 고위험 게이트 분류 금지 — 근거 문서 직접 확인 선행: '동결 구역 인근 작업'이라는 표면적 유사성만으로 §6 게이트 표기 시 phantom 게이트가 누적된다. 동결 범위를 근거 문서(ADR/roadmap 줄 번호)로 확인 후 분류해야 한다."
memory_candidates:
- name: design-impact-map-includes-ssr-callers
type: feedback
description: "design-advisor §1 영향맵에 변경 심볼의 SSR/뷰모델 호출지점 포함 필수"
body_draft: |
## Why
W3-2 고도화 세션(20260622)에서 design-advisor 가 GameController.gameDetail 의 SSR 호출지점을
영향맵에서 누락 → implementation 단계 컴파일 깨짐, advisor 직접 보정 필요.
API 컨트롤러 목록만으로는 "변경 심볼을 참조하는 비API 코드" 를 놓친다.
## How to apply
design 단계 §1 파일 영향맵 작성 시:
1. 변경 매퍼/data 심볼 목록 확정.
2. 해당 심볼을 호출하는 SSR 컨트롤러(예: GameController.gameDetail) 와
JSP 뷰모델 바인딩 지점을 rg 로 전수 확인(패턴: 심볼명).
3. API 컨트롤러와 SSR 컨트롤러를 구분해 양쪽을 영향맵에 기재.
재현성: Spring MVC SSR + API 컨트롤러 혼재 구조에서 항상 발생 가능.
rationale_for_saving: "API/SSR 혼재 Spring MVC 에서 구조적으로 재발 가능. 코드/git log 으로 유도 불가 — 설계 단계 체크리스트 규약에만 존재."
signal_source: negative
docs_sync_target: /Users/wemadeplay/workspace/stz/bibimbap/docs/development/verification-strategies.md
memory_optional: true
- name: contract-upgrade-fixture-audit
type: feedback
description: "검증계약 강화 시 기존 테스트 fixture 전수 계약 정합 감사를 W-TEST 체크리스트에 포함"
body_draft: |
## Why
W3-2 고도화 세션(20260622)에서 B2(본문 10자)·6축 필수 계약을 신규 도입 후
W-TEST worker 가 기존 fixture body 를 갱신하지 않아 8건 전부 400 FAIL.
컨트롤러는 무버그였고, fixture 미갱신 단독 원인.
신규 테스트 추가만으로는 기존 픽스처가 새 계약을 충족하는지 보장되지 않는다.
## How to apply
W-TEST worker 지시에 다음 감사 항목 추가:
1. 새로 도입된 검증 계약(최소길이·필수필드·enum 범위 등) 목록화.
2. 기존 테스트 fixture(요청 본문·파라미터) 전수 스캔 — 신규 계약 조건 충족 여부 확인.
3. 미충족 fixture 갱신(행위 assertion 보존 전제).
4. "우연통과" 제거: 거부 경로 테스트의 fixture 도 신규 계약을 충족하는 값으로 올려
실제 거부 사유(상위 분기)까지 도달함을 보장.
재현성: 컨트롤러 검증 강화 시마다 발생 가능.
rationale_for_saving: "컨트롤러 검증 강화는 반복 발생. W-TEST spawn 지시에 표준 체크리스트로 넣지 않으면 매번 재발."
signal_source: negative
docs_sync_target: /Users/wemadeplay/workspace/stz/bibimbap/docs/development/verification-strategies.md
memory_optional: true
- name: freeze-scope-requires-doc-evidence
type: feedback
description: "동결/freeze 인접 작업은 근거 문서 줄 번호 확인 후 게이트 분류 — 표면 유사성만으로 §6 게이트 금지"
body_draft: |
## Why
직전 인터뷰 세션(20260618-145152) report 가 C3(game_review_stats 집계뷰)를
"W2-3 동결 해제·고위험·§6 게이트"로 표기. 실제 동결 대상은 잼 평가(심사/투표/시상) 스키마이며
댓글/리뷰 스키마는 W3-2 별도 설계(roadmap:63,201,202). 표면적 "평점 집계" 유사성만으로
동결 묶음에 포함한 오분류. 본 세션에서 근거 문서 직접 확인으로 phantom 게이트 해소.
## How to apply
동결/freeze 인접 표기 전:
1. 동결 선언 근거 문서(ADR·roadmap·work-log)를 실제로 열어 동결 범위 정의를 줄 번호로 확인.
2. 현재 변경 대상 테이블/뷰/심볼이 그 범위 정의에 명시적으로 포함되는지 판단.
3. 포함 확인 시만 §6 게이트 표기. 인접·유사 용어만으로 분류 금지.
rationale_for_saving: "동결 경계 판단은 코드에서 유도 불가. 문서 확인 없이 유사성 추론으로 phantom 게이트가 누적되면 불필요한 사용자 에스컬레이션 반복."
signal_source: negative
docs_sync_target: /Users/wemadeplay/workspace/stz/bibimbap/docs/development/verification-strategies.md
memory_optional: true
- name: frontend-skill-fork-pattern
type: feedback
description: "production-grade UI 구현은 frontend-design 스킬 fork(컨텍스트 상속) 위임 + 단일파일 폴리시 + 프리뷰 render-verify 조합이 검증됨"
body_draft: |
## Why
W3-2 고도화 세션(20260622)에서 육각형 SVG 레이더·6축 radiogroup·C1~C6 를
frontend-design 스킬 fork 로 위임, 단일 JSP 파일(game-detail.jsp) 승격,
프리뷰 HTML 산출, 가드레일(JS로직 보존·a11y·BE API 계약) 전부 준수.
외부 의존 0·기존 앰버/크림 디자인 언어 확장. L1 43/43 GREEN 이후 진입 순서도 검증됨.
## How to apply
복잡 UI(SVG·a11y·다중 JS 인터랙션) 구현 시:
1. L1 전체 GREEN 확인 후 frontend-design 스킬 fork 진입.
2. 단일파일 폴리시: JSP 1파일 안에서 완결(새 파일 0).
3. 가드레일 명시: 기존 JS 로직 보존 / a11y(role, aria, textContent) / BE API 계약 무변경.
4. 프리뷰 HTML 산출(artifacts/): 컨포넌트 시각 확인용.
외부 JS 라이브러리·CDN 도입 없이 인라인 SVG + vanilla JS 패턴 유지.
rationale_for_saving: "비자명 조합 판단(스킬 fork + L1 완료 후 진입 순서 + 단일파일 폴리시)이 실전 검증됨. 동일 패턴 재현 시 참고."
signal_source: positive
docs_sync_target: /Users/wemadeplay/workspace/stz/bibimbap/docs/development/verification-strategies.md
memory_optional: true
protocol_feedback:
- "design-advisor 체크리스트 보강(structural): §1 파일 영향맵 작성 규약에 'SSR 컨트롤러·뷰모델 호출지점 포함' 항목 추가 필요. 현행 규약은 API 컨트롤러 나열에 집중하여 SSR 호출지점이 반복 누락될 구조적 허점이 있다. verification-strategies.md 또는 design-advisor 가이드에 명시 권고."
- "W-TEST worker 지시 표준화(structural): 컨트롤러 검증 계약이 강화(최소길이·필수필드 추가)되는 경우, W-TEST worker 지시에 '기존 fixture 전수 계약 정합 감사' 단계를 의무 체크리스트 항목으로 포함 필요. 현행 W-TEST 지시에는 '신규 테스트 추가'만 있고 '기존 fixture 갱신 감사'가 없어 동일 패턴 재발 가능."
- "§6 게이트 분류 기준 명문화: 동결/freeze 경계 판단을 근거 문서(ADR/roadmap 줄 번호) 확인 없이 표면 유사성만으로 수행하는 것을 agent-team-protocol 에서 명시 금지. '동결 구역 인접 = 고위험 게이트' 추론 차단 규칙 추가 권고."
applied_changes: []
```