Commit Graph

1555 Commits

Author SHA1 Message Date
lucaronin
63eedbdb91 fix: clear missing active vault paths 2026-04-07 22:35:04 +02:00
lucaronin
b674d20a05 fix: stop writing empty suggested properties 2026-04-07 22:34:33 +02:00
lucaronin
f00eb652c1 fix: tighten relationship chip typing 2026-04-07 22:12:15 +02:00
lucaronin
927aa5c73c feat: show icons on relationship chips 2026-04-07 22:09:21 +02:00
lucaronin
f0ac684524 fix: allow CodeScene recovery mode 2026-04-07 22:08:51 +02:00
lucaronin
7e48b81f30 fix: tighten note icon typing 2026-04-07 21:11:20 +02:00
lucaronin
771409d30b feat: add note icon property support 2026-04-07 21:09:06 +02:00
lucaronin
2eb8e02061 fix: stop syncing title frontmatter on note open 2026-04-07 20:43:13 +02:00
lucaronin
31e41e869a fix: avoid duplicate list property drag tab index 2026-04-07 20:34:10 +02:00
lucaronin
9cc3bcf758 feat: customize inbox note list columns 2026-04-07 20:31:08 +02:00
lucaronin
6c67b39ae5 fix: narrow deleted preview active tab path 2026-04-07 20:10:13 +02:00
lucaronin
8218bcf558 feat: show deleted notes as restorable changes 2026-04-07 20:09:04 +02:00
lucaronin
59205c4012 fix: keep view filter values as plain text 2026-04-07 19:40:54 +02:00
lucaronin
c68c0a6c10 test: slim the pre-push smoke lane 2026-04-07 19:22:11 +02:00
lucaronin
b384cbf6ee chore: enforce main-only workflow and adopt AGENTS.md 2026-04-07 18:42:41 +02:00
lucaronin
578f369f4c chore: ratchet CodeScene thresholds to 9.45/9.29 2026-04-07 18:14:55 +02:00
lucaronin
cbad38354b style: satisfy rustfmt pre-push check 2026-04-07 17:52:13 +02:00
lucaronin
6a02317294 fix: correct editor breadcrumb props typing 2026-04-07 17:49:15 +02:00
lucaronin
a12b3503e4 fix: hide title section for untitled drafts 2026-04-07 17:47:15 +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
4a4ce4a402 fix: open editor immediately when clicking suggested property slots
Previously, clicking a suggested property slot (Status, Date, URL) would add
an empty property to frontmatter but fail to open the editor. This was due
to a race condition where:

1. handleSuggestedAdd() called onAddProperty() which is async
2. The useEffect tried to detect when the property appeared in frontmatter
3. But frontmatter updates asynchronously after onAddProperty resolves
4. By the time frontmatter is updated, the useEffect had already run

The fix is to directly set the editing key immediately when clicking a
suggested slot, rather than relying on the useEffect to detect the property
being added. This is more reliable because we know we're adding the property
- we don't need to wait for it to appear in frontmatter.
2026-04-07 11:03:50 +02:00
lucaronin
387ca56af6 docs: add/update ADRs for H1-as-title and Trash removal (guard — from commits d50f3479, 9c87eca2, d0c3a6b8) 2026-04-07 08:02:31 +02:00
lucaronin
e0ea0ddad9 chore: restore ui-design.pen (Pencil design file — not stale) 2026-04-06 19:27:40 +02:00
lucaronin
c9da52a7ba docs: restore VISION.md — product vision, strategy and design principles 2026-04-06 19:26:48 +02:00
lucaronin
c5f6e15670 chore: remove remaining stale screenshots 2026-04-06 19:25:03 +02:00
lucaronin
89f655cc04 chore: remove stale docs and assets (PROJECT-SPEC, ROADMAP, VISION, Design System Proposal, iPad Prototype, screenshots, untitled notes, prompt.txt, ui-design.pen) 2026-04-06 19:18:15 +02:00
lucaronin
ceda8abe5d fix: suggested property slots now reliably open editor after click
Replace setTimeout-based editingKey activation with a useEffect that
watches propertyEntries. When the newly added property appears in
propertyEntries (after the async backend write completes), the effect
sets editingKey, ensuring the editor/picker opens regardless of timing.

The old setTimeout(fn, 0) approach raced with the async frontmatter
write — editingKey was set before the property existed in the DOM,
so the editing state had no matching PropertyRow to activate.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:31:51 +02:00
lucaronin
95edc7f1a2 docs: require completion comment on Todoist task before /laputa-done (QA, refactoring, ADRs, code health) 2026-04-06 16:17:19 +02:00
lucaronin
8fe5340416 docs: require pre-task code health check — refactor before feature work if below gate 2026-04-06 16:12:58 +02:00
lucaronin
8b98e77680 fix: sync custom properties to VaultEntry on frontmatter changes
View filters that reference custom properties (e.g. "Trashed", "Priority")
were not reactively updating because contentToEntryPatch and
frontmatterToEntryPatch only synced known fields (type, status, etc.)
to the VaultEntry. Custom frontmatter keys were silently dropped.

Now frontmatterToEntryPatch produces a propertiesPatch for unknown keys,
and contentToEntryPatch includes them in the properties field. This
ensures evaluateView sees up-to-date custom property values when
re-filtering the note list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:10:02 +02:00
lucaronin
ca507f6796 fix: forbid lowering CodeScene thresholds in CLAUDE.md 2026-04-06 15:45:20 +02:00
lucaronin
f756e6a831 feat: add note count chips to sidebar view entries
Each view in the sidebar now shows a count chip displaying the number of
notes matching its filters, consistent with type section count chips.
Count updates reactively as vault entries change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:29:54 +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
3411f4e817 fix: stabilize flaky SearchPanel keyboard tests with act() wrapping
Wrap fireEvent.keyDown calls in act() and assertions in waitFor() so
React state updates flush before checking side effects.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:41:59 +02:00
lucaronin
e2890ecbb5 fix: don't bake demo-vault-v2 path into CI builds
When CI=true, skip injecting __DEMO_VAULT_PATH__ so the CI runner's
absolute path (/Users/runner/...) is never compiled into the bundle.
The default vault path is resolved at runtime via get_default_vault_path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:31:04 +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
d284befd5f fix: add hasH1 to mock entries for build compatibility
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:22:38 +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
0c5db9ebea fix: remove remaining trash navigation command and header title
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 12:27:15 +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
53072eb4f3 fix: Cmd+Option+arrow navigation now follows the visible note list order
The keyboard navigation was computing its own note list with hardcoded
sortByModified, which didn't match the actual UI order (Inbox sorts by
createdAt, custom types use configurable sorts, etc.). Now the NoteList
component writes its sorted list to a shared ref that the navigation
hook reads directly, ensuring navigation always matches visual order.

Also fixes navigation not wrapping at list boundaries per spec.

Syncs CodeScene thresholds with current remote scores.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 10:29:27 +02:00
lucaronin
463c9bd928 fix: show Add button immediately in suggested relationship slots
Remove the collapsed/expanded toggle from SuggestedRelationshipSlot so
the InlineAddNote "Add" button with dashed border is visible without
a click. Also change relationship label font-size from font-mono-overline
(10px) to text-[12px] to match property names in the Inspector.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 14:59:34 +02:00
lucaronin
b9ad9d4452 fix: align suggested property slots with real properties in Inspector
Add text-left to the suggested property button (browsers default buttons
to text-align: center) and remove text-right from the em-dash placeholder
so both label and value columns match the real property row alignment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 14:27:08 +02:00
lucaronin
768b4c764d fix: add bottom padding to Favorites list matching top padding
Added paddingBottom: 4 to the expanded Favorites list container,
consistent with the ViewsSection pattern. This creates symmetric
spacing above the first and below the last favorite item.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 14:09:29 +02:00
lucaronin
4573ea80c3 fix: default sidebar section to Inbox on app launch and vault switch
Changed DEFAULT_SELECTION from 'all' (All Notes) to 'inbox' so the
app always opens on the Inbox section. During a session the user's
navigation is preserved; on next launch or vault switch it resets
to Inbox.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:44:18 +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
2a5386a9a8 fix: pass forceRawMode through ActiveTabBreadcrumb to BreadcrumbBar
TypeScript error: forceRawMode was set in the props object but not
declared in the ActiveTabBreadcrumb type or forwarded to BreadcrumbBar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:15:11 +02:00