Skip to content

Commit 5ce14f2

Browse files
hangtime79claude
andcommitted
docs(v0.9.5): Add release notes and post-mortem
- Release notes for v0.9.5 - Post-mortem analysis - Updated CHANGELOG - Updated CLAUDE.md with new gotchas and roadmap 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 58f2e4e commit 5ce14f2

4 files changed

Lines changed: 198 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.9.5] - 2025-12-29
11+
12+
### Added
13+
- Dependency tooltips now show task names instead of IDs (#65)
14+
- Automatic name lookup with fallback to ID for missing references
15+
- Pin tooltip feature to keep tooltips visible while exploring chart (#68)
16+
- Pin button (thumbtack icon) in tooltip header
17+
- Multiple tooltips can be pinned simultaneously
18+
- Collision avoidance prevents overlap between tooltips
19+
- Close button or pin toggle to dismiss
20+
1021
## [0.9.4] - 2025-12-28
1122

1223
### Added

CLAUDE.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ DSS Dataset → backend.py → TaskTransformer → dependency_validator → JSON
5858
- **Grid header is HTML, not SVG**`.grid-header` is an HTML `<div>` with absolutely-positioned text divs, NOT an SVG group. Header decorations (separators, etc.) must use HTML elements, not SVG lines.
5959
- **Position-based date lookup** — When adding year to upper header text post-render, DON'T search `ganttInstance.dates` by month name (`dates.find(d => d.getMonth() === monthNum)`) — this finds the FIRST match regardless of position. Instead, use index lookup: `dates[Math.round(elementX / columnWidth)]` to get the exact date at that element's position.
6060
- **Frappe Gantt popup positioning** — Library treats popup coords as anchors and re-centres vertically after render. Don't fight it by modifying `opts.x/y` before calling `show_popup()`. Instead: call `originalShowPopup(opts)` first, then correct position in `requestAnimationFrame()` by directly setting `popup.style.left/top`. Disable transition temporarily to prevent visual jump.
61+
- **Webapp icons require inline SVG** — FontAwesome classes (`fas fa-*`) don't work in Dataiku webapp context. Use inline SVG with `fill="currentColor"` for theme compatibility. FontAwesome is only available for `plugin.json` icon field.
62+
- **Frappe Gantt single popup** — Library has single `$popup_wrapper`. For multiple simultaneous tooltips, clone popup content into independent DOM elements in a separate container.
6163

6264
---
6365

@@ -139,7 +141,7 @@ Simple fixes with plenty of context don't need intervention tracking.
139141
- [Release](https://github.com/hangtime79/dss-plugin-gantt-chart/releases/tag/v0.9.4)
140142
- [PR #73](https://github.com/hangtime79/dss-plugin-gantt-chart/pull/73)
141143

142-
**Next Milestone:** v0.9.5 - Tooltip Polish II (#65, #68)
144+
**Next Milestone:** v0.9.6 - Visual Enhancements (#49, #57)
143145

144146
**Backlog:** [GitHub Issues](https://github.com/hangtime79/dss-plugin-gantt-chart/issues)
145147
**Upstream Bugs:** `plan/frappe-gantt-upstream-bugs.md`
@@ -159,12 +161,12 @@ Simple fixes with plenty of context don't need intervention tracking.
159161
| ~~**v0.9.2**~~ | ~~#62, #63, #64~~ | ~~Visual Polish II~~|
160162
| ~~**v0.9.3**~~ | ~~#71~~ | ~~Bug Fix: Header Contrast~~|
161163
| ~~**v0.9.4**~~ | ~~#66, #67~~ | ~~Tooltip Polish I (Positioning & Appearance)~~|
162-
| **v0.9.5** | #65, #68 | Tooltip Polish II (Content & Interaction) |
164+
| ~~**v0.9.5**~~ | ~~#65, #68~~ | ~~Tooltip Polish II (Content & Interaction)~~ |
163165
| **v0.9.6** | #49, #57 | Visual Enhancements |
164166
| **v0.9.7** | #60 | Reset Zoom |
165167
| **v0.9.8** | #51 | Task Filtering |
166168
| **v0.10.0** | #32 | i18n |
167169
| **v1.0.0-rc** | #24, #25 | Print + Global Params (TBD) |
168170
| **v1.0.0** || Public Release |
169171

170-
**Current milestone:** v0.9.5 - Tooltip Polish II (#65, #68)
172+
**Current milestone:** v0.9.6 - Visual Enhancements (#49, #57)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Post-Mortem: v0.9.5
2+
3+
**Branch:** `feature/v0.9.5-tooltip-polish-ii`
4+
**Type:** Feature
5+
**Duration:** 1 day (Started: 2025-12-29, Completed: 2025-12-29)
6+
**Outcome:** ✅ Success
7+
8+
---
9+
10+
## Summary
11+
12+
Implemented two tooltip enhancements: dependency name resolution (showing task names instead of IDs) and a pinnable tooltip system. The pin feature evolved during QA from single-pinned to multi-pinned with collision avoidance based on user feedback.
13+
14+
---
15+
16+
## Scope
17+
18+
### Planned
19+
- [x] Show task names in dependency tooltips (#65)
20+
- [x] Pin tooltip to keep visible (#68)
21+
22+
### Delivered
23+
- [x] Dependency name resolution with fallback to ID
24+
- [x] Multi-pinned tooltip system (enhanced from original spec)
25+
- [x] Collision avoidance for overlapping tooltips
26+
- [x] Pin/unpin toggle with visual indicator
27+
28+
### Deferred Items
29+
None
30+
31+
---
32+
33+
## Commit Analysis
34+
35+
| Metric | Value | Assessment |
36+
|--------|-------|------------|
37+
| Total commits | 1 | Squashed during development |
38+
| Feature commits | 1 | |
39+
| Fix/debug commits | 0 | |
40+
| Reverts | 0 | |
41+
| Churn ratio | 0% | 🟢 Low |
42+
43+
---
44+
45+
## What Went Well
46+
47+
- **Clean Python implementation**: Dependency name resolution was straightforward - simple post-processing loop after task creation
48+
- **Iterative QA refinement**: User feedback during QA led to better multi-tooltip design
49+
- **Inline SVG for icons**: Learned from v0.9.1 post-mortem that FontAwesome doesn't work in Dataiku webapp context - used inline SVG from start
50+
51+
---
52+
53+
## What Didn't Go Well
54+
55+
- **Initial pin design too simple**: Original spec assumed single-pinned tooltip, but user clarified they wanted multiple simultaneous tooltips
56+
- **FontAwesome assumption**: Initially tried `fas fa-thumbtack` class before remembering Dataiku context requires inline SVG
57+
58+
---
59+
60+
## Blockers Encountered
61+
62+
| Blocker | Impact | Resolution | Time Lost |
63+
|---------|--------|------------|-----------|
64+
| FontAwesome icons not rendering | Icons invisible in tooltip | Switched to inline SVG paths | ~15 min |
65+
| Single vs multi-tooltip design | Had to redesign pin system | Created clone-based pinned container | ~30 min |
66+
67+
---
68+
69+
## Technical Discoveries
70+
71+
### Platform Behavior
72+
- Dataiku webapps don't have FontAwesome 5 class support despite it being available for plugin.json icons
73+
74+
### Library Behavior
75+
- Frappe-gantt has single `$popup_wrapper` - supporting multiple tooltips requires creating independent DOM elements
76+
77+
### Architecture Insights
78+
- Clone-based approach for pinned tooltips cleanly separates library-managed popup from user-pinned copies
79+
- Using `pointer-events: none` on container with `pointer-events: auto` on children allows click-through while keeping tooltips interactive
80+
81+
---
82+
83+
## CLI Docs Candidates
84+
85+
1. **Inline SVG for webapp icons**: FontAwesome classes don't work in Dataiku webapp context. Use inline SVG with `fill="currentColor"` for theme compatibility.
86+
87+
---
88+
89+
## Recommendations
90+
91+
### For Next Release
92+
- Consider adding keyboard shortcuts for pin/close (Escape to close all pinned)
93+
94+
### Process Improvements
95+
- Clarify multi-element behaviors upfront in QA script
96+
97+
### Technical Debt
98+
- None introduced
99+
100+
---
101+
102+
## Lessons Learned
103+
104+
1. **Clarify "pin" semantics early**: Single vs multiple pinned items is a fundamental UX decision that affects architecture
105+
2. **Reuse prior learnings**: The FontAwesome-in-SVG issue was already documented in v0.9.1 post-mortem
106+
3. **Clone-based persistence**: When a library manages a singleton element, cloning is cleaner than fighting the library's lifecycle
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Release Notes: v0.9.5
2+
3+
**Release Date:** 2025-12-29
4+
**Type:** Feature
5+
**Branch:** `feature/v0.9.5-tooltip-polish-ii`
6+
7+
---
8+
9+
## Summary
10+
11+
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.
12+
13+
---
14+
15+
## Changes
16+
17+
### Added
18+
- **Dependency Name Resolution (#65)**: Tooltip "Depends on" field now shows task names instead of raw IDs
19+
- Automatic lookup of dependency IDs to task names
20+
- Fallback to ID if dependency references external/missing task
21+
- **Pin Tooltip Feature (#68)**: Users can pin tooltips to keep them visible
22+
- Pin button (thumbtack icon) in tooltip header
23+
- Multiple tooltips can be pinned simultaneously
24+
- Pinned tooltips persist until explicitly closed
25+
- Collision avoidance prevents new tooltips from overlapping pinned ones
26+
- Close button (X) or clicking highlighted pin removes tooltip
27+
28+
---
29+
30+
## Files Modified
31+
32+
| File | Change Type | Description |
33+
|------|-------------|-------------|
34+
| `python-lib/ganttchart/task_transformer.py` | Modified | Added post-processing to resolve dependency IDs to names |
35+
| `webapps/gantt-chart/app.js` | Modified | Added pinned tooltip system with collision avoidance |
36+
| `resource/webapp/style.css` | Modified | Added styles for pinned tooltips container and buttons |
37+
| `plugin.json` | Modified | Version 0.9.4 → 0.9.5 |
38+
| `plan/specs/feature-v0.9.5-spec.md` | Added | Feature specification |
39+
40+
---
41+
42+
## Testing
43+
44+
- **Unit Tests:** 122/122 passing
45+
- **Manual Verification:**
46+
- [x] Dependency names show in tooltip instead of IDs
47+
- [x] Pin button visible and functional
48+
- [x] Multiple tooltips can be pinned
49+
- [x] Collision avoidance works
50+
- [x] Close/unpin buttons work
51+
- [x] Dark mode styling correct
52+
53+
---
54+
55+
## Breaking Changes
56+
57+
None
58+
59+
---
60+
61+
## Known Issues
62+
63+
None
64+
65+
---
66+
67+
## Dependencies
68+
69+
None
70+
71+
---
72+
73+
## Related Documents
74+
75+
- Spec: `plan/specs/feature-v0.9.5-spec.md`
76+
- Post-mortem: `plan/post-mortems/v0.9.5-post-mortem.md`

0 commit comments

Comments
 (0)