Changelog — v0.7.x
All notable changes introduced in the v0.7.x release series (February 2026).
[0.7.1] — 2026-02-28
Fixed
Board View Settings Persistence
- Stale Settings Cache: Fixed a bug where Board view changes (e.g., newly created buckets) were lost between sessions.
- The
saveTasks()method wrote tasks using a cached copy ofdata.jsonthat could hold outdated settings, silently overwriting newer bucket definitions on the next save. - Fix ensures
raw.settingsis always synced from the authoritative in-memory settings object before writing to disk.
[0.7.0] — 2026-02-22
Added
Task Effort Tracking
- Microsoft Planner-Style Effort System: Full effort tracking with Completed, Remaining, and Total hours.
- Effort Completed: Hours of work done on a task (editable in Grid View and Task Detail).
- Effort Remaining: Hours of work left (auto-adjusts when completed changes).
- Effort Total: Read-only sum of Completed + Remaining.
- Duration: Auto-calculated days between Start Date and Due Date.
- % Complete: Auto-derived from effort values using
round(completed / total × 100).
Smart Effort Auto-Sync (Microsoft Planner Behavior)
- Auto-Deduct Remaining: Entering completed hours automatically reduces remaining from the established total. Example: 10h total, enter 4h completed → remaining auto-adjusts to 6h.
- Status ↔ Effort Sync: Marking a task "Completed" moves all remaining hours into completed; % Complete at 100% auto-sets status to "Completed"; dropping below 100% from Completed resets to "In Progress".
- Bidirectional View Sync: Effort changes in Grid View instantly reflect in Task Detail View and vice versa.
Effort in All Views
- Grid View: 5 new columns — % Complete, Effort Done, Effort Left, Effort Total, Duration.
- Effort Done and Effort Left are inline-editable number inputs.
- % Complete, Effort Total, and Duration are read-only calculated cells.
- All new columns support drag-and-drop reordering and show/hide toggles.
- Task Detail View: New Effort section with Duration row, % Complete display (with "calculated from effort" hint), and Completed/Remaining/Total grid.
- Dashboard View: Effort Summary section with progress bar and KPI cards (Total Effort, Completed, Remaining, Avg % Complete) — appears only when tasks have effort data.
Markdown Sync for Effort Fields
- Bidirectional Sync:
effortCompleted,effortRemaining, andpercentCompletenow sync to/from YAML frontmatter in task markdown files.- Written to frontmatter when values are > 0.
- Parsed back with safe
Number()coercion on markdown → JSON sync. - Duration not synced (derived from
startDate/dueDatewhich are already synced).
Dependency-Driven Auto-Scheduling (MS Project / GanttProject Style)
- Automatic Date Cascading: When a predecessor task's dates change, all dependent tasks automatically shift their dates.
- Finish-to-Start (FS): Dependent starts the day after predecessor finishes.
- Start-to-Start (SS): Dependent starts when predecessor starts.
- Finish-to-Finish (FF): Dependent finishes when predecessor finishes.
- Start-to-Finish (SF): Dependent finishes when predecessor starts.
- Duration Preservation: Task duration (days between start and due) is maintained when shifting.
- Forward-Only Scheduling: Tasks are only pushed later, never pulled earlier.
- Recursive Cascade: Changes propagate through the entire dependency chain (A → B → C all shift).
- Circular Dependency Guard: Visited-set prevents infinite loops in circular dependency graphs.
- Markdown Sync: Cascaded date changes automatically sync to markdown files.
- New Setting: "Auto-schedule dependent tasks" toggle under Dependency Scheduling section (enabled by default).
- Grid View Indicator: Dependency cells show 📐 icon with "(auto-scheduled)" tooltip when scheduling is active; falls back to 🔗 when disabled.
Timeline/Gantt Dependency Arrows (MS Project Style)
- Visual Dependency Connectors: SVG overlay draws right-angle connector arrows between linked task bars.
- Finish-to-Start (FS): Arrow from predecessor's right edge to successor's left edge.
- Start-to-Start (SS): Arrow from predecessor's left edge to successor's left edge.
- Finish-to-Finish (FF): Arrow from predecessor's right edge to successor's right edge.
- Start-to-Finish (SF): Arrow from predecessor's left edge to successor's right edge.
- Smart Routing: L-shaped orthogonal paths with automatic detour routing when bars overlap horizontally.
- Accent-Colored Lines: Arrows use theme accent color with arrowhead markers for clear directionality.
- Toggle Button: Toolbar button to show/hide dependency arrows (enabled by default). Active state uses accent color styling; arrows re-render on every view update.
Parent Task Roll-Up (MS Project Style)
- Automatic Parent Field Calculation: Parent tasks automatically derive their values from subtasks.
- Date Roll-Up: Parent
Start Date= earliest child start; parentDue Date= latest child due. - Effort Roll-Up: Parent
Effort Completed= sum of children; parentEffort Remaining= sum of children. - % Complete Roll-Up: Duration-weighted average —
Σ(childDuration × child%) / Σ(childDuration). - Status Sync: 100% complete auto-sets parent to "Completed"; dropping below 100% resets to "In Progress".
- Upward Cascade: Changes propagate up the hierarchy — grandparent updates when child changes.
- Trigger Points: Roll-up fires on task update, task delete, make-subtask, and promote-subtask operations.
- Markdown Sync: Rolled-up parent values automatically sync to markdown files.
- Date Roll-Up: Parent
- Read-Only Parent Fields: Rolled-up fields are non-editable in both Grid View and Task Detail View. Grid cells show italic text with Σ indicator and "Rolled up from subtasks" tooltip.
- New Setting: "Auto-calculate parent task fields from subtasks" toggle (enabled by default).
Fixed
Grid View Column Drag-and-Drop
- Column Order Sync: New columns added after initial setup are now properly included in the drag-and-drop order array. Previously, columns not in the saved
gridViewColumnOrdercausedindexOf()to return-1, silently breaking drag-and-drop. Fix applied in bothloadGridViewSettings()and theondrophandler.
Grid View Cell Rendering Architecture
- Dynamic Column Rendering: Refactored
renderTaskRowfrom hardcoded if-blocks to acellRenderersmap iterated ingetColumnDefinitions()order. Headers and cells now guaranteed to render in the same order regardless of column reordering. Row drag logic extracted to dedicatedhandleRowDragStart()method.
Grid View Inline Edit Sync
- Timing Fix:
isEditingInlineflag now set tofalseBEFOREupdateTask()call instead of after. Previously, the subscriber re-render was skipped during the update because the flag hadn't been cleared yet. Ensures Grid View reflects changes immediately when editing effort or other fields inline.
Scroll Position Preservation Across All Views
- Board View: Horizontal board scroll and per-column vertical scroll positions are now preserved across re-renders.
- Task Detail View: Scroll position of the detail panel is preserved when task data updates (e.g., status change, effort edit).
- Dashboard View: Scroll position of the dashboard wrapper is preserved on data-driven re-renders.
- Gantt/Timeline View: All 3 scroll axes preserved — left column vertical, right timeline vertical, and right timeline horizontal. Cross-sync suppressed during restore to prevent scroll listener interference.
- Previously, any TaskStore change caused a full
container.empty()+ rebuild, losing the user's scroll position in all views except Grid View.