v0.3.2 — cleanup cut (잠재 bug 4 + cosmetic 5 + #20 deferred) #32
Reference in New Issue
Block a user
Delete Branch "worktree-v032-cleanup"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
v0.3.2 — cleanup cut. semver patch. backlog 잔여 23 → 14 (-9 처리, -1 deferred 잔존). 신기능 X, 잠재 bug fix + cosmetic + 기록 정리. dogfood baseline 정리.
NoteRepository.create(input, now?: Date)signature (기존setStatus/updateRawText패턴 정합), 6 testcase v1 capture 시간 명시 주입LocalOllamaProvider.healthCheckcatch 시classifyFetchError로 error class enum (network/timeout/dns/other) 변환, LAN endpoint URL 노출 회피src/shared/util/kstDate.tscanonical export 활용 (NoteRepository, ftsHelpers, BackupService, ContinuityService, NoteCard)aria-pressed→role="tab"+aria-selected(#14) — canonical patternloadExpireddead-code 제거 (#18) — App.tsx 호출 0건,loadInitial/refreshMeta가 inline fetchPromise.all병렬화 (#32) — 3 tag = 1 round-trip, file-append 동시handle→on(#36) — fire-and-forget honest pattern,Promise<void>→voidproject_v022_feedback.md— 6건 모두 v0.2.3+ cut 들에서 처리됨, 8일 stale).catch silent → debug log—CaptureService가logger미주입. constructor 변경 회피로 cleanup cut 외 후속.변경 내역 (9 commits)
Task 단위
36eafa1Task 1 —NoteRepository.create(now?: Date)+ 6 testcase 시간 주입6985db3Task 2 — vocabSet COLLATE NOCASE302bbd4Task 3 —LocalOllamaProviderPII reason 마스킹41310dbTask 4 — KST_OFFSET_MS 5 callsite migrate (cherry-picked from earlier subagent session)9073e78Task 5 — 탭 ARIA +loadExpired제거aa7eb9dTask 6 — AiWorker per-tagPromise.all4db7a0bTask 7 — recall IPChandle→on(#20 deferred)83cefccTask 7 fix — AiWorkerPromise.allclosure type narrowing 회복bb909e4Task 8 — release v0.3.2 + backlog 갱신변경 파일
테스트 / 빌드
SyncService.test.tsEPERM Windows temp cleanup flake — 본 cut 무관)Schema 변경
m007 (Cut D) 이후 변경 없음. 본 cut 은 코드 만 (test 시간 주입 + import migration + ARIA + dead code 제거).
메모리 정책 갱신 (v0.3.2 머지 후 적용)
tags.name COLLATE NOCASE와 정합 — vocab pool 확장 시 case mismatch silently skip 회피classifyFetchError(network/timeout/dns/other) — telemetry 에 host/IP 노출 0setStatus/updateRawText패턴 정합. test 결정성 + production 무영향on+send(canonical pattern, return value 의존 X)logger.debug사용. service 별 logger 주입 누락 시 별도 cut 으로 wiringRisk 잔재 (final review)
getTopUsedTags가KEBAB_CASE_RE로 capital 필터링 → production 에서 capital vocab 등장 X. defense-in-depth (vocab 정책 완화 시 안전)Test Plan
npx vitest run tests/unit/AiWorker.test.ts→ 28 PASS (vocabSet COLLATE 3 + Promise.all 회귀)npx vitest run tests/unit/LocalOllamaProvider.test.ts→ 16 PASS (PII 4 + 회귀 12)npx vitest run tests/unit/NoteRevisions.test.ts tests/unit/NoteRepository.upsertFromSync.test.ts→ 시계 지나도 deterministic PASSnpx vitest run tests/unit/recall-ipc.test.ts→ 3 PASS (ipcMain.on등록 검증)npx vitest run tests/unit/App.test.tsx→ 탭aria-selected검증git grep -n "KST_OFFSET_MS = 9" -- src/→ 1 hit (canonical export 만)🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spec: 2026-05-10-v032-cleanup-design.md Tasks: time-dep test fix / vocabSet COLLATE / PII reason / KST migration / 탭 ARIA + loadExpired / Promise.all / recall IPC + .catch / 기록 정리 목표 단위 710 → 약 720 (+10 신규, -2 제거), typecheck 0err.message 안에 LAN endpoint URL (예: 192.168.x.x:11434) 이 포함될 수 있어 telemetry 파일에 PII 우회 노출. v0.2.3.1 in-app endpoint UI 가 LAN 사용을 흔하게 만들어 노출 경로 확대. classifyFetchError 로 error class 분류 (network/timeout/dns/other) 후 reason: 'unreachable:{class}' 형태만 emit. host/IP 노출 0.v0.3.2 ? cleanup cut (���� bug 4 + cosmetic 5 + #20 deferred)to v0.3.2 — cleanup cut (잠재 bug 4 + cosmetic 5 + #20 deferred)코드 리뷰 — v0.3.2 cleanup cut
Scope: 9 commits (4deb777..bb909e4 → cherry-pick
41310db) — semver patch (cleanup, 신기능 X, backward compat)Spec coverage ✅ 11/12 (1 honestly deferred)
spec 의 모든 항목이 task 매핑됨. #20 (
.catch silent → debug log) 만 deferred —CaptureService가logger미주입 → constructor 변경 회피로 v0.3.3+ 후속.AiWorker.processJob:189lowercase normalize 양쪽NoteRepository.create(now?: Date)+ 6 testcase 시간 주입LocalOllamaProvider.healthCheckclassifyFetchErrorenum@shared/util/kstDateimport (NoteRepository / ftsHelpers / BackupService / ContinuityService / NoteCard)App.tsxrole="tab"+aria-selectedstore.tsaction + interface 제거 + test 제거AiWorker:189-207Array.from + mapinboxApi+ preload + types + 4 sibling mockssrc/→ 0 hits, v0.2.7 폐기 확인코드 품질
Strengths
note_tags/note_revisions4-path invariant 보존.NoteRepository.createsignature 만 변경 (capture revision INSERT path 그대로) — 기존 호출자 무영향 (default =new Date()).classifyFetchError(network|timeout|dns|other)enum +unreachable:{class}reason 만 emit. 디버그 가능성 보존 (error class 분류) + LAN endpoint URL 노출 0. PII negative assertion (not.toContain('192.168.1.5')) 명시 검증.const telemetry = this.telemetry) 셋이 합성.if (this.telemetry)가드 narrowing 을 closure 안에서 유지하는 idiom 적용.NoteRepository.create(input, now?: Date = new Date())— production 호출자 무영향recall IPC handle→on변경 시Promise<void>→void+ 호출자 4곳 (store / RecallBanner / preload / types) 모두 동기 갱신. orphaned await 0ipcMain.on+ipcRenderer.sendcanonical. return value 의존 호출��� 0 검증 후 migration.@shared/util/kstDate단일 source of truth. v0.2.6 commit3cfa60b가 4 callsite 정리, 본 cut 가 5 callsite 잔여 정리 → 0 inline duplicate.Final review follow-up 적용 (cherry-pick
41310db)initial implementer 진행 중 Task 4 (KST migration) 가 fresh subagent session 의 HEAD 인식 오류로 worktree branch 에서 누락됨 (1193c3c 이 dangling). final review (Opus, 1차) 가 발견 → cherry-pick 으로 복구:
1193c3c) 가 worktree-v032-cleanup branch 에 없음 — Task 5 implementer 가 fresh session 에서 이전 task 의 HEAD 못 봄41310db로 release commit 뒤에 복구. typecheck + 723 PASS 검증re-verification 결과:
git grep KST_OFFSET_MS = 9 -- src/→ 1 hit (canonical only)Architecture
NoteRepository(DB CRUD) /AiWorker(orchestration) /LocalOllamaProvider(transport + 분류) /kstDate(canonical helper) /inboxApi(IPC routing)now: Date) + canonical helper 활용Risk 잔재 (final review)
KEBAB_CASE_RE가 capital 필터링 → 현재 production 에서 capital vocab 등장 0. defense-in-depth (vocab 정책 완화 시 안전)Sub-review 트레일
83cefcctypecheck 회복머지 권장
v0.3.2+npm run dist:win→ Windows exe 빌드dist:mac+dist:linux후 dmg/AppImage/deb 추가 attachOverall
Ready to merge. Spec 11/12 coverage (#20 honestly deferred), 710 → 723 unit (+13) + typecheck 0, schema 변경 없음, backward compat 보장 (signature default + recall sync), single write path invariant 4-path 유지. Cherry-pick recovery 정직 기록. Cut G (v0.3.3 — F25 사이드바 + notebook_id) 진입 가능.
🤖 Reviewed by Claude Opus 4.7 (1M context) with subagent-driven-development per skill