notes/CHANGELOG.md

244 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
All notable changes to Graph Notes will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
## [1.5.0] — 2026-03-11
### Added
- **Graph View Upgrade** — Complete rewrite using `@blinksgg/canvas` v3.0 with virtualized rendering
- **Note Graph Nodes** — Custom node type showing title, tag pills, link count badge, and cluster color
- **Cluster Group Nodes** — Collapsible `GroupNode` containers grouping related notes by community detection
- **Minimap** — Canvas overview with draggable viewport for large vault navigation
- **Layout Switcher** — Force-directed, tree, and grid layouts with animated transitions
- **Graph Search & Spotlight** — Type-to-search with non-matching nodes dimmed and camera fit-to-bounds
- **Edge Labels** — Wikilink context displayed on graph edges
- **MiniGraph Upgrade** — Sidebar preview upgraded to canvas v3.0
### Changed
- `@blinksgg/canvas` updated to v3.0 from `gg-antifragile` repository
- `WhiteboardView` migrated to new `CanvasProvider` API
- `GraphView` reduced from 336 to ~120 lines
## [1.4.0] — 2026-03-11
### Added
- **Content Checksums (SHA-256)** — Per-note hashing with on-demand vault-wide verification against stored checksums
- **Vault Integrity Scanner** — Deep scan for truncated files, leftover `~tmp` files, orphaned `.graph-notes/` entries, and non-UTF-8 encoding issues
- **Automatic Backup Snapshots** — Vault-level `.zip` snapshots in `.graph-notes/backups/` with auto-pruning of old snapshots
- **Write-Ahead Log (WAL)** — Crash recovery via operation journal in `.graph-notes/wal.log` with startup replay
- **Conflict Detection** — mtime-based external modification check before writes; conflict banner with overwrite/discard options
- **Frontmatter Schema Validation** — Inline warnings for unclosed `---` delimiters, duplicate keys, and invalid date formats
- **Orphan Attachment Cleanup** — Scan `_attachments/` for files not referenced by any note, with bulk delete
- **File Operation Audit Log** — Append-only log of all create/update/delete/rename operations with timestamps
### Changed
- Sidebar: added 🛡️ Integrity Report action
- Command Palette: added Verify Vault, Create Backup, Audit Log commands
- StatusBar: integrity badge showing checksum status
- Editor: conflict banner + frontmatter validation warnings
### Dependencies
- Added `sha2` (Rust) for content hashing
## [1.0.0] — 2026-03-09
### 🎉 First Stable Release
Graph Notes reaches 1.0 — a local-first, graph-based note-taking app built with Tauri, React, and Rust.
### Hardened
- **Atomic writes** — all file saves use write→fsync→rename→fsync-parent to prevent corruption on crash/power loss
- **Path validation** — `safe_vault_path()` applied to all 20 file-access commands, preventing directory traversal
- **Filename sanitization** — `safe_name()` rejects path separators in workspace, canvas, and attachment names
- **Note-switch save race** — debounced save now captures note path at call time, preventing old content from being written to wrong note
- **Save pipeline consistency** — slash command insert and image paste now route through the standard debounced save with `domToMarkdown()`
- **Git error handling** — `git_status`, `git_commit`, `git_init` now check exit codes and surface stderr on failure
- **Silent error swallowing** — fixed 2 `let _ = fs::write()` sites to propagate errors
- **Panic prevention** — replaced `unwrap()` with `unwrap_or_default()` on fallible `file_name()` calls
- **Export safety** — `export_vault_zip` skips in-progress `~tmp` atomic write files
- **Regex performance** — all 10 per-call `Regex::new()` migrated to `LazyLock` statics
### Fixed
- **Rust compilation** — resolved duplicate `dirs_config_path()` definition and removed reference to unlinked `dirs` crate
- **Content Security Policy** — replaced `null` CSP with a proper baseline policy allowing local resources and Google Fonts
- **Canvas dependency** — updated `@blinksgg/canvas` to correct local file path
### Removed
- **Dead code** — removed unused `cache.rs` module (196 lines) that was never compiled (no `mod cache;` declaration, missing `notify` crate dependency)
### Changed
- **README** — replaced Vite template boilerplate with comprehensive project documentation
- **.gitignore** — added `src-tauri/target/` and `vault/` exclusions
- **Version** — bumped from 0.9.0 → 1.0.0 across `package.json`, `Cargo.toml`, and `tauri.conf.json`
## [0.9.0] — 2026-03-09
### Added
- **Import/Export Hub** — Export vault as ZIP, import .md folders from Obsidian/Notion
- **Keyboard Shortcuts Editor** — View, rebind, persist all keyboard shortcuts
- **Graph Analytics** — Stats dashboard with orphan detection, most-connected notes, link density
- **Note Pinning** — Pin notes to sidebar top, persisted to `.graph-notes/pinned.json`
### Changed
- Sidebar: added 📊 Analytics action
- Command Palette: added Graph Analytics, Import/Export, Keyboard Shortcuts commands
- Backend: added `export_vault_zip`, `import_folder`, `save_shortcuts`, `load_shortcuts`, `get_pinned`, `set_pinned`
### Dependencies
- Added `zip` crate (Rust)
## [0.8.0] — 2026-03-09
### Added
- **Outline Sidebar** — Collapsible heading tree (H1H6) with click-to-scroll and active heading tracking
- **Timeline View** — Chronological note cards grouped by date with 7d/30d/1y filters
- **Document Statistics** — Status bar with word count, characters, lines, reading time, heading count
- **Markdown Table Editor** — Visual table grid with click-to-edit cells, add/remove rows/columns, Tab navigation
- **Random Note** — 🎲 Discover random notes from sidebar or command palette
- **Link Suggestions** — Backend `suggest_links` for wikilink auto-completion
### Changed
- Sidebar: added 📅 Timeline and 🎲 Random Note actions
- Command Palette: added Timeline, Random Note commands
- Backend: added `suggest_links`, `list_notes_by_date`, `random_note` commands
### Dependencies
- Added `rand` crate (Rust)
## [0.7.0] — 2026-03-09
### Added
- **Canvas Whiteboard** — Freeform visual thinking surface powered by `@blinksgg/canvas` with card/text nodes, drag, zoom, save/load
- **Database Views** — Notion-style table/gallery/list views from frontmatter properties with sort/filter
- **Backlink Context** — Paragraph-level excerpts around wikilink mentions in backlinks panel
- **Dataview Queries** — Inline ` ```dataview TABLE ... SORT ... ``` ` blocks rendering live query tables
- **Git Sync** — commit/push/pull panel with status indicator, changed file list, repo initialization
### Changed
- **GraphView rewritten** using `@blinksgg/canvas` (replaces custom HTML5 Canvas force simulation)
- Sidebar: added Database, Whiteboard quick actions
- Command Palette: added Database View, New Whiteboard, Git Sync commands
- Backlinks now use backend `get_backlink_context` for paragraph excerpts
### Dependencies
- Added `@blinksgg/canvas`, `jotai`, `graphology`, `d3-force`
## [0.6.0] — 2026-03-09
### Added
- **Tabbed Editor** — Multi-note tab bar with drag-reorder, close buttons, active tab highlighting
- **Note Refactoring** — Extract selection to new note (replaces with wikilink), merge notes (appends + updates links)
- **Encrypted Notes** — AES-256-GCM password protection with Argon2 key derivation, lock/unlock button in editor
- **Spaced Repetition Flashcards** — Study mode from `?? question :: answer ??` syntax, SM-2 scheduling, difficulty ratings
- **Heading Folding** — Fold state persistence per note via `.graph-notes/folds.json`
- **Custom CSS Snippets** — Live-preview CSS editor, persisted in `~/.config/graph-notes/custom.css`
- **Workspace Layouts** — Save/restore window arrangements in `.graph-notes/workspaces/`
- **Embeddable Widgets** — `{{progress:N}}` progress bars, `{{counter:N}}` badges, `{{toggle:on/off}}` indicators
### Changed
- Editor supports right-click context menu for refactoring operations
- Command Palette extended with Flashcards, Custom CSS, and Save Workspace
- Sidebar quick actions include Flashcards
- Custom CSS loaded on mount via `useCustomCssInit` hook
### Dependencies
- Added `aes-gcm`, `argon2`, `rand`, `base64` for encryption
## [0.5.0] — 2026-03-08
### Added
- **Kanban Board** — Visual task board from `- [ ]` / `- [/]` / `- [x]` items across vault, with drag-and-drop between Todo/In Progress/Done columns
- **Focus / Zen Mode** — Distraction-free writing (`⌘⇧F`): hides sidebar, breadcrumbs, meta, centers content at max 720px
- **Note Version History** — Auto-snapshots every 5 min, timeline sidebar with inline diff viewer (add/remove highlighting)
- **PDF Export** — Print-styled export via browser print dialog with clean typography
- **Global Search & Replace** — Find/replace text across vault with dry-run preview before applying (`⌘H`)
- **Local Backlink Graph** — Mini force-directed canvas in preview showing current note's 1-hop link connections
- **Writing Goals** — Per-note word count targets with gradient progress bar (red→yellow→green)
- **Syntax-Highlighted Code Blocks** — highlight.js with 8 languages, copy-to-clipboard button, dark theme
### Changed
- Editor supports focus mode (hides chrome, centers content)
- Command Palette extended with Kanban, Focus Mode, Search & Replace, Export as PDF
- Sidebar quick actions include Kanban Board
- Auto-snapshot on save (throttled to 1 per 5 min)
### Dependencies
- Added `highlight.js` for syntax highlighting
## [0.4.0] — 2026-03-08
### Added
- **Frontmatter & Properties Panel** — YAML `---` fenced metadata with inline key-value editor (collapsible panel below breadcrumbs)
- **Table of Contents** — Auto-generated outline from headings, shown alongside preview mode with active heading highlight
- **Mermaid Diagram Rendering** — Fenced `mermaid` code blocks render as SVG diagrams in preview mode (lazy-loaded)
- **Image & Attachment Support** — Paste images from clipboard, stored in `_attachments/` directory with `![](path)` markdown
- **Slash Commands** — Type `/` at line start to open inline formatting menu (14 commands: headings, lists, code blocks, mermaid, tables)
- **Calendar View** — Visual month grid for daily notes with dot indicators, "Today" button, and click-to-create
- **Theme Picker** — 5 built-in themes (Dark Purple, Dark Emerald, Dark Ocean, Dark Rose, Light) with live preview, persisted
- **Export to HTML** — Export current note as styled standalone HTML file
### Changed
- Editor now includes PropertiesPanel, TableOfContents sidebar, and SlashMenu
- Command Palette extended with Calendar, Theme, and Export HTML commands
- Sidebar quick actions include Calendar View
- Added `⌘T` keyboard shortcut for Theme Picker
### Dependencies
- Added `mermaid` for diagram rendering
## [0.3.0] — 2026-03-08
### Added
- **Split Editor** — Open two notes side by side with a draggable divider (right-click → "Open in split")
- **Wikilink Hover Preview** — Hover over `[[wikilinks]]` to see a floating preview card with note content and link count
- **Note Transclusion** — `![[note-name]]` embeds the content of another note inline, with recursive depth limiting (3 levels)
- **Vault Switcher** — Click sidebar brand to switch between recent vaults or open a new folder
- **Drag & Drop File Organization** — Drag notes between folders in the sidebar file tree
- **Breadcrumb Navigation** — Path breadcrumbs shown above the editor for nested notes
- **Note Templates** — Create notes from templates in `_templates/` directory via Command Palette (supports `{{title}}` and `{{date}}` variables)
- **Recent Notes** — Last 5 recently opened notes shown in the sidebar
- **Favorites** — Pin notes as favorites (right-click → "Favorite"), persisted per vault in `.graph-notes/favorites.json`
- **Open in Split Pane** — Right-click context menu option to open a note in a side-by-side view
### Changed
- Note view now uses `SplitView` component, supporting both single-pane and dual-pane editing
- Context menu expanded with "Favorite" and "Open in split" actions, plus visual divider
- Command Palette shows template commands when available
- `LinkPreview` component renders as a global overlay for all hover previews
## [0.2.0] — 2026-03-08
### Added
- **Full-Text Search** — Vault-wide content search in the sidebar (debounced, with context snippets and result ranking)
- **Command Palette** — `⌘K` / `Ctrl+K` opens a fuzzy search palette for notes, commands, and content
- **Keyboard Shortcuts** — `⌘N` new note, `⌘G` graph view, `⌘D` daily note, `⌘E` toggle edit/preview, `⌘\` toggle sidebar
- **Note Rename** — Right-click context menu on notes in sidebar for inline rename with automatic wikilink updates across vault
- **Note Delete** — Right-click context menu with confirmation dialog; navigates away if active note deleted
- **Tags System** — `#tag` extraction from notes, sidebar tags section with click-to-filter, emerald-colored tag pills in editor
- **Graph Filtering** — Filter bar to highlight matching nodes, focus mode (1-hop neighborhood), orphan node toggle
- **Inline Markdown Styling** — Headings (`# ## ###`) render at proper sizes in edit mode, `**bold**`, `*italic*`, `` `code` `` styled inline
- **List Continuation** — Pressing Enter after `- item` auto-inserts bullet on next line
- **Tab Indent/Outdent** — Tab and Shift+Tab for list item indentation
- **Collapsible Sidebar** — Toggle sidebar visibility with `⌘\`
### Changed
- Edit/Preview mode is now global (shared via context), toggled with `⌘E` from anywhere
- Search input shows `⌘K` hint for command palette discovery
## [0.1.0] — 2026-03-07
### Added
- **Tauri v2 Desktop App** — Local-first note-taking with full filesystem access via `tauri-plugin-fs`
- **Contenteditable Editor** — Rich inline editing with `[[wikilink]]` token chips (compact pills that unwrap on backspace/delete)
- **Wikilink Autocomplete** — Type `[[` to fuzzy-search and link notes; creates new notes if no match found
- **Force-Directed Graph View** — Canvas-based visualization with semantic zoom (circles → rounded-rect cards with note previews)
- **Graph Interactions** — Single-click animates zoom to node, double-click opens note, drag to reposition nodes
- **shadcn-Inspired Design System** — Zinc-based neutrals, purple accent gradients, focus rings, spring transitions
- **Sidebar** — Recursive file tree with search, collapsible folders, active-state indicators, note count badge
- **Backlinks Panel** — Lists all notes linking to current page with highlighted context snippets
- **Markdown Preview** — Toggle between edit and rendered preview modes with inline wikilink rendering
- **Daily Notes** — Auto-generated daily journal entries accessible from sidebar shortcut
- **Auto-Save** — Debounced 500ms save on every keystroke
- **Custom Scrollbars** — Minimal 5px scrollbars matching the dark theme