Commit graph

7 commits

Author SHA1 Message Date
Tristan Michael 056cd8ee49 fix: harden sync file validation and offline queue corruption handling
Restrict is_syncable() to validate path depth: .md files and .listdata.json
must be at depth 2 (inside list dirs), .metadata.json only at depth 1 (root).
Prevents syncing arbitrary files at unexpected depths. Back up corrupted
sync queue files before resetting, and log warnings on parse failures
instead of silently dropping queued operations.
2026-04-02 09:35:38 -07:00
Tristan Michael 3b2cb12272 fix: replace panicking unwrap/expect calls with graceful error handling
Replace .expect() in config path resolution with a fallback default.
Replace all .lock().unwrap() on Tauri AppState mutex with a helper that
converts poisoned locks into error strings. Replace .expect() on Android
app data dir with proper error propagation. Handle LAST_WRITE and WATCHER
global mutex locks gracefully. Propagate subtask cascade delete errors
instead of silently ignoring them.
2026-04-02 09:35:38 -07:00
Tristan Michael 68f1bff93b fix: prevent path traversal, enable CSP, and harden URL domain extraction
Validate that resolved list paths stay within the workspace root to prevent
directory traversal via malicious list names. Enable Content Security Policy
in Tauri config instead of leaving it null. Fix CLI domain extraction to
strip userinfo (user:pass@) from URLs before using as keyring service name.
2026-04-02 09:35:38 -07:00
Tristan Michael 326ebd83d8 Gate desktop-only deps for Tauri Android compilation
Make keyring optional behind keyring-storage feature in onyx-core.
Make notify/notify-debouncer-mini optional behind desktop feature in Tauri.
Gate all file watcher code behind #[cfg(not(target_os = "android"))].
Provide env-var-only credential fallbacks when keyring is disabled.
2026-04-01 17:35:57 -07:00
Tristan Michael 72475a552a fix: use has_time flag for due date time tracking
Replace the hours==0 && minutes==0 heuristic with an explicit has_time
bool field on Task. Existing files without the field deserialize as false
(date-only), preserving current behavior. Frontend components pass and
receive has_time through DateTimePicker's onchange callback.
2026-04-01 01:06:10 -07:00
Tristan Michael c4c03679ae feat(core): add move_task and rename_list to onyx-core
Add TaskRepository::move_task() to move tasks between lists and
rename_list() to rename lists on the filesystem. Adds rename_list
to the Storage trait with FileSystemStorage implementation.
Includes tests for both operations plus duplicate-name error case.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:27:47 -07:00
Tristan Michael 9e204ef818 rename onyx-core crate (formerly bevy-tasks-core) 2026-03-31 09:46:56 -07:00