- Create custom-changelog.mjs script to generate single consolidated changelog entry
- Disable conventional-changelog's built-in changelog generation (infile: false)
- Use custom script in after:bump hook to generate merged changelog
- Properly groups all commits from last stable version by category
- Filters out beta release commits automatically
- Supports breaking changes with detailed descriptions
- Move getLastStableTag() call outside of module exports
- Execute function only once and reuse the result
- Fix infinite loop issue during changelog generation
- Set releaseCount to 0 to generate single version entry
- Add finalizeContext to update compare URL with correct version range
- Ensure changelog shows commits from last stable version (9.7.6) to current
- Remove regexp-flags parameter that causes git-raw-commits error
- Enhance writerOpts.transform to filter beta-related commits more comprehensively
- Filter commits with patterns like 'beta', '-beta.', and version-beta formats
- Add custom changelog transformer script for merging beta releases
- Update release-it configuration to filter out beta release commits
- Create test script to validate merged changelog generation
- Configure writerOpts to exclude beta-related chore commits from changelog
- All intermediate beta versions now merged into single release entry with commits grouped by type
- Roll back version from 9.8.0 to 9.8.0-beta.15 across all manifests
- Remove 9.8.0 changelog entries to prepare for clean release
- Enhance release-it configuration with intelligent stable tag detection
- Add getLastStableTag() function to exclude pre-release versions
- Configure changelog to only include commits since last stable release
- Improve release workflow for cleaner version management
The event triggered after editing a view configuration was incorrectly
labeled as 'view-deleted'. This changes it to the correct 'view-updated'
reason to properly reflect the action being performed.
- Add clickable-icon class to action buttons for better UX
- Replace full view refresh with targeted sidebar updates
- Implement granular view-config-changed event handling
- Preserve current view content when toggling visibility
- Only refresh view content when necessary (e.g., view type changes)
- Improve performance by avoiding unnecessary task re-filtering
- Replaced custom createSpinnerSVG method with Obsidian's setIcon('loader-2')
- Updated CSS animations to work with Obsidian's icon
- Fixed import to use existing quadrant.css instead of creating duplicate file
- Added missing CSS classes for load-more indicator visibility
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Created dedicated quadrant-column.css with all styles
- Replaced innerHTML with proper DOM manipulation for SVG creation
- Removed inline style.display usage in favor of CSS classes
- Cleaned up unused variables (descriptionEl, showLoadingIndicator)
- Properly imported CSS file into the component
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Move view settings inline styles to view-setting-tab.css
- Import new CSS file in main styles.css
- Clean up unused onCompletion.css styles
- Improve code maintainability with separated concerns
- Implement keyboard shortcut handler for settings search
- Support both Windows/Linux (Ctrl+K) and macOS (Cmd+K)
- Auto-focus and select existing text when triggered
- Only active when settings panel is visible
- Add flag to prevent duplicate updates when toggling habits
- Fix state synchronization issue in habit manager
- Ensure only selected habit updates its state
- Use requestAnimationFrame for proper DOM cleanup timing
- Fix text discrepancies when switching between edit and view modes
- Ensure markdown renderer properly updates on metadata changes
- Add region property to ViewConfig for top/bottom sidebar sections
- Implement drag-and-drop view management with sortablejs in settings
- Update sidebar to respect region-based view organization
- Add visual separation between top and bottom view sections
- Set default regions for habit, calendar, gantt, kanban views
- Increase filter debounce from 100ms to 400ms in TaskView
- Add 400ms delay for filter value inputs in ViewTaskFilter
- Add 300ms debounce for text filter in content view
- Reduce frequent re-renders during rapid typing
Display task completion progress in project count badges for both flat
list and tree views. Shows format like "3/10" when progress bar setting
is enabled, with visual feedback for completion status.
- Add completed task calculation for each project/node
- Show completed/total format in count badges
- Apply success colors for partially/fully completed projects
- Support both flat list and hierarchical tree views
- Respect all task status settings (useOnlyCountMarks, excludeTaskMarks, etc.)
- Add smooth transitions and theme-aware styling
Adds a configurable progress bar to the Projects view header that displays
task completion status for selected projects. The progress bar respects
all existing progress display settings and custom task status markers.
- Add `addProgressBarToProjectsView` setting with toggle in settings UI
- Implement progress calculation that properly respects task status settings
including useOnlyCountMarks, excludeTaskMarks, and custom status markers
- Reuse existing progress bar CSS classes and rendering patterns for consistency
- Progress bar updates dynamically when projects are selected/deselected
- Supports all display modes: graphical, text, both, and none
Applied consistent code formatting to content.ts and treeItem.ts files
including proper line breaks, indentation, and spacing for improved
readability.
Fixed an issue where typing hashtags in the quick capture panel would
append intermediate completions, resulting in duplicated tags like
'##t ##ta ##tag'. The autocomplete now properly tracks the full query
text after trigger characters and replaces the entire trigger + query
when a suggestion is selected.
- Add delete task option to right-click context menu in TaskView
- Support cascade deletion for tasks with subtasks
- Show confirmation dialog with options when deleting parent tasks
- Emit TASK_DELETED event for dataflow synchronization
- Update Repository and TaskIndexer to handle task removal
- Extend WriteAPI and CanvasTaskUpdater for child task deletion
- Add i18n translations for delete-related messages
Implements complete task deletion workflow with parent-child relationship
handling, allowing users to delete individual tasks or entire task trees.
- Added start date and scheduled date input fields alongside existing due date
- Implemented separate date input toggles for each date field (picker/text mode)
- Refactored date handling to support multiple date types with consistent behavior
- Each date field has its own toggle button with appropriate emoji (🛫, 📅, ⏳)
- Enhanced natural language date parsing for all three date fields
- Updated task data structure to include startDate and scheduledDate properties
Implement a new electron-based quick capture window for rapid task entry from system tray. Features include:
- Standalone capture window with optimized UI for fast task entry
- Smart task parsing with natural language support (tomorrow, next week, etc.)
- Project/context tag autocompletion from vault
- Keyboard shortcuts for priority setting and quick actions
- System tray menu integration with keyboard accelerator
- Automatic window management and proper cleanup on close
The quick capture window provides a distraction-free interface for capturing tasks
without needing to switch context to the main Obsidian window.
- Update ConfigurableTaskParser to properly map custom dataview fields using configured prefixes
- Fix specialTagPrefixes generation to avoid default fallbacks that conflict with custom settings
- Ensure case-insensitive matching for both tags and dataview metadata fields
- Pass tag prefix settings consistently through worker chains and orchestrator
- Add debug logging for dataview metadata extraction with configured prefixes
Fixes#422 where custom project prefixes and dataview properties were ignored
Implement case-insensitive matching for special tag prefixes (project, context, area) to improve user experience and consistency. Tags like #Project/foo and #project/foo now both correctly map to project metadata.
- Add lowercase key duplication in parser configuration
- Apply case-insensitive matching in both main and worker threads
- Merge configured prefixes with user-defined specialTagPrefixes
- Add debug logging for prefix resolution verification
Extends the date display fix to remaining task view components to ensure
consistent date handling across the entire application.
- Update InlineEditor to use localDateStringToTimestamp for date storage
- Update TaskPropertyTwoColumnView to use timestampToLocalDateString for display
- Ensure all date inputs store dates at UTC noon for consistency
Part of the fix for timezone-related date display issues.
Fixes incorrect date display when user's timezone differs from UTC. Dates stored
as UTC noon timestamps were showing off-by-one day in some timezones.
- Add date-display-helper utility to properly convert between UTC storage and local display
- Update TaskDetailsComponent to use new helper functions
- Update MetadataEditor to use consistent date conversion logic
- Add comprehensive tests for timezone edge cases
The fix ensures dates are consistently stored at UTC noon but displayed correctly
in the user's local timezone, preventing date shift issues.
Resolves: #419
Updated task regex pattern from [.] to [^\[\]]{1} to ensure only single
non-bracket characters are captured as task status. This prevents parsing
errors when task text contains square brackets.
- Auto-refresh habit index when adding/editing/deleting habits in settings
- Integrate with dataflow TASK_CACHE_UPDATED event for better performance
- Fix count habit progress to show complete when meeting or exceeding goal
- Add fallback for legacy mode without dataflow enabled
- Add slugify fallback for habit properties when not explicitly set
- Improve null/empty value checking with hasValue helper
- Add "Reindex habits" command for manual habit refresh
- Auto-refresh habits after dataflow rebuild
- Remove "Send Daily Summary" from tray menu and desktop integration
- Rename DesktopIntegrationManager.ts to desktop-integration-manager.ts for consistency
- Add app ID to tray singleton key to support multiple Obsidian instances
- Add @/ path alias to Jest configuration for cleaner imports
- Use template images on macOS for automatic theme adaptation
- Apply neutral gray color for Windows/Linux tray icons for better visibility
- Add window focus functionality when opening tasks from tray menu
- Fix task opening to jump to correct line position
- Improve code formatting consistency (spaces to tabs)
- Fix indentation issues in DataflowOrchestrator
- Pass complete settings to TaskWorkerManager during initialization
- Add safety check to prevent overwriting tasks with empty preloaded data
- Include compiled CSS for list config modal styles
These changes improve code formatting consistency and ensure proper
settings propagation to worker managers.
- Replace comma-separated text fields with modal-based list editor for Focus/Ignore headings
- Add ListConfigModal component for managing string lists with add/delete functionality
- Fix heading matching by normalizing user input (removing # symbols) to match stored format
- Add proper handling for tasks without headings in filter logic
- Add visual feedback with item count display on configuration buttons
- Include keyboard shortcuts (Enter to add) in list editor
- Add notification to rebuild index after updating heading filters
The heading filters now correctly match tasks by comparing normalized heading text,
allowing users to input headings in natural markdown format (e.g., "## Project")
while the system properly matches against the parsed heading text.
- Add beforeunload event listener to properly clean up tray on page reload
- Prefer electron remote API over renderer API for better cross-process support
- Apply consistent code formatting across WriteAPI and canvas-task-updater
- Prevent tray duplication issues during Obsidian hard reloads