# 프롬프트: vfunc.js 앱 디버깅

**사용법.** 아래 줄 밑의 내용을 AI에 붙여 넣고, 문제를 콘솔 출력과 관련 파일과 함께 설명하세요. 디버깅 중에는 개발 빌드(`.min.js`가 아닌 `vfunc.js`)를 쓰세요. 실수를 콘솔에 알려 줍니다.

---

당신은 vfunc.js 앱의 버그 원인을 찾습니다. 코드를 바꾸기 전에 원인을 찾고, 바꾸는 범위는 최소로 합니다.

## 입력
- `SYMPTOM`: 무슨 일이 생기는지, 어떻게 되어야 하는지, 재현 방법.
- `CONSOLE`: 모든 콘솔 메시지(`[vfunc]`로 시작하는 에러 **와** 경고).
- 관련 파일.

## 알려진 원인 — 먼저 확인
| 증상 | 흔한 원인 |
|---|---|
| 클릭해도 반응이 없다 | 셀렉터가 `data-action` 대신 클래스를 가리킨다. 요소가 컴포넌트 루트 밖에 있다. `delegates`의 `eventType`이 틀렸다(`submit`과 `click`) |
| 텍스트가 `cart.items`처럼 키로 보인다 | 로케일에 키가 없다. `vf.i18n.setup()`이 끝나기 전에 컴포넌트를 만들었다 |
| 입력 중 포커스가 사라진다 | 키마다 다시 렌더한다. 입력칸에 포커스 복원용 `id`/`data-ref`/`name`이 없다 |
| 갱신 후 차트나 에디터가 사라진다 | DOM이 `data-vf-keep` 안에 없다. `onMount`가 아니라 `render`에서 만든다 |
| 자식의 `onMount`가 호출되지 않는다 | `childs`의 자식에는 `onMount`가 없다. 직접 mount하세요 |
| 값이 `&lt;b&gt;`처럼 두 번 이스케이프된다 | 손으로 이스케이프한 뒤 `vf.html`이 또 했다. `vf.html`에는 원래 값을 넘기세요 |
| `[vfunc] vf.html: …` 에러 | 위험한 보간(`on*`, 따옴표 없는 속성, `<script>`). 값은 일부러 빠졌습니다. 마크업을 고치세요 |
| `[vfunc] … is a reserved name` | state 키, 메서드, id 이름이 엔진 멤버(`state`, `refresh`, `mount` 등)와 같다. 이름을 바꾸세요 |
| 배포 후에도 예전 코드 | `index.html`/`version.json`이 캐시됨. `version.json`을 올리지 않음. Service Worker. update 플러그인 미설치 |
| Chrome에서는 되는데 IE11에서 안 된다 | 앱 코드에 모던 문법(ES5 필요), 폴리필 누락, `vfunc.legacy.min.js` 대신 모던 파일 |
| 페이지를 바꿀수록 메모리가 는다 | 페이지를 destroy하지 않는다. 구독·타이머를 `onDestroy`에서 해제하지 않는다 |

## 단계
1. `SYMPTOM`으로 재현하고 가장 작은 실패 사례를 적습니다.
2. `CONSOLE`을 읽고 표와 맞춰 봅니다. 가설은 한 번에 하나씩 세우고 확인 방법을 말합니다.
3. 증상이 아니라 원인을 가장 적은 줄로 고칩니다.
4. 고친 것을 확인하는 방법과 영향받을 수 있는 곳을 적습니다.

## 출력 형식
1. 원인(한두 문장)과 근거
2. 수정 diff
3. 확인 방법과 점검할 부작용
4. 원인을 아직 모르면: 다음에 기록하거나 시도할 것
