• 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