Commit Graph

384 Commits

Author SHA1 Message Date
lucaronin
0c9bfb14c3 fix: format async delete command 2026-04-14 10:57:32 +02:00
lucaronin
48d2246f0b fix: make note deletion non-blocking 2026-04-14 10:53:08 +02:00
lucaronin
1ac6bd887b fix: format alpha build label parser 2026-04-13 23:52:13 +02:00
lucaronin
f31f827a4f fix: restore alpha build label 2026-04-13 23:48:19 +02:00
lucaronin
d540d76f73 feat: support selectable cli ai agents 2026-04-13 19:37:59 +02:00
lucaronin
87be231f9f test: format git status assertions 2026-04-13 15:30:17 +02:00
lucaronin
557a45189d fix: show diff stats in changes list 2026-04-13 15:22:21 +02:00
lucaronin
5120d75903 fix: update getting_started.rs AGENTS template to use type: instead of is_a: 2026-04-13 08:37:40 +02:00
lucaronin
61aae139c7 fix: remove stale daily note menu test id 2026-04-12 23:17:17 +02:00
lucaronin
14dc07084d fix: remove daily note command surfaces 2026-04-12 23:14:03 +02:00
lucaronin
a4397d48de fix: split alpha and stable release channels 2026-04-12 22:14:53 +02:00
lucaronin
e2745d96eb refactor: remove github auth integration 2026-04-12 17:08:07 +02:00
lucaronin
010bc32ee1 style: format Rust rename updates 2026-04-12 01:41:26 +02:00
lucaronin
361898b187 refactor: rename app branding from Laputa to Tolaria 2026-04-12 01:35:34 +02:00
lucaronin
8fb229ede3 fix: preserve square brackets in parsed note titles 2026-04-11 21:27:30 +02:00
lucaronin
ce84b34890 fix: restore cmd shift i properties shortcut 2026-04-11 20:59:16 +02:00
lucaronin
f694b9b5e4 fix: unblock native ai panel shortcut in tauri 2026-04-11 18:34:39 +02:00
lucaronin
b1bc056afb refactor: unify shortcut command routing 2026-04-11 10:39:08 +02:00
lucaronin
b01c6b4a4b fix: format rename rust helpers 2026-04-10 20:25:19 +02:00
lucaronin
98d19e4c41 fix: align created label to right edge in note list date row 2026-04-10 20:01:40 +02:00
lucaronin
5ebffc447b feat: standardize canonical wikilink targets 2026-04-10 19:57:21 +02:00
lucaronin
968c4d05a9 feat: add breadcrumb filename rename controls 2026-04-10 17:59:21 +02:00
lucaronin
7304c3c55f fix: move cmd+e to toggle organized 2026-04-10 12:08:17 +02:00
lucaronin
31c8ac4774 fix: make ai panel shortcut command-only 2026-04-09 13:16:35 +02:00
lucaronin
6640691514 style: format search title lookup 2026-04-08 19:52:01 +02:00
lucaronin
429aba7ae7 fix: use h1 titles for displayed note names 2026-04-08 19:46:16 +02:00
lucaronin
ad46eb0295 fix: serialize single-item yaml lists as blocks 2026-04-08 19:20:44 +02:00
lucaronin
c0a5e8e714 fix: restore tauri runtime compatibility 2026-04-08 14:42:43 +02:00
lucaronin
90785440a0 refactor: improve CodeScene hotspot health 2026-04-08 14:01:19 +02:00
lucaronin
ef4a51202c feat: clone the starter vault on demand 2026-04-07 23:28:02 +02:00
lucaronin
037fd39c95 feat: support relative date view filters 2026-04-07 23:02:55 +02:00
lucaronin
b0b6a4f4cd feat: add regex mode for view filters 2026-04-07 22:51:23 +02:00
lucaronin
8218bcf558 feat: show deleted notes as restorable changes 2026-04-07 20:09:04 +02:00
lucaronin
cbad38354b style: satisfy rustfmt pre-push check 2026-04-07 17:52:13 +02:00
lucaronin
c403522116 docs: rewrite vault AGENTS.md template — vault-agnostic, H1-as-title convention 2026-04-07 16:09:18 +02:00
lucaronin
0d08a80a0f style: cargo fmt on mod_tests.rs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:43:56 +02:00
lucaronin
8bd26b5d26 fix: sanitize gray_matter YAML output to handle unquoted colons and hash comments in list items
gray_matter mis-parses certain YAML patterns common in Notion-imported notes:
- Unquoted colons in list items (`- Bitcoin: Net Unrealized`) become objects
- Hash characters in list items (`- # Heading`) become nulls
These caused serde deserialization of the entire Frontmatter struct to fail,
silently dropping type, _organized, and all other fields (178 affected notes).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:21:29 +02:00
lucaronin
6762c5cec8 style: cargo fmt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:25:06 +02:00
lucaronin
9c87eca226 feat: auto-rename untitled notes + Rust title resolution tests
- Add auto_rename_untitled Rust command: one-shot rename of untitled-*
  files based on H1 heading, with collision handling (-2, -3)
- Wire auto-rename into frontend save flow (useAppSave.ts)
- Update Rust tests: extract_title now uses H1 > frontmatter > filename
- Add extract_h1_title tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:14:43 +02:00
lucaronin
d50f3479dc feat: H1-as-title — title resolution, TitleField hiding, breadcrumb filename
- Rust: extract_title now prioritizes H1 > frontmatter > filename
- Rust: add has_h1 field to VaultEntry for frontend TitleField control
- Frontend: hide TitleField + icon picker when note has H1 in body
- Frontend: breadcrumb shows filename stem instead of display title
- Frontend: new notes use untitled-{type}-{timestamp}.md, no title in frontmatter
- CSS: only hide first H1 in BlockNote when TitleField is visible
- Updated all tests for new title resolution and note creation behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:08:17 +02:00
lucaronin
0b58fd6061 fix: change AI panel shortcut from Cmd+Option+I to Cmd+Shift+L
The previous shortcut (Cmd+Option+I) conflicted with the editor's
italics shortcut (Cmd+I) on some keyboard layouts. Cmd+Shift+L has
no conflicts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 12:52:25 +02:00
lucaronin
d0c3a6b889 refactor: remove Trash system — delete is now permanent with confirm modal
Remove all vestiges of the abandoned Trash system: trashed/trashedAt fields
from types, frontmatter parsing, sidebar filtering, editor banners, inspector
components, mock data, and all related tests. Delete is already permanent via
useDeleteActions with a confirmation dialog. Notes with trashed:true in
existing vault frontmatter are now treated as normal notes (the flag is
ignored by the parser).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 12:21:56 +02:00
lucaronin
4bbd1f4b29 style: apply rustfmt to classify_file_kind tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:19:44 +02:00
lucaronin
ef17e7b3b1 fix: hide Raw toggle for non-markdown files forced into raw editor
Non-markdown text files (.yml, .yaml, .json, etc.) are already forced
into raw editor mode via effectiveRawMode. This hides the Raw toggle
button in the breadcrumb bar for those files since toggling is not
applicable. Adds tests for classify_file_kind and forceRawMode behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 12:59:19 +02:00
lucaronin
f902b23970 style: fix rustfmt formatting in trash.rs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 05:55:45 +02:00
lucaronin
b4f2fe0a7a feat: auto-purge notes trashed 30+ days ago on app launch
Implement silent background cleanup of notes that have been in trash
for more than 30 days, fulfilling the promise already shown in the
Trash view UI.

Safety model (all 5 checks must pass per file):
- _trashed: true in frontmatter
- _trashed_at present and parseable as date
- Date strictly >30 days ago
- File exists on disk
- File path inside vault root

Uses trash::delete (OS trash) with fs::remove_file fallback.
Triggers on app launch and window focus (max once/hour).
Audit log at .laputa/purge.log. Dry-run mode for testing.

Also fixes pre-commit hook to read CodeScene thresholds from
.codescene-thresholds instead of hardcoded values, matching the
ratchet mechanism documented in CLAUDE.md.

ADR-0042 documents the safety model.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 05:53:50 +02:00
lucaronin
c8b26b1caa feat: show YAML name field as title for .yml files in breadcrumb bar
When a .yml file is opened in the raw editor, the breadcrumb bar now
shows the YAML `name` field (e.g., "Active Projects") instead of the
filename. Falls back to filename if no name field is present.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 04:19:14 +02:00
lucaronin
de8a246521 feat: remove AI Provider Keys section from Settings
The OpenAI and Google AI key fields were unused — no feature reads them.
Removes the UI section, KeyField component, and all related state/storage
code across frontend (types, hooks, mock handlers, tests) and Rust backend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 01:34:30 +02:00
lucaronin
bf530c8a26 fix: include non-.md files in vault cache incremental updates
The cache's git helper functions (collect_md_paths_from_diff,
collect_md_paths_from_porcelain, git_uncommitted_files) filtered for
.md files only. This meant .yml view files created by save_view were
never detected by the incremental cache update, so they didn't appear
in vault entries until a full rescan.

Renamed the helpers to collect_paths_from_diff/collect_paths_from_porcelain
and replaced the .md filter with a hidden-segment filter, matching the
behavior of scan_all_files which already includes all non-hidden files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 23:12:33 +02:00
lucaronin
8e9a1bafcf feat: add body content filter support in Rust backend
The frontend already supported body content filtering in Views, but the
Rust backend evaluate_condition() was missing the "body" field mapping.
This adds the mapping from "body" to entry.snippet and comprehensive
tests for contains, not_contains, combined filters, and is_empty.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 21:29:03 +02:00