docs: record Wave 3 surface consolidation and fold NAS-only whisper into compose

- docs/REFACTOR_WAVE3_REPORT.md and the Wave 3 policy: canonical map,
  production changes, verification and remaining external steps.
- Gap backlog: GAP-BILL-01 resolved; new GAP-BILL-02 (Payple renewal never ran,
  Payple client key never set), GAP-WEB-01 (tunnel host for /app), GAP-OPS-01
  (NAS compose/.env drift), GAP-CI-01, GAP-I18N-02, GAP-TEAM-02.
- design.md: hero loop decision (numbers taken from the app capsule), pricing
  mismatch closed; feature catalog SHELL-11 updated.
- docs/map, release guide and mobile release docs no longer describe the
  deleted wwwroot, binaries, Dockerfile.admin, NAS site copy or .github CI.
- docker-compose.nas.yml gains the d3ro-whisper service that only existed in
  the NAS copy, so the repository file is the complete definition.
- refactor-wave skill: Wave 3 index and lessons P10-P12.
This commit is contained in:
Yun Chan 2026-09-26 16:02:44 +09:00
parent 92978607da
commit e87ce63440
17 changed files with 187 additions and 46 deletions

View file

@ -207,11 +207,22 @@ git 충돌 + 의도 분리 불가. **R3 위반**.
### P9. lint 게이트의 pre-existing 부채 — "내 영역 errors 0"으로 재해석
codebase가 원래 lint GREEN이 아닌 경우가 많음(루트 `eslint .`가 다른 앱의 config 문제로 붕괴, pre-existing errors 다수). "통합 후 lint GREEN"(R7 원문)이 비현실적. 게이트는 **"내가 건드린 영역의 lint errors 0"** + "pre-existing은 별도 wave로 분리"로 재해석. (검증 팁: `git diff --name-only HEAD`로 변경 파일만 lint → 내 책임 분리.)
### P10. "실행되지 않는 사본"과 "운영 서버 사본"도 중복 감사 대상 (Wave 3)
- 워크플로·스크립트는 원격·러너 기준으로 **실제로 실행되는지** 먼저 본다. `.github`는 GitHub 원격이 없어 한 번도 안 돌았고, 그 안의 Payple 갱신 cron 때문에 정기 결제가 멈춰 있었다.
- 배포 전 운영 서버의 설정 파일(NAS compose·.env 키 이름)과 저장소를 diff한다. 저장소를 그대로 덮으면 필수 변수 누락으로 서비스가 내려간다.
### P11. 직접 import할 수 없는 런타임은 "생성 사본 + --check"로만 복제 (Wave 3)
Deno Edge Function처럼 공유 패키지를 번들할 수 없으면 손으로 옮겨 적지 말고 생성 스크립트(`contract:sync`)와 CI 게이트(`contract:check`)를 둔다. `version:sync`와 같은 패턴.
### P12. 데스크톱 테스트는 Electron 런타임으로 (Wave 3)
Node로 vitest를 돌리면 better-sqlite3 ABI 불일치로 수백 건이 가짜 실패한다. `ELECTRON_RUN_AS_NODE=1 <electron.exe> <vitest.mjs> run --config vitest.config.ts`로 돌리고, 남는 실패만 회귀 후보로 본다.
## 누적 wave 인덱스
| Wave | 일시 | 산출 커밋 | 보고서 |
|------|------|-----------|--------|
| Wave 1 | 2026-07-22 | b820c78(WS1)·aef4428(WS2)·078304d(WS3)·87f2dac(WS4) | `docs/REFACTOR_WAVE1_REPORT.md` |
| Wave 2 | 2026-07-22 | efac690(AMBER)·660e622(NATIVE)·00a99e4(POPUP)·4c25620(DEPS)·5b6e7aa(PATTERN) | `docs/REFACTOR_WAVE2_REPORT.md` |
| Wave 3 | 2026-09-26 | 88f24d8(WS-A 계약)·b6fe588(WS-B 웹앱)·cd9d199(WS-C 중복 삭제)·dc43884(WS-D CI)·9297860(사이트) | `docs/REFACTOR_WAVE3_REPORT.md` |
다음 wave 추가 시 본 표 갱신.