F5 Export (v0.2.1 dogfood-feedback Track #2) #3

Merged
altair823 merged 5 commits from feat/f5-export into main 2026-04-26 01:47:37 +00:00
Owner

요약

로드맵 2번째 항목 — F5 Export: 모든 노트를 마크다운 트리 + index.jsonl + manifest + 미디어로 사용자 지정 폴더에 내보내기. 트레이 메뉴 "내보내기..." 트리거.

결정

결정
포맷 one-file-per-note + frontmatter + index.jsonl + manifest.json + README
미디어 기본 ON (dialog 에 평문 raw_text 경고)
파일명 YYYY-MM-DD-{id8}-{slugified-ai_title}.md (export 시점 동결)
embedding_text raw_text 단독
version inkling_export_version: 1
트리거 트레이 메뉴 "내보내기..." 만 (CLI · watch 후속)

구현 (5 commits)

  • c3b6500 plan
  • 8e09464 순수 compose 함수 (slugify · frontmatter · markdown · jsonl · manifest) + 26 단위 테스트
  • 9fdfd66 ExportService + 6 단위 테스트 + NoteRepository.listAll + MediaStore.absolutePath
  • 2766617 트레이 wiring + dialog
  • f4d7845 promotion

게이트

  • typecheck: 0 errors
  • 단위: 108/108 (76 → +32 신규)
  • e2e: 1/1
  • 스키마 변경: 0
  • 신규 dependency: 0

출력 트리

<targetDir>/
├── notes/
│   └── 2026-04-25-014a3b9c-주간-회고.md
├── media/
│   └── 014a3b9c__1.png
├── index.jsonl
├── manifest.json
└── README.md

다음 항목

로드맵 3번: F6-L3 Import — F5 의 역방향, 형식 동일.

🤖 Generated with Claude Code

## 요약 로드맵 2번째 항목 — **F5 Export**: 모든 노트를 마크다운 트리 + index.jsonl + manifest + 미디어로 사용자 지정 폴더에 내보내기. 트레이 메뉴 "내보내기..." 트리거. ## 결정 | 결정 | 값 | |------|-----| | 포맷 | one-file-per-note + frontmatter + index.jsonl + manifest.json + README | | 미디어 | 기본 ON (dialog 에 평문 raw_text 경고) | | 파일명 | `YYYY-MM-DD-{id8}-{slugified-ai_title}.md` (export 시점 동결) | | embedding_text | raw_text 단독 | | version | `inkling_export_version: 1` | | 트리거 | 트레이 메뉴 "내보내기..." 만 (CLI · watch 후속) | ## 구현 (5 commits) - `c3b6500` plan - `8e09464` 순수 compose 함수 (slugify · frontmatter · markdown · jsonl · manifest) + 26 단위 테스트 - `9fdfd66` ExportService + 6 단위 테스트 + NoteRepository.listAll + MediaStore.absolutePath - `2766617` 트레이 wiring + dialog - `f4d7845` promotion ## 게이트 - typecheck: 0 errors - 단위: 108/108 (76 → +32 신규) - e2e: 1/1 - 스키마 변경: 0 - 신규 dependency: 0 ## 출력 트리 ``` <targetDir>/ ├── notes/ │ └── 2026-04-25-014a3b9c-주간-회고.md ├── media/ │ └── 014a3b9c__1.png ├── index.jsonl ├── manifest.json └── README.md ``` ## 다음 항목 로드맵 3번: **F6-L3 Import** — F5 의 역방향, 형식 동일. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
altair823 added 5 commits 2026-04-26 01:47:31 +00:00
Pure compose layer for F5 (Export). slugifyTitle, composeFilename,
composeFrontmatter, composeMarkdown, composeIndexJsonl, composeManifest
+ ExportNote/ExportNoteMedia/ExportNoteTag types. No fs deps.
24 unit tests covering normal cases + edge cases (null title,
forbidden chars, multiline summary needing block scalar, colon
needing single-quote, image numbering by id8__n.ext).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ExportService composes pure exportFormat layer + reads from
NoteRepository.listAll (new, asc-ordered) + MediaStore.absolutePath
(new helper). Writes notes/{date-id8-slug.md}, media/{id8__n.ext},
index.jsonl, manifest.json, README.md to user-picked dir.
6 unit tests against tmp dirs + :memory: DB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tray now has 4th callback that opens directory chooser, exports all
notes via ExportService with includeMedia=true default. Dialog
message warns about raw_text plain-text + recommends private location.
Native toast on success/failure with note + media counts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extracted to own spec with mini-brainstorm decisions captured.
F5 in dogfood-feedback.md marked 🚀 promoted with link.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
altair823 merged commit f4d78456ae into main 2026-04-26 01:47:37 +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#3