# 웹20 검토 후 보정3건 — 웹21 (2026-10-15)

기준: 웹20 1fffa30. 게임 데이터26.103.002는 그대로이며 새 추출·수치 변경 없이 전투 정책·지표·보유 확인 화면을 수정했다. 수치는 해석 모형이며 인게임 실측값이 아니다. 정확한 배포ID/공개 검증은 dashboard-robust-fixes-deployment.json과 robust-fixes-validation-20261015.json에 별도로 기록한다.

## 기본 공격 정책

- smart(새 기본값): 다음 도술 준비 시각≥기본 공격 동작 종료일 때만 기본 공격. 저장 횟수 회복·거리·현재 검 조건, 예약된 첫 적중으로 검 조건을 충족할 미래 궁극기도 확인한다. 콤보2단도 같은 기준이다. 도술 일정을 유지하며 남는 시간만 공격한다.
- greedy(웹20): 빈 시간이면 기본 공격하고 동작이 끝날 때 도술을 쓴다. 이 선택으로 웹20 기준16안이 모두 복원된다.
- cancel(가정): 도술이 준비되는 시각에 기본 공격을 취소한다. 취소 전 적중은 유지하고 그 시각 이후 미적중 사건은 제거한다. 같은 시각의 쿨타임 준비가 기본 타격보다 우선한다. 실제 점유 시간으로 집계하고 취소 횟수를 표시한다. 취소하면 콤보 초기화, 동작 끝 기준 쿨타임은 취소 시각부터 세는 비교 가정이다. 실행 가능 여부는 실측 #1 대기다.
- smart가 기본 공격 끔보다 낮아지지 않음을 기준16안과 192조건(16안×단일/다수3명/PvP×10/120초×쿨타임 시작/끝 기준)에서 검증했다. 도술 시전 시간과 기본 공격을 뺀 도술 피해도 보존된다. smart가 greedy보다 항상 강하다는 뜻은 아니다. greedy의 지연이 우연히 더 유리한 순서를 만들 수도 있다.

## 기준16안 전후

PvE·60초·단일 대상1명·돌파0·방어 제외·각 덱의 저장 계열 레벨 유지. 값은 계수 %/초. 대조 사이트의 기본 공격 포함 여부는 미확인이다.

| 기준안 | 웹20 greedy | 웹21 smart | 기본 공격 끔 | smart−greedy |
|---|---:|---:|---:|---:|
| 사용자 덱1 · 대조 추천 순서 | 398.32 | 402.11 | 382.08 | +3.79 |
| 사용자 덱1 · 이전 우리 순서 | 386.21 | 375.51 | 354.17 | -10.70 |
| 사용자 덱2 · 사용자 순서 | 323.00 | 316.50 | 293.67 | -6.50 |
| 사용자 덱2 · 대조 추천 순서 | 334.89 | 331.86 | 311.14 | -3.03 |
| 절명 | 547.32 | 574.55 | 547.53 | +27.23 |
| 연타 | 371.92 | 383.70 | 361.23 | +11.78 |
| 강타 | 298.64 | 289.63 | 273.41 | -9.01 |
| 척살 | 379.38 | 373.09 | 356.53 | -6.29 |
| 저격 | 372.57 | 374.46 | 353.68 | +1.89 |
| 주술 | 259.00 | 254.01 | 227.80 | -4.99 |
| 파멸 | 407.05 | 402.30 | 388.60 | -4.75 |
| 강인 | 266.37 | 265.80 | 242.87 | -0.57 |
| 기동 | 304.66 | 334.69 | 323.23 | +30.03 |
| 헌신 | 272.52 | 260.83 | 235.78 | -11.69 |
| 기만 | 331.34 | 344.88 | 338.33 | +13.54 |
| 제압 | 359.61 | 360.68 | 342.23 | +1.07 |

기동304.66→334.69, 기만331.34→344.88, 절명547.32→574.55로 웹20에서 기본 공격이 도술을 밀어 낮아지던 사례를 보정했다. 사용자 덱2는323.00→316.50으로 greedy보다 낮지만, 도술 시각을 보존한 기본 공격 끔293.67보다는 높다.

## 최고안 대비 격차와 가정 견고성 분리

최고안 대비 격차는 기본 가정에서 후보1위와 얼마나 차이 나는지를 표시한다. 가정 견고성의 추가 손실은 max(0, 해당 가정 손실−기본 가정 손실), 단위는 %p다. 배지는 이 추가 손실과 순위 하락만으로 판정한다. 시작 순위나 기본 격차 자체는 배지에 넣지 않는다.

- 강함: 최악 추가 손실≤2%p, 최대2계단 이내 하락, 미확인 없음. 주의:2~5%p 또는3계단 이상 하락/미확인. 민감:5%p 초과. 손실 임계값은 설정할 수 있다.
- 기본 공격 시나리오는 smart·greedy·끔을 같은 가정 묶음으로 비교한다. 현재가 smart면 greedy/끔2개, 현재가 cancel이면 smart/greedy/끔3개를 비교한다. 다른 가정은 하나씩 반대로 바꾸며 기본 가정의9! 외에는 기존의 제한 순서 개선을 사용한다.
- 최소 후회 추천은 시나리오별1위 대비 최악의 절대 격차를 줄이는 별도 목적을 유지한다. 추가 손실 배지와 구분해 표시한다.

### 같은 웹20 계산값에 판정 기준만 바꿔 대조

| 현재 덱 | 기존 배지 | 기본 격차 | 기존 최악 손실 | 실제 추가 손실 | 재판정 |
|---|---|---:|---:|---:|---|
| 덱1 | 가정에 민감 | 50.60% | 50.87% | +0.27%p | 가정에 강함 |
| 덱2 | 가정에 민감 | 53.85% | 56.72% | +2.88%p | 가정 주의 |

덱1의 기존50.87%는 대부분 기본 격차50.60%였다. 가정 변경의 추가 손실은0.27%p이므로 약한 덱과 불안정한 덱을 구분하도록 고쳤다.

### smart까지 적용한 최종 현재 덱 평가

웹20에서 보존한 상위10안과 현재 덱을 새 정책으로 재평가했다. 계산 가능한90도술 모두 보유라는 비교 조건이며 계정의 실제 보유를 확정한 추천은 아니다. 전역 덱 탐색을 반복하지 않고 같은 보존 후보 안에서 순위를 비교했다.

| 현재 덱 | 최고안 대비 기본 격차 | 최악 추가 손실 | 최대 순위 하락 | 최종 배지 |
|---|---:|---:|---:|---|
| 덱1 | 48.78% | +1.82%p | 1계단 | 가정에 강함 |
| 덱2 | 53.42% | +3.83%p | 1계단 | 가정 주의 |

덱1 영향 상위3: 기본 공격 · 빈 시간 우선 +1.82%p / 받는 피해 증가 디버프 +1.66%p / 동작 잠금 기준 +1.57%p.

덱2 영향 상위3: 상태 이상·연동 +3.83%p / 기본 공격 · 끔 +2.16%p / 받는 피해 증가 디버프 +1.10%p.

## 보유 입력과 기존 설정

- 결과 상단에 보유 확인/미표시/제외 개수를 표시한다. 미표시는 여전히 보유한 것으로 계산 중이라고 명시한다. 기본 제공 ‘사용 가능’ 기록에는 실제 보유를 확인했는지 정보가 없으므로 미표시로 보여 주되, 기존 availability 값은 그대로 유지한다. 기존 필수는 보유 확인으로 취급하고 제외는 계속 제외한다.
- 미표시 슬롯에 보유 확인 표시와 보유함·보유 안 함 버튼을 추가했다. 보유함은 계산을 바꾸지 않고 확인 표시를 저장한다. 보유 안 함은 그 도술을 제외하고 즉시 덱 탐색을 다시 실행한다. 필수/제외 조건은 기존 엔진 규칙을 따른다.
- 소유 확인은 브라우저 설정의 ownershipConfirmed에 저장하며 게임 데이터는 변경하지 않는다. 기본 availability·돌파·레벨·우선순위·직접 보정·등급별 입력을 보존한다. 제외 전체 해제는 보유를 확정하지 않고 미표시로 되돌린다.
- 정책이 없는 웹20 설정을 불러오면 smart를 기본값으로 채우고 전체 이전 입력을 dokkaebi-build-before-robust-fixes-20261015에 한 번만 백업한다. 백업 실패 시 입력 적용/저장을 보류한다. 화면 백업 다운로드→가져오기는 greedy를 명시해 웹20 정책을 복원한다. 기존 basicAttack 켬/끔과 나머지 설정은 보존한다.

## 검증

- 전체11종 tests/*.test.cjs 통과. 신규 정책·콤보2단·취소 전후/동시 타격·실제 점유 시간·저장 횟수·거리·미래 검 조건·16안 기대값/웹20 복원·192조건 smart 비감소, 약하지만 안정적인 덱의 배지, 정책 이전·보유 확인 저장을 검사했다.
- 변경 dist JS 문법·git diff --check 통과. 스크립트·스타일·워커 importScripts 캐시 robust-fixes-20261015-codex.
- 실제 Chrome 워커362,880순서(일반 덱·10초·단일·방어 제외): 웹20 8.79초 → 웹21 10.24초, 1.17배. 견고성은 별도 실행한다.
- 로컬 헤드리스 화면 오류0·375px 가로 넘침0. 격차/추가 손실2지표·보유 요약·정책 선택 표시 확인. 별도 프로필에서 기존 실제 보관 입력 전체 보존, 백업 다운로드→greedy 복원→새로고침, cancel 저장을 확인했다.
- 서로 다른9계열 후보로 보유함 저장→다른 도술 보유 안 함→실제8! 재탐색 완료→제외 도술이 덱/후보에서 제거됨→새로고침 후 보유/제외 유지까지 확인했다. 사용 중인 실제 브라우저 프로필을 직접 변경한 검사는 아니다.

## 백업과 롤백

백업: backup/web-before-codex-robust-fixes-20261015. 공개 롤백 대상: 웹20 저장버전 appgprj_6ace0a1d796c8191a913536d34fba555~appgver_bf23f61c90188191ac3a57839d1330d1. 정책만 원복할 때는 greedy 선택 또는 정책 변경 전 백업 가져오기를 사용한다. 공개 배포 후 검증 결과는 별도 배포 기록에 저장한다.

먼저 실측할 항목: #1 도술 동작 간격·기본 공격 캔슬 가능 여부, #2 디버프 판정 시점. 모두 대기이며 실측을 새 사실로 단정하지 않는다.
