v0.2.9 Cut B — status 4분기 + 사유 + Ollama-less (F17/F18/F23) #27

Merged
altair823 merged 18 commits from worktree-v029-cut-b-status-reason-ailess into main 2026-05-09 08:44:03 +00:00
Owner

Summary

v0.2.9 Cut B — F17 (status 4분기 + AI 자동 분류) + F18 (자유 텍스트 사유) + F23 (Ollama-less wizard + raw-only fallback). 데이터 모델 정비 cut (2주 scope).

  • F17: notes 에 status 컬럼 추가 (active/completed/archived/trashed). m004 마이그레이션 + 기존 deleted_at != NULL → 'trashed' migrate. setStatus(id, status, reason) repo 메서드 + listByStatus + 4탭 UI (Inbox/완료/보관/휴지통). NoteCard 의 "이동 ▾" dropdown + MoveStatusModal (사유 입력 + 4 status 버튼 + AI 자동 분류).
  • F18: notes.move_reason 자유 텍스트 컬럼 + MoveStatusModal textarea. preset X — friction 최소.
  • F23: ai_status 'disabled' enum (m005 migration — CHECK 제약 relax via SQLite table recreate). CaptureService 가 settings.ai_enabled=false 시 disabled 상태 + pending_jobs skip. OnboardingWizard 첫 launch 3 옵션 ("AI 사용" / "원문만" / "나중에 설정") + Ollama 설치 가이드 link. AiProviderSection 토글 + ON 전환 후 "기존 disabled N건 처리" 버튼 (requeueDisabled). NoteCard 의 disabled fallback (raw_text 첫 줄 title) + Banner/HealthChecker ai_enabled=false 시 비활성.
  • classifyStatus AI prompt: InferenceProvider 의 generateRaw optional 메서드 + Ollama /api/generate format:json 활용. 실패 시 archived fallback (안전한 default).

변경 내역 (19 commits)

Phase 1: schema + repo

  • 06a1caf Task 1 — m004 마이그레이션 (status/status_changed_at/move_reason)
  • facbf54 Task 2 — NoteRepository.setStatus + listByStatus + restoreNote 재구현 (v0.2.6 #10 fix 보존)

Phase 2: ai_status disabled

  • fd839f6 Task 3 — ai_status 'disabled' + CaptureService aiEnabled + m005 migration

Phase 3: 4탭 UI

  • 606ac94 Task 4 — useInbox view enum + counts + setView
  • 92375ed Task 5 — 헤더 4탭 + count badge

Phase 4-5: NoteCard 메뉴 + Modal + classifyStatus

  • d4dce9b Task 8 — inbox:set-status + ai:classify-status (stub) IPC
  • 9eb7abc Task 7 — MoveStatusModal
  • 495c3d1 Task 6 — NoteCard 이동 메뉴
  • d315097 Task 9-10 — classifyStatus AI prompt + IPC 정식 구현

Phase 6: Onboarding

  • d2c7bf1 Task 11 — OnboardingWizard 3 옵션
  • c65d6c8 Task 12 — settings:* IPC + App.tsx 첫 launch 분기

Phase 7: NoteCard fallback + Banner

  • bc67dea Task 13 — NoteCard ai_status='disabled' fallback
  • 49fbed0 Task 14 — Banner + HealthChecker ai_enabled 비활성

Phase 8: 설정 토글 + 처리 버튼

  • c21fca5 Task 15 — AiProviderSection AI 자동 처리 토글
  • 6070562 Task 16 — requeueDisabled + 처리 버튼

Phase 9: release

  • ba08190 Task 17 — dogfood F17/F18/F23 promoted + version 0.2.9
  • f42d03f e2e fix — OnboardingWizard dismiss step 추가
  • 3fab44b final review minor — statusLabelWithParticle (한국어 조사 분기) + initialTarget drop

테스트 / 빌드

  • 단위: 472 → 548 pass (+76: m004 5 + repo 11 + capture 2 + view 5 + 4탭 3 + IPC 4 + Modal 4 + NoteCard 4 + classifyStatus 7 + IPC test 3 + Onboarding 4 + App 2 + NoteCard fallback 2 + Banner 6 + HealthChecker 3 + AiProvider 5 + requeue 4 + countByAiStatus 1)
  • typecheck: 0 errors
  • e2e: 1/1 pass (smoke + OnboardingWizard dismiss 추가)
  • 빌드 산출물: 후속 release 단계에서 Windows exe + macOS dmg + Linux AppImage/deb

Schema 변경

  • m004: notes ADD COLUMN (status / status_changed_at / move_reason) + 기존 deleted_at != NULL → status='trashed'
  • m005: notes 테이블 recreate — ai_status CHECK 제약 'disabled' 포함하도록 relax (외래키 ON DELETE CASCADE 안전)

Risk 잔재

  • dogfood 미검증 — v0.2.9 빌드 후 실사용 사이클 (4탭 / wizard / move modal / requeueDisabled) 1주 soak 권장
  • m005 의 SQLite table recreate 가 큰 DB 환경 timing 미검증 (외래키 무결성 의존)
  • Mac/Linux 빌드 미검증 — 이전 v0.2.7/v0.2.8 와 동일 흐름으로 macOS host 핸드오프

Test Plan

  • Onboarding wizard 첫 launch — 3 옵션별 결과 확인 (AI 사용/원문만/나중에)
  • 4탭 (Inbox/완료/보관/휴지통) 전환 + count badge 정확
  • NoteCard 이동 ▾ → MoveStatusModal → 사유 입력 + 완료/보관/휴지통 → setStatus 정상
  • AI 자동 분류 버튼 → recommendation 표시 → 확정 → setStatus 정상 (Ollama 실 호출 필요)
  • 설정 페이지 AI 자동 처리 토글 OFF → 새 capture 가 ai_status='disabled' (raw_text 만 표시)
  • 토글 ON 전환 시 disabled 메모 N건 처리 버튼 → requeueDisabled 정상
  • OllamaBanner / FailedBanner 가 ai_enabled=false 시 hide
  • m004/m005 마이그레이션이 기존 v0.2.8 사용자 DB 에서 정상 적용 (note_tags / media / pending_jobs 보존)
  • macOS dmg / Linux AppImage/deb 빌드 + Linux VM smoke

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

## Summary v0.2.9 Cut B — F17 (status 4분기 + AI 자동 분류) + F18 (자유 텍스트 사유) + F23 (Ollama-less wizard + raw-only fallback). 데이터 모델 정비 cut (2주 scope). - **F17**: notes 에 status 컬럼 추가 (active/completed/archived/trashed). m004 마이그레이션 + 기존 deleted_at != NULL → 'trashed' migrate. `setStatus(id, status, reason)` repo 메서드 + `listByStatus` + 4탭 UI (Inbox/완료/보관/휴지통). NoteCard 의 "이동 ▾" dropdown + MoveStatusModal (사유 입력 + 4 status 버튼 + AI 자동 분류). - **F18**: notes.move_reason 자유 텍스트 컬럼 + MoveStatusModal textarea. preset X — friction 최소. - **F23**: ai_status 'disabled' enum (m005 migration — CHECK 제약 relax via SQLite table recreate). CaptureService 가 settings.ai_enabled=false 시 disabled 상태 + pending_jobs skip. OnboardingWizard 첫 launch 3 옵션 ("AI 사용" / "원문만" / "나중에 설정") + Ollama 설치 가이드 link. AiProviderSection 토글 + ON 전환 후 "기존 disabled N건 처리" 버튼 (requeueDisabled). NoteCard 의 disabled fallback (raw_text 첫 줄 title) + Banner/HealthChecker ai_enabled=false 시 비활성. - **classifyStatus AI prompt**: InferenceProvider 의 generateRaw optional 메서드 + Ollama `/api/generate format:json` 활용. 실패 시 archived fallback (안전한 default). ## 변경 내역 (19 commits) ### Phase 1: schema + repo - `06a1caf` Task 1 — m004 마이그레이션 (status/status_changed_at/move_reason) - `facbf54` Task 2 — NoteRepository.setStatus + listByStatus + restoreNote 재구현 (v0.2.6 #10 fix 보존) ### Phase 2: ai_status disabled - `fd839f6` Task 3 — ai_status 'disabled' + CaptureService aiEnabled + m005 migration ### Phase 3: 4탭 UI - `606ac94` Task 4 — useInbox view enum + counts + setView - `92375ed` Task 5 — 헤더 4탭 + count badge ### Phase 4-5: NoteCard 메뉴 + Modal + classifyStatus - `d4dce9b` Task 8 — inbox:set-status + ai:classify-status (stub) IPC - `9eb7abc` Task 7 — MoveStatusModal - `495c3d1` Task 6 — NoteCard 이동 메뉴 - `d315097` Task 9-10 — classifyStatus AI prompt + IPC 정식 구현 ### Phase 6: Onboarding - `d2c7bf1` Task 11 — OnboardingWizard 3 옵션 - `c65d6c8` Task 12 — settings:* IPC + App.tsx 첫 launch 분기 ### Phase 7: NoteCard fallback + Banner - `bc67dea` Task 13 — NoteCard ai_status='disabled' fallback - `49fbed0` Task 14 — Banner + HealthChecker ai_enabled 비활성 ### Phase 8: 설정 토글 + 처리 버튼 - `c21fca5` Task 15 — AiProviderSection AI 자동 처리 토글 - `6070562` Task 16 — requeueDisabled + 처리 버튼 ### Phase 9: release - `ba08190` Task 17 — dogfood F17/F18/F23 promoted + version 0.2.9 - `f42d03f` e2e fix — OnboardingWizard dismiss step 추가 - `3fab44b` final review minor — statusLabelWithParticle (한국어 조사 분기) + initialTarget drop ## 테스트 / 빌드 - 단위: 472 → **548 pass** (+76: m004 5 + repo 11 + capture 2 + view 5 + 4탭 3 + IPC 4 + Modal 4 + NoteCard 4 + classifyStatus 7 + IPC test 3 + Onboarding 4 + App 2 + NoteCard fallback 2 + Banner 6 + HealthChecker 3 + AiProvider 5 + requeue 4 + countByAiStatus 1) - typecheck: **0 errors** - e2e: **1/1 pass** (smoke + OnboardingWizard dismiss 추가) - 빌드 산출물: 후속 release 단계에서 Windows exe + macOS dmg + Linux AppImage/deb ## Schema 변경 - m004: notes ADD COLUMN (status / status_changed_at / move_reason) + 기존 deleted_at != NULL → status='trashed' - m005: notes 테이블 recreate — ai_status CHECK 제약 'disabled' 포함하도록 relax (외래키 ON DELETE CASCADE 안전) ## Risk 잔재 - dogfood 미검증 — v0.2.9 빌드 후 실사용 사이클 (4탭 / wizard / move modal / requeueDisabled) 1주 soak 권장 - m005 의 SQLite table recreate 가 큰 DB 환경 timing 미검증 (외래키 무결성 의존) - Mac/Linux 빌드 미검증 — 이전 v0.2.7/v0.2.8 와 동일 흐름으로 macOS host 핸드오프 ## Test Plan - [ ] Onboarding wizard 첫 launch — 3 옵션별 결과 확인 (AI 사용/원문만/나중에) - [ ] 4탭 (Inbox/완료/보관/휴지통) 전환 + count badge 정확 - [ ] NoteCard 이동 ▾ → MoveStatusModal → 사유 입력 + 완료/보관/휴지통 → setStatus 정상 - [ ] AI 자동 분류 버튼 → recommendation 표시 → 확정 → setStatus 정상 (Ollama 실 호출 필요) - [ ] 설정 페이지 AI 자동 처리 토글 OFF → 새 capture 가 ai_status='disabled' (raw_text 만 표시) - [ ] 토글 ON 전환 시 disabled 메모 N건 처리 버튼 → requeueDisabled 정상 - [ ] OllamaBanner / FailedBanner 가 ai_enabled=false 시 hide - [ ] m004/m005 마이그레이션이 기존 v0.2.8 사용자 DB 에서 정상 적용 (note_tags / media / pending_jobs 보존) - [ ] macOS dmg / Linux AppImage/deb 빌드 + Linux VM smoke 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 (1M context) &lt;noreply@anthropic.com&gt;
altair823 added 18 commits 2026-05-09 07:48:53 +00:00
- notes 테이블 ADD COLUMN status (DEFAULT 'active'), status_changed_at, move_reason
- deleted_at != NULL 노트 → status='trashed' + status_changed_at=deleted_at 로 backfill
- index.ts registry 에 m004 추가 (runMigrations 자동 적용)
- migrations.test.ts user_version assertion 4 로 갱신
- NoteStatus 타입 추가 ('active'/'completed'/'archived'/'trashed')
- Note interface 에 status / statusChangedAt / moveReason 필드 추가
- setStatus(id, status, reason, now?) — 단일 transaction 으로 status + move_reason +
  status_changed_at + updated_at 갱신. status='trashed' ↔ deleted_at 동기화
  (backward compat). 그 외 status 는 deleted_at NULL.
- listByStatus(status, opts) — status 별 필터 + ORDER BY COALESCE(status_changed_at,
  created_at) DESC. limit cap 200.
- hydrate 에 status / statusChangedAt / moveReason 매핑 추가. 미설정 row 는 'active' fallback.
- restoreNote 재구현 — setStatus('active', null) 로 status + deleted_at 동기화 +
  v0.2.6 #10 round 1 fix (ai_status='failed'/'pending' → pending_jobs 재투입) 보존.
- 기존 테스트 fixture 5건에 새 필드 추가 (NoteCard, store.expired/recall/tagFilter/trash).
- 신규 테스트 11건 (setStatus + listByStatus + restoreNote 회귀).
- AiStatus enum 'disabled' 추가 — settings.ai_enabled=false 일 때 새 노트의 초기 status.
- m005 migration: ai_status CHECK 제약을 ('pending','done','failed','disabled') 로 relax.
  SQLite 가 ALTER COLUMN CHECK 미지원 → table recreate (notes_new INSERT SELECT DROP RENAME).
  기존 인덱스 (idx_notes_created_at, idx_notes_ai_status, idx_notes_deleted_at) 재생성.
- SettingsService schema 에 ai_enabled / onboarding_completed (optional) 추가 +
  isAiEnabled / setAiEnabled / isOnboardingCompleted / setOnboardingCompleted accessor.
  기본 fallback (ai_enabled=true, onboarding_completed=false) — 기존 settings.json 무영향.
- NoteRepository.create 가 optional aiStatus 받도록 — 'pending' 외 값일 때 pending_jobs skip.
  기존 caller (rawText 만 전달) 무영향.
- CaptureService deps 에 settings (좁은 AiEnabledSource 인터페이스) 추가.
  submit() 가 ai_enabled 조회 → false 면 ai_status='disabled' insert + enqueue skip.
  settings 미주입 시 기존 동작 (항상 enabled) 보존 — 테스트 케이스 무영향.
- main/index.ts wiring: settings: settingsSvc 주입.

Tests: 489 → 494 (CaptureService ai_enabled 2건 + m005 migration 3건). typecheck 0.
- store.ts: view enum ('inbox'|'completed'|'archived'|'trash'|'settings') + counts +
  setView + loadByView. setShowSettings delegates to setView (mirror).
- types.ts + preload + ipc/inboxApi: listByStatus + countsByStatus IPC.
- NoteRepository.countByStatus 신규.
- store.view.test (5) + NoteRepository.countByStatus test (1).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- App.tsx: 기존 2탭 (Inbox/휴지통) → 4탭. setView/counts 사용.
- onNavigate 도 setView 로 위임 (mirror state 동기 갱신).
- App.test: 4탭 렌더 + 클릭 → setView('completed') + aria-pressed (3 cases).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cut B Task 8 — Modal/NoteCard 메뉴 path 의 IPC backbone.

- inbox:set-status: id + status + reason → repo.setStatus, invalid status 거부
- ai:classify-status: stub (Task 9 에서 Ollama provider 호출로 정식 구현)
- types.ts InboxApi.setStatus / classifyStatus 시그니처 + preload wire-up
- 4 단위 테스트 (valid/null reason/invalid status/stub shape)
Cut B Task 7 — NoteCard 메뉴가 여는 modal.

- 사유 textarea (선택) + 활성/완료/보관/휴지통 버튼 (옮기기 즉시 setStatus + onMoved)
- 빈 사유 → null reason 전달 (trim 처리)
- AI 자동 분류 버튼 → classifyStatus(stub) 호출 + 추천 표시 + 확정 버튼
- statusLabel helper export (NoteCard 메뉴에서 재사용)
- 4 단위 테스트 (render / 버튼 클릭 / AI 추천 흐름 / 빈 사유 null)
Cut B Task 6 — 모든 view 공통 "이동 ▾" dropdown.

- 기존 휴지통/삭제 버튼 위치에 dropdown 추가 (모든 mode 공통)
- 현재 status 외 3개 목적지만 표시 (active 노트 → 완료/보관/휴지통)
- 메뉴 항목 클릭 → MoveStatusModal(initialTarget) 열기
- onMoved → local 상태 갱신 + onUpdated + (status 변경 시) onDeleted (list 제거)
- trash mode 의 영구 삭제/복구 버튼은 보존 (휴지통 단독 액션)
- 사용되지 않게 된 handleDelete 제거 (deleteNote 는 capture path 만)
- NoteCard 메뉴 단위 테스트 2건 (메뉴 표시 / 클릭 → modal → setStatus)
- src/main/ai/classifyStatus.ts: prompt + JSON parse + 안전 fallback (archived).
- InferenceProvider.generateRaw 추가 (optional) + LocalOllamaProvider 구현
  (Ollama /api/generate format:'json' 으로 raw JSON 응답 반환).
- inboxApi 의 ai:classify-status 핸들러를 stub 에서 정식 호출로 교체
  (deps.repo.findById + deps.providerHolder.get + classifyStatus()).
- 신규 테스트 7건 (classifyStatus 단위) + IPC 3건 (note 없음 / AI throw / 정상).
- 회귀: 513 → 522 통과.
Task 11-12 의 wizard 가 첫 launch e2e 환경 차단 — "나중에 설정" 클릭으로
wizard dismiss 후 inbox 헤더/empty state 검증. 회귀 1/1 pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 한국어 조사 분기: '보관로/휴지통로/활성로' → '보관으로/휴지통으로/활성으로'
  ('완료로' 만 받침 X). 받침 jongseong 검사 helper.
- MoveStatusModal 의 unused initialTarget prop 제거 + caller (NoteCard) 정리

548/548 + typecheck 0 유지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
Owner

코드 리뷰 — v0.2.9 Cut B

Scope: 19 commits / 47 files / +2323/−1975

Spec coverage 100%

Cut B design 의 모든 섹션이 task 매핑됨. F17 (status 4분기 + AI 자동 분류) + F18 (자유 텍스트 사유) + F23 (Ollama-less wizard + raw-only fallback).

코드 품질

Strengths

  • schema 변경 안전성: m004 (status 컬럼 add) + m005 (CHECK 제약 relax via SQLite table recreate). 외래키 ON DELETE CASCADE 활용하여 FK off → DROP → RENAME 패턴 안전.
  • v0.2.6 #10 fix 보존: restoreNote 의 ai_status='failed'/'pending' 재투입 + pending_jobs INSERT OR IGNORE 정확 보존. production path dead code 회귀 없음.
  • classifyStatus 안전한 default: AI 응답 parse 실패 / 무효 status / provider throw 모두 'archived' fallback (사용자 데이터 보존).
  • InferenceProvider.generateRaw optional: 기존 generate 시그니처 무영향 — Ollama 단일 provider 라 호환.
  • 한국어 조사 분기 (statusLabelWithParticle): 받침 jongseong 검사 — '보관으로/휴지통으로/활성으로' / '완료로'.
  • defense in depth: setStatus 의 transaction 캡슐화 (status + reason + status_changed_at + updated_at + deleted_at 동기화) 단일 atomic 보장.

Minor (모두 final review minor cleanup 3fab44b 에서 처리됨)

  • statusLabel "보관로/휴지통로" 한국어 grammarstatusLabelWithParticle 으로 분기
  • MoveStatusModal _initialTarget unused prop → drop + caller 정리

Critical / Important issue 없음.

Architecture

  • 단위 분해 명확 (migration / repository / IPC / store / component 5계층 분리)
  • 책임 명확성 — setStatus = 정책 무관 atomic transition / restoreNote = setStatus + pending_jobs 정책 / requeueDisabled = batch transition
  • 일관성 — requeueDisabled 와 기존 retryAllFailed 가 동일 패턴 (향후 requeueByStatus 통합 가능, DRY 후보)
  • onboarding wizard 의 "나중에 설정" 옵션이 기본값 (true) 유지 — Ollama 미설치 사용자에게 banner spam 가능. 본 cut 의 정책 (default ON) 따름, dogfood 후 재평가 가능.

Risk 잔재

  • dogfood 미검증: 4탭 / wizard / move modal / requeueDisabled / classifyStatus 의 실 사용 사이클 1주 soak 권장
  • m005 production DB 영향: SQLite table recreate 가 큰 DB 환경 timing 미검증. 본인 v0.2.8 사용자 DB 에서 첫 적용 — 외래키 (note_tags/media/pending_jobs) cascade 무결성 의존. 작은 DB 라 risk 낮음
  • classifyStatus 실 Ollama 검증 X: mock 기반 7 unit test 만. 실 Ollama 호출의 prompt 정확도 + 한국어 응답 quality 는 dogfood
  • Mac/Linux 빌드 미검증: 이전 v0.2.7/v0.2.8 동일 흐름 macOS host 핸드오프

���지 권장

  1. PR # 27 머지
  2. tag v0.2.9 + npm run dist:win → Windows exe 빌드
  3. Gitea release v0.2.9 + exe attach (이전 v0.2.7/v0.2.8 동일 흐름)
  4. macOS host: dist:mac + dist:linux 후 dmg/AppImage/deb 추가 attach
  5. dogfood 1주 soak — F17/F18/F23 의 실 사용 흐름 + classifyStatus Ollama 정확도 측정 → v0.2.10 Cut C (F20 raw_text revision history) 진입

Overall

Ready to merge. Spec 100% coverage, 472 → 548 unit + 1 e2e + typecheck 0, schema 마이그레이션 외래키 안전성 검증, v0.2.6 #10 fix 보존, 2 minor 모두 cleanup commit 에서 처리. Cut C (v0.2.10) 진입 가능.

🤖 Reviewed by Claude Opus 4.7 (1M context)

## 코드 리뷰 — v0.2.9 Cut B **Scope**: 19 commits / 47 files / +2323/−1975 ### Spec coverage ✅ 100% [Cut B design](docs/superpowers/specs/2026-05-09-v029-cut-b-design.md) 의 모든 섹션이 task 매핑됨. F17 (status 4분기 + AI 자동 분류) + F18 (자유 텍스트 사유) + F23 (Ollama-less wizard + raw-only fallback). ### 코드 품질 **Strengths** - **schema 변경 안전성**: m004 (status 컬럼 add) + m005 (CHECK 제약 relax via SQLite table recreate). 외래키 ON DELETE CASCADE 활용하여 FK off → DROP → RENAME 패턴 안전. - **v0.2.6 #10 fix 보존**: restoreNote 의 ai_status='failed'/'pending' 재투입 + pending_jobs INSERT OR IGNORE 정확 보존. production path dead code 회귀 없음. - **classifyStatus 안전한 default**: AI 응답 parse 실패 / 무효 status / provider throw 모두 'archived' fallback (사용자 데이터 보존). - **InferenceProvider.generateRaw optional**: 기존 `generate` 시그니처 무영향 — Ollama 단일 provider 라 호환. - **한국어 조사 분기** (`statusLabelWithParticle`): 받침 jongseong 검사 — '보관으로/휴지통으로/활성으로' / '완료로'. - **defense in depth**: setStatus 의 transaction 캡슐화 (status + reason + status_changed_at + updated_at + deleted_at 동기화) 단일 atomic 보장. **Minor (모두 final review minor cleanup `3fab44b` 에서 처리됨)** - ~~statusLabel "보관로/휴지통로" 한국어 grammar~~ → `statusLabelWithParticle` 으로 분기 - ~~MoveStatusModal `_initialTarget` unused prop~~ → drop + caller 정리 Critical / Important issue 없음. ### Architecture - 단위 분해 명확 (migration / repository / IPC / store / component 5계층 분리) - 책임 명확성 — setStatus = 정책 무관 atomic transition / restoreNote = setStatus + pending_jobs 정책 / requeueDisabled = batch transition - 일관성 — `requeueDisabled` 와 기존 `retryAllFailed` 가 동일 패턴 (향후 `requeueByStatus` 통합 가능, DRY 후보) - onboarding wizard 의 "나중에 설정" 옵션이 기본값 (true) 유지 — Ollama 미설치 사용자에게 banner spam 가능. 본 cut 의 정책 (default ON) 따름, dogfood 후 재평가 가능. ### Risk 잔재 - **dogfood 미검증**: 4탭 / wizard / move modal / requeueDisabled / classifyStatus 의 실 사용 사이클 1주 soak 권장 - **m005 production DB 영향**: SQLite table recreate 가 큰 DB 환경 timing 미검증. 본인 v0.2.8 사용자 DB 에서 첫 적용 — 외래키 (note_tags/media/pending_jobs) cascade 무결성 의존. 작은 DB 라 risk 낮음 - **classifyStatus 실 Ollama 검증 X**: mock 기반 7 unit test 만. 실 Ollama 호출의 prompt 정확도 + 한국어 응답 quality 는 dogfood - **Mac/Linux 빌드 미검증**: 이전 v0.2.7/v0.2.8 동일 흐름 macOS host 핸드오프 ### ���지 권장 1. PR # 27 머지 2. tag `v0.2.9` + `npm run dist:win` → Windows exe 빌드 3. Gitea release v0.2.9 + exe attach (이전 v0.2.7/v0.2.8 동일 흐름) 4. macOS host: `dist:mac` + `dist:linux` 후 dmg/AppImage/deb 추가 attach 5. dogfood 1주 soak — F17/F18/F23 의 실 사용 흐름 + classifyStatus Ollama 정확도 측정 → v0.2.10 Cut C (F20 raw_text revision history) 진입 ### Overall **Ready to merge.** Spec 100% coverage, 472 → 548 unit + 1 e2e + typecheck 0, schema 마이그레이션 외래키 안전성 검증, v0.2.6 #10 fix 보존, 2 minor 모두 cleanup commit 에서 처리. Cut C (v0.2.10) 진입 가능. 🤖 Reviewed by Claude Opus 4.7 (1M context)
altair823 merged commit d59e8388b6 into main 2026-05-09 08:44:03 +00:00
altair823 deleted branch worktree-v029-cut-b-status-reason-ailess 2026-05-09 08:44:32 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: altair823-org/inkling#27