-
Notifications
You must be signed in to change notification settings - Fork 181
Description
Problem
TaskJuggler currently rejects negative gapduration values in dependency syntax, causing parse errors:
project.tjp:64: Error: Unexpected token '-' found. Expecting one of :INTEGER, :FLOAT
depends develop_pid {gapduration -8d}
Context
When converting MS Project files via MPXJ, negative lag (lead time) is common. In MS Project, negative lag means "successor can start before predecessor finishes" - for example, testing can begin 8 days before development completes.
Current workaround in MPXJ service:
- Detect negative lag and omit gapduration
- Rely on explicit task start dates for timing
- Add quality report warning
Example:
- MS Project: Task B depends on Task A with -8 days lag
- MPXJ converts to:
depends taskA {gapduration -8d}❌ Parse error - Current workaround:
depends taskA✅ Works but loses lag semantics
Proposed Enhancement
Support negative gapduration values to preserve lead time semantics:
task taskB "Task B" {
depends taskA {gapduration -8d} # Can start 8 days before taskA finishes
}
Implementation Notes
Since we've already forked TaskJuggler for negative transaction values, extending support to negative gapduration should follow similar patterns:
- Update parser to accept negative values in gapduration context
- Update scheduling logic to handle lead time correctly
- Add validation to ensure lead time doesn't create impossible schedules
- Update documentation with examples
Impact
ViewPoint project stats:
- 6 out of 126 dependencies have negative lag (-5d to -20d)
- Common in overlapping phase transitions (testing starts before development completes)
Workaround quality:
- ✅ Preserves dependency relationship
- ✅ Timing via start dates works correctly
- ❌ Loses semantic meaning of lead time
- ❌ Less clear in TJP file what the relationship is
Priority
Medium - Current workaround functions correctly but loses clarity. Would improve MS Project conversion quality and make TJP files more semantically accurate.
References
- MPXJ DependencyMapper fix: commit
3878753 - Related: We already support negative values for transaction amounts
- MS Project lag documentation: Negative lag = lead time