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

22 KiB

schema_version sid resumed_from started_at ended_at user_request mode
2 20260622-092800 20260618-145152 2026-06-22T09:28:00+09:00 2026-06-22T10:05:00+09:00 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 스모크. 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 fill→presentation 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축필수 400)·AC-8(자동평균/수동 overall)·AC-9(B2 10자 경계)·AC-11(A1 commentView 8키)·AC-12(A2 마스킹 CASE)·AC-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 숨김), 정렬 토글(댓글 oldest↔newest, 리뷰 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

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: []