Releases: hangtime79/dss-plugin-gantt-chart
v1.0.0-rc - Release Candidate
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
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
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
duplicateIdHandlingparameter- "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
.hideCSS 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
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
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
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
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
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
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
requestAnimationFrameinstead 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:
- Treats popup coordinates as anchors
- Re-centres vertically after render
- Does not expose a positioning hook
The solution:
- Call
originalShowPopup(opts)first - let Frappe do its thing - Correct position in
requestAnimationFrame()after render - Directly set
popup.style.left/top - 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
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-textrule 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