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 of data.json that could hold outdated settings, silently overwriting newer bucket definitions on the next save.
  • Fix ensures raw.settings is 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, and percentComplete now 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/dueDate which 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; parent Due Date = latest child due.
    • Effort Roll-Up: Parent Effort Completed = sum of children; parent Effort 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.
  • 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 gridViewColumnOrder caused indexOf() to return -1, silently breaking drag-and-drop. Fix applied in both loadGridViewSettings() and the ondrop handler.

Grid View Cell Rendering Architecture

  • Dynamic Column Rendering: Refactored renderTaskRow from hardcoded if-blocks to a cellRenderers map iterated in getColumnDefinitions() order. Headers and cells now guaranteed to render in the same order regardless of column reordering. Row drag logic extracted to dedicated handleRowDragStart() method.

Grid View Inline Edit Sync

  • Timing Fix: isEditingInline flag now set to false BEFORE updateTask() 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.