Skip to content

Releases: hangtime79/dss-plugin-gantt-chart

v1.0.0-rc - Release Candidate

30 Dec 13:21

Choose a tag to compare

Release Notes: v1.0.0-rc

Release Date: 2025-12-31
Type: Release Candidate
Branch: release/v1.0.0-rc


Summary

Release candidate for public v1.0.0 release. This version removes all debug logging for production readiness and reorganizes configuration parameters for improved user experience. Also includes a fix for duplicate ID tooltip behavior in rename mode and improved dark mode visibility for dependency arrows.


Changes

Changed

  • Configuration panel reorganized for better usability (#75)
    • Parameters grouped into logical sections
    • View Mode Select, Today Button, and Theme controls hardcoded (always enabled)
    • Cleaner settings panel with 3 fewer user-exposed parameters

Removed

  • 62 console.log statements from app.js (#97)
  • Debug-level logging from backend.py (#97)
    • Kept only warning and error level logs for production

Fixed

  • Duplicate ID tooltip now works correctly in both skip and rename modes (#76)
    • Skip mode: Shows "X duplicate(s) skipped"
    • Rename mode: Shows "X duplicate(s) renamed" or "Renamed from X"
  • Dark mode: Dependency arrows now use lighter color (#95a5a6) for visibility

Added

  • placard.html - Marketplace visual asset
  • visual.png - Plugin preview image

Files Modified

File Change Type Description
plugin.json Modified Version bump to 1.0.0-rc
webapps/gantt-chart/webapp.json Modified Parameter reorganization
webapps/gantt-chart/app.js Modified Remove 62 console.log, hardcode 3 params, fix duplicate tooltip
webapps/gantt-chart/backend.py Modified Remove debug logging
resource/webapp/style.css Modified Dark mode dependency arrows
webapps/gantt-chart/placard.html Added Marketplace visual
webapps/gantt-chart/visual.png Added Plugin preview

Testing

  • Unit Tests: Collection errors due to missing Dataiku test instance config (expected)
  • Manual Verification: QA PASS confirmed by user
    • Debug code removal verified (console clean)
    • Parameter reorganization verified
    • All features functional

Breaking Changes

None


Known Issues

None


Dependencies

None changed


Related Documents

  • Spec: plan/specs/release-v1.0.0-rc-spec.md
  • Post-mortem: plan/post-mortems/v1.0.0-rc-post-mortem.md

v1.0.0 - Public Release

30 Dec 13:27

Choose a tag to compare

Release Notes: v1.0.0

Release Date: 2025-12-31
Type: Public Release
Branch: release/v1.0.0


Summary

First public release of the Gantt Chart plugin. This release promotes v1.0.0-rc to stable with no code changes.


Highlights

  • Interactive Gantt chart visualization with frappe-gantt library
  • Task dependencies with arrow visualization
  • Progress tracking (0-100%) with visual indicators
  • Color coding by category (12-color palette + custom presets)
  • 7 view modes (Hour, Quarter Day, Half Day, Day, Week, Month, Year)
  • Dark mode support with theme selector
  • Task filtering by status (All, Completed, Overdue, In Progress, Not Started)
  • Language localization for 11 languages
  • Duplicate ID handling (auto-rename or skip)
  • Dependency status indicators
  • Getting Started guide for new users
  • Works in air-gapped environments (bundled dependencies)

Changes from v1.0.0-rc

Version bump only - no code changes.


Breaking Changes

None


Known Issues

None


Related Documents

  • Post-mortem: plan/post-mortems/v1.0.0-rc-post-mortem.md
  • Full changelog: CHANGELOG.md

v0.11.0 - Defensive Programming

30 Dec 08:17

Choose a tag to compare

Release Notes: v0.11.0

Release Date: 2025-12-30
Type: Feature
Branch: feature/v0.11.0-defensive-programming


Summary

This release focuses on defensive programming and user guidance. It adds a comprehensive Getting Started Guide for new users, enhanced duplicate ID handling with user-selectable modes, and dependency status indicators to help users understand why arrows may be missing.


Changes

Added

  • Getting Started Guide (#77): 5-section onboarding overlay for unconfigured charts

    • Required Columns section with column mapping guidance
    • Settings Panel walkthrough with interactive tabs
    • Toolbar explanation with control descriptions
    • Chart Preview with visual.png screenshot
    • System States overview (loading, errors, empty)
    • Auto-hides when Task ID, Start Date, and End Date are configured
    • Hides control bar and gantt container until configuration is complete
  • Duplicate ID Handling Options (#76): New duplicateIdHandling parameter

    • "Auto-rename" (default): Appends suffix (_1, _2) to duplicate IDs
    • "Skip duplicates": Keeps first occurrence, skips subsequent
    • Structured metadata with occurrence tracking
    • Mode-specific warning banner text
    • Tooltip shows "X duplicate(s) skipped" for kept tasks in skip mode
  • Dependency Status Indicators (#83): Visual feedback for unresolved dependencies

    • Tooltip shows "(filtered)" for dependencies hidden by filters
    • Tooltip shows "(not found)" for invalid dependency references
    • Dismissible warning banner when dependencies are unresolved
    • Re-analysis on filter changes
  • Empty Dataset State (#77): "No Tasks Found" display with inline SVG icon

Changed

  • Replaced skeleton loader with Getting Started Guide
  • Warning banners now use consistent styling pattern
  • Added generic .hide CSS utility class

Files Modified

File Change Type Description
plugin.json Modified Version bump to 0.11.0
webapp.json Modified Added duplicateIdHandling SELECT parameter
task_transformer.py Modified Enhanced duplicate handling, structured metadata
backend.py Modified Pass duplicateIdHandling to transformer
app.js Modified Getting Started, warnings, dependency analysis, tooltips
body.html Modified Getting Started overlay HTML with gs-* classes
style.css Modified Getting Started styles (~470 lines), warning styles
resource/webapp/visual.png Added Chart screenshot for Getting Started preview

Testing

  • Unit Tests: 122/122 passing
  • New Tests Added: None (UI-focused release)
  • Manual Verification:
    • Getting Started Guide display and auto-hide
    • Duplicate ID rename and skip modes
    • Dependency status in tooltips
    • Warning banner display and dismissal
    • Control bar/container hiding during setup

Breaking Changes

None


Known Issues

None


Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.11.0-spec.md
  • Post-mortem: plan/post-mortems/v0.11.0-post-mortem.md
  • Intervention Log: plan/interventions/v0.11.0-intervention.md

v0.10.1 - Global Custom Palettes

29 Dec 10:17

Choose a tag to compare

Release Notes: v0.10.1

Release Date: 2025-12-29
Type: Feature
Branch: feature/v0.10.1-custom-palettes


Summary

Adds admin-defined custom color palettes via Dataiku's parameter set (PRESET) mechanism. Administrators can create global color palette presets in plugin settings, and users can select these custom palettes from the Color Palette dropdown when configuring Gantt chart webapps.


Changes

Added

  • Custom color palette support via parameter sets (#79)
    • New "Custom (Preset)" option in Color Palette dropdown
    • PRESET selector appears when custom is selected
    • Admins create palettes in plugin settings with 6-12 hex colors
    • Dynamic CSS injection with WCAG-compliant text contrast
    • Automatic light/dark text based on background luminance

Fixed

  • PRESET parameter resolution in webapps
    • Webapps receive raw references, must resolve via API (unlike recipes)
    • Implemented resolve_preset() function for API-based resolution

Files Modified

File Change Type Description
parameter-sets/custom-palette/parameter-set.json Added Custom palette preset structure
webapps/gantt-chart/webapp.json Modified Added "custom" option + PRESET param
webapps/gantt-chart/backend.py Modified Preset resolution + custom color handling
python-lib/ganttchart/task_transformer.py Modified Added custom_colors to config
python-lib/ganttchart/color_mapper.py Modified Hex validation + custom palette support
webapps/gantt-chart/app.js Modified Luminance calc + CSS injection
plugin.json Modified Version bump to 0.10.1
plan/specs/feature-v0.10.1-spec.md Added Feature specification

Testing

  • Unit Tests: Pre-existing collection errors (unrelated to this feature)
  • Manual Verification:
    • Built-in palettes still work (classic, pastel, dark, dataiku)
    • "Custom (Preset)" option appears in dropdown
    • PRESET selector appears when "Custom" selected
    • Admin can create custom palette presets
    • Custom colors apply correctly to task bars
    • Text contrast is readable (auto light/dark)
    • Switching palettes removes/replaces CSS correctly

Breaking Changes

None


Known Issues

  • Unit test collection errors (pre-existing ScenarioConfiguration issue, unrelated to this feature)

Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.10.1-spec.md
  • Post-mortem: plan/post-mortems/v0.10.1-post-mortem.md

v0.10.0

29 Dec 03:30

Choose a tag to compare

Release Notes: v0.10.0

Release Date: 2025-12-29
Type: Feature
Branch: feature/v0.10.0-i18n


Summary

Adds multi-language support for date and month formatting in the Gantt chart. Users can now select from 11 languages (English, Spanish, German, French, Portuguese, Russian, Turkish, Chinese, Japanese, Korean, Italian) to localize date headers and popup dates using the browser's Intl API.


Changes

Added

  • Language dropdown in Appearance settings panel (#32)
    • 11 supported languages with native labels
    • Affects month names in headers and popup dates
    • Uses browser's Intl.DateTimeFormat for locale-aware formatting
  • UI_STRINGS stub object for future full i18n implementation
    • Centralizes all UI text strings for future translation
    • Covers view modes, filters, controls, and empty states

Fixed

  • Responsive month abbreviations now work for all languages (#32)
    • Previously hardcoded English month names (January, Jan, J)
    • Now uses Intl API to generate localized abbreviations
  • Frappe Gantt view_mode mutation bug patched (#32)
    • Library was mutating shared default object, causing stale language in closure
    • Fix: Create shallow copy in change_view_mode() to prevent mutation

Files Modified

File Change Type Description
webapps/gantt-chart/webapp.json Modified Added language SELECT parameter with 11 languages
webapps/gantt-chart/app.js Modified Dynamic language config, localized month names, UI_STRINGS stub
webapps/gantt-chart/backend.py Modified Pass through language config value
resource/frappe-gantt.umd.js Modified Patched view_mode mutation bug
plugin.json Modified Version bump to 0.10.0
plan/specs/feature-v0.10.0-spec.md Added Feature specification
plan/frappe-gantt-upstream-bugs.md Modified Added Bug #7 (view_mode mutation)

Testing

  • Unit Tests: All existing tests pass
  • Manual Verification:
    • Language dropdown appears in Appearance section
    • French displays "Janvier", "Février" in month headers
    • Japanese displays "1月", "2月" in month headers
    • Popup dates use selected language
    • Responsive abbreviation works for all languages
    • View mode changes preserve language setting

Breaking Changes

None


Known Issues

  • UI labels (Reset Zoom, filter buttons, view modes) remain English-only
    • UI_STRINGS stub is in place for future translation work

Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.10.0-spec.md
  • Post-mortem: plan/post-mortems/v0.10.0-post-mortem.md
  • Upstream bugs: plan/frappe-gantt-upstream-bugs.md (Bug #7)

v0.9.8 - Task Status Filtering

28 Dec 22:22

Choose a tag to compare

Release Notes: v0.9.8

Release Date: 2025-12-29
Type: Feature
Branch: feature/v0.9.8-task-filtering


Summary

This release adds task status filtering to the Gantt chart, allowing users to focus on specific categories of work by showing only Completed, Overdue, In Progress, or Not Started tasks. Multiple filters can be combined with OR logic.


Changes

Added

  • Task status filter buttons in control bar (#51)
    • Filter options: All, Completed, Overdue, In Progress, Not Started
    • Positioned to the right of "Project Timeline" brand title
    • Multiple selection with OR logic (e.g., Overdue + In Progress shows both)
    • Overdue tasks also appear when In Progress or Not Started filters active
  • Empty state message when no tasks match selected filter(s)
  • Dark mode styling for filter buttons

Technical Details

  • Status definitions:
    • Completed: progress === 100
    • Overdue: progress < 100 AND end_date < today
    • In Progress: progress > 0 AND progress < 100
    • Not Started: progress === 0
  • Filtering triggers full chart re-render (not just DOM hiding) so container properly resizes
  • Filter state persists across view mode changes

Files Modified

File Change Type Description
webapps/gantt-chart/body.html Modified Added filter button group HTML
webapps/gantt-chart/app.js Modified Added filter state, getTaskStatuses(), filterTasksByStatus(), applyTaskFilters(), setupFilterButtons()
resource/webapp/style.css Modified Added filter button and empty state styles with dark mode support
plugin.json Modified Version bump to 0.9.8
plan/specs/feature-v0.9.8-spec.md Added Feature specification

Testing

  • Unit Tests: N/A (no Python changes, JS-only feature)
  • Manual Verification:
    • Filter buttons appear right of "Project Timeline"
    • "All" button active by default
    • Each filter shows correct task subset
    • Multiple filters can be selected (OR logic)
    • Clicking active filter deselects it
    • Deselecting all filters returns to "All"
    • Filters persist across view mode changes
    • Chart resizes when tasks filtered out
    • Empty state shows when no tasks match
    • Dark mode styling works correctly

Breaking Changes

None


Known Issues

None


Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.9.8-spec.md
  • Post-mortem: plan/post-mortems/v0.9.8-post-mortem.md

v0.9.7

28 Dec 21:23

Choose a tag to compare

Release Notes: v0.9.7

Release Date: 2025-12-29
Type: Feature
Branch: feature/v0.9.7-reset-zoom


Summary

Adds a Reset Zoom button to quickly return zoom level to 100% (or viewport floor if larger), plus improves dark mode visibility for the today line indicator.


Changes

Added

  • Reset Zoom button in control bar (#60)
    • Circular arrow icon positioned left of Zoom Out button
    • Resets current view's zoom to 100% (or viewport floor if larger)
    • Each view mode maintains independent zoom state
    • Tooltip: "Reset Zoom to 100%"
  • Visual separator between Today button and zoom controls

Fixed

  • Dark mode: Today line and ball indicator now visible (#C7C7C7 light gray)
  • Dark mode: Today date highlight text now readable (dark text on light background)

Files Modified

File Change Type Description
webapps/gantt-chart/body.html Modified Added reset button with SVG icon, added control-spacer
webapps/gantt-chart/app.js Modified Added resetZoom() function and event listener
resource/webapp/style.css Modified Dark mode today indicator colors
plugin.json Modified Version bump to 0.9.7
plan/specs/feature-v0.9.7-spec.md Added Feature specification

Testing

  • Unit Tests: Environment config issue (unrelated to JS/CSS changes)
  • Manual Verification:
    • Reset button appears left of Zoom Out button
    • Reset button has circular arrow icon
    • Tooltip shows "Reset Zoom to 100%"
    • Reset from 150%+ returns to 100%
    • Reset from 50% returns to 100%
    • Zoom indicator updates correctly after reset
    • Reset works independently per view mode
    • Dark mode styling works correctly
    • Today line visible in dark mode
    • Today date highlight text readable in dark mode

Breaking Changes

None


Known Issues

None


Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.9.7-spec.md

v0.9.5

28 Dec 13:23

Choose a tag to compare

Release Notes: v0.9.5

Release Date: 2025-12-29
Type: Feature
Branch: feature/v0.9.5-tooltip-polish-ii


Summary

This release enhances tooltip usability with two key improvements: dependency tooltips now show human-readable task names instead of cryptic IDs, and users can pin multiple tooltips to keep them visible while exploring the chart.


Changes

Added

  • Dependency Name Resolution (#65): Tooltip "Depends on" field now shows task names instead of raw IDs
    • Automatic lookup of dependency IDs to task names
    • Fallback to ID if dependency references external/missing task
  • Pin Tooltip Feature (#68): Users can pin tooltips to keep them visible
    • Pin button (thumbtack icon) in tooltip header
    • Multiple tooltips can be pinned simultaneously
    • Pinned tooltips persist until explicitly closed
    • Collision avoidance prevents new tooltips from overlapping pinned ones
    • Close button (X) or clicking highlighted pin removes tooltip

Files Modified

File Change Type Description
python-lib/ganttchart/task_transformer.py Modified Added post-processing to resolve dependency IDs to names
webapps/gantt-chart/app.js Modified Added pinned tooltip system with collision avoidance
resource/webapp/style.css Modified Added styles for pinned tooltips container and buttons
plugin.json Modified Version 0.9.4 → 0.9.5
plan/specs/feature-v0.9.5-spec.md Added Feature specification

Testing

  • Unit Tests: 122/122 passing
  • Manual Verification:
    • Dependency names show in tooltip instead of IDs
    • Pin button visible and functional
    • Multiple tooltips can be pinned
    • Collision avoidance works
    • Close/unpin buttons work
    • Dark mode styling correct

Breaking Changes

None


Known Issues

None


Dependencies

None


Related Documents

  • Spec: plan/specs/feature-v0.9.5-spec.md
  • Post-mortem: plan/post-mortems/v0.9.5-post-mortem.md

v0.9.4

28 Dec 11:02

Choose a tag to compare

Release Notes: v0.9.4

Release Date: 2025-12-28
Type: Feature
Branch: feature/v0.9.4-tooltip-polish


Summary

This release improves tooltip positioning and appearance. Tooltips now anchor to the task bar's bottom-left corner (trailing left with a gap) instead of following the mouse cursor, providing a more consistent and less intrusive user experience. Tooltip padding has been reduced and dark mode styling improved.


Changes

Added

  • CSS variable --gantt-popup-gap: Theme-driven spacing between task bar and tooltip (default 24px)
  • Auto-flip positioning: Tooltip automatically flips above the bar when there's no room below

Fixed

  • Tooltip positioning (#66): Tooltip now anchors to task bar instead of following mouse cursor
    • Position: Trails left of bar's left edge with configurable gap
    • Prefers below bar, auto-flips above if near bottom of container
    • Boundary clamping prevents tooltip from exceeding container bounds
  • Tooltip appearance (#67): Reduced padding from 10px to 5px
    • Dark mode: Added 3px border + shadow for better contrast (eliminates white halo)

Changed

  • Positioning approach: Uses post-render correction via requestAnimationFrame instead of pre-positioning, which is more robust with Frappe Gantt's internal popup handling

Files Modified

File Change Type Description
webapps/gantt-chart/app.js Modified Added show_popup monkey-patch with post-render positioning correction
resource/webapp/style.css Modified Added --gantt-popup-gap variable, reduced popup padding, dark mode border styling
plugin.json Modified Version 0.9.3 → 0.9.4
CLAUDE.md Modified Added Frappe Gantt popup positioning gotcha
plan/specs/feature-v0.9.4-spec.md Added Feature specification
plan/interventions/v0.9.4-intervention.md Added Debugging session log

Testing

  • Unit Tests: No Python changes (JS/CSS only)
  • Manual Verification:
    • Tooltip appears trailing left of bar with gap
    • Tooltip flips above bar when near bottom
    • Tooltip clamped within container bounds
    • Padding reduced to 5px
    • Dark mode: 3px border, no white halo
    • Animation preserved (no visual jump)

Breaking Changes

None


Known Issues

None


Dependencies

None


Technical Notes

Frappe Gantt Popup Behavior

The original approach (modifying opts.x/y before calling show_popup) didn't work because Frappe Gantt:

  1. Treats popup coordinates as anchors
  2. Re-centres vertically after render
  3. Does not expose a positioning hook

The solution:

  1. Call originalShowPopup(opts) first - let Frappe do its thing
  2. Correct position in requestAnimationFrame() after render
  3. Directly set popup.style.left/top
  4. Temporarily disable transition to prevent visual jump

This approach is documented in CLAUDE.md for future reference.


Related Documents

  • Spec: plan/specs/feature-v0.9.4-spec.md
  • Post-mortem: plan/post-mortems/v0.9.4-post-mortem.md
  • Intervention Log: plan/interventions/v0.9.4-intervention.md

v0.9.3

28 Dec 07:13

Choose a tag to compare

Release Notes: v0.9.3

Release Date: 2025-12-28
Type: Bugfix
Branch: bugfix/v0.9.3-header-contrast


Summary

Fixes two CSS contrast issues in Gantt chart header highlights that made text unreadable in certain theme/state combinations.


Changes

Fixed

  • Light mode: Current date highlight now shows white text on dark background (#71)
    • Previous: Dark text on dark background (unreadable)
    • Our .lower-text rule was overriding library's white text styling
  • Dark mode: Task hover date range highlight now has appropriate contrast (#71)
    • Previous: Light gray background with white text (poor contrast)
    • Added semi-transparent white background for dark mode

Files Modified

File Change Type Description
resource/webapp/style.css Modified Added 2 CSS rules for contrast fixes
plugin.json Modified Version 0.9.2 → 0.9.3
plan/specs/bugfix-v0.9.3-spec.md Added Bug specification
cli-docs/investigation/*.png Added Screenshots documenting the issues

Testing

  • Unit Tests: N/A (CSS-only change)
  • Manual Verification:
    • Light mode current date highlight: White text on dark background
    • Dark mode current date highlight: White text on dark background
    • Light mode task hover: Readable date range highlight
    • Dark mode task hover: Readable date range highlight (muted background)
    • Theme toggle: No visual glitches when switching modes

Breaking Changes

None


Known Issues

None


Dependencies

None


Related Documents

  • Spec: plan/specs/bugfix-v0.9.3-spec.md
  • Issue: #71