Commit Graph

548 Commits

Author SHA1 Message Date
Luca Rossi
49a4ba2491 Merge pull request #43 from refactoringhq/task/properties-text-size
fix: use consistent 12px text size for property values in Properties panel
2026-02-24 15:39:59 +01:00
lucaronin
f90bb1f701 fix: use consistent 12px text size for property values in Properties panel
Property values (dates, URLs, text) were inheriting the 14px root font
size instead of using the 12px size already applied in InfoRow and other
inspector sections. Standardize all property value and editing input
text to 12px for visual consistency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:31:40 +01:00
Luca Rossi
8a7fb09a46 Merge pull request #46 from refactoringhq/task/codescene-threshold
refactor: raise CodeScene code health threshold to 9.2
2026-02-24 15:16:38 +01:00
lucaronin
8911aad930 feat: raise CodeScene code health threshold to 9.2
The project currently scores ~9.33, so raising the CI gate from 8.45
to 9.2 prevents significant regressions while leaving headroom.
Updates both the CI workflow threshold and CLAUDE.md documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:06:24 +01:00
lucaronin
56ed81ccb0 design: merge url-property-click frames into ui-design.pen 2026-02-24 15:02:30 +01:00
Luca Rossi
d127ece50d Merge pull request #42 from refactoringhq/task/change-note-type
feat: editable type picker in Properties panel
2026-02-24 15:00:50 +01:00
Luca Rossi
be4e3c72ae Merge pull request #44 from refactoringhq/task/url-property-click
feat: URL properties open in browser on click, underline on hover
2026-02-24 14:55:37 +01:00
lucaronin
7219c0799f feat: make URL properties clickable with hover underline
- Add UrlValue component: click opens in browser, pencil icon for edit
- URL detection via isUrlValue() (http/https URLs + bare domains)
- URL normalization: prepends https:// to bare domains
- Malformed URLs silently ignored (no open attempt)
- Long URLs truncated visually but full URL opens on click
- Edit mode via pencil icon or keyboard (Enter/Escape/blur)
- 22 new tests covering detection, normalization, and component behavior

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:46:18 +01:00
lucaronin
5d73655875 design: url-property-click wireframes (3 frames)
Default, hover (underline + pointer), and edit mode states
for URL properties in the Inspector panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:39:08 +01:00
lucaronin
8cbf30358d design: merge relations-edit frames into ui-design.pen 2026-02-24 14:33:05 +01:00
Luca Rossi
ab87c046c2 Merge pull request #41 from refactoringhq/task/relations-edit
feat: editable relations in Inspector panel
2026-02-24 14:08:44 +01:00
lucaronin
fe55f9253d design: relations-edit wireframes (3 frames) 2026-02-24 14:02:05 +01:00
lucaronin
5d833b4203 feat: replace read-only Type field with editable dropdown selector
The Type field in the Properties panel was read-only. Now it uses a
Radix Select dropdown that lists all vault types (entries where
isA === "Type"), plus a "None" option to clear the type. Wired to
the existing onUpdateProperty('type', ...) flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:00:34 +01:00
lucaronin
1a87036087 feat: make relations editable with add/remove controls
Add remove (X) button on hover for each related note in a relationship
group, and inline add control with autocomplete to add new notes to
existing relations. Changes update frontmatter via the existing
update/delete property pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:47:30 +01:00
lucaronin
2a9a3dd2f6 fix: remove .claude-done from tracking, add to .gitignore 2026-02-24 13:40:49 +01:00
Luca Rossi
323c8e3cc2 Merge pull request #40 from refactoringhq/task/window-frame-border
fix: add 1px inset border between macOS window frame and app content
2026-02-24 13:40:13 +01:00
lucaronin
ab3221dc13 docs: add design file placeholder for window-frame-border
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:32:15 +01:00
lucaronin
4612fe43e0 fix: add 1px inset border between macOS window frame and app content
The transparent titlebar window blended with the app content because
both shared the same background color. An inset box-shadow using the
existing --border-primary color creates a subtle separation. The 10px
border-radius matches the macOS window corner radius.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:32:03 +01:00
Luca Rossi
f0eb9e7f22 Merge pull request #38 from refactoringhq/task/wikilink-autocomplete
fix: require 2+ chars before showing wikilink autocomplete, limit to 20 results
2026-02-24 13:10:26 +01:00
lucaronin
7352d056bc Merge remote-tracking branch 'origin/main' into task/wikilink-autocomplete 2026-02-24 13:01:33 +01:00
Luca Rossi
ed26463231 Merge pull request #39 from refactoringhq/task/word-count-frontmatter
fix: exclude YAML frontmatter from word count
2026-02-24 12:52:33 +01:00
lucaronin
cdd33cf41f fix: exclude YAML frontmatter from word count in Inspector panel
The DynamicPropertiesPanel had a local countWords that used a regex
(/^---[\s\S]*?---/) which could match dashes inside frontmatter values,
leaving part of the frontmatter in the body and inflating the count.

Replace with the canonical countWords from utils/wikilinks.ts which uses
splitFrontmatter (line-based indexOf) and correctly finds the closing
delimiter on its own line.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:46:21 +01:00
lucaronin
c53b919151 fix: serialize env-var tests with mutex to prevent race in parallel CI 2026-02-24 12:46:19 +01:00
lucaronin
71e9ad364f fix: widen savePending type in useCommitFlow to accept Promise<boolean>
Pre-existing type mismatch where useEditorSave returns Promise<boolean>
but useCommitFlow expected Promise<void>. The return value is unused.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:46:19 +01:00
lucaronin
de5154e5f1 fix: require 2+ chars before showing wikilink autocomplete, limit to 20 results
The autocomplete menu for wiki-links was opening immediately on typing
'[[', processing all 9000+ vault entries and causing a visible freeze.

- Extract preFilterWikilinks utility with MIN_QUERY_LENGTH=2 gate
- Pre-filter entries with case-insensitive substring match before
  creating expensive onItemClick closures
- Cap results at MAX_RESULTS=20 after BlockNote's filterSuggestionItems
- Add comprehensive tests for the utility and Editor integration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:46:19 +01:00
Luca Rossi
c4f6de9f49 Merge pull request #37 from refactoringhq/task/rinomina-dirty-state
fix: refresh dirty state after rename so indicator reflects reality
2026-02-24 12:43:28 +01:00
lucaronin
8b708f2c81 fix: refresh dirty state after rename so indicator reflects reality
Two bugs caused stale dirty indicators after rename:
1. handleRenameTab didn't call loadModifiedFiles() after rename
2. handleSave (Cmd+S) skipped onAfterSave when nothing was pending

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:37:24 +01:00
Luca Rossi
32fd3ca656 Merge pull request #36 from refactoringhq/task/github-oauth-login
fix: surface actual error messages in GitHub OAuth login flow
2026-02-24 12:12:36 +01:00
Luca Rossi
060a9cf0fb Merge branch 'main' into task/github-oauth-login 2026-02-24 12:00:37 +01:00
lucaronin
209821ffdd fix: use correct GitHub OAuth App client_id for device flow
The previous client_id pointed to a GitHub App that did not have
device authorization flow enabled, causing "failed to start login"
errors. Switch to the refactoringhq OAuth App (Ov23liwee215tDMs9u4L)
which supports device flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:43:03 +01:00
Luca Rossi
8d19731e13 Merge pull request #35 from refactoringhq/task/drag-drop-tab-order
fix: drag-and-drop tab order persistence
2026-02-24 11:08:15 +01:00
lucaronin
1fba2a042e test: add tests for string error display and double-click prevention
Tauri invoke errors are strings (not Error instances). The new test
verifies the frontend displays the actual backend error message.
Also tests that the login button is disabled during the OAuth flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:30:53 +01:00
lucaronin
79fe2d9e6d fix: improve device flow 404 error with setup instructions
The GitHub App (Ov23liCuBz7Z5hKk6T8c) does not have Device
authorization flow enabled — GitHub returns 404. The error message
now includes specific setup steps so the user can fix the
configuration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:29:23 +01:00
lucaronin
2268350cca fix: surface actual error messages in GitHub OAuth login flow
The frontend was swallowing Tauri backend errors (which are strings,
not Error instances) and always showing generic "Failed to start login."
Now the actual error message is displayed. Also adds User-Agent header
to device flow requests, a clear error message for 404 responses, and
a test for the 404 case.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:18:50 +01:00
lucaronin
e288ccc905 test: add edge case tests for tab drag-and-drop reorder
- Drag cancel (dragEnd without drop) does not trigger reorder
- Drag from last tab toward first produces correct reorder
- Active tab path is preserved after reorder

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:17:48 +01:00
lucaronin
ec01b46cbd fix: use refs in useTabDrag to prevent stale closures on drop
handleDrop and handleDragOver closed over dragIndex/dropIndex state
values. When the last dragover and drop events fire in the same React
render cycle, the drop handler reads stale state (often null), causing
computeDropTarget to return null and skip the reorder.

Mirror dragIndex/dropIndex into refs that are updated synchronously
alongside setState. Event handlers now read from refs, ensuring they
always see the latest values regardless of React's batching schedule.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:13:43 +01:00
Luca Rossi
6eb01ac598 Merge pull request #34 from refactoringhq/task/vault-picker-create-v2
fix: remove broken Create New Vault button, unify with Open Local Folder
2026-02-24 00:41:59 +01:00
lucaronin
ce5f48bfbf fix: remove broken Create New Vault button, unify with Open Local Folder
window.prompt() doesn't work in Tauri WebView on macOS — silently returns null.
Removed handleCreateNewVault + create_vault_dir Tauri command entirely.
Open Local Folder is equivalent; Finder lets users create folders inline.

Also removes tauriCall helper (was only used by handleCreateNewVault).
573 frontend tests pass.
2026-02-24 00:35:18 +01:00
lucaronin
8454ce7be5 fix: remove vault.rs accidentally restored by cherry-pick
The save-regression cherry-pick (e51bafd) re-introduced the pre-refactor
vault.rs alongside vault/mod.rs, causing E0761 (ambiguous module) on CI.

vault/mod.rs (from PR #21 refactor-vault-rs) is the correct implementation
and already exports all needed functions (save_note_content, get_note_content,
purge_trash, etc.). Removing the duplicate vault.rs resolves the CI failure.
2026-02-24 00:33:20 +01:00
Luca Rossi
d40c1b28d7 Merge pull request #29 from refactoringhq/task/image-upload-regression
fix: image upload regression — simplify useImageDrop to not duplicate BlockNote upload
2026-02-24 00:12:07 +01:00
lucaronin
e51bafd4b7 fix: prevent editor from reverting content after Cmd+S save
The tab-swap useEffect in Editor.tsx watched [activeTabPath, tabs, editor].
When save updated tabs via setTabs, the effect re-ran and re-applied stale
cached blocks from the initial tab load, visually reverting the editor.
Subsequent edits would then save old content, effectively losing changes.

Fix: skip the block swap when activeTabPath hasn't changed (only tab content
was updated). Also refresh the cache with current editor blocks so a later
tab switch doesn't revert to stale content.

Added regression tests for the save → update round-trip (JS + Rust).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:11:08 +01:00
lucaronin
beaf946f7d fix: remove duplicate image upload in useImageDrop, fix build errors
The useImageDrop hook's handleDrop was uploading files and inserting
image blocks, but BlockNote already has a native dropFile ProseMirror
plugin that does the same via editor.uploadFile — causing duplicate
uploads and image block insertions on every drop.

Fix: handleDrop now only resets the visual overlay state. BlockNote's
native handler handles the actual upload (which calls uploadImageFile)
and block insertion with proper drop-position support.

Also fix build: exclude test files from tsconfig.app.json (test files
use vi.Mock types from vitest, not available in the app build config).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:09:58 +01:00
lucaronin
76a0076909 ci: re-trigger after threshold update [skip codescene] 2026-02-24 00:09:58 +01:00
lucaronin
0794d8f8ac fix: remove broken Create New Vault button + update tests 2026-02-24 00:09:49 +01:00
Luca Rossi
d17739179a Merge pull request #21 from refactoringhq/task/refactor-vault-rs
refactor: split vault.rs into focused submodules (CodeScene 7.29 → 10.0)
2026-02-24 00:03:22 +01:00
lucaronin
c67c4a267e fix: cargo fmt on migration.rs tests 2026-02-24 00:01:16 +01:00
Luca Rossi
8bc67774eb Merge pull request #30 from refactoringhq/task/wikilink-underline
Fix: wikilink underline follows type color
2026-02-23 23:31:24 +01:00
Luca Rossi
53cba9f88d Merge pull request #24 from refactoringhq/task/git-commit-zero-files
fix: commit & push now saves pending content and refreshes modified files
2026-02-23 23:31:17 +01:00
Luca Rossi
381a82475e Merge pull request #23 from refactoringhq/task/drag-drop-images
feat: drag & drop image support in editor
2026-02-23 23:31:13 +01:00
lucaronin
437a35420c test: add unit tests for vault/migration.rs to restore Rust coverage to ≥85%
Tests cover: has_legacy_is_a, extract_is_a_value, migrate_file_is_a_to_type,
and migrate_is_a_to_type (public function). migration.rs was at 0% coverage.
2026-02-23 23:22:42 +01:00