## 2026-06-01 — Vault 파일 탐색기: `.vaultignore` 숨김/다시보기 우클릭 + 드래그앤드롭 이동

### 배경

Vault 파일 탐색기에서 보고 싶지 않은 파일을 가리려면 `.vaultignore`를 직접 편집해야 했고, 한 번 숨긴 파일을 되돌릴 우클릭 동작도 없었다. 또 파일/폴더 위치를 바꾸려면 OS 탐색기로 나가야 했다. 우클릭 숨김/다시보기와 드래그 이동을 추가했다.

### 주요 변경

#### 1. 우클릭 "볼트에서 숨기기" (`7649975`)

- 트리 우클릭 컨텍스트 메뉴에 **Hide from Vault** 추가 → `addPathToVaultIgnore`가 `.vaultignore`에 앵커된 정확 경로 패턴(`/path` 또는 디렉터리면 `/path/`)을 추가. 숨김 후 트리 새로고침 + `onVaultIgnoreChanged`로 그래프 리로드.

#### 2. 우클릭 "볼트에 다시 보이기" (`2dc8b1d`)

- **서버**: `GET /files` 응답에 `ignored`(=`.vaultignore` 패턴 매치) 플래그 추가 — 점파일/기본숨김(`hidden`)과 구분. 점파일은 `.vaultignore`에서 빼도 안 보이므로 다시보기 대상이 아님.
- **클라이언트**: 컨텍스트 메뉴를 `entry.ignored`로 분기 — ignored면 **Show in Vault**(Eye) + `removePathFromVaultIgnore`(앵커 패턴 라인 제거), 아니면 기존 Hide. `removePathFromVaultIgnore`는 `addPathToVaultIgnore`의 역동작.
- **i18n**: `files.unhide`("볼트에 다시 보이기" / "Show in Vault").

#### 3. 드래그앤드롭 파일/폴더 이동 (`5508cc2`)

- **서버**: `POST /api/projects/:id/files/move` 신규 — `from`/`to`(루트 상대경로)를 `resolveSafe`로 양쪽 트래버설 가드 후 `fs.renameSync`. 가드: 출발==도착(400), 폴더를 자기/하위로 이동 금지(400), 출발 없음(404), 도착 존재(409).
- **클라이언트**: 트리 행을 `draggable`로, **폴더 행**은 드롭 대상(드래그 오버 시 accent ring 하이라이트) → 그 폴더 안으로 이동. **"Vault root" 헤더**에 드롭하면 루트로 이동. 폴더 드래그 시 하위 트리 통째 이동. 이동 후 트리 새로고침.
- 단순 이동만(`fs.rename`): 이름 기준 `[[wikilink]]`는 유지되지만 경로 기반 참조는 자동 갱신하지 않음.

### 수정된 주요 파일

| 파일 | 변경 내용 |
|------|----------|
| `src/server/routes/files.ts` | `FileEntry`에 `ignored` 추가 + 응답 포함, `POST /files/move`(rename + 트래버설/충돌 가드) |
| `src/client/src/api/files.ts` | `FileEntry.ignored`, `moveFile(from, to)` |
| `src/client/src/api/vault.ts` | `addPathToVaultIgnore` / `removePathFromVaultIgnore` |
| `src/client/src/components/vault/panels/FileExplorerPanel.tsx` | 숨기기/다시보기 메뉴 분기, 행 draggable + 폴더/루트 드롭 → `moveFile` |
| `src/client/src/i18n.tsx` | `files.unhide` 키 |
