Skip to content

Support negative gapduration values in dependency syntax #312

@simoninglis

Description

@simoninglis

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:

  1. Update parser to accept negative values in gapduration context
  2. Update scheduling logic to handle lead time correctly
  3. Add validation to ensure lead time doesn't create impossible schedules
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions