diff --git a/docs/superpowers/specs/2026-04-25-dogfood-feedback.md b/docs/superpowers/specs/2026-04-25-dogfood-feedback.md index 67f9adc..af6d190 100644 --- a/docs/superpowers/specs/2026-04-25-dogfood-feedback.md +++ b/docs/superpowers/specs/2026-04-25-dogfood-feedback.md @@ -1,13 +1,31 @@ # Dogfood 피드백 수집 -**작성일:** 2026-04-25 (open) +**작성일:** 2026-04-25 (open, ongoing — v0.4 slice → v0.2.x cuts 까지 누적) +**최종 갱신:** 2026-05-05 (v0.2.6 정식 cut 후, F8~F13 dogfood 발견 추가) **저자:** 김태현 (dlsrks0734@gmail.com) -**문서 성격:** 슬라이스 v0.4 dogfood 중 발견된 본인 피드백을 수집·정제하는 living document. 각 항목은 후속 spec 으로 승격될 후보다. 정식 spec 이 분기될 만큼 성숙하면 별도 파일로 추출하고 여기엔 링크만 남긴다. +**문서 성격:** v0.4 slice → v0.2.x cuts 동안 누적된 본인 dogfood 피드백 수집·정제 living document. 각 항목은 후속 spec/cut 으로 승격될 후보다. **선행 문서:** - `docs/superpowers/specs/2026-04-24-inkling-vertical-slice-design.md` v0.4 (슬라이스 본문) +- `docs/superpowers/specs/2026-05-01-v023-feedback-roadmap-design.md` (v0.2.3 7항목 cut 로드맵) - `docs/superpowers/strategy/strategy.md` (심리학 전략) -- `docs/superpowers/strategy/dogfood-strategy.md` (dogfood 운영안 — 본 문서와 의존 없음) +- `docs/superpowers/strategy/dogfood-strategy.md` (dogfood 운영안) +- `docs/superpowers/v024-backlog.md` (PR review deferred + dogfood 발견 누적 backlog, 잔여 24건) + +--- + +## 진척 흐름 요약 (2026-05-05 기준) + +본 문서가 작성된 v0.4 slice 시점 이후 흐름: + +| 시점 | Cut | 주요 피드백 / 발견 | +|---|---|---| +| 2026-05-01 | v0.2.3 7항목 roadmap (PR #13~#19) | v0.2.2 dogfood 발견 6건 (`memory/project_v022_feedback.md`) → telemetry skeleton + 휴지통 + 만료 추천 + Ollama 회복 + AI retry + 태그 vocab + RecallBanner | +| 2026-05-04 | v0.2.3.1 (PR #21) → v0.2.4 (PR #22, semver 우회) | **F8 11434 reserved**, **F9 multi-instance**, **F10 버전 정보 부재** | +| 2026-05-05 | v0.2.5 critical hotfix (PR #23) | **F11 single-instance lock 부재** (critical, 해결됨) | +| 2026-05-05 | v0.2.6 정식 cut (PR #24) | **F12 autostart 풀림**, **F13 hidden-start race** (해결됨) | + +**v0.2.7 brainstorm 트리거**: dogfood ≥1주 soak 후 telemetry export + 신규 피드백 + 잔여 backlog 24건 일괄 triage. --- @@ -925,6 +943,185 @@ slice §1.3 종료 조건 ("크래시 0회") 와 별개로, **"데이터 손실 --- +## F8. Windows 11434 포트 OS-level reserved (🚀 promoted → v0.2.3.1/v0.2.4) + +**진행 상태:** 🚀 promoted → PR #21 (in-app Ollama 설정), v0.2.4 release. + +**발견:** 2026-05-04 dogfood 시작 시도 직후, Windows 머신. + +### 관찰 + +v0.2.3 binary 설치 후 첫 실행 시 OllamaBanner 가 "unreachable" 상태 지속. `curl http://localhost:11434/api/tags` 응답 없음. 하지만 `ollama app.exe` 프로세스는 떠있음. 진단 결과: +- Ollama server 가 11434 bind 무한 실패: `Error: listen tcp 127.0.0.1:11434: bind: An attempt was made to access a socket in a way forbidden by its access permissions.` +- `netsh int ipv4 show excludedportrange protocol=tcp` → 11242–11941 범위 (8개 100-port 블록) reserved +- 원인: WSL2 (Ubuntu Running) + Hyper-V `hns` (Host Network Service) 가 부팅 시 동적 NAT 용 포트 블록 할당 — 11434 가 포함됨 + +### 제안 방향 + +**v0.2.3.1 → v0.2.4 cut**: env var 의존 제거, in-app endpoint/model 설정 UI 추가. 트레이 메뉴 + OllamaBanner "설정" 링크 → modal → JSON 영속화 (`/settings.json`). + +추가: 사용자가 빈 포트 (11942 등) 로 Ollama 재시작 후 in-app 에서 endpoint 변경 — 시스템 설정 변경 (excludedportrange 등) 없이 dogfood 즉시 unblock. + +### 결정 대기 + +- (해결됨) endpoint + model 둘 다 in-app 설정 가능해야 하는가 → Q1=B 결정 (v0.2.3.1 spec) +- (해결됨) JSON 영속화 vs SQLite 새 테이블 → Q3=B JSON (migration 회피) +- (해결됨) Settings precedence → settings > env > default + +### 가설·측정 + +| # | 가설 | 측정 | +|---|------|------| +| H8.1 | dogfood 사용자 의 ≥30% 가 비기본 endpoint 사용 (LAN 또는 다른 포트) | telemetry `ollama_settings_changed` (count-only, v0.2.7) | +| H8.2 | 11434 reserved 가 다른 머신에도 발생 | LAN 머신 / 동료 dogfood | + +### 범위 + +- **In:** SettingsService + ProviderHolder + OllamaSettingsModal + IPC + 트레이 메뉴 항목 +- **Out:** Multi-provider abstraction (OpenAI 등), Settings dropdown UI (v0.2.4 freetext) + +### 영향 + +- **Spec:** `docs/superpowers/specs/2026-05-04-v0231-ollama-settings-design.md` +- **Backlog 잔여:** #39 (`ollama_unreachable.reason` 의 endpoint URL PII 우회 노출 — telemetry 하드닝 v0.2.7) + +--- + +## F9. 앱 다중 인스턴스 spawn — SQLite race 위험 (🚀 promoted → v0.2.5 critical hotfix) + +**진행 상태:** 🚀 promoted → PR #23 critical hotfix, v0.2.5 release. + +**발견:** 2026-05-05 dogfood 도중. v0.2.4 설치 후 단축키 / 트레이 / 시작메뉴 클릭 반복 시. + +### 관찰 + +앱 아이콘 클릭 시마다 새 process spawn. 트레이 아이콘 여러 개 누적. 작업관리자 에서 `Inkling.exe` process 다중 확인. 잠재 영향: +- SQLite WAL 동시 write → DB 손상 가능 +- AiWorker 중복 polling → 같은 pending_jobs 두 process race +- HealthChecker 중복 polling → Ollama 부하 + telemetry 이중 emit +- `settings.json` atomic write 의 temp/rename race + +### 제안 방향 + +**Critical hotfix** — `app.requestSingleInstanceLock()` 호출 + `second-instance` event handler 로 기존 inbox 창 restore + show + focus. + +### 결정 대기 + +(해결됨) — Electron 표준 패턴 직접 적용. + +### 범위 + +- **In:** `src/main/index.ts` 진입점 (whenReady 전 lock 획득). 단일 21줄 변경. +- **Out:** None — cross-platform 자동 동작. + +### 영향 + +- v0.2.5 critical hotfix release (`Inkling Setup 0.2.5.exe`) +- **Backlog 잔여:** #46 hidden-start race (NSIS 직후 사용자 클릭 + autostart `--hidden` 동시 시도) — v0.2.6 (PR #24) 에서 `additionalData` 패턴으로 해결 완료. + +### 비고 + +dogfood 발견 → 4시간 안에 hotfix release. 잠재 데이터 손실급 버그라 patch increment (v0.2.5) 사용. v0.2.4 사용자 즉시 업그레이드 권장. + +--- + +## F10. 버전 / 빌드 정보 표시 surface 부재 (🚀 promoted → v0.2.4) + +**진행 상태:** 🚀 promoted → PR #22, v0.2.4 release. + +**발견:** 2026-05-04 dogfood 도중. 머신 간 버전 일치 검증 시도 시. + +### 관찰 + +설치된 Inkling 의 버전을 UI 어디서도 확인 못함. 트레이 메뉴 / Inbox 푸터 / About 모달 모두 부재. 핸드오프 후 다른 머신 (Mac vs Windows) 에서 같은 버전인지 검증 path 없음. issue report 시 첨부할 디버그 정보 (Electron / Node / OS / profileDir) 도 노출 안 됨. + +### 제안 방향 + +트레이 메뉴 마지막 항목 (종료 직전) "Inkling 정보..." → native `dialog.showMessageBox`. 표시: +- 버전 (`app.getVersion()`) +- Electron / Node 버전 +- OS (`platform()` + `release()`) +- 데이터 위치 (`app.getPath('userData')`) + +버튼: 확인 / 데이터 위치 열기 (`shell.openPath`) / 정보 복사 (`clipboard.writeText`). + +### 영향 + +- v0.2.4 cut 동봉. 별도 spec 없음 (단순 추가). +- **Backlog 잔여:** Inbox footer 형태 검토 (v0.2.7 — 항상 보이는 작은 버전 라벨) + +--- + +## F11. Single-instance lock 부재 (🚀 promoted) + +**진행 상태:** 🚀 promoted → F9 와 동일 cut (v0.2.5 hotfix). + +F9 와 root cause 동일. 원래 별개 발견이었지만 fix 가 같음 — 본 항목은 F9 의 부분으로 흡수. + +--- + +## F12. 윈도우 자동 실행 옵션이 재시작 후 풀려있는 버그 (🔬 drafting — v0.2.6 부분처리) + +**진행 상태:** 🔬 drafting — v0.2.6 (PR #24) 진단 fallback 적용. dogfood verify 후 v0.2.7 deeper fix. + +**발견:** 2026-05-05 dogfood 도중. autostart 토글 후 재시작. + +### 관찰 + +트레이 메뉴 "윈도우 시작 시 자동 실행" 체크 → 종료 → 재실행 → 체크박스 풀려있음. `app.setLoginItemSettings({ openAtLogin, args: ['--hidden'] })` 호출 후 다음 부팅 시 `app.getLoginItemSettings()` 가 `openAtLogin=false` 반환. + +### 제안 방향 (현 cut: 진단 fallback) + +추정 원인: +- (a) Windows registry path mismatch (NSIS 설치 위치 변경 / 버전 업데이트 시 새 디렉터리) +- (b) Electron `setLoginItemSettings` Windows 구현 의 path canonicalization +- (c) `args: ['--hidden']` 와 actual launch args 비교 mismatch — `getLoginItemSettings()` 가 args 없이 호출되면 mismatch + +**v0.2.6 적용**: +- `getLoginItemSettings({ args: ['--hidden'] })` 명시 → 트레이 checkbox checked 상태 가 실제 args 와 정합 비교 +- `autostart.state` 진단 로그 (withArgs vs noArgs 비교 + executableWillLaunchAtLogin) — dogfood 에서 실제 동작 로그 수집 + +### 결정 대기 + +dogfood 후 `autostart.state` 로그 분석: +- args 명시 fix 만으로 충분 → close +- 여전히 mismatch → registry 직접 inspect (HKCU\Software\Microsoft\Windows\CurrentVersion\Run\inkling) → exe path 확인 → executable path canonicalization 검토 + +### 영향 + +- dogfood UX 핵심 마찰 — autostart 가 핸드오프 시 매번 수동 재설정 필요. 자동 실행 의도 자체가 dogfood "잊지 않고 매일 사용" 목적인데 깨짐. +- v0.2.6 진단 fallback 로 일단 시도, **v0.2.7 deeper fix 영역**. + +--- + +## F13. PR review 발견: restoreNote production path dead code (🚀 promoted → v0.2.6 round 1 Critical fix) + +**진행 상태:** 🚀 promoted → PR #24 round 1 Critical fix, v0.2.6 release. + +**발견:** 2026-05-05 PR #24 round 1 reviewer (Claude code-reviewer subagent). + +### 관찰 + +v0.2.6 cut 의 B1 (#10 restoreNote) 작업이 새 메서드 `NoteRepository.restoreNote(id)` 추가했지만 — **production path 가 옛 메서드 `repo.restore()` 호출 중**. CaptureService.restoreNote (line 93) 가 `this.repo.restore(noteId)` 호출 → `deleted_at = NULL` 만 set, `ai_status='failed'` 그대로 + `pending_jobs` 미재생성. + +즉 새 메서드는 unit test 만 검증, 실제 사용자가 trash → AI fail → restore 흐름 시 영구 fail 상태 그대로. + +### Fix + +**Round 1 Critical fix (commit `a991008`)**: +- `CaptureService.restoreNote` 가 `repo.restoreNote` 호출 (production path 활성화) +- `before` 의 `ai_status` 가 `failed` 또는 `pending` 이면 `worker.enqueue(noteId)` 추가 호출 — in-memory AiWorker queue 갱신 (다음 app start 까지 대기 X) + +테스트 +2 (CaptureService 의 enqueue 호출 검증). + +### 비고 + +Round 1 reviewer 의 발견 가치 = **production path 와 unit test 가 갈라진 dead code 패턴**. 비슷한 패턴 다른 곳도 점검 가치. v0.2.7 brainstorm 시 grep 으로 "신 메서드 vs 옛 메서드 둘 다 존재 + 호출자 옛 사용" 패턴 검사. + +--- + ## (다음 항목 자리) -새 피드백 추가 시 `## F8. 짧은 제목 (🌱 raw)` 헤더로 시작. 표준 슬롯 6개 채우거나 비워둔 채 시작 가능. +새 피드백 추가 시 `## F14. 짧은 제목 (🌱 raw)` 헤더로 시작. 표준 슬롯 6개 채우거나 비워둔 채 시작 가능. + +dogfood ≥1주 soak (v0.2.6 release 후) 동안 새 발견 항목들 여기 누적 → v0.2.7 brainstorm 트리거. diff --git a/docs/superpowers/strategy/dogfood-strategy.md b/docs/superpowers/strategy/dogfood-strategy.md index a3792da..44c2fb7 100644 --- a/docs/superpowers/strategy/dogfood-strategy.md +++ b/docs/superpowers/strategy/dogfood-strategy.md @@ -1,9 +1,11 @@ # Inkling — Dogfooding 전략 **작성일:** 2026-04-25 -**대상:** 김태현 (저자 본인) — 슬라이스 v0.4 dogfood 단계 -**스펙 의존:** `2026-04-24-inkling-vertical-slice-design.md` v0.4 §1.3 (종료 조건) +**최종 갱신:** 2026-05-05 (v0.2.6 release 후 — environment step 갱신, 현재 단계 표기) +**대상:** 김태현 (저자 본인) — 슬라이스 v0.4 → v0.2.6 dogfood 진행 중 +**스펙 의존:** `2026-04-24-inkling-vertical-slice-design.md` v0.4 §1.3 (종료 조건) + `2026-05-01-v023-feedback-roadmap-design.md` (v0.2.3 7항목 cut) **전략 의존:** `strategy.md` §1·§2·§5 (행동 정의, Capture→Clarify→Capitalize, 회복 친화 스트릭) +**현재 binary:** v0.2.6 (`Inkling Setup 0.2.6.exe` — 2026-05-05 release) --- @@ -27,14 +29,24 @@ dogfood 첫 날 시작 전, 환경을 한 번에 정렬한다. ### 1.1 환경 -- [ ] `.nvmrc` 의 Node 버전 (24.15.0) 활성화 -- [ ] `INKLING_OLLAMA_ENDPOINT` 가 LAN Ollama (`http://192.168.0.47:11434`) 를 가리킴 -- [ ] LAN Ollama 에 `gemma4:e4b` 가 pull 된 상태 확인 (`curl http://192.168.0.47:11434/api/tags`) -- [ ] `npm run build` 후 `npm start` 로 정식 실행 (dev 모드 아님 — dogfood 는 프로덕션 빌드) -- [ ] 윈도우 트레이에 Inkling 아이콘 떠 있음 +**v0.2.6 release 기준 (2026-05-05 갱신)**: + +- [ ] **설치**: Gitea release 페이지 (`https://gitea.altair823.xyz/altair823-org/inkling/releases/tag/v0.2.6`) 에서 `Inkling-Setup-0.2.6.exe` 다운로드 + 설치 + - 또는 source 빌드: `npm run dist:win` (Windows) / `npm run dist:mac` (Mac arm64) +- [ ] **Ollama 설정** (v0.2.3.1 PR #21 부터 in-app 가능): + - 트레이 메뉴 → "Ollama 설정..." → endpoint + model 직접 입력 + - 또는 env var fallback: `INKLING_OLLAMA_ENDPOINT=http://192.168.0.47:11434` (LAN 서버) + - 또는 default: `http://localhost:11434` (로컬 ollama serve 시) + - **Windows 11434 reserved 머신 (Hyper-V/WSL2 사용 시)**: `OLLAMA_HOST=127.0.0.1:11942` setx + Inkling 설정 endpoint 도 11942 (자세한 내용 F8) +- [ ] LAN Ollama 에 `gemma4:e4b` 가 pull 된 상태 확인 (`curl /api/tags`) +- [ ] 윈도우 트레이에 Inkling 아이콘 떠 있음 (단일 instance — v0.2.5 PR #23 hotfix 로 multi-spawn 차단) - [ ] `Ctrl+Shift+J` 가 다른 앱(Chrome, Edge DevTools 등)에 충돌 없이 잡힘 - [ ] OS 알림 권한 허용 — 첫 토스트 후 시스템 트레이에서 확인 -- [ ] `%APPDATA%\Inkling\default\inkling.db` 가 새로 생성됨 (이전 dogfood 데이터 분리하려면 이 파일을 백업·삭제) +- [ ] **데이터 위치 확인** (v0.2.4 PR #22 트레이 "Inkling 정보..." → "데이터 위치 열기" 로 즉시 확인): + - Windows: `%APPDATA%\Inkling\Inkling\profiles\default\inkling.sqlite` + - macOS: `~/Library/Application Support/Inkling/Inkling/profiles/default/inkling.sqlite` + - 이전 dogfood 데이터 분리하려면 이 디렉터리 백업·삭제 +- [ ] **autostart 확인** (v0.2.6 진단 fallback 적용 중, F12 dogfood verify 영역): 트레이 메뉴 "윈도우 시작 시 자동 실행" 체크 → 종료 → 재실행 → 체크박스 유지 여부 확인 (`autostart.state` 로그 같이 확인 = `/Inkling/logs/main-YYYY-MM-DD.log`) ### 1.2 dogfood 로그 파일 준비