-
released this
2026-05-09 14:53:33 +00:00 | 124 commits to main since this releasev0.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.updateRawText→NoteRepository.updateRawText가notes.raw_text갱신 +note_revisions에edited_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 미사용. AiWorkerfindById(id).rawTextsource 코드 무수정. - importNote capture revision 보장 (final review fix): F5 import 후 first user edit 시 import 시점 본문이
note_revisions에 없어 history 에서 사라지는 회귀 발견 →importNotetransaction 안 INSERT 추가 + insert/fork path 모두 적용.create+importNote가 모든 INSERT INTO notes path 이며, 둘 다 capture revision 보장 (single write path 패턴).
테스트 / 빌드
- 단위: 548 → 569 pass (+21):
- m006 마이그레이션 5
NoteRepository.createcapture revision 1updateRawText2 /listRevisions1 /restoreRevision2- IPC handlers 4
- NoteCard 편집 1
- RevisionHistoryModal 2
findById회귀 (AI source) 1importNotecapture 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
- F20 raw_text 가변: NoteCard 의 "원문 보기" 영역에 inline textarea 편집 + 저장/취소.