• v0.4.0 33b539325a

    altair823 released this 2026-05-15 06:35:49 +00:00 | 0 commits to main since this release

    v0.4.0 — Notebooks + Lifecycle Simplification. 2026-05-15 첫 태그 후 dogfood UX 2회 보완을 force re-tag 로 묶음.

    추가 dogfood UX 2회차 (2026-05-15)

    dogfood 2일차 피드백:

    • 🪄 AI 정리하기 (default notebook batch 분류) — 사이드바 default notebook 선택 시 main 영역 상단에 "🪄 AI 정리하기" 버튼. 클릭 → AI 가 default 의 active 노트들을 한 prompt 에 묶어 분석 → BatchMoveModal 에 noteId 별 추천 notebook + checkbox → 사용자 confirm 후 일괄 moveNote. top N=50 cap, 한국어 prompt, hallucinated notebook 이름은 null 로 coerce.
    • 노트북 순서 변경notebooks.sort_order 컬럼 (m009 마이그레이션) + NotebookList row hover 시 ↑↓ 버튼. 인접 sort_order swap. drag-drop 은 v0.5+ 후보.
    • 이동 UX 정리 — NoteCard 의 notebook chip 을 tag 영역 → footer 의 "이동" 버튼 옆으로 이동. tag(키워드) / notebook(컨텍스트) 의미 분리. dropdown 도 위쪽으로 펼침.

    추가 dogfood UX 1회차 (2026-05-15)

    • NotebookChip 시각 강화 — 청색 배경 + 📓 아이콘 + ▾ caret + dropdown 헤더 "이동할 노트북".
    • 헤더 좌측 ☰ 햄버거 버튼 — 마우스 클릭으로 사이드바 토글 (Cmd/Ctrl+B 단축키와 동일).
    • 사이드바 default visible — 새 사용자가 처음부터 사이드바 보이게.
    • inboxWindow 기본 크기 확장 — 900×720 → 1440×900.

    원본 release (2026-05-15)

    추가

    • Notebook 카테고리 — 좌측 사이드바 (Cmd+B / Ctrl+B 토글), 색 + count badge. m008 마이그레이션이 default "기본" notebook 자동 생성 후 모든 기존 노트 배치.
    • AI 자동 fit 매칭 — 매 capture 시 AI 가 prompt 의 notebooks 목록을 보고 best-fit 자동 배치. NoteCard 의 chip 으로 1-click 변경.
    • Promotion 제안 — 같은 tag 가 3건 이상 default notebook 에 누적되면 "새 notebook 으로 분리할까요?" banner. 24h snooze + 영구 dismiss.
    • 사이드바 UX — NotebookCreateModal (이름 + 6색 palette), NotebookList (선택 highlight + count).
    • 검색 scope 토글 — "이 노트북" / "모든 노트북" dropdown.

    변경

    • lifecycle 3분기archived status 제거. 헤더 탭이 Inbox / 완료 / 휴지통 (3탭).
    • selectedNotebookId 변경 시 list / counts 자동 refresh.

    게이트

    • 단위 테스트 877 PASS (m008 + m009 마이그레이션 / NotebookRepository CRUD+reorder / batch classify / BatchMoveModal / NotebookList ↑↓ + 기존 v0.4 회귀 가드)
    • typecheck 0 errors
    • 신규 npm dependency 0

    업그레이드

    v0.3.14 인스톨러 위에 v0.4.0 인스톨러를 같은 위치에 실행하면 in-place 업그레이드. m008 (notebooks 도입) + m009 (sort_order) 마이그레이션이 첫 launch 시 자동 실행.

    설치

    Inkling-0.4.0-arm64.dmg 다운로드 → 기존 Inkling.app 위에 덮어쓰기. 코드 서명 skip 이라 첫 실행 시 macOS Gatekeeper 우회 필요할 수 있음.

    Downloads
  • altair823 released this 2026-05-14 05:29:26 +00:00 | 35 commits to main since this release

    v0.3.14 release. 2026-05-12 첫 태그 이후 2026-05-14 에 dogfood fixes 7건이 force re-tag 로 같이 묶임. 새 minor 안 늘리고 동일 release notes 확장.

    추가 dogfood fixes (2026-05-14)

    • fix(capture): QuickCapture blur-on-hide 제거 — ESC / Cmd+Enter 까지 창 유지
    • chore(ux): macOS 사용자 위해 Cmd 키 hint 안내
    • fix(macos): hidden autostart 시 dock indicator 표출 보장 + 자동실행 mismatch false positive 제거 (macOS 13+ SMAppService 한계 대응)
    • feat(notes): 원문 편집 / 이력 복원 시 AI 자동 재처리
    • feat(expiry): 마감 알림이 inbox 만 대상 + 오늘 당일 포함 + 헤딩/라벨 개선 + 노트 제목 클릭으로 바로가기
    • fix(sync): manifest.exported_at 제거 — 노트 변경 0건 시 no-op push 회피
    • feat(settings): 설정 페이지 각 section 에 설명 paragraph + SyncHelpModal 의 기술 용어 풀어쓰기

    원본 release (2026-05-12)

    AI 처리 fail 원인 가시화. NoteCard failed 노트의 "원인 보기" 접힘 섹션 + ai_error 에 reason/provider prefix 추가. 자세한 내용은 CHANGELOG.md.

    게이트

    단위 테스트 763 PASS · typecheck 0 errors · 신규 npm dependency 0

    설치

    Inkling-0.3.14-arm64.dmg 다운로드 → 기존 Inkling.app 위에 덮어쓰기. 코드 서명 skip 이라 첫 실행 시 macOS Gatekeeper 우회 필요할 수 있음.

    Downloads
  • v0.3.4 b35b644fe8

    altair823 released this 2026-05-10 15:02:37 +00:00 | 61 commits to main since this release

    v0.3.4 — sync 도움말 cut

    semver patch — 데이터/마이그레이션 변경 X. v0.3.0 Cut E (양방향 sync) dogfood 의 결과로, 사용자가 conflict 시나리오에 막힌 순간 도움받을 곳이 부재한 갭을 메운 cut. PR #33 머지.

    신규

    • SyncHelpModal (4 anchor 섹션) — 설정 → 동기화 저장소 → "도움말" 버튼 또는 ConflictModal 의 "자세히 보기 →" 링크에서 진입. 4 카테고리:
      • #main-conflict — 편집/편집·삭제/편집·AI 결과 충돌 결정 트리
      • #auto — fetch+rebase·첫 sync·push 거부·자동 주기 (사용자 개입 X)
      • #silent — NTP 시계 어긋남·동시 수정 회피·자동 sync 실패 silent
      • #setup — URL SSH/HTTPS 형식·잘못된 git@https:// 사례·인증 helper·연결 테스트 실패 troubleshoot·URL 재설정

    갱신

    • ConflictModal inline 설명 — 각 conflict row 의 "내 것 사용" / "원격 사용" 의미를 1-2 줄 인라인 안내 + (옵션) "자세히 보기 →" 링크 (onOpenHelp callback). 기존 caller backward-compatible (optional prop).
    • SyncSection 도움말 버튼 — URL row 마지막에 추가. busy (저장/테스트/sync 진행) 중에도 도움말 reachable.
    • README 동기화 섹션 통째 재작성 — stale "원격 백업 (F6-L2)" (v0.2.1 MVP, 트레이 "지금 동기화" + 수동 git init 안내) → "동기화 (Git, F21 Cut E)". 일회 설정 / 일상 사용 / 충돌 해결 (3 케이스) / Silent risk / Troubleshoot.

    게이트

    • 단위 727 → 738 PASS (+11): SyncHelpModal 7 + ConflictModal 회귀 3 + SyncSection 회귀 1
    • typecheck 0 errors
    • 신규 npm dependency 0

    자산

    • Windows: Inkling-Setup-0.3.4.exe (NSIS, x64)
    • macOS dmg / Linux AppImage·deb 는 별도 빌드 환경 필요

    후속 (deferred)

    • ESC key handler (현재 SyncHelpModal / ConflictModal 모두 X + overlay 만, 프로젝트 패턴 정합. 도입 시 양쪽 동시 처리)
    • 1주 dogfood soak 후 도움말 텍스트 정합성 1차 갱신

    업그레이드

    v0.3.3 인스톨러 위에 v0.3.4 인스톨러를 같은 위치에 실행하면 in-place 업그레이드. 스키마 v8 그대로.

    Downloads
  • v0.3.3 d5143ab1ad

    altair823 released this 2026-05-10 13:22:54 +00:00 | 72 commits to main since this release

    v0.3.3 — Sync configure-sync hotfix

    semver patch — 데이터/마이그레이션 변경 X. v0.3.0 Cut E (양방향 sync) dogfood 첫 시도 중 발견된 sync 설정 ENOENT 버그 hotfix 1건.

    주요 변경

    버그 수정 1건:

    • Sync 설정 첫 저장 실패 (git init failed: cannot change to '...\sync': No such file or directory) — 설정 → 동기화 저장소에서 URL 입력 후 "저장" 클릭 시 syncDir 디렉토리가 없는데 git -C <syncDir> init 가 호출되어 git 이 chdir 단계에서 죽던 문제. settings:configure-sync IPC 핸들러에 mkdir(syncDir, { recursive: true })git init 직전에 추가 (SyncService.runSync() 의 동일 패턴 정합화). 결과적으로 "연결 테스트" 버튼이 영영 활성화되지 않던 연쇄 증상 (저장 성공 시에만 url state 채워지고 버튼 enable) 도 자동 해소.

    검증

    • 단위 테스트: tests/unit/sync-ipc.test.ts 18 PASS (mkdir 호출 순서 회귀 1 추가)
    • typecheck: 0 errors
    • 신규 npm dependency: 0

    자산

    • Windows: Inkling-Setup-0.3.3.exe (NSIS, x64)
    • macOS dmg / Linux AppImage·deb 는 별도 빌드 환경 필요

    업그레이드

    v0.3.2 인스톨러 위에 v0.3.3 인스톨러를 같은 위치에 실행하면 in-place 업그레이드. 스키마 v8 그대로.

    Downloads
  • v0.3.2 f37e17dd81

    altair823 released this 2026-05-10 08:07:17 +00:00 | 74 commits to main since this release

    v0.3.2 — Cleanup Cut

    semver patch — 신기능 X. backlog 잔여 23 → 14 (-9 처리, -1 deferred 잔존). 잠재 bug fix + cosmetic + 기록 정리. dogfood baseline 정리.

    주요 변경

    잠재 bug 4건:

    • vocabSet COLLATE NOCASE 정합 (#31) — DB COLLATE NOCASE 와 strict-eq vocabSet 충돌 회피
    • time-dependent test flake fix — NoteRepository.create(now?: Date) signature
    • PII reason 마스킹 (#39) — LocalOllamaProvider.healthCheck 에서 LAN endpoint URL 노출 회피
    • KST_OFFSET_MS inline 5 callsite migrate (#19) — canonical helper 활용

    cosmetic 5건:

    • 탭 ARIA aria-pressedrole="tab" + aria-selected (#14)
    • loadExpired dead-code 제거 (#18)
    • AiWorker per-tag emit Promise.all 병렬화 (#32)
    • recall IPC handleon (#36) — fire-and-forget honest pattern
    • OllamaSettingsModal 폐기 audit (#41+#42)

    기록 정리 2건:

    • v0.2.2 stale memory 폐기
    • v024-backlog.md 처리 이력 갱신

    deferred:

    • #20 telemetry .catch silent → debug log (CaptureService logger 미주입)

    테스트 / 빌드

    • 단위 710 → 723 PASS (+13)
    • typecheck 0 errors
    • 산출물: Windows exe (NSIS, x64). macOS dmg / Linux AppImage·deb 는 후속 빌드

    Schema

    m007 (Cut D) 이후 변경 없음.

    다음 단계

    • 종합 dogfood ≥ 1주 soak (Cut E sync + Cut F vision + cleanup baseline)
    • soak 후 신규 발견 + data-dependent 9건 일괄 triage → Cut G (F25 사이드바 + notebook_id) brainstorm
    Downloads
  • v0.3.1 0d2896e0cc

    altair823 released this 2026-05-10 03:14:30 +00:00 | 86 commits to main since this release

    v0.3.1 — Cut F: 멀티모달 vision AI (F24)

    semver patch — vision 추가, 기존 text-only 흐름 영향 X.

    자세한 내용은 PR #31 및 spec docs/superpowers/specs/2026-05-09-v031-cut-f-design.md 참조.

    주요 변경

    • F24 멀티모달 vision AI: Ollama vision 모델 (gemma3/gemma4/llava family) 자동 감지 + dropdown 선택 + 이미지 첨부 capture 시 vision path 자동 사용
    • 단위 679 → 710 pass (+31), typecheck 0
    • 기존 text-only 흐름 backward compat (optional opts)

    산출물

    • Windows: Inkling-Setup-0.3.1.exe (NSIS, x64)
    • macOS dmg / Linux AppImage·deb 는 후속 빌드
    Downloads
  • v0.3.0 a54f134343

    altair823 released this 2026-05-09 19:25:30 +00:00 | 100 commits to main since this release

    v0.3.0 — Cut E (양방향 git sync + Configure UI + Conflict resolution)

    semver MINOR — Major 영역 진입. 기존 push-only SyncService → 양방향 6단계 흐름 + Configure UI + Conflict resolution. F21 옵션 A+B+C 적용 ('both' choice 만 v0.3.1+ deferred).

    주요 변경

    • F21-A 자동 rebase: SyncService.sync() 양방향 6단계 = (1) local export → (2) addAll + commit (변경 시) → (3) fetch → (4) rebase onto origin/main → (5) re-import (applySyncFromDir → upsertFromSync) → (6) push. 첫 push (empty remote) 시 GitClient.refExists('origin/main') guard 로 rebase skip — "invalid upstream" 에러 회피.
    • F21-B Configure UI: SettingsPage 의 신규 "동기화 저장소" SyncSection. URL 입력 + 저장 (settings persist + git init + remote add) + 연결 테스트 (git ls-remote) + 자동 sync 토글 + interval input (default 30분, min 5).
    • F21-C Conflict UI: rebase 실패 시 git diff --name-only --diff-filter=U + git show :2:<path> (ours) / :3:<path> (theirs) 로 localText/remoteText 채우고 abort. ConflictModal 에서 path 별 "내 것 사용" / "원격 사용" 선택 → resolveConflictgit checkout --ours/--theirs + rebase --continue + push.
    • NoteRepository.upsertFromSync (sync 전용 3 분기): id 없음 → INSERT (capture revision + tags FTS sync) / id 있음 + raw_text 동일 + source 더 최신 → metadata 갱신 (title_edited_by_user CASE 보존) / id 있음 + raw_text 다름 + source 더 최신 → updateRawText 호출 (Cut C single write path → user revision INSERT chain). source 옛 → skip. importNote fork-on-id-collision 회피.
    • frontmatter 5 필드 round-trip: Cut B (status) + Cut C (note_revisions) 도입 시 export 누락된 5 필드 (status / status_changed_at / move_reason / due_date / due_date_source) 를 Cut E 에서 추가. ExportNote / ParsedNote interface + composeFrontmatter / parseExportNote / noteToExportNote 모두 갱신 — F5 round-trip 도 동시에 fix.
    • SyncTimer: settings.sync_interval_min 마다 자동 syncSvc.sync(). settings 변경 시 IPC handler 가 await timer.reconfigure() (stop + start). interval mode 실패는 silent. before-quit 훅에서 stop.

    테스트 / 빌드

    • 단위: 608 → 679 pass (+71, 1 pre-existing flake SyncService.test.ts timing test 와 무관):
      • GitClient 5 (fetch / rebaseOnto / rebaseAbort / hasUncommittedChanges / listConflicts)
      • upsertFromSync 5 (3 분기 시나리오)
      • frontmatter round-trip + applySyncFromDir 18 (export 7 + import 5 + applySyncFromDir 6)
      • SyncService bidirectional 5 (happy / commit-skip / conflict / fetch-fail / not-configured)
      • resolveConflict 4 (local / remote / checkout-fail / continue-fail)
      • SettingsService sync 6 (3 필드 × get/set + interval validation)
      • sync IPC 17 (5 sync 채널 + 2 settings setter)
      • SyncSection 4 / ConflictModal 3 / SyncTimer 5
    • typecheck: 0 errors
    • e2e: 세션 내 미수행 — UI 변경 = SettingsPage SyncSection + ConflictModal — capture/onboarding/banner flow 무관. 다기기 (Mac + Windows) dogfood 필수 — sync 가치는 다기기에서만.
    • 산출물: Inkling-Setup-0.3.0.exe (Windows NSIS x64, signed)
    • (macOS dmg / Linux AppImage + deb 차후 추가)

    Schema 변경

    m007 (Cut D) 이후 신규 schema 변경 없음. 양방향 sync 는 m007 이전 schema 호환 — note_revisions (m006) 와 notes_fts (m007) 모두 sync source = 동일 schema 양 기기.

    메모리 정책 갱신 (Cut E 머지 후 적용)

    • 양방향 sync source = path identifier (UUID 아님) — F5 export filename slug, git checkout --ours/--theirs 가 path 받음
    • upsertFromSync 가 sync 전용 in-place update path (importNote 의 fork-on-id-collision 회피)
    • Single write path 강제 4-path: note_tags INSERT (updateAiResult / updateUserAiFields / importNote / upsertFromSync), note_revisions INSERT (create / updateRawText / importNote / upsertFromSync) 모두 helper 경유 — final review 단계 grep 검증
    • timestamp 단조 가정 (NTP) — upsertFromSyncupdatedAt lexicographic compare. v0.3.1+ 에서 vector clock / revision id 검토 가능
    • 'sync' edited_by enum 미도입 — sync 가 적용한 raw_text 변경도 'user' revision (의미상 사용자 의도 전파). m008 회피
    • 명명 정확성 = UX 정직성 패턴 (Cut E 신규): 데이터 식별자가 실제 의미와 일치해야 UI 가 정직 (Cut E final review 의 noteId → path rename 사례)

    다음 (Cut F)

    v0.3.1 Cut F: F24 멀티모달 vision. 다기기 dogfood ≥1주 soak 후 진입.

    Risk 잔재

    • 다기기 환경 필수: Mac + Windows 양 기기 sync 환경에서만 dogfood 가치 검증
    • 인증 외부 의존: SSH key / git credential helper. Configure UI 의 "연결 테스트" 가 첫 진입점
    • timestamp 단조 가정: NTP 부재 + 양 기기 시계 어긋남 시 잘못된 skip/update risk
    • silent interval-mode failures: SyncTimer 가 sync 실패 silent — last-error surface 미구현
    • conflict 'both' deferred: v0.3.1+ revision branch 분기 정책과 함께
    • e2e 본 세션 미수행: 머지 후 main 에서 검증 권장
    Downloads
  • altair823 released this 2026-05-09 15:53:17 +00:00 | 113 commits to main since this release

    v0.2.11 — Cut D (FTS5 search + 회고 view)

    recall 핵심 가치 도달 cut. F19 의 6 옵션 중 A (FTS5 search) + D (일/주/월 회고 view) 적용. B/C/E/F 는 v0.3+ deferred.

    주요 변경

    • F19-A FTS5 search: SQLite FTS5 가상 테이블 notes_fts (note_id UNINDEXED + raw_text + ai_title + ai_summary + tags + tokenize='unicode61'). m007 마이그레이션 + AFTER INSERT/UPDATE/DELETE 트리거 3개 (notes 컬럼 자동 sync). 기존 status != 'trashed' 노트 backfill (note_tags JOIN GROUP_CONCAT). 헤더 SearchBox (200ms debounce) + clearSearch on empty + inbox view 결과 렌더 분기. 빈 query → 기본 list. multi-token = implicit AND. FTS5 special char ("*():) sanitize.
    • F19-D 일/주/월 회고 view: useInbox.view'review-daily' | 'review-weekly' | 'review-monthly' 추가. reviewAggregate(period, now) (totalCount + recentNotes(50) + tagCounts(DESC) + dueProgress(passed/pending KST today 기준)). computeCutoff 가 KST 자정 ISO 반환. ReviewView 컴포넌트 (period 라벨 + tag bar + due progress + 최근 NoteCard) + 헤더 <select> dropdown 진입.
    • NoteRepository.search(query, opts): sanitizeFtsQuery + notes_fts MATCH + ORDER BY rank + LIMIT cap (1..200). default status != 'trashed', opts.status 명시 시 해당 status 만.
    • single write path 강제 (Cut C 도입 + Cut D 보강): notes_fts.tags 컬럼은 트리거 자동 sync 안 함 — rebuildFtsTagsForNote(noteId) private 헬퍼가 single write path. note_tags INSERT/DELETE 하는 모든 path (updateAiResult / updateUserAiFields / importNote) 가 transaction 끝에서 헬퍼 호출. final review 단계에서 importNote 누락 발견 → 패치 (735d549).
    • AI 정책 무변: AiWorker findById(id).rawText source 코드 무수정. raw_text 가변 (Cut C) 의 trigger AFTER UPDATE 가 자동 sync.

    테스트 / 빌드

    • 단위: 569 → 608 pass (+39):
      • m007 마이그레이션 6
      • rebuildFtsTagsForNote (updateAiResult / updateUserAiFields) 2
      • ftsHelpers (sanitize + computeCutoff) 7
      • search 6
      • reviewAggregate 5
      • IPC handlers 3
      • store 3
      • SearchBox 2
      • ReviewView 3
      • importNote tags sync (final review fix) 2
    • typecheck: 0 errors
    • e2e: 세션 내 미수행 (worktree node_modules 비어 있어 prebuild path 실패; UI 변경 = 헤더 SearchBox + 회고 dropdown + ReviewView 만, capture/onboarding/banner 무관 — main 머지 후 검증)
    • 산출물: Inkling-Setup-0.2.11.exe (Windows NSIS x64, signed)
    • (macOS dmg / Linux AppImage + deb 차후 추가)

    Schema 마이그레이션

    • m007: notes_fts FTS5 가상 테이블 + 트리거 3개 (raw_text/ai_title/ai_summary 자동 sync) + 기존 status != 'trashed' 노트 backfill (note_tags JOIN GROUP_CONCAT). transaction 안 단일 exec (runMigrations wrap). 외래키 안전 (FTS5 가상 테이블은 FK 없음, trigger 의 OLD/NEW 만 사용)

    메모리 정책 갱신 (Cut D 머지 후 적용)

    • search source = notes.raw_text / ai_title / ai_summary / tags csv (FTS5 인덱스 latest only — Cut C revision X). raw_text 가변 정책과 일관
    • single write path 강제 (Cut D 보강): tags 변경 path = updateAiResult / updateUserAiFields / importNote 3곳, 모두 rebuildFtsTagsForNote 호출 보장 — invariant 검증 완료
    • 회고 cutoff = KST 자정 ISO (computeCutoff). dueProgress 비교 = KST today (kstTodayIso)
    • trashed 노트 FTS row 잔존 + query-level 필터 (별도 cleanup 안 함 — YAGNI)
    • regression 회귀 검사 패턴 (Cut D 확립): spec 단계에서 invariant 강제 항목 listing → implementation 단계 모든 entry point 점검 → final review 단계 spec invariant 항목 별 검증. importNote 같은 secondary path 누락 회귀 방지 (Cut C 의 capture revision 누락, Cut D 의 tags sync 누락 — 동일 패턴)

    다음 (Cut E)

    v0.3.0 Cut E: F21 양방향 sync + Configure UI + conflict. dogfood 1주 soak 후 진입.

    Downloads
  • altair823 released this 2026-05-09 14:53:33 +00:00 | 124 commits to main since this release

    v0.2.10 — Cut C (raw_text 가변 + revision history)

    load-bearing invariant 변경 cut. 메모리 정책 raw_text 불변 폐기 → raw_text 가변 + note_revisions 테이블에 변경 이력 보존 + 옛 버전 회수 UI. F20 promoted.

    주요 변경

    • F20 raw_text 가변: NoteCard 의 "원문 보기" 영역에 inline textarea 편집 + 저장/취소. inboxApi.updateRawTextNoteRepository.updateRawTextnotes.raw_text 갱신 + note_revisionsedited_by='user' 새 row INSERT (단일 transaction). 빈 문자열 reject (IPC { ok: false, reason: 'empty' }).
    • note_revisions 테이블 (m006): (rev_id PK AUTOINCREMENT, note_id FK→notes(id) ON DELETE CASCADE, raw_text, edited_at, edited_by CHECK IN ('user','capture')). idx_note_revisions_note_id (note_id, edited_at DESC). 기존 모든 노트 edited_by='capture' 로 backfill (edited_at = created_at).
    • 회수 UI: NoteCard "이력" 버튼 → RevisionHistoryModal — rev 목록 (capture/user 라벨 + 시각) + 각 row "회수" 버튼 + window.confirm dialog → restoreRevision. 옛 raw_text 가 새 user revision 으로 INSERT (linear chain 보존).
    • AI 정책 무변: 재실행 input = current notes.raw_text (latest). 옛 revision 미사용. AiWorker findById(id).rawText source 코드 무수정.
    • importNote capture revision 보장 (final review fix): F5 import 후 first user edit 시 import 시점 본문이 note_revisions 에 없어 history 에서 사라지는 회귀 발견 → importNote transaction 안 INSERT 추가 + insert/fork path 모두 적용. create + importNote 가 모든 INSERT INTO notes path 이며, 둘 다 capture revision 보장 (single write path 패턴).

    테스트 / 빌드

    • 단위: 548 → 569 pass (+21):
      • m006 마이그레이션 5
      • NoteRepository.create capture revision 1
      • updateRawText 2 / listRevisions 1 / restoreRevision 2
      • IPC handlers 4
      • NoteCard 편집 1
      • RevisionHistoryModal 2
      • findById 회귀 (AI source) 1
      • importNote capture revision (final review) 2
    • typecheck: 0 errors
    • e2e: 세션 내 미수행 (NoteCard 내부 + 신규 modal 만, capture/onboarding/banner 영향 X)
    • 산출물: Inkling-Setup-0.2.10.exe (Windows NSIS x64, signed)
    • (macOS dmg / Linux AppImage + deb 차후 추가)

    Schema 마이그레이션

    • m006: note_revisions 테이블 신설 + index + 기존 노트 capture backfill (edited_at = created_at). FK ON DELETE CASCADE — notes 영구 삭제 시 revision 자동 정리. transaction 안 단일 exec (runMigrations wrap)

    메모리 정책 변경 (Cut C 머지 후 갱신 완료)

    • raw_text 불변raw_text 가변 + note_revisions 보존 (사용자 편집 + 옛 버전 회���)
    • AI 재실행 input = current latest notes.raw_text (옛 revision X)
    • "raw_text invariant guard" (importNote 의 fork-on-conflict 사유)fork-on-id-collision (sync determinism) — 동일 id 가 두 distinct baseline 가리키지 않도록

    다음 (Cut D)

    v0.2.11 Cut D: F19 FTS5 search + 회고 view. dogfood 1주 soak 후 진입.

    Downloads
  • v0.2.9 d59e8388b6

    altair823 released this 2026-05-09 08:59:19 +00:00 | 135 commits to main since this release

    v0.2.9 — Cut B (status 4분기 + 사유 + Ollama-less)

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

    주요 변경

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

    테스트 / 빌드

    • 단위: 472 → 548 pass (+76)
    • typecheck: 0 errors
    • e2e: 1/1 pass (smoke + OnboardingWizard dismiss step)
    • 산출물: Inkling-Setup-0.2.9.exe (Windows NSIS x64, signed)
    • (macOS dmg / Linux AppImage + deb 차후 추가)

    Schema 마이그레이션

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

    다음 (Cut C)

    v0.2.10 Cut C: F20 raw_text 가변 (revision history) — load-bearing invariant 변경. 사용자 메모 본문 수정 + 옛 버전 회수 가능. dogfood 1주 soak 후 진입.

    Downloads