# Legacy Cleanup Goal

## Objective

EXE/runtime 분석으로 확정된 데이터와 현재 사용 중인 웹/도구/산출물만 남기고,
후보 단계에서 만든 legacy 페이지, 오래된 생성기, 중복 out 산출물, 구 데이터 참조를
순차적으로 제거한다.

이 작업은 기능 추가가 아니라 프로젝트 표면적을 줄이는 유지보수 goal이다.
정리 과정에서 확정 데이터는 더 눈에 잘 보이게 만들고, 불확실한 데이터는
`candidate` 또는 `review-only`로 명확히 격리한다.

## Cleanup Rules

- 삭제 우선 원칙을 따른다.
  - EXE 검토가 끝나 확정된 영역은 확정 데이터와 현재 소비 경로만 남긴다.
  - "혹시 나중에 볼 수도 있음"만으로 legacy 후보 파일을 유지하지 않는다.
  - 근거가 필요하면 최신 요약 문서에 짧게 남기고, 중복 HTML/JSON/임시 probe는 제거한다.
  - AI 분석이 다시 참고하면 혼동할 수 있는 구버전 HTML/JSON/JS는 격리하지 말고 완전 삭제한다.
  - 격리는 삭제하면 분석 재현이 어려운 최소 증거에만 예외적으로 허용한다.
- 미확정 단서 보존 원칙을 따른다.
  - 아직 EXE 검토 확정은 아니지만 다음 분석에 직접 도움이 되는 포인터, opcode, callsite,
    trace 요약, 후보 테이블은 삭제하지 않는다.
  - 단, 이런 자료는 active UX나 확정 데이터처럼 보이면 안 된다.
  - 보존할 미확정 자료는 가능하면 `docs/`의 짧은 요약이나 통합 summary로 축약한다.
  - 오래된 web 메뉴, 중복 review 페이지, stale candidate JSON은 보존 대상이 아니면 삭제한다.
  - raw dump가 너무 크거나 재생성 가능하면 원본 raw는 지우고 generator + 요약만 남긴다.
- EXE 기준으로 확정된 표기만 남긴다.
  - 오디오: `WLK id 00..53`, `MLK id 00..19`만 사용한다.
  - 예전 `#NN`, `wlk NN`, `runtime id`, `archive #` 같은 혼재 표기는 제거한다.
- 확정된 단일 규칙이 있으면 후보 UI를 제거한다.
  - 예: map tile 40-row zero-based가 확정이면 다른 tile 후보 모드는 숨기거나 삭제한다.
- 최신 통합 페이지가 대체하는 legacy 페이지는 삭제하거나 `docs/HANDOFF.md`에 archive reason을 남긴다.
- `out/`은 사람이 읽는 확정/요약 산출물만 유지한다.
  - raw trace, 브라우저 로그, 임시 probe dump, 과거 candidate 산출물은 제거 대상이다.
  - 재생성 가능한 산출물은 생성기와 검증 명령이 남아 있을 때만 삭제 가능하다.
- `tools/`는 active generator/verifier와 현재 분석에 필요한 probe만 유지한다.
  - 동일 목적의 구버전 probe는 최신 생성기에 통합하거나 삭제한다.
- `web/`은 관리자/리뷰/시뮬레이터의 현재 진입점만 유지한다.
  - index에서 연결되지 않고 최신 페이지가 대체한 HTML은 삭제 후보로 본다.
- 삭제 전에는 대체 경로를 확인한다.
  - web 링크, docs 링크, generator output, verifier reference를 `rg`로 확인한다.
- 삭제 또는 통합 후에는 검증을 실행한다.
  - 최소: `python3 tools/verify_web_assets.py`
  - 해당 영역별 verifier/generator가 있으면 함께 실행한다.
- 한 번에 전부 지우지 않는다.
  - 오디오, CNS rect, 맵, 전투, 이벤트/scene, 저장 데이터 단서처럼 영역별로 작게 커밋한다.

## Phases

1. Baseline snapshot
   - 현재 유지해야 할 분석 결과와 웹 보강을 커밋/푸시한다.
   - 이후 cleanup commit이 어떤 파일을 제거했는지 명확히 비교 가능하게 한다.

2. Audio cleanup
   - WLK/MLK/MIDI 표기를 EXE id로 통일한다.
   - browser cue label은 제목/번호 체계가 아니라 provenance로만 남긴다.
   - 오디오 관련 legacy reports/generators를 정리한다.

3. Web review surface cleanup
   - `web/index.html`의 현재 메뉴를 기준으로 active page와 legacy page를 나눈다.
   - 통합 페이지가 대체한 review HTML을 삭제하거나 통합한다.
   - active page에서 구 데이터 JSON을 읽지 않도록 한다.

4. Tools cleanup
   - active generator/verifier/probe 목록을 만든다.
   - 동일 목적의 구 probe와 stale script를 제거한다.
   - 삭제한 tool을 참조하는 docs/out/web 링크를 함께 제거한다.

5. Out cleanup
   - `out/`에서 확정 요약, active review, 최신 manifest만 남긴다.
   - raw trace, stale smoke, 오래된 candidate dump를 제거한다.
   - 필요한 경우 `.gitignore`를 보강한다.

6. Data contract cleanup
   - battle, monster, CNS rect, map layer/collision, audio처럼 확정된 데이터 contract를 문서화한다.
   - web/tools가 같은 contract를 쓰도록 중복 schema를 줄인다.

7. Final verification
   - stale 표현 검색을 통과시킨다.
   - static verifier와 py_compile을 통과시킨다.
   - 필요 시 8013 브라우저 smoke를 별도로 실행한다.

## Required Checks

Use targeted searches before and after each cleanup slice:

```bash
rg -n "WLK #|MLK #|MIDI #|archive #|runtime id|runtime label|wlk [0-9]{2}|mlk [0-9]{2}" docs tools web out
rg -n "monster_grid_review|candidate|legacy|review-only|fallback|old " web tools docs out
rg -n "href=|fetch\\(|script src=|\\.json|\\.html" web docs tools
```

Run baseline validations:

```bash
python3 tools/verify_audio_archive_manifest.py
python3 tools/verify_web_assets.py
python3 tools/verify_midi_bgm_test_browser.py
python3 -m py_compile tools/*.py
git diff --check
```

If browser checks are needed:

```bash
python3 -m http.server 8013 --directory /home/exedev/hwanse
python3 tools/verify_home_landing_browser.py
```

## Goal Command

Use this command when starting the long cleanup:

```text
/goal EXE 검증으로 확정된 데이터만 active web/tools/out 표면에 남기고, legacy 후보/구데이터/중복 리뷰 페이지와 산출물을 영역별로 정리한다. 각 단계는 삭제 전 대체 경로를 확인하고, 삭제 후 rg/verify/py_compile/git diff --check로 검증하며, 유지할 결과는 작은 커밋으로 나눠 푸시한다.
```
