ScriptPlan: 0.10.2
Generated: 2026-10-18 05:23:00 UTC
Command: plan report --csv <project>
Every project in examples/showcase, with the schedule ScriptPlan produces for it.
This file is generated by scripts/generate_showcase.py. Do not edit it:
regenerate it, so that what it shows is what the tool does.
Each schedule here is also pinned as a golden snapshot in
tests/golden/fixtures, so a change that moves a date fails the test suite
rather than quietly changing this document.
- airport_retrofit.tjp
- airport_stress_test.tjp
- airport_ultra_math.tjp
- airport_ultra_math_report.tjp
- alap_backward.tjp
- atomic.tjp
- blackbox.tjp
- bottleneck.tjp
- eclipse.tjp
- failover.tjp
- jit_supply.tjp
- math_torture.tjp
- paradox.tjp
- priority_clash.tjp
- quota.tjp
- simple.tjp
- synchrony.tjp
- thermal.tjp
- throughput.tjp
- time_traveler.tjp
- timezone_stress.tjp
- tutorial.tjp
- union_contract.tjp
- workflow_engine.tjp
Project
project "Airport_BHS_Upgrade" 2025-09-01 +2m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
numberformat "-" "" "," "." 1
currencyformat "(" ")" "," "." 0
now 2025-09-01
}
# --- 1. CALENDARS & SHIFTS ---
# National Holiday (Friday)
vacation "Public Holiday" 2025-09-05
# Standard Office: Mon-Fri, 09:00-17:00 (8h)
shift standard_shift {
workinghours mon - fri 09:00 - 17:00
}
# Night Construction: Mon-Fri, 22:00-06:00 (8h)
# Note: In TJP, 22:00-06:00 usually implies the shift crosses midnight.
shift night_shift {
workinghours mon - fri 22:00 - 06:00
}
# --- 2. RESOURCES ---
resource team "Project Team" {
# Architect: Standard hours, takes vacation the second week
resource arch "Senior Architect" {
workinghours standard_shift
vacation 2025-09-11 - 2025-09-12
}
# Construction Crew: Night shift only
resource crew "Night Crew" {
workinghours night_shift
}
# Electrician: Standard hours, but Junior (0.8 efficiency)
resource sparky "Junior Electrician" {
workinghours standard_shift
efficiency 0.8
}
}
# --- 3. TASKS ---
task bhs "Baggage Handling System" {
# TASK 1: Design Phase
task design "Blueprint Design" {
effort 40h
allocate arch
start 2025-09-01-09:00
}
# TASK 2: Demolition
task demo "Old System Demo" {
effort 16h
allocate crew
depends !design
}
# TASK 3: Electrical Rewiring
task wiring "Electrical Rewiring" {
effort 32h
allocate sparky
depends !demo { gapduration 24h onstart }
}
}
# --- 4. REPORT ---
taskreport "retrofit_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
leaftasksonly true
}
Schedule
Id,Start,End
bhs.design,2025-09-01-09:00,2025-09-08-17:00
bhs.demo,2025-09-08-22:00,2025-09-10-06:00
bhs.wiring,2025-09-10-09:00,2025-09-16-17:00
Project
/*
* AIRPORT BAGGAGE SYSTEM UPGRADE - STRESS TEST
* Challenge: Mixed calendars, efficiency factors, resource constraints,
* and strict dependency chains.
*/
project acso "AirportStressTest" 2025-06-01 +2m {
timezone "UTC"
timeformat "%Y-%m-%d"
currency "USD"
dailyworkinghours 8
yearlyworkingdays 260
}
# ---------------------------------------------------------------------------
# 1. RESOURCES WITH ATTRIBUTES
# ---------------------------------------------------------------------------
resource dev "IT Team" {
efficiency 0.8
rate 100.0
resource d1 "Senior Dev" {
leaves annual 2025-06-05 - 2025-06-06
}
resource d2 "Night Ops" {
limits { dailymax 8h }
}
}
resource elec "Electricians" {
efficiency 1.0
rate 80.0
resource e1 "Master Electrician" {
efficiency 1.2
}
resource e2 "Apprentice" {
efficiency 0.5
}
}
# ---------------------------------------------------------------------------
# 2. TASKS - THE GAUNTLET
# ---------------------------------------------------------------------------
task airport "Terminal 5 Upgrade" {
# SCENARIO A: Efficiency & Leave Calculation
task t_software "Control Software" {
effort 2d
allocate d1
start 2025-06-02
}
# SCENARIO B: Dependency & Lag
task t_install "Hardware Install" {
depends !t_software { gapduration 4h }
effort 1d
allocate e1
}
# SCENARIO C: Resource contention & Priority
task t_crit "Critical Power Patch" {
priority 1000
effort 1d
allocate e1
depends !t_software
}
task t_low "Labeling Cables" {
priority 100
effort 4h
allocate e1
depends !t_software
}
# SCENARIO D: Night Shift Logic
task t_migration "Database Migration" {
depends !t_crit
effort 6h
allocate d2
}
# SCENARIO E: ALAP (As Late As Possible)
task t_audit "Safety Audit" {
scheduling alap
effort 2d
allocate e2
end 2025-06-25
}
# SCENARIO F: Milestone & Hierarchy
task deliver "Go Live" {
depends !t_migration, !t_audit, !t_low
}
}
# ---------------------------------------------------------------------------
# 3. REPORT DEFINITION (CSV OUTPUT)
# ---------------------------------------------------------------------------
taskreport status_csv "status" {
formats csv
columns id, name, start, end, effort, duration
timeformat "%Y-%m-%d"
loadunit days
}
Schedule
Id,Name,Start,End,Effort,Duration
airport,Terminal 5 Upgrade,2025-06-02,2025-06-24,0,22.33
airport.t_software,Control Software,2025-06-02,2025-06-04,16.00,2.17
airport.t_install,Hardware Install,2025-06-05,2025-06-06,8.00,0.94
airport.t_crit,Critical Power Patch,2025-06-04,2025-06-05,8.00,0.94
airport.t_low,Labeling Cables,2025-06-06,2025-06-06,4.00,0.14
airport.t_migration,Database Migration,2025-06-05,2025-06-06,6.00,0.98
airport.t_audit,Safety Audit,2025-06-19,2025-06-24,16.00,5.33
airport.deliver,Go Live,2025-06-24,2025-06-24,0,0.00
Project
/* * GLOBAL AIRPORT SYNCHRONIZATION - ULTRA COMPLEX
* Challenge: Floating point efficiency, irregular calendars,
* daily limits vs. limits, and priority-based preemption.
*/
project "AirportUltraMath" 2025-08-01 +3m {
timezone "UTC"
timeformat "%Y-%m-%d %H:%M:%S"
currency "EUR"
timingresolution 15min
# Standard: 8h days. But we will override this per resource.
dailyworkinghours 8
yearlyworkingdays 260
}
# ---------------------------------------------------------------------------
# ACCOUNTS (must be defined before resources that use them)
# ---------------------------------------------------------------------------
account cost "Labor Cost" {
aggregate resources
}
account rev "Revenue" {}
balance cost rev
# ---------------------------------------------------------------------------
# 1. THE "SWISS CHEESE" CALENDAR
# ---------------------------------------------------------------------------
# This calendar has odd gaps. If your system assumes hourly blocks, it fails.
resource irregular_shift "Irregular Shift" {
workinghours mon, wed, fri 08:15 - 11:45, 13:15 - 16:30
workinghours tue, thu 09:00 - 10:30, 14:45 - 16:00
}
# ---------------------------------------------------------------------------
# 2. RESOURCES (The Math Hazards)
# ---------------------------------------------------------------------------
resource r_math "The Math Hazard" {
# Efficiency 0.77 forces nasty floating point expansion.
# 1 hour effort = 1.2987... hours duration.
efficiency 0.77
rate 150.0
chargeset cost
# Uses the swiss cheese calendar
workinghours mon, wed, fri 08:15 - 11:45, 13:15 - 16:30
workinghours tue, thu 09:00 - 10:30, 14:45 - 16:00
# Leave specifically during a critical Tuesday slot (30 mins)
vacation 2025-08-05-09:30 - 2025-08-05-10:00
}
resource r_limit "The Bottleneck" {
efficiency 1.25
rate 200.0
chargeset cost
workinghours mon - fri 08:00 - 18:00
# LIMIT TEST: Max 3.5 hours per day.
# With eff 1.25, they do 4.375h of work in 3.5h calendar time.
# Your system must stop scheduling them after 3.5h clock time.
limits { dailymax 3.5h }
}
# ---------------------------------------------------------------------------
# 3. THE TASKS
# ---------------------------------------------------------------------------
task airport_math "Complex Calculations" {
# SCENARIO A: The Floating Point Expansion
# ----------------------------------------
# Effort: 17.5 hours.
# Resource: r_math (Eff 0.77).
# Calendar: Irregular.
# Leave: 30 mins in the middle of slot.
#
# Start: Monday Aug 4, 2025.
# Logic Check:
# Work Required = 17.5 / 0.77 = 22.7272... hours.
# Mon Available: (11:45-08:15) + (16:30-13:15) = 3.5 + 3.25 = 6.75h
# Tue Available: (10:30-09:00) + (16:00-14:45) = 1.5 + 1.25 = 2.75h
# ... MINUS the leave (30m) on Tuesday = 2.25h net.
# Your system must navigate these fractions exactly.
task t_float "Floating Point Expansion" {
priority 100
effort 17.5h
allocate r_math
start 2025-08-04-08:15
}
# SCENARIO B: The Interruption (Preemption)
# ----------------------------------------
# A high priority task aimed at the EXACT time r_math is working on t_float.
# Wed Aug 6 is a work day.
# t_float should still be running.
# This task MUST pause t_float, run for 45 mins, then t_float resumes.
task t_interrupt "Emergency Patch" {
priority 1000
effort 45min
allocate r_math
start 2025-08-06-14:00
}
# SCENARIO C: Limits vs Efficiency
# ----------------------------------------
# Task requires 15 hours of EFFORT.
# Resource r_limit has eff 1.25.
# Actual work time needed = 15 / 1.25 = 12 hours.
# Constraint: dailymax 3.5h.
#
# Schedule should allow 3.5h/day for 3 days (3.5 * 3 = 10.5h).
# Day 4: Remaining 1.5h.
# Cost: 12h * 200 rate = 2400 (NOT based on effort 15h, but allocated time).
task t_limit "Bottleneck Squeeze" {
effort 15h
allocate r_limit
depends !t_float
}
# SCENARIO D: ALAP + Start-Start Lead
# ----------------------------------------
# t_finish must end on Friday, Aug 29 at 17:00.
# t_pre must start 3 days BEFORE t_finish starts.
task t_finish "Hard Deadline" {
scheduling alap
effort 1d
allocate r_limit
end 2025-08-29-17:00
}
# NOTE: Negative gapduration is not supported by the .tjp format. Removing this test case.
# task t_pre "Lead Time Dependency" {
# scheduling alap
# effort 4h
# allocate r_math
# # Start-Start dependency with a 3 day LEAD (negative gap)
# depends !t_finish { gapduration -3d }
# }
}
# ---------------------------------------------------------------------------
# 4. REPORT (commented out for now - formats not supported in parser)
# ---------------------------------------------------------------------------
# taskreport "math_dump" {
# formats csv
# columns id,
# name,
# start,
# end,
# duration,
# effort,
# cost,
# complete,
# note
#
# hideresource 0
# }
Schedule
Id,Start,End
airport_math,2025-08-04-08:15,2025-08-29-17:00
airport_math.t_float,2025-08-04-08:15,2025-08-08-14:57
airport_math.t_interrupt,2025-08-06-14:00,2025-08-06-14:58
airport_math.t_limit,2025-08-08-14:57,2025-08-13-09:57
airport_math.t_finish,2025-08-28-15:06,2025-08-29-17:00
Project
/* * GLOBAL AIRPORT SYNCHRONIZATION - ULTRA COMPLEX
* Challenge: Floating point efficiency, irregular calendars,
* daily limits vs. limits, and priority-based preemption.
*/
project "AirportUltraMath" 2025-08-01 +3m {
timezone "UTC"
timeformat "%Y-%m-%d %H:%M:%S"
currency "EUR"
timingresolution 15min
# Standard: 8h days. But we will override this per resource.
dailyworkinghours 8
yearlyworkingdays 260
}
# ---------------------------------------------------------------------------
# ACCOUNTS (must be defined before resources that use them)
# ---------------------------------------------------------------------------
account cost "Labor Cost" {
aggregate resources
}
account rev "Revenue" {}
balance cost rev
# ---------------------------------------------------------------------------
# 1. THE "SWISS CHEESE" CALENDAR
# ---------------------------------------------------------------------------
# This calendar has odd gaps. If your system assumes hourly blocks, it fails.
resource irregular_shift "Irregular Shift" {
workinghours mon, wed, fri 08:15 - 11:45, 13:15 - 16:30
workinghours tue, thu 09:00 - 10:30, 14:45 - 16:00
}
# ---------------------------------------------------------------------------
# 2. RESOURCES (The Math Hazards)
# ---------------------------------------------------------------------------
resource r_math "The Math Hazard" {
# Efficiency 0.77 forces nasty floating point expansion.
# 1 hour effort = 1.2987... hours duration.
efficiency 0.77
rate 150.0
chargeset cost
# Uses the swiss cheese calendar
workinghours mon, wed, fri 08:15 - 11:45, 13:15 - 16:30
workinghours tue, thu 09:00 - 10:30, 14:45 - 16:00
# Leave specifically during a critical Tuesday slot
vacation 2025-08-05-09:30 - 2025-08-05-10:00
}
resource r_limit "The Bottleneck" {
efficiency 1.25
rate 200.0
chargeset cost
workinghours mon - fri 08:00 - 18:00
# LIMIT TEST: Max 3.5 hours per day.
# With eff 1.25, they do 4.375h of work in 3.5h calendar time.
# Your system must stop scheduling them after 3.5h clock time.
limits { dailymax 3.5h }
}
# ---------------------------------------------------------------------------
# 3. THE TASKS
# ---------------------------------------------------------------------------
task airport_math "Complex Calculations" {
# SCENARIO A: The Floating Point Expansion
# ----------------------------------------
# Effort: 17.5 hours.
# Resource: r_math (Eff 0.77).
# Calendar: Irregular.
# Leave: 30 mins in the middle of slot.
#
# Start: Monday Aug 4, 2025.
# Logic Check:
# Work Required = 17.5 / 0.77 = 22.7272... hours.
# Mon Available: (11:45-08:15) + (16:30-13:15) = 3.5 + 3.25 = 6.75h
# Tue Available: (10:30-09:00) + (16:00-14:45) = 1.5 + 1.25 = 2.75h
# ... MINUS the leave (30m) on Tuesday = 2.25h net.
# Your system must navigate these fractions exactly.
task t_float "Floating Point Expansion" {
priority 100
effort 17.5h
allocate r_math
start 2025-08-04-08:15
}
# SCENARIO B: The Interruption (Preemption)
# ----------------------------------------
# A high priority task aimed at the EXACT time r_math is working on t_float.
# Wed Aug 6 is a work day.
# t_float should still be running.
# This task MUST pause t_float, run for 45 mins, then t_float resumes.
task t_interrupt "Emergency Patch" {
priority 1000
effort 45min
allocate r_math
start 2025-08-06-14:00
}
# SCENARIO C: Limits vs Efficiency
# ----------------------------------------
# Task requires 15 hours of EFFORT.
# Resource r_limit has eff 1.25.
# Actual work time needed = 15 / 1.25 = 12 hours.
# Constraint: dailymax 3.5h.
#
# Schedule should allow 3.5h/day for 3 days (3.5 * 3 = 10.5h).
# Day 4: Remaining 1.5h.
# Cost: 12h * 200 rate = 2400 (NOT based on effort 15h, but allocated time).
task t_limit "Bottleneck Squeeze" {
effort 15h
allocate r_limit
depends !t_float
}
# SCENARIO D: ALAP + Start-Start Lead
# ----------------------------------------
# t_finish must end on Friday, Aug 29 at 17:00.
# t_pre must start 3 days BEFORE t_finish starts.
task t_finish "Hard Deadline" {
scheduling alap
effort 1d
allocate r_limit
end 2025-08-29-17:00
}
# NOTE: Negative gapduration is not supported by the .tjp format. Removing this test case.
# task t_pre "Lead Time Dependency" {
# scheduling alap
# effort 4h
# allocate r_math
# # Start-Start dependency with a 3 day LEAD (negative gap)
# depends !t_finish { gapduration -3d }
# }
}
# ---------------------------------------------------------------------------
# 4. REPORT
# ---------------------------------------------------------------------------
taskreport "math_dump" {
formats csv
columns id, name, start, end, duration, effort, cost
hidetask ~isleaf()
loadunit hours
}
Schedule
Id,Name,Start,End,Duration,Effort,Cost
airport_math.t_float,Floating Point Expansion,2025-08-04 08:15:00,2025-08-08 14:57:05,4.28,17.50,3409.09
airport_math.t_interrupt,Emergency Patch,2025-08-06 14:00:00,2025-08-06 14:58:26,0.04,0.75,146.10
airport_math.t_limit,Bottleneck Squeeze,2025-08-08 14:57:05,2025-08-13 09:57:05,4.79,15.00,2400.00
airport_math.t_finish,Hard Deadline,2025-08-28 15:06:00,2025-08-29 17:00:00,1.08,8.00,1280.00
Project
/*
* Issue #51: ALAP Backward Scheduling
* Tests backward calculation with holiday handling
*/
project alap "ALAP_Production" 2025-12-01 +3w {
timezone "UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-12-01
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 17:00
}
vacation "Holiday" 2025-12-10
resource team "Team" {
resource worker "Worker" {
workinghours mon - fri 09:00 - 17:00
}
}
task production "Product" {
task step1 "Assembly" {
effort 16h
allocate worker
scheduling alap
precedes !step2
}
task step2 "Painting" {
effort 16h
allocate worker
scheduling alap
end 2025-12-12-17:00
}
}
taskreport alap_output "alap_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
production,2025-12-08-09:00,2025-12-12-17:00
production.step1,2025-12-08-09:00,2025-12-09-17:00
production.step2,2025-12-11-09:00,2025-12-12-17:00
Project
/*
* Issue #64: The "Indivisible" Protocol - Atomicity
* Tests contiguous flag (atomic booking)
* Task cannot be split across shift breaks
*/
project "Atomic_Booking" 2025-11-01 +1w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-11-01
}
shift broken_day "Broken Day" {
workinghours mon - fri 08:00 - 12:00, 13:00 - 18:00
}
resource kiln "Ceramic Oven" {
workinghours broken_day
}
task production "Firing Phase" {
effort 4.5h
flags contiguous
allocate kiln
}
taskreport atomic_output "atomic_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
production,2025-11-03-13:00,2025-11-03-17:30
Project
/*
* Issue #57: The "Black Box" Protocol
* Tests timezone conversion, efficiency, disjoint calendars, day-boundary crossovers
*/
project "Black_Box_Protocol" 2025-01-01 +1m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-01-01
}
shift alpha_shift {
workinghours mon - wed 10:00 - 14:00
}
shift beta_shift {
workinghours thu - sun 18:00 - 22:00
}
resource agent_a "Alpha" {
timezone "Europe/Athens"
workinghours alpha_shift
efficiency 0.5
}
resource agent_b "Beta" {
timezone "America/Los_Angeles"
workinghours beta_shift
efficiency 2.0
}
task operations "Covert Ops" {
task phase_1 "Infiltration" {
effort 4h
allocate agent_a
start 2025-01-01-00:00
}
task phase_2 "Extraction" {
effort 4h
allocate agent_b
depends !phase_1
}
}
taskreport blackbox_output "blackbox_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
operations,2025-01-01-08:00,2025-01-10-04:00
operations.phase_1,2025-01-01-08:00,2025-01-06-12:00
operations.phase_2,2025-01-10-02:00,2025-01-10-04:00
Project
/*
* Issue #49: The Bottlenecked Release
* Tests daily limits + holiday interaction
*/
project bottleneck "Bottleneck_Release" 2025-06-02 +3w {
timezone "UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-06-02
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 17:00
}
vacation "Company Founder Day" 2025-06-04
resource team "Dev Team" {
resource dev "FullStack Dev" {
workinghours mon - fri 09:00 - 17:00
}
resource qa "QA Lead" {
workinghours mon - fri 09:00 - 17:00
limits { dailymax 4h }
}
}
task release "v1.0 Release" {
task coding "Feature Code" {
effort 16h
allocate dev
start 2025-06-02-09:00
}
task review "Code Review" {
effort 12h
allocate qa
depends !coding
}
task deploy "Deploy to Prod" {
# Both must be on the job together. effort is person-time, so four hours
# of the pair working side by side is eight hours of effort.
effort 8h
allocate dev { mandatory }, qa { mandatory }
depends !review
}
}
taskreport bottleneck_output "bottleneck_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
release,2025-06-02-09:00,2025-06-10-13:00
release.coding,2025-06-02-09:00,2025-06-03-17:00
release.review,2025-06-05-09:00,2025-06-09-13:00
release.deploy,2025-06-10-09:00,2025-06-10-13:00
Project
/*
* Issue #60: The "Eclipse" Protocol
* Tests intersection of discontinuous shift patterns
* Task requires BOTH resources simultaneously: `mandatory` on each allocation
* says the task makes no progress unless both are free. effort is person-time,
* so seven hours of both working together is fourteen hours of effort.
*/
project "Eclipse_Protocol" 2025-06-01 +1m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-06-01
}
shift s_odd "Odd" {
workinghours mon, wed, fri 09:00 - 17:00
}
shift s_mid "Mid" {
workinghours mon - sun 12:00 - 14:00
}
resource r_sun "Sun" {
workinghours s_odd
}
resource r_moon "Moon" {
workinghours s_mid
}
task sys "Alignment" {
task sync "Syzygy" {
effort 14h
allocate r_sun { mandatory }, r_moon { mandatory }
start 2025-06-01-00:00
}
}
taskreport eclipse_output "eclipse_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
sys,2025-06-02-12:00,2025-06-09-13:00
sys.sync,2025-06-02-12:00,2025-06-09-13:00
Project
/*
* Issue #63: The "Failover" Protocol
* Tests alternative resource allocation (smart routing)
* Primary is on vacation, system should use slower backup to finish earlier
*/
project "Failover_Test" 2025-08-01 +2w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-08-01
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 17:00
}
resource primary "Cluster A (GPU)" {
workinghours standard
efficiency 1.0
vacation 2025-08-01 - 2025-08-05
}
resource backup "Cluster B (CPU)" {
workinghours standard
efficiency 0.5
}
task compute "Rendering" {
effort 8h
allocate primary { alternative backup }
}
taskreport failover_output "failover_output" {
formats csv
columns id, start, end, resources
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End,Resources
compute,2025-08-01-09:00,2025-08-04-17:00,-
Project
/*
* Issue #54: Just-In-Time Supply Chain
* Tests ALAP + Resource Contention + Weekend handling
*
* Original specification requires:
* - Project-level scheduling alap
* - End date on parent task
* - Complex dependencies with onstart
*/
project "Just_In_Time" 2025-07-01 +1m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-07-01
scheduling alap
}
shift factory_hours "Factory Hours" {
workinghours mon - fri 08:00 - 16:00
}
resource machine "Press" {
workinghours factory_hours
}
task delivery "Product Launch" {
end 2025-07-18-16:00
task pack "Packaging" {
effort 8h
allocate machine
}
task assemble_b "Body Assembly" {
effort 16h
allocate machine
depends !!pack { onstart }
}
task assemble_a "Engine Assembly" {
effort 16h
allocate machine
}
}
task connection_setup "Logic" {
task set_deps "Apply" {
depends !!delivery.assemble_a, !!delivery.assemble_b
precedes !!delivery.pack
}
}
taskreport jit_output "jit_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
delivery,2025-07-14-08:00,2025-07-18-16:00
delivery.pack,2025-07-18-08:00,2025-07-18-16:00
delivery.assemble_b,2025-07-16-08:00,2025-07-17-16:00
delivery.assemble_a,2025-07-14-08:00,2025-07-15-16:00
connection_setup,2025-07-18-08:00,2025-07-18-08:00
connection_setup.set_deps,2025-07-18-08:00,2025-07-18-08:00
Project
# The declared period must cover the work: 500 tasks of 73min effort with
# 29min gaps run to 2024-06-06. A shorter declaration used to be silently
# extended by the scheduler; it now reports the tasks that do not fit.
project "Math_Torture" 2024-02-28-00:00 +4m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
numberformat "-" "" "," "." 2
currencyformat "(" ")" "," "." 2
timingresolution 1min
}
shift prime_shift {
workinghours mon - sun 08:13 - 11:59, 13:07 - 17:47
}
resource cruncher "Number Cruncher" {
workinghours prime_shift
}
task chain "Chain Reaction" {
task t_001 "Link 1" {
effort 73min
allocate cruncher
start 2024-02-28-08:13
}
task t_002 "Link 2" {
effort 73min
allocate cruncher
depends !t_001 { gapduration 29min }
}
task t_003 "Link 3" {
effort 73min
allocate cruncher
depends !t_002 { gapduration 29min }
}
task t_004 "Link 4" {
effort 73min
allocate cruncher
depends !t_003 { gapduration 29min }
}
task t_005 "Link 5" {
effort 73min
allocate cruncher
depends !t_004 { gapduration 29min }
}
task t_006 "Link 6" {
effort 73min
allocate cruncher
depends !t_005 { gapduration 29min }
}
task t_007 "Link 7" {
effort 73min
allocate cruncher
depends !t_006 { gapduration 29min }
}
task t_008 "Link 8" {
effort 73min
allocate cruncher
depends !t_007 { gapduration 29min }
}
task t_009 "Link 9" {
effort 73min
allocate cruncher
depends !t_008 { gapduration 29min }
}
task t_010 "Link 10" {
effort 73min
allocate cruncher
depends !t_009 { gapduration 29min }
}
task t_011 "Link 11" {
effort 73min
allocate cruncher
depends !t_010 { gapduration 29min }
}
task t_012 "Link 12" {
effort 73min
allocate cruncher
depends !t_011 { gapduration 29min }
}
task t_013 "Link 13" {
effort 73min
allocate cruncher
depends !t_012 { gapduration 29min }
}
task t_014 "Link 14" {
effort 73min
allocate cruncher
depends !t_013 { gapduration 29min }
}
task t_015 "Link 15" {
effort 73min
allocate cruncher
depends !t_014 { gapduration 29min }
}
task t_016 "Link 16" {
effort 73min
allocate cruncher
depends !t_015 { gapduration 29min }
}
task t_017 "Link 17" {
effort 73min
allocate cruncher
depends !t_016 { gapduration 29min }
}
task t_018 "Link 18" {
effort 73min
allocate cruncher
depends !t_017 { gapduration 29min }
}
task t_019 "Link 19" {
effort 73min
allocate cruncher
depends !t_018 { gapduration 29min }
}
task t_020 "Link 20" {
effort 73min
allocate cruncher
depends !t_019 { gapduration 29min }
}
task t_021 "Link 21" {
effort 73min
allocate cruncher
depends !t_020 { gapduration 29min }
}
task t_022 "Link 22" {
effort 73min
allocate cruncher
depends !t_021 { gapduration 29min }
}
task t_023 "Link 23" {
effort 73min
allocate cruncher
depends !t_022 { gapduration 29min }
}
task t_024 "Link 24" {
effort 73min
allocate cruncher
depends !t_023 { gapduration 29min }
}
task t_025 "Link 25" {
effort 73min
allocate cruncher
depends !t_024 { gapduration 29min }
}
task t_026 "Link 26" {
effort 73min
allocate cruncher
depends !t_025 { gapduration 29min }
}
task t_027 "Link 27" {
effort 73min
allocate cruncher
depends !t_026 { gapduration 29min }
}
task t_028 "Link 28" {
effort 73min
allocate cruncher
depends !t_027 { gapduration 29min }
}
task t_029 "Link 29" {
effort 73min
allocate cruncher
depends !t_028 { gapduration 29min }
}
task t_030 "Link 30" {
effort 73min
allocate cruncher
depends !t_029 { gapduration 29min }
}
task t_031 "Link 31" {
effort 73min
allocate cruncher
depends !t_030 { gapduration 29min }
}
task t_032 "Link 32" {
effort 73min
allocate cruncher
depends !t_031 { gapduration 29min }
}
task t_033 "Link 33" {
effort 73min
allocate cruncher
depends !t_032 { gapduration 29min }
}
task t_034 "Link 34" {
effort 73min
allocate cruncher
depends !t_033 { gapduration 29min }
}
task t_035 "Link 35" {
effort 73min
allocate cruncher
depends !t_034 { gapduration 29min }
}
task t_036 "Link 36" {
effort 73min
allocate cruncher
depends !t_035 { gapduration 29min }
}
task t_037 "Link 37" {
effort 73min
allocate cruncher
depends !t_036 { gapduration 29min }
}
task t_038 "Link 38" {
effort 73min
allocate cruncher
depends !t_037 { gapduration 29min }
}
task t_039 "Link 39" {
effort 73min
allocate cruncher
depends !t_038 { gapduration 29min }
}
task t_040 "Link 40" {
effort 73min
allocate cruncher
depends !t_039 { gapduration 29min }
}
task t_041 "Link 41" {
effort 73min
allocate cruncher
depends !t_040 { gapduration 29min }
}
task t_042 "Link 42" {
effort 73min
allocate cruncher
depends !t_041 { gapduration 29min }
}
task t_043 "Link 43" {
effort 73min
allocate cruncher
depends !t_042 { gapduration 29min }
}
task t_044 "Link 44" {
effort 73min
allocate cruncher
depends !t_043 { gapduration 29min }
}
task t_045 "Link 45" {
effort 73min
allocate cruncher
depends !t_044 { gapduration 29min }
}
task t_046 "Link 46" {
effort 73min
allocate cruncher
depends !t_045 { gapduration 29min }
}
task t_047 "Link 47" {
effort 73min
allocate cruncher
depends !t_046 { gapduration 29min }
}
task t_048 "Link 48" {
effort 73min
allocate cruncher
depends !t_047 { gapduration 29min }
}
task t_049 "Link 49" {
effort 73min
allocate cruncher
depends !t_048 { gapduration 29min }
}
task t_050 "Link 50" {
effort 73min
allocate cruncher
depends !t_049 { gapduration 29min }
}
task t_051 "Link 51" {
effort 73min
allocate cruncher
depends !t_050 { gapduration 29min }
}
task t_052 "Link 52" {
effort 73min
allocate cruncher
depends !t_051 { gapduration 29min }
}
task t_053 "Link 53" {
effort 73min
allocate cruncher
depends !t_052 { gapduration 29min }
}
task t_054 "Link 54" {
effort 73min
allocate cruncher
depends !t_053 { gapduration 29min }
}
task t_055 "Link 55" {
effort 73min
allocate cruncher
depends !t_054 { gapduration 29min }
}
task t_056 "Link 56" {
effort 73min
allocate cruncher
depends !t_055 { gapduration 29min }
}
task t_057 "Link 57" {
effort 73min
allocate cruncher
depends !t_056 { gapduration 29min }
}
task t_058 "Link 58" {
effort 73min
allocate cruncher
depends !t_057 { gapduration 29min }
}
task t_059 "Link 59" {
effort 73min
allocate cruncher
depends !t_058 { gapduration 29min }
}
task t_060 "Link 60" {
effort 73min
allocate cruncher
depends !t_059 { gapduration 29min }
}
task t_061 "Link 61" {
effort 73min
allocate cruncher
depends !t_060 { gapduration 29min }
}
task t_062 "Link 62" {
effort 73min
allocate cruncher
depends !t_061 { gapduration 29min }
}
task t_063 "Link 63" {
effort 73min
allocate cruncher
depends !t_062 { gapduration 29min }
}
task t_064 "Link 64" {
effort 73min
allocate cruncher
depends !t_063 { gapduration 29min }
}
task t_065 "Link 65" {
effort 73min
allocate cruncher
depends !t_064 { gapduration 29min }
}
task t_066 "Link 66" {
effort 73min
allocate cruncher
depends !t_065 { gapduration 29min }
}
task t_067 "Link 67" {
effort 73min
allocate cruncher
depends !t_066 { gapduration 29min }
}
task t_068 "Link 68" {
effort 73min
allocate cruncher
depends !t_067 { gapduration 29min }
}
task t_069 "Link 69" {
effort 73min
allocate cruncher
depends !t_068 { gapduration 29min }
}
task t_070 "Link 70" {
effort 73min
allocate cruncher
depends !t_069 { gapduration 29min }
}
task t_071 "Link 71" {
effort 73min
allocate cruncher
depends !t_070 { gapduration 29min }
}
task t_072 "Link 72" {
effort 73min
allocate cruncher
depends !t_071 { gapduration 29min }
}
task t_073 "Link 73" {
effort 73min
allocate cruncher
depends !t_072 { gapduration 29min }
}
task t_074 "Link 74" {
effort 73min
allocate cruncher
depends !t_073 { gapduration 29min }
}
task t_075 "Link 75" {
effort 73min
allocate cruncher
depends !t_074 { gapduration 29min }
}
task t_076 "Link 76" {
effort 73min
allocate cruncher
depends !t_075 { gapduration 29min }
}
task t_077 "Link 77" {
effort 73min
allocate cruncher
depends !t_076 { gapduration 29min }
}
task t_078 "Link 78" {
effort 73min
allocate cruncher
depends !t_077 { gapduration 29min }
}
task t_079 "Link 79" {
effort 73min
allocate cruncher
depends !t_078 { gapduration 29min }
}
task t_080 "Link 80" {
effort 73min
allocate cruncher
depends !t_079 { gapduration 29min }
}
task t_081 "Link 81" {
effort 73min
allocate cruncher
depends !t_080 { gapduration 29min }
}
task t_082 "Link 82" {
effort 73min
allocate cruncher
depends !t_081 { gapduration 29min }
}
task t_083 "Link 83" {
effort 73min
allocate cruncher
depends !t_082 { gapduration 29min }
}
task t_084 "Link 84" {
effort 73min
allocate cruncher
depends !t_083 { gapduration 29min }
}
task t_085 "Link 85" {
effort 73min
allocate cruncher
depends !t_084 { gapduration 29min }
}
task t_086 "Link 86" {
effort 73min
allocate cruncher
depends !t_085 { gapduration 29min }
}
task t_087 "Link 87" {
effort 73min
allocate cruncher
depends !t_086 { gapduration 29min }
}
task t_088 "Link 88" {
effort 73min
allocate cruncher
depends !t_087 { gapduration 29min }
}
task t_089 "Link 89" {
effort 73min
allocate cruncher
depends !t_088 { gapduration 29min }
}
task t_090 "Link 90" {
effort 73min
allocate cruncher
depends !t_089 { gapduration 29min }
}
task t_091 "Link 91" {
effort 73min
allocate cruncher
depends !t_090 { gapduration 29min }
}
task t_092 "Link 92" {
effort 73min
allocate cruncher
depends !t_091 { gapduration 29min }
}
task t_093 "Link 93" {
effort 73min
allocate cruncher
depends !t_092 { gapduration 29min }
}
task t_094 "Link 94" {
effort 73min
allocate cruncher
depends !t_093 { gapduration 29min }
}
task t_095 "Link 95" {
effort 73min
allocate cruncher
depends !t_094 { gapduration 29min }
}
task t_096 "Link 96" {
effort 73min
allocate cruncher
depends !t_095 { gapduration 29min }
}
task t_097 "Link 97" {
effort 73min
allocate cruncher
depends !t_096 { gapduration 29min }
}
task t_098 "Link 98" {
effort 73min
allocate cruncher
depends !t_097 { gapduration 29min }
}
task t_099 "Link 99" {
effort 73min
allocate cruncher
depends !t_098 { gapduration 29min }
}
task t_100 "Link 100" {
effort 73min
allocate cruncher
depends !t_099 { gapduration 29min }
}
task t_101 "Link 101" {
effort 73min
allocate cruncher
depends !t_100 { gapduration 29min }
}
task t_102 "Link 102" {
effort 73min
allocate cruncher
depends !t_101 { gapduration 29min }
}
task t_103 "Link 103" {
effort 73min
allocate cruncher
depends !t_102 { gapduration 29min }
}
task t_104 "Link 104" {
effort 73min
allocate cruncher
depends !t_103 { gapduration 29min }
}
task t_105 "Link 105" {
effort 73min
allocate cruncher
depends !t_104 { gapduration 29min }
}
task t_106 "Link 106" {
effort 73min
allocate cruncher
depends !t_105 { gapduration 29min }
}
task t_107 "Link 107" {
effort 73min
allocate cruncher
depends !t_106 { gapduration 29min }
}
task t_108 "Link 108" {
effort 73min
allocate cruncher
depends !t_107 { gapduration 29min }
}
task t_109 "Link 109" {
effort 73min
allocate cruncher
depends !t_108 { gapduration 29min }
}
task t_110 "Link 110" {
effort 73min
allocate cruncher
depends !t_109 { gapduration 29min }
}
task t_111 "Link 111" {
effort 73min
allocate cruncher
depends !t_110 { gapduration 29min }
}
task t_112 "Link 112" {
effort 73min
allocate cruncher
depends !t_111 { gapduration 29min }
}
task t_113 "Link 113" {
effort 73min
allocate cruncher
depends !t_112 { gapduration 29min }
}
task t_114 "Link 114" {
effort 73min
allocate cruncher
depends !t_113 { gapduration 29min }
}
task t_115 "Link 115" {
effort 73min
allocate cruncher
depends !t_114 { gapduration 29min }
}
task t_116 "Link 116" {
effort 73min
allocate cruncher
depends !t_115 { gapduration 29min }
}
task t_117 "Link 117" {
effort 73min
allocate cruncher
depends !t_116 { gapduration 29min }
}
task t_118 "Link 118" {
effort 73min
allocate cruncher
depends !t_117 { gapduration 29min }
}
task t_119 "Link 119" {
effort 73min
allocate cruncher
depends !t_118 { gapduration 29min }
}
task t_120 "Link 120" {
effort 73min
allocate cruncher
depends !t_119 { gapduration 29min }
}
task t_121 "Link 121" {
effort 73min
allocate cruncher
depends !t_120 { gapduration 29min }
}
task t_122 "Link 122" {
effort 73min
allocate cruncher
depends !t_121 { gapduration 29min }
}
task t_123 "Link 123" {
effort 73min
allocate cruncher
depends !t_122 { gapduration 29min }
}
task t_124 "Link 124" {
effort 73min
allocate cruncher
depends !t_123 { gapduration 29min }
}
task t_125 "Link 125" {
effort 73min
allocate cruncher
depends !t_124 { gapduration 29min }
}
task t_126 "Link 126" {
effort 73min
allocate cruncher
depends !t_125 { gapduration 29min }
}
task t_127 "Link 127" {
effort 73min
allocate cruncher
depends !t_126 { gapduration 29min }
}
task t_128 "Link 128" {
effort 73min
allocate cruncher
depends !t_127 { gapduration 29min }
}
task t_129 "Link 129" {
effort 73min
allocate cruncher
depends !t_128 { gapduration 29min }
}
task t_130 "Link 130" {
effort 73min
allocate cruncher
depends !t_129 { gapduration 29min }
}
task t_131 "Link 131" {
effort 73min
allocate cruncher
depends !t_130 { gapduration 29min }
}
task t_132 "Link 132" {
effort 73min
allocate cruncher
depends !t_131 { gapduration 29min }
}
task t_133 "Link 133" {
effort 73min
allocate cruncher
depends !t_132 { gapduration 29min }
}
task t_134 "Link 134" {
effort 73min
allocate cruncher
depends !t_133 { gapduration 29min }
}
task t_135 "Link 135" {
effort 73min
allocate cruncher
depends !t_134 { gapduration 29min }
}
task t_136 "Link 136" {
effort 73min
allocate cruncher
depends !t_135 { gapduration 29min }
}
task t_137 "Link 137" {
effort 73min
allocate cruncher
depends !t_136 { gapduration 29min }
}
task t_138 "Link 138" {
effort 73min
allocate cruncher
depends !t_137 { gapduration 29min }
}
task t_139 "Link 139" {
effort 73min
allocate cruncher
depends !t_138 { gapduration 29min }
}
task t_140 "Link 140" {
effort 73min
allocate cruncher
depends !t_139 { gapduration 29min }
}
task t_141 "Link 141" {
effort 73min
allocate cruncher
depends !t_140 { gapduration 29min }
}
task t_142 "Link 142" {
effort 73min
allocate cruncher
depends !t_141 { gapduration 29min }
}
task t_143 "Link 143" {
effort 73min
allocate cruncher
depends !t_142 { gapduration 29min }
}
task t_144 "Link 144" {
effort 73min
allocate cruncher
depends !t_143 { gapduration 29min }
}
task t_145 "Link 145" {
effort 73min
allocate cruncher
depends !t_144 { gapduration 29min }
}
task t_146 "Link 146" {
effort 73min
allocate cruncher
depends !t_145 { gapduration 29min }
}
task t_147 "Link 147" {
effort 73min
allocate cruncher
depends !t_146 { gapduration 29min }
}
task t_148 "Link 148" {
effort 73min
allocate cruncher
depends !t_147 { gapduration 29min }
}
task t_149 "Link 149" {
effort 73min
allocate cruncher
depends !t_148 { gapduration 29min }
}
task t_150 "Link 150" {
effort 73min
allocate cruncher
depends !t_149 { gapduration 29min }
}
task t_151 "Link 151" {
effort 73min
allocate cruncher
depends !t_150 { gapduration 29min }
}
task t_152 "Link 152" {
effort 73min
allocate cruncher
depends !t_151 { gapduration 29min }
}
task t_153 "Link 153" {
effort 73min
allocate cruncher
depends !t_152 { gapduration 29min }
}
task t_154 "Link 154" {
effort 73min
allocate cruncher
depends !t_153 { gapduration 29min }
}
task t_155 "Link 155" {
effort 73min
allocate cruncher
depends !t_154 { gapduration 29min }
}
task t_156 "Link 156" {
effort 73min
allocate cruncher
depends !t_155 { gapduration 29min }
}
task t_157 "Link 157" {
effort 73min
allocate cruncher
depends !t_156 { gapduration 29min }
}
task t_158 "Link 158" {
effort 73min
allocate cruncher
depends !t_157 { gapduration 29min }
}
task t_159 "Link 159" {
effort 73min
allocate cruncher
depends !t_158 { gapduration 29min }
}
task t_160 "Link 160" {
effort 73min
allocate cruncher
depends !t_159 { gapduration 29min }
}
task t_161 "Link 161" {
effort 73min
allocate cruncher
depends !t_160 { gapduration 29min }
}
task t_162 "Link 162" {
effort 73min
allocate cruncher
depends !t_161 { gapduration 29min }
}
task t_163 "Link 163" {
effort 73min
allocate cruncher
depends !t_162 { gapduration 29min }
}
task t_164 "Link 164" {
effort 73min
allocate cruncher
depends !t_163 { gapduration 29min }
}
task t_165 "Link 165" {
effort 73min
allocate cruncher
depends !t_164 { gapduration 29min }
}
task t_166 "Link 166" {
effort 73min
allocate cruncher
depends !t_165 { gapduration 29min }
}
task t_167 "Link 167" {
effort 73min
allocate cruncher
depends !t_166 { gapduration 29min }
}
task t_168 "Link 168" {
effort 73min
allocate cruncher
depends !t_167 { gapduration 29min }
}
task t_169 "Link 169" {
effort 73min
allocate cruncher
depends !t_168 { gapduration 29min }
}
task t_170 "Link 170" {
effort 73min
allocate cruncher
depends !t_169 { gapduration 29min }
}
task t_171 "Link 171" {
effort 73min
allocate cruncher
depends !t_170 { gapduration 29min }
}
task t_172 "Link 172" {
effort 73min
allocate cruncher
depends !t_171 { gapduration 29min }
}
task t_173 "Link 173" {
effort 73min
allocate cruncher
depends !t_172 { gapduration 29min }
}
task t_174 "Link 174" {
effort 73min
allocate cruncher
depends !t_173 { gapduration 29min }
}
task t_175 "Link 175" {
effort 73min
allocate cruncher
depends !t_174 { gapduration 29min }
}
task t_176 "Link 176" {
effort 73min
allocate cruncher
depends !t_175 { gapduration 29min }
}
task t_177 "Link 177" {
effort 73min
allocate cruncher
depends !t_176 { gapduration 29min }
}
task t_178 "Link 178" {
effort 73min
allocate cruncher
depends !t_177 { gapduration 29min }
}
task t_179 "Link 179" {
effort 73min
allocate cruncher
depends !t_178 { gapduration 29min }
}
task t_180 "Link 180" {
effort 73min
allocate cruncher
depends !t_179 { gapduration 29min }
}
task t_181 "Link 181" {
effort 73min
allocate cruncher
depends !t_180 { gapduration 29min }
}
task t_182 "Link 182" {
effort 73min
allocate cruncher
depends !t_181 { gapduration 29min }
}
task t_183 "Link 183" {
effort 73min
allocate cruncher
depends !t_182 { gapduration 29min }
}
task t_184 "Link 184" {
effort 73min
allocate cruncher
depends !t_183 { gapduration 29min }
}
task t_185 "Link 185" {
effort 73min
allocate cruncher
depends !t_184 { gapduration 29min }
}
task t_186 "Link 186" {
effort 73min
allocate cruncher
depends !t_185 { gapduration 29min }
}
task t_187 "Link 187" {
effort 73min
allocate cruncher
depends !t_186 { gapduration 29min }
}
task t_188 "Link 188" {
effort 73min
allocate cruncher
depends !t_187 { gapduration 29min }
}
task t_189 "Link 189" {
effort 73min
allocate cruncher
depends !t_188 { gapduration 29min }
}
task t_190 "Link 190" {
effort 73min
allocate cruncher
depends !t_189 { gapduration 29min }
}
task t_191 "Link 191" {
effort 73min
allocate cruncher
depends !t_190 { gapduration 29min }
}
task t_192 "Link 192" {
effort 73min
allocate cruncher
depends !t_191 { gapduration 29min }
}
task t_193 "Link 193" {
effort 73min
allocate cruncher
depends !t_192 { gapduration 29min }
}
task t_194 "Link 194" {
effort 73min
allocate cruncher
depends !t_193 { gapduration 29min }
}
task t_195 "Link 195" {
effort 73min
allocate cruncher
depends !t_194 { gapduration 29min }
}
task t_196 "Link 196" {
effort 73min
allocate cruncher
depends !t_195 { gapduration 29min }
}
task t_197 "Link 197" {
effort 73min
allocate cruncher
depends !t_196 { gapduration 29min }
}
task t_198 "Link 198" {
effort 73min
allocate cruncher
depends !t_197 { gapduration 29min }
}
task t_199 "Link 199" {
effort 73min
allocate cruncher
depends !t_198 { gapduration 29min }
}
task t_200 "Link 200" {
effort 73min
allocate cruncher
depends !t_199 { gapduration 29min }
}
task t_201 "Link 201" {
effort 73min
allocate cruncher
depends !t_200 { gapduration 29min }
}
task t_202 "Link 202" {
effort 73min
allocate cruncher
depends !t_201 { gapduration 29min }
}
task t_203 "Link 203" {
effort 73min
allocate cruncher
depends !t_202 { gapduration 29min }
}
task t_204 "Link 204" {
effort 73min
allocate cruncher
depends !t_203 { gapduration 29min }
}
task t_205 "Link 205" {
effort 73min
allocate cruncher
depends !t_204 { gapduration 29min }
}
task t_206 "Link 206" {
effort 73min
allocate cruncher
depends !t_205 { gapduration 29min }
}
task t_207 "Link 207" {
effort 73min
allocate cruncher
depends !t_206 { gapduration 29min }
}
task t_208 "Link 208" {
effort 73min
allocate cruncher
depends !t_207 { gapduration 29min }
}
task t_209 "Link 209" {
effort 73min
allocate cruncher
depends !t_208 { gapduration 29min }
}
task t_210 "Link 210" {
effort 73min
allocate cruncher
depends !t_209 { gapduration 29min }
}
task t_211 "Link 211" {
effort 73min
allocate cruncher
depends !t_210 { gapduration 29min }
}
task t_212 "Link 212" {
effort 73min
allocate cruncher
depends !t_211 { gapduration 29min }
}
task t_213 "Link 213" {
effort 73min
allocate cruncher
depends !t_212 { gapduration 29min }
}
task t_214 "Link 214" {
effort 73min
allocate cruncher
depends !t_213 { gapduration 29min }
}
task t_215 "Link 215" {
effort 73min
allocate cruncher
depends !t_214 { gapduration 29min }
}
task t_216 "Link 216" {
effort 73min
allocate cruncher
depends !t_215 { gapduration 29min }
}
task t_217 "Link 217" {
effort 73min
allocate cruncher
depends !t_216 { gapduration 29min }
}
task t_218 "Link 218" {
effort 73min
allocate cruncher
depends !t_217 { gapduration 29min }
}
task t_219 "Link 219" {
effort 73min
allocate cruncher
depends !t_218 { gapduration 29min }
}
task t_220 "Link 220" {
effort 73min
allocate cruncher
depends !t_219 { gapduration 29min }
}
task t_221 "Link 221" {
effort 73min
allocate cruncher
depends !t_220 { gapduration 29min }
}
task t_222 "Link 222" {
effort 73min
allocate cruncher
depends !t_221 { gapduration 29min }
}
task t_223 "Link 223" {
effort 73min
allocate cruncher
depends !t_222 { gapduration 29min }
}
task t_224 "Link 224" {
effort 73min
allocate cruncher
depends !t_223 { gapduration 29min }
}
task t_225 "Link 225" {
effort 73min
allocate cruncher
depends !t_224 { gapduration 29min }
}
task t_226 "Link 226" {
effort 73min
allocate cruncher
depends !t_225 { gapduration 29min }
}
task t_227 "Link 227" {
effort 73min
allocate cruncher
depends !t_226 { gapduration 29min }
}
task t_228 "Link 228" {
effort 73min
allocate cruncher
depends !t_227 { gapduration 29min }
}
task t_229 "Link 229" {
effort 73min
allocate cruncher
depends !t_228 { gapduration 29min }
}
task t_230 "Link 230" {
effort 73min
allocate cruncher
depends !t_229 { gapduration 29min }
}
task t_231 "Link 231" {
effort 73min
allocate cruncher
depends !t_230 { gapduration 29min }
}
task t_232 "Link 232" {
effort 73min
allocate cruncher
depends !t_231 { gapduration 29min }
}
task t_233 "Link 233" {
effort 73min
allocate cruncher
depends !t_232 { gapduration 29min }
}
task t_234 "Link 234" {
effort 73min
allocate cruncher
depends !t_233 { gapduration 29min }
}
task t_235 "Link 235" {
effort 73min
allocate cruncher
depends !t_234 { gapduration 29min }
}
task t_236 "Link 236" {
effort 73min
allocate cruncher
depends !t_235 { gapduration 29min }
}
task t_237 "Link 237" {
effort 73min
allocate cruncher
depends !t_236 { gapduration 29min }
}
task t_238 "Link 238" {
effort 73min
allocate cruncher
depends !t_237 { gapduration 29min }
}
task t_239 "Link 239" {
effort 73min
allocate cruncher
depends !t_238 { gapduration 29min }
}
task t_240 "Link 240" {
effort 73min
allocate cruncher
depends !t_239 { gapduration 29min }
}
task t_241 "Link 241" {
effort 73min
allocate cruncher
depends !t_240 { gapduration 29min }
}
task t_242 "Link 242" {
effort 73min
allocate cruncher
depends !t_241 { gapduration 29min }
}
task t_243 "Link 243" {
effort 73min
allocate cruncher
depends !t_242 { gapduration 29min }
}
task t_244 "Link 244" {
effort 73min
allocate cruncher
depends !t_243 { gapduration 29min }
}
task t_245 "Link 245" {
effort 73min
allocate cruncher
depends !t_244 { gapduration 29min }
}
task t_246 "Link 246" {
effort 73min
allocate cruncher
depends !t_245 { gapduration 29min }
}
task t_247 "Link 247" {
effort 73min
allocate cruncher
depends !t_246 { gapduration 29min }
}
task t_248 "Link 248" {
effort 73min
allocate cruncher
depends !t_247 { gapduration 29min }
}
task t_249 "Link 249" {
effort 73min
allocate cruncher
depends !t_248 { gapduration 29min }
}
task t_250 "Link 250" {
effort 73min
allocate cruncher
depends !t_249 { gapduration 29min }
}
task t_251 "Link 251" {
effort 73min
allocate cruncher
depends !t_250 { gapduration 29min }
}
task t_252 "Link 252" {
effort 73min
allocate cruncher
depends !t_251 { gapduration 29min }
}
task t_253 "Link 253" {
effort 73min
allocate cruncher
depends !t_252 { gapduration 29min }
}
task t_254 "Link 254" {
effort 73min
allocate cruncher
depends !t_253 { gapduration 29min }
}
task t_255 "Link 255" {
effort 73min
allocate cruncher
depends !t_254 { gapduration 29min }
}
task t_256 "Link 256" {
effort 73min
allocate cruncher
depends !t_255 { gapduration 29min }
}
task t_257 "Link 257" {
effort 73min
allocate cruncher
depends !t_256 { gapduration 29min }
}
task t_258 "Link 258" {
effort 73min
allocate cruncher
depends !t_257 { gapduration 29min }
}
task t_259 "Link 259" {
effort 73min
allocate cruncher
depends !t_258 { gapduration 29min }
}
task t_260 "Link 260" {
effort 73min
allocate cruncher
depends !t_259 { gapduration 29min }
}
task t_261 "Link 261" {
effort 73min
allocate cruncher
depends !t_260 { gapduration 29min }
}
task t_262 "Link 262" {
effort 73min
allocate cruncher
depends !t_261 { gapduration 29min }
}
task t_263 "Link 263" {
effort 73min
allocate cruncher
depends !t_262 { gapduration 29min }
}
task t_264 "Link 264" {
effort 73min
allocate cruncher
depends !t_263 { gapduration 29min }
}
task t_265 "Link 265" {
effort 73min
allocate cruncher
depends !t_264 { gapduration 29min }
}
task t_266 "Link 266" {
effort 73min
allocate cruncher
depends !t_265 { gapduration 29min }
}
task t_267 "Link 267" {
effort 73min
allocate cruncher
depends !t_266 { gapduration 29min }
}
task t_268 "Link 268" {
effort 73min
allocate cruncher
depends !t_267 { gapduration 29min }
}
task t_269 "Link 269" {
effort 73min
allocate cruncher
depends !t_268 { gapduration 29min }
}
task t_270 "Link 270" {
effort 73min
allocate cruncher
depends !t_269 { gapduration 29min }
}
task t_271 "Link 271" {
effort 73min
allocate cruncher
depends !t_270 { gapduration 29min }
}
task t_272 "Link 272" {
effort 73min
allocate cruncher
depends !t_271 { gapduration 29min }
}
task t_273 "Link 273" {
effort 73min
allocate cruncher
depends !t_272 { gapduration 29min }
}
task t_274 "Link 274" {
effort 73min
allocate cruncher
depends !t_273 { gapduration 29min }
}
task t_275 "Link 275" {
effort 73min
allocate cruncher
depends !t_274 { gapduration 29min }
}
task t_276 "Link 276" {
effort 73min
allocate cruncher
depends !t_275 { gapduration 29min }
}
task t_277 "Link 277" {
effort 73min
allocate cruncher
depends !t_276 { gapduration 29min }
}
task t_278 "Link 278" {
effort 73min
allocate cruncher
depends !t_277 { gapduration 29min }
}
task t_279 "Link 279" {
effort 73min
allocate cruncher
depends !t_278 { gapduration 29min }
}
task t_280 "Link 280" {
effort 73min
allocate cruncher
depends !t_279 { gapduration 29min }
}
task t_281 "Link 281" {
effort 73min
allocate cruncher
depends !t_280 { gapduration 29min }
}
task t_282 "Link 282" {
effort 73min
allocate cruncher
depends !t_281 { gapduration 29min }
}
task t_283 "Link 283" {
effort 73min
allocate cruncher
depends !t_282 { gapduration 29min }
}
task t_284 "Link 284" {
effort 73min
allocate cruncher
depends !t_283 { gapduration 29min }
}
task t_285 "Link 285" {
effort 73min
allocate cruncher
depends !t_284 { gapduration 29min }
}
task t_286 "Link 286" {
effort 73min
allocate cruncher
depends !t_285 { gapduration 29min }
}
task t_287 "Link 287" {
effort 73min
allocate cruncher
depends !t_286 { gapduration 29min }
}
task t_288 "Link 288" {
effort 73min
allocate cruncher
depends !t_287 { gapduration 29min }
}
task t_289 "Link 289" {
effort 73min
allocate cruncher
depends !t_288 { gapduration 29min }
}
task t_290 "Link 290" {
effort 73min
allocate cruncher
depends !t_289 { gapduration 29min }
}
task t_291 "Link 291" {
effort 73min
allocate cruncher
depends !t_290 { gapduration 29min }
}
task t_292 "Link 292" {
effort 73min
allocate cruncher
depends !t_291 { gapduration 29min }
}
task t_293 "Link 293" {
effort 73min
allocate cruncher
depends !t_292 { gapduration 29min }
}
task t_294 "Link 294" {
effort 73min
allocate cruncher
depends !t_293 { gapduration 29min }
}
task t_295 "Link 295" {
effort 73min
allocate cruncher
depends !t_294 { gapduration 29min }
}
task t_296 "Link 296" {
effort 73min
allocate cruncher
depends !t_295 { gapduration 29min }
}
task t_297 "Link 297" {
effort 73min
allocate cruncher
depends !t_296 { gapduration 29min }
}
task t_298 "Link 298" {
effort 73min
allocate cruncher
depends !t_297 { gapduration 29min }
}
task t_299 "Link 299" {
effort 73min
allocate cruncher
depends !t_298 { gapduration 29min }
}
task t_300 "Link 300" {
effort 73min
allocate cruncher
depends !t_299 { gapduration 29min }
}
task t_301 "Link 301" {
effort 73min
allocate cruncher
depends !t_300 { gapduration 29min }
}
task t_302 "Link 302" {
effort 73min
allocate cruncher
depends !t_301 { gapduration 29min }
}
task t_303 "Link 303" {
effort 73min
allocate cruncher
depends !t_302 { gapduration 29min }
}
task t_304 "Link 304" {
effort 73min
allocate cruncher
depends !t_303 { gapduration 29min }
}
task t_305 "Link 305" {
effort 73min
allocate cruncher
depends !t_304 { gapduration 29min }
}
task t_306 "Link 306" {
effort 73min
allocate cruncher
depends !t_305 { gapduration 29min }
}
task t_307 "Link 307" {
effort 73min
allocate cruncher
depends !t_306 { gapduration 29min }
}
task t_308 "Link 308" {
effort 73min
allocate cruncher
depends !t_307 { gapduration 29min }
}
task t_309 "Link 309" {
effort 73min
allocate cruncher
depends !t_308 { gapduration 29min }
}
task t_310 "Link 310" {
effort 73min
allocate cruncher
depends !t_309 { gapduration 29min }
}
task t_311 "Link 311" {
effort 73min
allocate cruncher
depends !t_310 { gapduration 29min }
}
task t_312 "Link 312" {
effort 73min
allocate cruncher
depends !t_311 { gapduration 29min }
}
task t_313 "Link 313" {
effort 73min
allocate cruncher
depends !t_312 { gapduration 29min }
}
task t_314 "Link 314" {
effort 73min
allocate cruncher
depends !t_313 { gapduration 29min }
}
task t_315 "Link 315" {
effort 73min
allocate cruncher
depends !t_314 { gapduration 29min }
}
task t_316 "Link 316" {
effort 73min
allocate cruncher
depends !t_315 { gapduration 29min }
}
task t_317 "Link 317" {
effort 73min
allocate cruncher
depends !t_316 { gapduration 29min }
}
task t_318 "Link 318" {
effort 73min
allocate cruncher
depends !t_317 { gapduration 29min }
}
task t_319 "Link 319" {
effort 73min
allocate cruncher
depends !t_318 { gapduration 29min }
}
task t_320 "Link 320" {
effort 73min
allocate cruncher
depends !t_319 { gapduration 29min }
}
task t_321 "Link 321" {
effort 73min
allocate cruncher
depends !t_320 { gapduration 29min }
}
task t_322 "Link 322" {
effort 73min
allocate cruncher
depends !t_321 { gapduration 29min }
}
task t_323 "Link 323" {
effort 73min
allocate cruncher
depends !t_322 { gapduration 29min }
}
task t_324 "Link 324" {
effort 73min
allocate cruncher
depends !t_323 { gapduration 29min }
}
task t_325 "Link 325" {
effort 73min
allocate cruncher
depends !t_324 { gapduration 29min }
}
task t_326 "Link 326" {
effort 73min
allocate cruncher
depends !t_325 { gapduration 29min }
}
task t_327 "Link 327" {
effort 73min
allocate cruncher
depends !t_326 { gapduration 29min }
}
task t_328 "Link 328" {
effort 73min
allocate cruncher
depends !t_327 { gapduration 29min }
}
task t_329 "Link 329" {
effort 73min
allocate cruncher
depends !t_328 { gapduration 29min }
}
task t_330 "Link 330" {
effort 73min
allocate cruncher
depends !t_329 { gapduration 29min }
}
task t_331 "Link 331" {
effort 73min
allocate cruncher
depends !t_330 { gapduration 29min }
}
task t_332 "Link 332" {
effort 73min
allocate cruncher
depends !t_331 { gapduration 29min }
}
task t_333 "Link 333" {
effort 73min
allocate cruncher
depends !t_332 { gapduration 29min }
}
task t_334 "Link 334" {
effort 73min
allocate cruncher
depends !t_333 { gapduration 29min }
}
task t_335 "Link 335" {
effort 73min
allocate cruncher
depends !t_334 { gapduration 29min }
}
task t_336 "Link 336" {
effort 73min
allocate cruncher
depends !t_335 { gapduration 29min }
}
task t_337 "Link 337" {
effort 73min
allocate cruncher
depends !t_336 { gapduration 29min }
}
task t_338 "Link 338" {
effort 73min
allocate cruncher
depends !t_337 { gapduration 29min }
}
task t_339 "Link 339" {
effort 73min
allocate cruncher
depends !t_338 { gapduration 29min }
}
task t_340 "Link 340" {
effort 73min
allocate cruncher
depends !t_339 { gapduration 29min }
}
task t_341 "Link 341" {
effort 73min
allocate cruncher
depends !t_340 { gapduration 29min }
}
task t_342 "Link 342" {
effort 73min
allocate cruncher
depends !t_341 { gapduration 29min }
}
task t_343 "Link 343" {
effort 73min
allocate cruncher
depends !t_342 { gapduration 29min }
}
task t_344 "Link 344" {
effort 73min
allocate cruncher
depends !t_343 { gapduration 29min }
}
task t_345 "Link 345" {
effort 73min
allocate cruncher
depends !t_344 { gapduration 29min }
}
task t_346 "Link 346" {
effort 73min
allocate cruncher
depends !t_345 { gapduration 29min }
}
task t_347 "Link 347" {
effort 73min
allocate cruncher
depends !t_346 { gapduration 29min }
}
task t_348 "Link 348" {
effort 73min
allocate cruncher
depends !t_347 { gapduration 29min }
}
task t_349 "Link 349" {
effort 73min
allocate cruncher
depends !t_348 { gapduration 29min }
}
task t_350 "Link 350" {
effort 73min
allocate cruncher
depends !t_349 { gapduration 29min }
}
task t_351 "Link 351" {
effort 73min
allocate cruncher
depends !t_350 { gapduration 29min }
}
task t_352 "Link 352" {
effort 73min
allocate cruncher
depends !t_351 { gapduration 29min }
}
task t_353 "Link 353" {
effort 73min
allocate cruncher
depends !t_352 { gapduration 29min }
}
task t_354 "Link 354" {
effort 73min
allocate cruncher
depends !t_353 { gapduration 29min }
}
task t_355 "Link 355" {
effort 73min
allocate cruncher
depends !t_354 { gapduration 29min }
}
task t_356 "Link 356" {
effort 73min
allocate cruncher
depends !t_355 { gapduration 29min }
}
task t_357 "Link 357" {
effort 73min
allocate cruncher
depends !t_356 { gapduration 29min }
}
task t_358 "Link 358" {
effort 73min
allocate cruncher
depends !t_357 { gapduration 29min }
}
task t_359 "Link 359" {
effort 73min
allocate cruncher
depends !t_358 { gapduration 29min }
}
task t_360 "Link 360" {
effort 73min
allocate cruncher
depends !t_359 { gapduration 29min }
}
task t_361 "Link 361" {
effort 73min
allocate cruncher
depends !t_360 { gapduration 29min }
}
task t_362 "Link 362" {
effort 73min
allocate cruncher
depends !t_361 { gapduration 29min }
}
task t_363 "Link 363" {
effort 73min
allocate cruncher
depends !t_362 { gapduration 29min }
}
task t_364 "Link 364" {
effort 73min
allocate cruncher
depends !t_363 { gapduration 29min }
}
task t_365 "Link 365" {
effort 73min
allocate cruncher
depends !t_364 { gapduration 29min }
}
task t_366 "Link 366" {
effort 73min
allocate cruncher
depends !t_365 { gapduration 29min }
}
task t_367 "Link 367" {
effort 73min
allocate cruncher
depends !t_366 { gapduration 29min }
}
task t_368 "Link 368" {
effort 73min
allocate cruncher
depends !t_367 { gapduration 29min }
}
task t_369 "Link 369" {
effort 73min
allocate cruncher
depends !t_368 { gapduration 29min }
}
task t_370 "Link 370" {
effort 73min
allocate cruncher
depends !t_369 { gapduration 29min }
}
task t_371 "Link 371" {
effort 73min
allocate cruncher
depends !t_370 { gapduration 29min }
}
task t_372 "Link 372" {
effort 73min
allocate cruncher
depends !t_371 { gapduration 29min }
}
task t_373 "Link 373" {
effort 73min
allocate cruncher
depends !t_372 { gapduration 29min }
}
task t_374 "Link 374" {
effort 73min
allocate cruncher
depends !t_373 { gapduration 29min }
}
task t_375 "Link 375" {
effort 73min
allocate cruncher
depends !t_374 { gapduration 29min }
}
task t_376 "Link 376" {
effort 73min
allocate cruncher
depends !t_375 { gapduration 29min }
}
task t_377 "Link 377" {
effort 73min
allocate cruncher
depends !t_376 { gapduration 29min }
}
task t_378 "Link 378" {
effort 73min
allocate cruncher
depends !t_377 { gapduration 29min }
}
task t_379 "Link 379" {
effort 73min
allocate cruncher
depends !t_378 { gapduration 29min }
}
task t_380 "Link 380" {
effort 73min
allocate cruncher
depends !t_379 { gapduration 29min }
}
task t_381 "Link 381" {
effort 73min
allocate cruncher
depends !t_380 { gapduration 29min }
}
task t_382 "Link 382" {
effort 73min
allocate cruncher
depends !t_381 { gapduration 29min }
}
task t_383 "Link 383" {
effort 73min
allocate cruncher
depends !t_382 { gapduration 29min }
}
task t_384 "Link 384" {
effort 73min
allocate cruncher
depends !t_383 { gapduration 29min }
}
task t_385 "Link 385" {
effort 73min
allocate cruncher
depends !t_384 { gapduration 29min }
}
task t_386 "Link 386" {
effort 73min
allocate cruncher
depends !t_385 { gapduration 29min }
}
task t_387 "Link 387" {
effort 73min
allocate cruncher
depends !t_386 { gapduration 29min }
}
task t_388 "Link 388" {
effort 73min
allocate cruncher
depends !t_387 { gapduration 29min }
}
task t_389 "Link 389" {
effort 73min
allocate cruncher
depends !t_388 { gapduration 29min }
}
task t_390 "Link 390" {
effort 73min
allocate cruncher
depends !t_389 { gapduration 29min }
}
task t_391 "Link 391" {
effort 73min
allocate cruncher
depends !t_390 { gapduration 29min }
}
task t_392 "Link 392" {
effort 73min
allocate cruncher
depends !t_391 { gapduration 29min }
}
task t_393 "Link 393" {
effort 73min
allocate cruncher
depends !t_392 { gapduration 29min }
}
task t_394 "Link 394" {
effort 73min
allocate cruncher
depends !t_393 { gapduration 29min }
}
task t_395 "Link 395" {
effort 73min
allocate cruncher
depends !t_394 { gapduration 29min }
}
task t_396 "Link 396" {
effort 73min
allocate cruncher
depends !t_395 { gapduration 29min }
}
task t_397 "Link 397" {
effort 73min
allocate cruncher
depends !t_396 { gapduration 29min }
}
task t_398 "Link 398" {
effort 73min
allocate cruncher
depends !t_397 { gapduration 29min }
}
task t_399 "Link 399" {
effort 73min
allocate cruncher
depends !t_398 { gapduration 29min }
}
task t_400 "Link 400" {
effort 73min
allocate cruncher
depends !t_399 { gapduration 29min }
}
task t_401 "Link 401" {
effort 73min
allocate cruncher
depends !t_400 { gapduration 29min }
}
task t_402 "Link 402" {
effort 73min
allocate cruncher
depends !t_401 { gapduration 29min }
}
task t_403 "Link 403" {
effort 73min
allocate cruncher
depends !t_402 { gapduration 29min }
}
task t_404 "Link 404" {
effort 73min
allocate cruncher
depends !t_403 { gapduration 29min }
}
task t_405 "Link 405" {
effort 73min
allocate cruncher
depends !t_404 { gapduration 29min }
}
task t_406 "Link 406" {
effort 73min
allocate cruncher
depends !t_405 { gapduration 29min }
}
task t_407 "Link 407" {
effort 73min
allocate cruncher
depends !t_406 { gapduration 29min }
}
task t_408 "Link 408" {
effort 73min
allocate cruncher
depends !t_407 { gapduration 29min }
}
task t_409 "Link 409" {
effort 73min
allocate cruncher
depends !t_408 { gapduration 29min }
}
task t_410 "Link 410" {
effort 73min
allocate cruncher
depends !t_409 { gapduration 29min }
}
task t_411 "Link 411" {
effort 73min
allocate cruncher
depends !t_410 { gapduration 29min }
}
task t_412 "Link 412" {
effort 73min
allocate cruncher
depends !t_411 { gapduration 29min }
}
task t_413 "Link 413" {
effort 73min
allocate cruncher
depends !t_412 { gapduration 29min }
}
task t_414 "Link 414" {
effort 73min
allocate cruncher
depends !t_413 { gapduration 29min }
}
task t_415 "Link 415" {
effort 73min
allocate cruncher
depends !t_414 { gapduration 29min }
}
task t_416 "Link 416" {
effort 73min
allocate cruncher
depends !t_415 { gapduration 29min }
}
task t_417 "Link 417" {
effort 73min
allocate cruncher
depends !t_416 { gapduration 29min }
}
task t_418 "Link 418" {
effort 73min
allocate cruncher
depends !t_417 { gapduration 29min }
}
task t_419 "Link 419" {
effort 73min
allocate cruncher
depends !t_418 { gapduration 29min }
}
task t_420 "Link 420" {
effort 73min
allocate cruncher
depends !t_419 { gapduration 29min }
}
task t_421 "Link 421" {
effort 73min
allocate cruncher
depends !t_420 { gapduration 29min }
}
task t_422 "Link 422" {
effort 73min
allocate cruncher
depends !t_421 { gapduration 29min }
}
task t_423 "Link 423" {
effort 73min
allocate cruncher
depends !t_422 { gapduration 29min }
}
task t_424 "Link 424" {
effort 73min
allocate cruncher
depends !t_423 { gapduration 29min }
}
task t_425 "Link 425" {
effort 73min
allocate cruncher
depends !t_424 { gapduration 29min }
}
task t_426 "Link 426" {
effort 73min
allocate cruncher
depends !t_425 { gapduration 29min }
}
task t_427 "Link 427" {
effort 73min
allocate cruncher
depends !t_426 { gapduration 29min }
}
task t_428 "Link 428" {
effort 73min
allocate cruncher
depends !t_427 { gapduration 29min }
}
task t_429 "Link 429" {
effort 73min
allocate cruncher
depends !t_428 { gapduration 29min }
}
task t_430 "Link 430" {
effort 73min
allocate cruncher
depends !t_429 { gapduration 29min }
}
task t_431 "Link 431" {
effort 73min
allocate cruncher
depends !t_430 { gapduration 29min }
}
task t_432 "Link 432" {
effort 73min
allocate cruncher
depends !t_431 { gapduration 29min }
}
task t_433 "Link 433" {
effort 73min
allocate cruncher
depends !t_432 { gapduration 29min }
}
task t_434 "Link 434" {
effort 73min
allocate cruncher
depends !t_433 { gapduration 29min }
}
task t_435 "Link 435" {
effort 73min
allocate cruncher
depends !t_434 { gapduration 29min }
}
task t_436 "Link 436" {
effort 73min
allocate cruncher
depends !t_435 { gapduration 29min }
}
task t_437 "Link 437" {
effort 73min
allocate cruncher
depends !t_436 { gapduration 29min }
}
task t_438 "Link 438" {
effort 73min
allocate cruncher
depends !t_437 { gapduration 29min }
}
task t_439 "Link 439" {
effort 73min
allocate cruncher
depends !t_438 { gapduration 29min }
}
task t_440 "Link 440" {
effort 73min
allocate cruncher
depends !t_439 { gapduration 29min }
}
task t_441 "Link 441" {
effort 73min
allocate cruncher
depends !t_440 { gapduration 29min }
}
task t_442 "Link 442" {
effort 73min
allocate cruncher
depends !t_441 { gapduration 29min }
}
task t_443 "Link 443" {
effort 73min
allocate cruncher
depends !t_442 { gapduration 29min }
}
task t_444 "Link 444" {
effort 73min
allocate cruncher
depends !t_443 { gapduration 29min }
}
task t_445 "Link 445" {
effort 73min
allocate cruncher
depends !t_444 { gapduration 29min }
}
task t_446 "Link 446" {
effort 73min
allocate cruncher
depends !t_445 { gapduration 29min }
}
task t_447 "Link 447" {
effort 73min
allocate cruncher
depends !t_446 { gapduration 29min }
}
task t_448 "Link 448" {
effort 73min
allocate cruncher
depends !t_447 { gapduration 29min }
}
task t_449 "Link 449" {
effort 73min
allocate cruncher
depends !t_448 { gapduration 29min }
}
task t_450 "Link 450" {
effort 73min
allocate cruncher
depends !t_449 { gapduration 29min }
}
task t_451 "Link 451" {
effort 73min
allocate cruncher
depends !t_450 { gapduration 29min }
}
task t_452 "Link 452" {
effort 73min
allocate cruncher
depends !t_451 { gapduration 29min }
}
task t_453 "Link 453" {
effort 73min
allocate cruncher
depends !t_452 { gapduration 29min }
}
task t_454 "Link 454" {
effort 73min
allocate cruncher
depends !t_453 { gapduration 29min }
}
task t_455 "Link 455" {
effort 73min
allocate cruncher
depends !t_454 { gapduration 29min }
}
task t_456 "Link 456" {
effort 73min
allocate cruncher
depends !t_455 { gapduration 29min }
}
task t_457 "Link 457" {
effort 73min
allocate cruncher
depends !t_456 { gapduration 29min }
}
task t_458 "Link 458" {
effort 73min
allocate cruncher
depends !t_457 { gapduration 29min }
}
task t_459 "Link 459" {
effort 73min
allocate cruncher
depends !t_458 { gapduration 29min }
}
task t_460 "Link 460" {
effort 73min
allocate cruncher
depends !t_459 { gapduration 29min }
}
task t_461 "Link 461" {
effort 73min
allocate cruncher
depends !t_460 { gapduration 29min }
}
task t_462 "Link 462" {
effort 73min
allocate cruncher
depends !t_461 { gapduration 29min }
}
task t_463 "Link 463" {
effort 73min
allocate cruncher
depends !t_462 { gapduration 29min }
}
task t_464 "Link 464" {
effort 73min
allocate cruncher
depends !t_463 { gapduration 29min }
}
task t_465 "Link 465" {
effort 73min
allocate cruncher
depends !t_464 { gapduration 29min }
}
task t_466 "Link 466" {
effort 73min
allocate cruncher
depends !t_465 { gapduration 29min }
}
task t_467 "Link 467" {
effort 73min
allocate cruncher
depends !t_466 { gapduration 29min }
}
task t_468 "Link 468" {
effort 73min
allocate cruncher
depends !t_467 { gapduration 29min }
}
task t_469 "Link 469" {
effort 73min
allocate cruncher
depends !t_468 { gapduration 29min }
}
task t_470 "Link 470" {
effort 73min
allocate cruncher
depends !t_469 { gapduration 29min }
}
task t_471 "Link 471" {
effort 73min
allocate cruncher
depends !t_470 { gapduration 29min }
}
task t_472 "Link 472" {
effort 73min
allocate cruncher
depends !t_471 { gapduration 29min }
}
task t_473 "Link 473" {
effort 73min
allocate cruncher
depends !t_472 { gapduration 29min }
}
task t_474 "Link 474" {
effort 73min
allocate cruncher
depends !t_473 { gapduration 29min }
}
task t_475 "Link 475" {
effort 73min
allocate cruncher
depends !t_474 { gapduration 29min }
}
task t_476 "Link 476" {
effort 73min
allocate cruncher
depends !t_475 { gapduration 29min }
}
task t_477 "Link 477" {
effort 73min
allocate cruncher
depends !t_476 { gapduration 29min }
}
task t_478 "Link 478" {
effort 73min
allocate cruncher
depends !t_477 { gapduration 29min }
}
task t_479 "Link 479" {
effort 73min
allocate cruncher
depends !t_478 { gapduration 29min }
}
task t_480 "Link 480" {
effort 73min
allocate cruncher
depends !t_479 { gapduration 29min }
}
task t_481 "Link 481" {
effort 73min
allocate cruncher
depends !t_480 { gapduration 29min }
}
task t_482 "Link 482" {
effort 73min
allocate cruncher
depends !t_481 { gapduration 29min }
}
task t_483 "Link 483" {
effort 73min
allocate cruncher
depends !t_482 { gapduration 29min }
}
task t_484 "Link 484" {
effort 73min
allocate cruncher
depends !t_483 { gapduration 29min }
}
task t_485 "Link 485" {
effort 73min
allocate cruncher
depends !t_484 { gapduration 29min }
}
task t_486 "Link 486" {
effort 73min
allocate cruncher
depends !t_485 { gapduration 29min }
}
task t_487 "Link 487" {
effort 73min
allocate cruncher
depends !t_486 { gapduration 29min }
}
task t_488 "Link 488" {
effort 73min
allocate cruncher
depends !t_487 { gapduration 29min }
}
task t_489 "Link 489" {
effort 73min
allocate cruncher
depends !t_488 { gapduration 29min }
}
task t_490 "Link 490" {
effort 73min
allocate cruncher
depends !t_489 { gapduration 29min }
}
task t_491 "Link 491" {
effort 73min
allocate cruncher
depends !t_490 { gapduration 29min }
}
task t_492 "Link 492" {
effort 73min
allocate cruncher
depends !t_491 { gapduration 29min }
}
task t_493 "Link 493" {
effort 73min
allocate cruncher
depends !t_492 { gapduration 29min }
}
task t_494 "Link 494" {
effort 73min
allocate cruncher
depends !t_493 { gapduration 29min }
}
task t_495 "Link 495" {
effort 73min
allocate cruncher
depends !t_494 { gapduration 29min }
}
task t_496 "Link 496" {
effort 73min
allocate cruncher
depends !t_495 { gapduration 29min }
}
task t_497 "Link 497" {
effort 73min
allocate cruncher
depends !t_496 { gapduration 29min }
}
task t_498 "Link 498" {
effort 73min
allocate cruncher
depends !t_497 { gapduration 29min }
}
task t_499 "Link 499" {
effort 73min
allocate cruncher
depends !t_498 { gapduration 29min }
}
task t_500 "Link 500" {
effort 73min
allocate cruncher
depends !t_499 { gapduration 29min }
}
}
taskreport math_check "math_check" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
leaftasksonly true
}
Schedule
Id,Start,End
chain.t_001,2024-02-28-08:13,2024-02-28-09:26
chain.t_002,2024-02-28-09:55,2024-02-28-11:08
chain.t_003,2024-02-28-11:37,2024-02-28-13:58
chain.t_004,2024-02-28-14:27,2024-02-28-15:40
chain.t_005,2024-02-28-16:09,2024-02-28-17:22
chain.t_006,2024-02-29-08:13,2024-02-29-09:26
chain.t_007,2024-02-29-09:55,2024-02-29-11:08
chain.t_008,2024-02-29-11:37,2024-02-29-13:58
chain.t_009,2024-02-29-14:27,2024-02-29-15:40
chain.t_010,2024-02-29-16:09,2024-02-29-17:22
chain.t_011,2024-03-01-08:13,2024-03-01-09:26
chain.t_012,2024-03-01-09:55,2024-03-01-11:08
chain.t_013,2024-03-01-11:37,2024-03-01-13:58
chain.t_014,2024-03-01-14:27,2024-03-01-15:40
chain.t_015,2024-03-01-16:09,2024-03-01-17:22
chain.t_016,2024-03-02-08:13,2024-03-02-09:26
chain.t_017,2024-03-02-09:55,2024-03-02-11:08
chain.t_018,2024-03-02-11:37,2024-03-02-13:58
chain.t_019,2024-03-02-14:27,2024-03-02-15:40
chain.t_020,2024-03-02-16:09,2024-03-02-17:22
chain.t_021,2024-03-03-08:13,2024-03-03-09:26
chain.t_022,2024-03-03-09:55,2024-03-03-11:08
chain.t_023,2024-03-03-11:37,2024-03-03-13:58
chain.t_024,2024-03-03-14:27,2024-03-03-15:40
chain.t_025,2024-03-03-16:09,2024-03-03-17:22
chain.t_026,2024-03-04-08:13,2024-03-04-09:26
chain.t_027,2024-03-04-09:55,2024-03-04-11:08
chain.t_028,2024-03-04-11:37,2024-03-04-13:58
chain.t_029,2024-03-04-14:27,2024-03-04-15:40
chain.t_030,2024-03-04-16:09,2024-03-04-17:22
chain.t_031,2024-03-05-08:13,2024-03-05-09:26
chain.t_032,2024-03-05-09:55,2024-03-05-11:08
chain.t_033,2024-03-05-11:37,2024-03-05-13:58
chain.t_034,2024-03-05-14:27,2024-03-05-15:40
chain.t_035,2024-03-05-16:09,2024-03-05-17:22
chain.t_036,2024-03-06-08:13,2024-03-06-09:26
chain.t_037,2024-03-06-09:55,2024-03-06-11:08
chain.t_038,2024-03-06-11:37,2024-03-06-13:58
chain.t_039,2024-03-06-14:27,2024-03-06-15:40
chain.t_040,2024-03-06-16:09,2024-03-06-17:22
chain.t_041,2024-03-07-08:13,2024-03-07-09:26
chain.t_042,2024-03-07-09:55,2024-03-07-11:08
chain.t_043,2024-03-07-11:37,2024-03-07-13:58
chain.t_044,2024-03-07-14:27,2024-03-07-15:40
chain.t_045,2024-03-07-16:09,2024-03-07-17:22
chain.t_046,2024-03-08-08:13,2024-03-08-09:26
chain.t_047,2024-03-08-09:55,2024-03-08-11:08
chain.t_048,2024-03-08-11:37,2024-03-08-13:58
chain.t_049,2024-03-08-14:27,2024-03-08-15:40
chain.t_050,2024-03-08-16:09,2024-03-08-17:22
chain.t_051,2024-03-09-08:13,2024-03-09-09:26
chain.t_052,2024-03-09-09:55,2024-03-09-11:08
chain.t_053,2024-03-09-11:37,2024-03-09-13:58
chain.t_054,2024-03-09-14:27,2024-03-09-15:40
chain.t_055,2024-03-09-16:09,2024-03-09-17:22
chain.t_056,2024-03-10-08:13,2024-03-10-09:26
chain.t_057,2024-03-10-09:55,2024-03-10-11:08
chain.t_058,2024-03-10-11:37,2024-03-10-13:58
chain.t_059,2024-03-10-14:27,2024-03-10-15:40
chain.t_060,2024-03-10-16:09,2024-03-10-17:22
chain.t_061,2024-03-11-08:13,2024-03-11-09:26
chain.t_062,2024-03-11-09:55,2024-03-11-11:08
chain.t_063,2024-03-11-11:37,2024-03-11-13:58
chain.t_064,2024-03-11-14:27,2024-03-11-15:40
chain.t_065,2024-03-11-16:09,2024-03-11-17:22
chain.t_066,2024-03-12-08:13,2024-03-12-09:26
chain.t_067,2024-03-12-09:55,2024-03-12-11:08
chain.t_068,2024-03-12-11:37,2024-03-12-13:58
chain.t_069,2024-03-12-14:27,2024-03-12-15:40
chain.t_070,2024-03-12-16:09,2024-03-12-17:22
chain.t_071,2024-03-13-08:13,2024-03-13-09:26
chain.t_072,2024-03-13-09:55,2024-03-13-11:08
chain.t_073,2024-03-13-11:37,2024-03-13-13:58
chain.t_074,2024-03-13-14:27,2024-03-13-15:40
chain.t_075,2024-03-13-16:09,2024-03-13-17:22
chain.t_076,2024-03-14-08:13,2024-03-14-09:26
chain.t_077,2024-03-14-09:55,2024-03-14-11:08
chain.t_078,2024-03-14-11:37,2024-03-14-13:58
chain.t_079,2024-03-14-14:27,2024-03-14-15:40
chain.t_080,2024-03-14-16:09,2024-03-14-17:22
chain.t_081,2024-03-15-08:13,2024-03-15-09:26
chain.t_082,2024-03-15-09:55,2024-03-15-11:08
chain.t_083,2024-03-15-11:37,2024-03-15-13:58
chain.t_084,2024-03-15-14:27,2024-03-15-15:40
chain.t_085,2024-03-15-16:09,2024-03-15-17:22
chain.t_086,2024-03-16-08:13,2024-03-16-09:26
chain.t_087,2024-03-16-09:55,2024-03-16-11:08
chain.t_088,2024-03-16-11:37,2024-03-16-13:58
chain.t_089,2024-03-16-14:27,2024-03-16-15:40
chain.t_090,2024-03-16-16:09,2024-03-16-17:22
chain.t_091,2024-03-17-08:13,2024-03-17-09:26
chain.t_092,2024-03-17-09:55,2024-03-17-11:08
chain.t_093,2024-03-17-11:37,2024-03-17-13:58
chain.t_094,2024-03-17-14:27,2024-03-17-15:40
chain.t_095,2024-03-17-16:09,2024-03-17-17:22
chain.t_096,2024-03-18-08:13,2024-03-18-09:26
chain.t_097,2024-03-18-09:55,2024-03-18-11:08
chain.t_098,2024-03-18-11:37,2024-03-18-13:58
chain.t_099,2024-03-18-14:27,2024-03-18-15:40
chain.t_100,2024-03-18-16:09,2024-03-18-17:22
chain.t_101,2024-03-19-08:13,2024-03-19-09:26
chain.t_102,2024-03-19-09:55,2024-03-19-11:08
chain.t_103,2024-03-19-11:37,2024-03-19-13:58
chain.t_104,2024-03-19-14:27,2024-03-19-15:40
chain.t_105,2024-03-19-16:09,2024-03-19-17:22
chain.t_106,2024-03-20-08:13,2024-03-20-09:26
chain.t_107,2024-03-20-09:55,2024-03-20-11:08
chain.t_108,2024-03-20-11:37,2024-03-20-13:58
chain.t_109,2024-03-20-14:27,2024-03-20-15:40
chain.t_110,2024-03-20-16:09,2024-03-20-17:22
chain.t_111,2024-03-21-08:13,2024-03-21-09:26
chain.t_112,2024-03-21-09:55,2024-03-21-11:08
chain.t_113,2024-03-21-11:37,2024-03-21-13:58
chain.t_114,2024-03-21-14:27,2024-03-21-15:40
chain.t_115,2024-03-21-16:09,2024-03-21-17:22
chain.t_116,2024-03-22-08:13,2024-03-22-09:26
chain.t_117,2024-03-22-09:55,2024-03-22-11:08
chain.t_118,2024-03-22-11:37,2024-03-22-13:58
chain.t_119,2024-03-22-14:27,2024-03-22-15:40
chain.t_120,2024-03-22-16:09,2024-03-22-17:22
chain.t_121,2024-03-23-08:13,2024-03-23-09:26
chain.t_122,2024-03-23-09:55,2024-03-23-11:08
chain.t_123,2024-03-23-11:37,2024-03-23-13:58
chain.t_124,2024-03-23-14:27,2024-03-23-15:40
chain.t_125,2024-03-23-16:09,2024-03-23-17:22
chain.t_126,2024-03-24-08:13,2024-03-24-09:26
chain.t_127,2024-03-24-09:55,2024-03-24-11:08
chain.t_128,2024-03-24-11:37,2024-03-24-13:58
chain.t_129,2024-03-24-14:27,2024-03-24-15:40
chain.t_130,2024-03-24-16:09,2024-03-24-17:22
chain.t_131,2024-03-25-08:13,2024-03-25-09:26
chain.t_132,2024-03-25-09:55,2024-03-25-11:08
chain.t_133,2024-03-25-11:37,2024-03-25-13:58
chain.t_134,2024-03-25-14:27,2024-03-25-15:40
chain.t_135,2024-03-25-16:09,2024-03-25-17:22
chain.t_136,2024-03-26-08:13,2024-03-26-09:26
chain.t_137,2024-03-26-09:55,2024-03-26-11:08
chain.t_138,2024-03-26-11:37,2024-03-26-13:58
chain.t_139,2024-03-26-14:27,2024-03-26-15:40
chain.t_140,2024-03-26-16:09,2024-03-26-17:22
chain.t_141,2024-03-27-08:13,2024-03-27-09:26
chain.t_142,2024-03-27-09:55,2024-03-27-11:08
chain.t_143,2024-03-27-11:37,2024-03-27-13:58
chain.t_144,2024-03-27-14:27,2024-03-27-15:40
chain.t_145,2024-03-27-16:09,2024-03-27-17:22
chain.t_146,2024-03-28-08:13,2024-03-28-09:26
chain.t_147,2024-03-28-09:55,2024-03-28-11:08
chain.t_148,2024-03-28-11:37,2024-03-28-13:58
chain.t_149,2024-03-28-14:27,2024-03-28-15:40
chain.t_150,2024-03-28-16:09,2024-03-28-17:22
chain.t_151,2024-03-29-08:13,2024-03-29-09:26
chain.t_152,2024-03-29-09:55,2024-03-29-11:08
chain.t_153,2024-03-29-11:37,2024-03-29-13:58
chain.t_154,2024-03-29-14:27,2024-03-29-15:40
chain.t_155,2024-03-29-16:09,2024-03-29-17:22
chain.t_156,2024-03-30-08:13,2024-03-30-09:26
chain.t_157,2024-03-30-09:55,2024-03-30-11:08
chain.t_158,2024-03-30-11:37,2024-03-30-13:58
chain.t_159,2024-03-30-14:27,2024-03-30-15:40
chain.t_160,2024-03-30-16:09,2024-03-30-17:22
chain.t_161,2024-03-31-08:13,2024-03-31-09:26
chain.t_162,2024-03-31-09:55,2024-03-31-11:08
chain.t_163,2024-03-31-11:37,2024-03-31-13:58
chain.t_164,2024-03-31-14:27,2024-03-31-15:40
chain.t_165,2024-03-31-16:09,2024-03-31-17:22
chain.t_166,2024-04-01-08:13,2024-04-01-09:26
chain.t_167,2024-04-01-09:55,2024-04-01-11:08
chain.t_168,2024-04-01-11:37,2024-04-01-13:58
chain.t_169,2024-04-01-14:27,2024-04-01-15:40
chain.t_170,2024-04-01-16:09,2024-04-01-17:22
chain.t_171,2024-04-02-08:13,2024-04-02-09:26
chain.t_172,2024-04-02-09:55,2024-04-02-11:08
chain.t_173,2024-04-02-11:37,2024-04-02-13:58
chain.t_174,2024-04-02-14:27,2024-04-02-15:40
chain.t_175,2024-04-02-16:09,2024-04-02-17:22
chain.t_176,2024-04-03-08:13,2024-04-03-09:26
chain.t_177,2024-04-03-09:55,2024-04-03-11:08
chain.t_178,2024-04-03-11:37,2024-04-03-13:58
chain.t_179,2024-04-03-14:27,2024-04-03-15:40
chain.t_180,2024-04-03-16:09,2024-04-03-17:22
chain.t_181,2024-04-04-08:13,2024-04-04-09:26
chain.t_182,2024-04-04-09:55,2024-04-04-11:08
chain.t_183,2024-04-04-11:37,2024-04-04-13:58
chain.t_184,2024-04-04-14:27,2024-04-04-15:40
chain.t_185,2024-04-04-16:09,2024-04-04-17:22
chain.t_186,2024-04-05-08:13,2024-04-05-09:26
chain.t_187,2024-04-05-09:55,2024-04-05-11:08
chain.t_188,2024-04-05-11:37,2024-04-05-13:58
chain.t_189,2024-04-05-14:27,2024-04-05-15:40
chain.t_190,2024-04-05-16:09,2024-04-05-17:22
chain.t_191,2024-04-06-08:13,2024-04-06-09:26
chain.t_192,2024-04-06-09:55,2024-04-06-11:08
chain.t_193,2024-04-06-11:37,2024-04-06-13:58
chain.t_194,2024-04-06-14:27,2024-04-06-15:40
chain.t_195,2024-04-06-16:09,2024-04-06-17:22
chain.t_196,2024-04-07-08:13,2024-04-07-09:26
chain.t_197,2024-04-07-09:55,2024-04-07-11:08
chain.t_198,2024-04-07-11:37,2024-04-07-13:58
chain.t_199,2024-04-07-14:27,2024-04-07-15:40
chain.t_200,2024-04-07-16:09,2024-04-07-17:22
chain.t_201,2024-04-08-08:13,2024-04-08-09:26
chain.t_202,2024-04-08-09:55,2024-04-08-11:08
chain.t_203,2024-04-08-11:37,2024-04-08-13:58
chain.t_204,2024-04-08-14:27,2024-04-08-15:40
chain.t_205,2024-04-08-16:09,2024-04-08-17:22
chain.t_206,2024-04-09-08:13,2024-04-09-09:26
chain.t_207,2024-04-09-09:55,2024-04-09-11:08
chain.t_208,2024-04-09-11:37,2024-04-09-13:58
chain.t_209,2024-04-09-14:27,2024-04-09-15:40
chain.t_210,2024-04-09-16:09,2024-04-09-17:22
chain.t_211,2024-04-10-08:13,2024-04-10-09:26
chain.t_212,2024-04-10-09:55,2024-04-10-11:08
chain.t_213,2024-04-10-11:37,2024-04-10-13:58
chain.t_214,2024-04-10-14:27,2024-04-10-15:40
chain.t_215,2024-04-10-16:09,2024-04-10-17:22
chain.t_216,2024-04-11-08:13,2024-04-11-09:26
chain.t_217,2024-04-11-09:55,2024-04-11-11:08
chain.t_218,2024-04-11-11:37,2024-04-11-13:58
chain.t_219,2024-04-11-14:27,2024-04-11-15:40
chain.t_220,2024-04-11-16:09,2024-04-11-17:22
chain.t_221,2024-04-12-08:13,2024-04-12-09:26
chain.t_222,2024-04-12-09:55,2024-04-12-11:08
chain.t_223,2024-04-12-11:37,2024-04-12-13:58
chain.t_224,2024-04-12-14:27,2024-04-12-15:40
chain.t_225,2024-04-12-16:09,2024-04-12-17:22
chain.t_226,2024-04-13-08:13,2024-04-13-09:26
chain.t_227,2024-04-13-09:55,2024-04-13-11:08
chain.t_228,2024-04-13-11:37,2024-04-13-13:58
chain.t_229,2024-04-13-14:27,2024-04-13-15:40
chain.t_230,2024-04-13-16:09,2024-04-13-17:22
chain.t_231,2024-04-14-08:13,2024-04-14-09:26
chain.t_232,2024-04-14-09:55,2024-04-14-11:08
chain.t_233,2024-04-14-11:37,2024-04-14-13:58
chain.t_234,2024-04-14-14:27,2024-04-14-15:40
chain.t_235,2024-04-14-16:09,2024-04-14-17:22
chain.t_236,2024-04-15-08:13,2024-04-15-09:26
chain.t_237,2024-04-15-09:55,2024-04-15-11:08
chain.t_238,2024-04-15-11:37,2024-04-15-13:58
chain.t_239,2024-04-15-14:27,2024-04-15-15:40
chain.t_240,2024-04-15-16:09,2024-04-15-17:22
chain.t_241,2024-04-16-08:13,2024-04-16-09:26
chain.t_242,2024-04-16-09:55,2024-04-16-11:08
chain.t_243,2024-04-16-11:37,2024-04-16-13:58
chain.t_244,2024-04-16-14:27,2024-04-16-15:40
chain.t_245,2024-04-16-16:09,2024-04-16-17:22
chain.t_246,2024-04-17-08:13,2024-04-17-09:26
chain.t_247,2024-04-17-09:55,2024-04-17-11:08
chain.t_248,2024-04-17-11:37,2024-04-17-13:58
chain.t_249,2024-04-17-14:27,2024-04-17-15:40
chain.t_250,2024-04-17-16:09,2024-04-17-17:22
chain.t_251,2024-04-18-08:13,2024-04-18-09:26
chain.t_252,2024-04-18-09:55,2024-04-18-11:08
chain.t_253,2024-04-18-11:37,2024-04-18-13:58
chain.t_254,2024-04-18-14:27,2024-04-18-15:40
chain.t_255,2024-04-18-16:09,2024-04-18-17:22
chain.t_256,2024-04-19-08:13,2024-04-19-09:26
chain.t_257,2024-04-19-09:55,2024-04-19-11:08
chain.t_258,2024-04-19-11:37,2024-04-19-13:58
chain.t_259,2024-04-19-14:27,2024-04-19-15:40
chain.t_260,2024-04-19-16:09,2024-04-19-17:22
chain.t_261,2024-04-20-08:13,2024-04-20-09:26
chain.t_262,2024-04-20-09:55,2024-04-20-11:08
chain.t_263,2024-04-20-11:37,2024-04-20-13:58
chain.t_264,2024-04-20-14:27,2024-04-20-15:40
chain.t_265,2024-04-20-16:09,2024-04-20-17:22
chain.t_266,2024-04-21-08:13,2024-04-21-09:26
chain.t_267,2024-04-21-09:55,2024-04-21-11:08
chain.t_268,2024-04-21-11:37,2024-04-21-13:58
chain.t_269,2024-04-21-14:27,2024-04-21-15:40
chain.t_270,2024-04-21-16:09,2024-04-21-17:22
chain.t_271,2024-04-22-08:13,2024-04-22-09:26
chain.t_272,2024-04-22-09:55,2024-04-22-11:08
chain.t_273,2024-04-22-11:37,2024-04-22-13:58
chain.t_274,2024-04-22-14:27,2024-04-22-15:40
chain.t_275,2024-04-22-16:09,2024-04-22-17:22
chain.t_276,2024-04-23-08:13,2024-04-23-09:26
chain.t_277,2024-04-23-09:55,2024-04-23-11:08
chain.t_278,2024-04-23-11:37,2024-04-23-13:58
chain.t_279,2024-04-23-14:27,2024-04-23-15:40
chain.t_280,2024-04-23-16:09,2024-04-23-17:22
chain.t_281,2024-04-24-08:13,2024-04-24-09:26
chain.t_282,2024-04-24-09:55,2024-04-24-11:08
chain.t_283,2024-04-24-11:37,2024-04-24-13:58
chain.t_284,2024-04-24-14:27,2024-04-24-15:40
chain.t_285,2024-04-24-16:09,2024-04-24-17:22
chain.t_286,2024-04-25-08:13,2024-04-25-09:26
chain.t_287,2024-04-25-09:55,2024-04-25-11:08
chain.t_288,2024-04-25-11:37,2024-04-25-13:58
chain.t_289,2024-04-25-14:27,2024-04-25-15:40
chain.t_290,2024-04-25-16:09,2024-04-25-17:22
chain.t_291,2024-04-26-08:13,2024-04-26-09:26
chain.t_292,2024-04-26-09:55,2024-04-26-11:08
chain.t_293,2024-04-26-11:37,2024-04-26-13:58
chain.t_294,2024-04-26-14:27,2024-04-26-15:40
chain.t_295,2024-04-26-16:09,2024-04-26-17:22
chain.t_296,2024-04-27-08:13,2024-04-27-09:26
chain.t_297,2024-04-27-09:55,2024-04-27-11:08
chain.t_298,2024-04-27-11:37,2024-04-27-13:58
chain.t_299,2024-04-27-14:27,2024-04-27-15:40
chain.t_300,2024-04-27-16:09,2024-04-27-17:22
chain.t_301,2024-04-28-08:13,2024-04-28-09:26
chain.t_302,2024-04-28-09:55,2024-04-28-11:08
chain.t_303,2024-04-28-11:37,2024-04-28-13:58
chain.t_304,2024-04-28-14:27,2024-04-28-15:40
chain.t_305,2024-04-28-16:09,2024-04-28-17:22
chain.t_306,2024-04-29-08:13,2024-04-29-09:26
chain.t_307,2024-04-29-09:55,2024-04-29-11:08
chain.t_308,2024-04-29-11:37,2024-04-29-13:58
chain.t_309,2024-04-29-14:27,2024-04-29-15:40
chain.t_310,2024-04-29-16:09,2024-04-29-17:22
chain.t_311,2024-04-30-08:13,2024-04-30-09:26
chain.t_312,2024-04-30-09:55,2024-04-30-11:08
chain.t_313,2024-04-30-11:37,2024-04-30-13:58
chain.t_314,2024-04-30-14:27,2024-04-30-15:40
chain.t_315,2024-04-30-16:09,2024-04-30-17:22
chain.t_316,2024-05-01-08:13,2024-05-01-09:26
chain.t_317,2024-05-01-09:55,2024-05-01-11:08
chain.t_318,2024-05-01-11:37,2024-05-01-13:58
chain.t_319,2024-05-01-14:27,2024-05-01-15:40
chain.t_320,2024-05-01-16:09,2024-05-01-17:22
chain.t_321,2024-05-02-08:13,2024-05-02-09:26
chain.t_322,2024-05-02-09:55,2024-05-02-11:08
chain.t_323,2024-05-02-11:37,2024-05-02-13:58
chain.t_324,2024-05-02-14:27,2024-05-02-15:40
chain.t_325,2024-05-02-16:09,2024-05-02-17:22
chain.t_326,2024-05-03-08:13,2024-05-03-09:26
chain.t_327,2024-05-03-09:55,2024-05-03-11:08
chain.t_328,2024-05-03-11:37,2024-05-03-13:58
chain.t_329,2024-05-03-14:27,2024-05-03-15:40
chain.t_330,2024-05-03-16:09,2024-05-03-17:22
chain.t_331,2024-05-04-08:13,2024-05-04-09:26
chain.t_332,2024-05-04-09:55,2024-05-04-11:08
chain.t_333,2024-05-04-11:37,2024-05-04-13:58
chain.t_334,2024-05-04-14:27,2024-05-04-15:40
chain.t_335,2024-05-04-16:09,2024-05-04-17:22
chain.t_336,2024-05-05-08:13,2024-05-05-09:26
chain.t_337,2024-05-05-09:55,2024-05-05-11:08
chain.t_338,2024-05-05-11:37,2024-05-05-13:58
chain.t_339,2024-05-05-14:27,2024-05-05-15:40
chain.t_340,2024-05-05-16:09,2024-05-05-17:22
chain.t_341,2024-05-06-08:13,2024-05-06-09:26
chain.t_342,2024-05-06-09:55,2024-05-06-11:08
chain.t_343,2024-05-06-11:37,2024-05-06-13:58
chain.t_344,2024-05-06-14:27,2024-05-06-15:40
chain.t_345,2024-05-06-16:09,2024-05-06-17:22
chain.t_346,2024-05-07-08:13,2024-05-07-09:26
chain.t_347,2024-05-07-09:55,2024-05-07-11:08
chain.t_348,2024-05-07-11:37,2024-05-07-13:58
chain.t_349,2024-05-07-14:27,2024-05-07-15:40
chain.t_350,2024-05-07-16:09,2024-05-07-17:22
chain.t_351,2024-05-08-08:13,2024-05-08-09:26
chain.t_352,2024-05-08-09:55,2024-05-08-11:08
chain.t_353,2024-05-08-11:37,2024-05-08-13:58
chain.t_354,2024-05-08-14:27,2024-05-08-15:40
chain.t_355,2024-05-08-16:09,2024-05-08-17:22
chain.t_356,2024-05-09-08:13,2024-05-09-09:26
chain.t_357,2024-05-09-09:55,2024-05-09-11:08
chain.t_358,2024-05-09-11:37,2024-05-09-13:58
chain.t_359,2024-05-09-14:27,2024-05-09-15:40
chain.t_360,2024-05-09-16:09,2024-05-09-17:22
chain.t_361,2024-05-10-08:13,2024-05-10-09:26
chain.t_362,2024-05-10-09:55,2024-05-10-11:08
chain.t_363,2024-05-10-11:37,2024-05-10-13:58
chain.t_364,2024-05-10-14:27,2024-05-10-15:40
chain.t_365,2024-05-10-16:09,2024-05-10-17:22
chain.t_366,2024-05-11-08:13,2024-05-11-09:26
chain.t_367,2024-05-11-09:55,2024-05-11-11:08
chain.t_368,2024-05-11-11:37,2024-05-11-13:58
chain.t_369,2024-05-11-14:27,2024-05-11-15:40
chain.t_370,2024-05-11-16:09,2024-05-11-17:22
chain.t_371,2024-05-12-08:13,2024-05-12-09:26
chain.t_372,2024-05-12-09:55,2024-05-12-11:08
chain.t_373,2024-05-12-11:37,2024-05-12-13:58
chain.t_374,2024-05-12-14:27,2024-05-12-15:40
chain.t_375,2024-05-12-16:09,2024-05-12-17:22
chain.t_376,2024-05-13-08:13,2024-05-13-09:26
chain.t_377,2024-05-13-09:55,2024-05-13-11:08
chain.t_378,2024-05-13-11:37,2024-05-13-13:58
chain.t_379,2024-05-13-14:27,2024-05-13-15:40
chain.t_380,2024-05-13-16:09,2024-05-13-17:22
chain.t_381,2024-05-14-08:13,2024-05-14-09:26
chain.t_382,2024-05-14-09:55,2024-05-14-11:08
chain.t_383,2024-05-14-11:37,2024-05-14-13:58
chain.t_384,2024-05-14-14:27,2024-05-14-15:40
chain.t_385,2024-05-14-16:09,2024-05-14-17:22
chain.t_386,2024-05-15-08:13,2024-05-15-09:26
chain.t_387,2024-05-15-09:55,2024-05-15-11:08
chain.t_388,2024-05-15-11:37,2024-05-15-13:58
chain.t_389,2024-05-15-14:27,2024-05-15-15:40
chain.t_390,2024-05-15-16:09,2024-05-15-17:22
chain.t_391,2024-05-16-08:13,2024-05-16-09:26
chain.t_392,2024-05-16-09:55,2024-05-16-11:08
chain.t_393,2024-05-16-11:37,2024-05-16-13:58
chain.t_394,2024-05-16-14:27,2024-05-16-15:40
chain.t_395,2024-05-16-16:09,2024-05-16-17:22
chain.t_396,2024-05-17-08:13,2024-05-17-09:26
chain.t_397,2024-05-17-09:55,2024-05-17-11:08
chain.t_398,2024-05-17-11:37,2024-05-17-13:58
chain.t_399,2024-05-17-14:27,2024-05-17-15:40
chain.t_400,2024-05-17-16:09,2024-05-17-17:22
chain.t_401,2024-05-18-08:13,2024-05-18-09:26
chain.t_402,2024-05-18-09:55,2024-05-18-11:08
chain.t_403,2024-05-18-11:37,2024-05-18-13:58
chain.t_404,2024-05-18-14:27,2024-05-18-15:40
chain.t_405,2024-05-18-16:09,2024-05-18-17:22
chain.t_406,2024-05-19-08:13,2024-05-19-09:26
chain.t_407,2024-05-19-09:55,2024-05-19-11:08
chain.t_408,2024-05-19-11:37,2024-05-19-13:58
chain.t_409,2024-05-19-14:27,2024-05-19-15:40
chain.t_410,2024-05-19-16:09,2024-05-19-17:22
chain.t_411,2024-05-20-08:13,2024-05-20-09:26
chain.t_412,2024-05-20-09:55,2024-05-20-11:08
chain.t_413,2024-05-20-11:37,2024-05-20-13:58
chain.t_414,2024-05-20-14:27,2024-05-20-15:40
chain.t_415,2024-05-20-16:09,2024-05-20-17:22
chain.t_416,2024-05-21-08:13,2024-05-21-09:26
chain.t_417,2024-05-21-09:55,2024-05-21-11:08
chain.t_418,2024-05-21-11:37,2024-05-21-13:58
chain.t_419,2024-05-21-14:27,2024-05-21-15:40
chain.t_420,2024-05-21-16:09,2024-05-21-17:22
chain.t_421,2024-05-22-08:13,2024-05-22-09:26
chain.t_422,2024-05-22-09:55,2024-05-22-11:08
chain.t_423,2024-05-22-11:37,2024-05-22-13:58
chain.t_424,2024-05-22-14:27,2024-05-22-15:40
chain.t_425,2024-05-22-16:09,2024-05-22-17:22
chain.t_426,2024-05-23-08:13,2024-05-23-09:26
chain.t_427,2024-05-23-09:55,2024-05-23-11:08
chain.t_428,2024-05-23-11:37,2024-05-23-13:58
chain.t_429,2024-05-23-14:27,2024-05-23-15:40
chain.t_430,2024-05-23-16:09,2024-05-23-17:22
chain.t_431,2024-05-24-08:13,2024-05-24-09:26
chain.t_432,2024-05-24-09:55,2024-05-24-11:08
chain.t_433,2024-05-24-11:37,2024-05-24-13:58
chain.t_434,2024-05-24-14:27,2024-05-24-15:40
chain.t_435,2024-05-24-16:09,2024-05-24-17:22
chain.t_436,2024-05-25-08:13,2024-05-25-09:26
chain.t_437,2024-05-25-09:55,2024-05-25-11:08
chain.t_438,2024-05-25-11:37,2024-05-25-13:58
chain.t_439,2024-05-25-14:27,2024-05-25-15:40
chain.t_440,2024-05-25-16:09,2024-05-25-17:22
chain.t_441,2024-05-26-08:13,2024-05-26-09:26
chain.t_442,2024-05-26-09:55,2024-05-26-11:08
chain.t_443,2024-05-26-11:37,2024-05-26-13:58
chain.t_444,2024-05-26-14:27,2024-05-26-15:40
chain.t_445,2024-05-26-16:09,2024-05-26-17:22
chain.t_446,2024-05-27-08:13,2024-05-27-09:26
chain.t_447,2024-05-27-09:55,2024-05-27-11:08
chain.t_448,2024-05-27-11:37,2024-05-27-13:58
chain.t_449,2024-05-27-14:27,2024-05-27-15:40
chain.t_450,2024-05-27-16:09,2024-05-27-17:22
chain.t_451,2024-05-28-08:13,2024-05-28-09:26
chain.t_452,2024-05-28-09:55,2024-05-28-11:08
chain.t_453,2024-05-28-11:37,2024-05-28-13:58
chain.t_454,2024-05-28-14:27,2024-05-28-15:40
chain.t_455,2024-05-28-16:09,2024-05-28-17:22
chain.t_456,2024-05-29-08:13,2024-05-29-09:26
chain.t_457,2024-05-29-09:55,2024-05-29-11:08
chain.t_458,2024-05-29-11:37,2024-05-29-13:58
chain.t_459,2024-05-29-14:27,2024-05-29-15:40
chain.t_460,2024-05-29-16:09,2024-05-29-17:22
chain.t_461,2024-05-30-08:13,2024-05-30-09:26
chain.t_462,2024-05-30-09:55,2024-05-30-11:08
chain.t_463,2024-05-30-11:37,2024-05-30-13:58
chain.t_464,2024-05-30-14:27,2024-05-30-15:40
chain.t_465,2024-05-30-16:09,2024-05-30-17:22
chain.t_466,2024-05-31-08:13,2024-05-31-09:26
chain.t_467,2024-05-31-09:55,2024-05-31-11:08
chain.t_468,2024-05-31-11:37,2024-05-31-13:58
chain.t_469,2024-05-31-14:27,2024-05-31-15:40
chain.t_470,2024-05-31-16:09,2024-05-31-17:22
chain.t_471,2024-06-01-08:13,2024-06-01-09:26
chain.t_472,2024-06-01-09:55,2024-06-01-11:08
chain.t_473,2024-06-01-11:37,2024-06-01-13:58
chain.t_474,2024-06-01-14:27,2024-06-01-15:40
chain.t_475,2024-06-01-16:09,2024-06-01-17:22
chain.t_476,2024-06-02-08:13,2024-06-02-09:26
chain.t_477,2024-06-02-09:55,2024-06-02-11:08
chain.t_478,2024-06-02-11:37,2024-06-02-13:58
chain.t_479,2024-06-02-14:27,2024-06-02-15:40
chain.t_480,2024-06-02-16:09,2024-06-02-17:22
chain.t_481,2024-06-03-08:13,2024-06-03-09:26
chain.t_482,2024-06-03-09:55,2024-06-03-11:08
chain.t_483,2024-06-03-11:37,2024-06-03-13:58
chain.t_484,2024-06-03-14:27,2024-06-03-15:40
chain.t_485,2024-06-03-16:09,2024-06-03-17:22
chain.t_486,2024-06-04-08:13,2024-06-04-09:26
chain.t_487,2024-06-04-09:55,2024-06-04-11:08
chain.t_488,2024-06-04-11:37,2024-06-04-13:58
chain.t_489,2024-06-04-14:27,2024-06-04-15:40
chain.t_490,2024-06-04-16:09,2024-06-04-17:22
chain.t_491,2024-06-05-08:13,2024-06-05-09:26
chain.t_492,2024-06-05-09:55,2024-06-05-11:08
chain.t_493,2024-06-05-11:37,2024-06-05-13:58
chain.t_494,2024-06-05-14:27,2024-06-05-15:40
chain.t_495,2024-06-05-16:09,2024-06-05-17:22
chain.t_496,2024-06-06-08:13,2024-06-06-09:26
chain.t_497,2024-06-06-09:55,2024-06-06-11:08
chain.t_498,2024-06-06-11:37,2024-06-06-13:58
chain.t_499,2024-06-06-14:27,2024-06-06-15:40
chain.t_500,2024-06-06-16:09,2024-06-06-17:22
Project
/*
* Issue #58: "Blindfolded" Edition - Date Line + ALAP Gap Paradox
* Tests gapduration subtraction in ALAP backward pass with extreme timezones
*/
project "Paradox" 2025-12-25 +2w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-12-25
scheduling alap
}
shift daily "Daily" {
workinghours mon - sun 09:00 - 15:00
}
resource k "K" {
timezone "Pacific/Kiritimati"
workinghours daily
efficiency 0.5
}
resource n "N" {
timezone "Pacific/Niue"
workinghours daily
efficiency 2.0
}
task sequence "Event" {
end 2025-12-31-23:00
task b "Omega" {
effort 3h
allocate k
}
task a "Alpha" {
effort 12h
allocate n
depends !!b { gapduration 48h onstart }
}
}
taskreport paradox_output "paradox_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
sequence,2025-12-27-23:00,2025-12-31-23:00
sequence.b,2025-12-30-23:00,2025-12-31-23:00
sequence.a,2025-12-27-23:00,2025-12-28-23:00
Project
/*
* Issue #50: Priority Clash
* Tests priority-based scheduling when tasks compete for same resource
*/
project priority "Priority_War" 2025-08-01 +1w {
timezone "UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-08-01
}
resource consultant "Expert" {
workinghours mon - fri 09:00 - 13:00
}
task conflict "Resource Conflict" {
task low_prio "Documentation" {
priority 100
effort 4h
allocate consultant
start 2025-08-01-09:00
}
task high_prio "Server Crash Fix" {
priority 1000
effort 4h
allocate consultant
start 2025-08-01-09:00
}
}
taskreport priority_output "priority_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
conflict,2025-08-01-09:00,2025-08-04-13:00
conflict.low_prio,2025-08-04-09:00,2025-08-04-13:00
conflict.high_prio,2025-08-01-09:00,2025-08-01-13:00
Project
/*
* Issue #62: The "Shared Quota" Protocol
* Tests hierarchical resource limits (parent dailymax applies to child resources)
* 3 tasks using 3 child resources, but parent has dailymax 6h
*/
project "Shared_Quota" 2025-07-01 +1w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-07-01
}
shift standard "Standard" {
workinghours mon - sun 09:00 - 17:00
}
resource api_gateway "Global Rate Limiter" {
workinghours standard
limits { dailymax 6h }
resource slot_1 "Connection A" { workinghours standard }
resource slot_2 "Connection B" { workinghours standard }
resource slot_3 "Connection C" { workinghours standard }
}
task batch "Daily Processing" {
task job_a "A" {
effort 3h
allocate slot_1
start 2025-07-01-09:00
}
task job_b "B" {
effort 3h
allocate slot_2
start 2025-07-01-09:00
}
task job_c "C" {
effort 3h
allocate slot_3
}
}
taskreport quota_output "quota_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
batch,2025-07-01-09:00,2025-07-02-12:00
batch.job_a,2025-07-01-09:00,2025-07-01-12:00
batch.job_b,2025-07-01-09:00,2025-07-01-12:00
batch.job_c,2025-07-02-09:00,2025-07-02-12:00
Project
/*
* Simple test project for parser testing
*/
project simple "Simple Project" 2024-01-01 +3m {
timezone "America/New_York"
timeformat "%Y-%m-%d"
currency "USD"
now 2024-02-01
scenario plan "Plan" {
scenario delayed "Delayed" {}
}
}
copyright "Test Copyright"
rate 400.0
flags team
resource dev "Developers" {
resource dev1 "Alice" {
email "alice@example.com"
rate 350.0
}
resource dev2 "Bob" {
email "bob@example.com"
}
}
account cost "Project Cost" {
account dev "Development" {}
}
task project "Project" {
task spec "Specification" {
effort 10d
allocate dev1, dev2
}
task impl "Implementation" {
effort 20d
depends !spec
allocate dev1
}
task test "Testing" {
effort 5d
depends !impl
allocate dev2
}
}
Schedule
Id,Start,End
project,2024-01-01-09:00,2024-02-09-17:00
project.spec,2024-01-01-09:00,2024-01-05-17:00
project.impl,2024-01-08-09:00,2024-02-02-17:00
project.test,2024-02-05-09:00,2024-02-09-17:00
Project
project "Zero_Buffer" 2025-10-09 +1w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-10-09
}
# 1. Shifts
shift factory_shift {
workinghours mon - fri 08:00 - 18:00
}
# The Train only runs twice a day: 12:00-13:00 and 16:00-17:00
shift train_schedule {
workinghours mon - fri 12:00 - 13:00, 16:00 - 17:00
}
shift site_shift {
workinghours mon - fri 08:00 - 18:00
}
# 2. Resources
resource factory "Manufacturing" {
workinghours factory_shift
# POWER OUTAGE: The factory is down from 10:00 to 11:00
booking "Outage" 2025-10-09-10:00 +1h
}
resource train "Logistics" {
workinghours train_schedule
}
resource site "Construction" {
workinghours site_shift
}
# 3. The Chain
task supply_chain "JIT Flow" {
# Step 1: Make (3 Hours Effort)
task make "Produce" {
effort 3h
allocate factory
}
# Step 2: Move (1 Hour Fixed Effort)
task move "Transport" {
effort 1h
allocate train
# ZERO BUFFER CONSTRAINT:
# Must start EXACTLY when 'make' finishes.
depends !make { gapduration 0min maxgapduration 0min }
}
# Step 3: Install (3 Hours Effort)
task install "Assemble" {
effort 3h
allocate site
# ZERO BUFFER CONSTRAINT:
# Must start EXACTLY when 'move' finishes.
depends !move { gapduration 0min maxgapduration 0min }
}
}
taskreport synchrony_output "synchrony_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
supply_chain,2025-10-09-08:00,2025-10-09-16:00
supply_chain.make,2025-10-09-08:00,2025-10-09-12:00
supply_chain.move,2025-10-09-12:00,2025-10-09-13:00
supply_chain.install,2025-10-09-13:00,2025-10-09-16:00
Project
/*
* Issue #65: The "Thermal Shock" Protocol
* Tests maxgapduration constraint (maximum time between dependent tasks)
* Forge must start within 1h of heat ending, or metal cracks
*/
project "Thermal_Shock" 2025-05-10 +1w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-05-10
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 17:00
}
resource heater "Furnace" {
workinghours standard
}
resource press "Hydraulic Press" {
workinghours standard
booking "Maintenance" 2025-05-12-09:00 +6h
}
task process "Forging Line" {
task heat "Heat Ingot" {
effort 2h
allocate heater
}
task forge "Shape Metal" {
effort 2h
allocate press
depends !heat { gapduration 0min maxgapduration 60min }
}
}
taskreport thermal_output "thermal_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
process,2025-05-12-13:00,2025-05-12-17:00
process.heat,2025-05-12-13:00,2025-05-12-15:00
process.forge,2025-05-12-15:00,2025-05-12-17:00
Project
/*
* Issue #61: The "Sine Wave" Capacity Protocol
* Tests variable daily throughput (batch capacity changes per day)
* Weekly pattern: 2h, 4h, 8h, 16h, 8h, 4h, 2h = 44h/week
*/
project "Data_Tsunami" 2025-09-01 +1m {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-09-01
}
shift variable_throughput "Variable" {
workinghours mon 09:00 - 11:00
workinghours tue 09:00 - 13:00
workinghours wed 09:00 - 17:00
workinghours thu 06:00 - 22:00
workinghours fri 09:00 - 17:00
workinghours sat 09:00 - 13:00
workinghours sun 09:00 - 11:00
}
resource server_cluster "Cluster X" {
workinghours variable_throughput
}
task processing "Ingest 100TB" {
effort 100h
allocate server_cluster
start 2025-09-01-09:00
}
taskreport throughput_output "throughput_output" {
formats csv
columns id, start, end, effort, duration
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End,Effort,Duration
processing,2025-09-01-09:00,2025-09-17-15:00,100.00,16.25
Project
/*
* Issue #55: The Time Traveler (ALAP + Timezones)
* Tests global backward pass with timezone-aware resources
*/
project "Time_Traveler" 2025-06-01 +2w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-06-01
# Global ALAP: We plan from the deadline backwards
scheduling alap
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 18:00
}
resource team "Global" {
# TOKYO: UTC+9
resource dev_tokyo "Tokyo Dev" {
timezone "Asia/Tokyo"
workinghours mon - fri 09:00 - 18:00
}
# LONDON: UTC+1 (British Summer Time in June)
resource des_london "London Designer" {
timezone "Europe/London"
workinghours mon - fri 09:00 - 18:00
}
}
task launch "Global Launch" {
# HARD CONSTRAINT: Must finish Friday June 13th, 18:00 JST
# Note: 18:00 JST = 09:00 UTC
end 2025-06-13-09:00
# Task 2: Implementation (Tokyo)
# Effort: 9h (1 Day)
# Must finish at the deadline.
task impl "Implementation" {
effort 9h
allocate dev_tokyo
}
# Task 1: Design (London)
# Effort: 9h (1 Day)
# Implementation depends on Design.
# So Design must finish before Tokyo starts.
task design "Blueprint" {
effort 9h
allocate des_london
depends !!impl { onstart }
}
}
taskreport time_traveler_output "time_traveler_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
launch,2025-06-12-08:00,2025-06-13-09:00
launch.impl,2025-06-13-00:00,2025-06-13-09:00
launch.design,2025-06-12-08:00,2025-06-12-17:00
Project
project "Global_Ops" 2025-05-01 +1w {
timezone "Etc/UTC" # The project clock is UTC
timeformat "%Y-%m-%d %H:%M"
now 2025-05-01
}
# 1. Shifts (Defined in Local Time logic, but applied to Timezoned resources)
# We define a standard "9 to 6" shift.
shift local_9to6 {
workinghours mon - fri 09:00 - 18:00
}
# 2. Resources with Timezones
resource team "Global Team" {
# TOKYO: UTC+9
# Local 09:00 is UTC 00:00.
# Local 18:00 is UTC 09:00.
resource dev_jp "Tokyo Dev" {
timezone "Asia/Tokyo"
workinghours local_9to6
}
# NEW YORK: UTC-5 (Assuming Standard Time for simplicity in this test date)
# Local 09:00 is UTC 14:00.
# Local 18:00 is UTC 23:00.
resource qa_ny "NY QA" {
timezone "America/New_York"
workinghours local_9to6
}
}
# 3. The Relay Race
task follow_sun "Handover" {
# Step 1: Tokyo Work
# Starts: Mon May 1, 09:00 JST (Local) -> May 1, 00:00 UTC.
# Effort: 9h (1 Full Day).
# Ends: Mon May 1, 18:00 JST -> May 1, 09:00 UTC.
task step1_jp "Build" {
effort 9h
allocate dev_jp
start 2025-05-01-00:00 # Explicit UTC start
}
# Step 2: NY Work
# Dependency: After Tokyo finishes (May 1, 09:00 UTC).
# Challenge:
# At 09:00 UTC, it is 04:00 AM in New York.
# NY cannot start yet. They must wait for their shift (09:00 NY time).
# 09:00 NY Time = 14:00 UTC.
# Gap: 5 Hours of "Earth Rotation Delay".
# Effort: 4h.
task step2_ny "Test" {
effort 4h
allocate qa_ny
depends !step1_jp
}
}
taskreport "timezone_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M" # Output in UTC
}
Schedule
Id,Start,End
follow_sun,2025-05-01-00:00,2025-05-01-17:00
follow_sun.step1_jp,2025-05-01-00:00,2025-05-01-09:00
follow_sun.step2_ny,2025-05-01-13:00,2025-05-01-17:00
Project
/*
* This file contains an example project. It uses a made up software
* development project to demonstrate some of the basic features of
* the .tjp format.
*/
project acso "Accounting Software" 2002-01-16 +4m {
# Set the default time zone for the project. If not specified, UTC
# is used.
timezone "Europe/Paris"
# Hide the clock time. Only show the date.
timeformat "%Y-%m-%d"
# Use US format for numbers
numberformat "-" "" "," "." 1
# Use US financial format for currency values. Don't show cents.
currencyformat "(" ")" "," "." 0
# Pick a day during the project that will be reported as 'today' in
# the project reports. If not specified, the current day will be
# used, but this will likely be outside of the project range, so it
# can't be seen in the reports.
now 2002-03-05-13:00
# The currency for all money values is the US Dollar.
currency "USD"
# We want to compare the baseline scenario to one with a slightly
# delayed start.
scenario plan "Plan" {
scenario delayed "Delayed"
}
extend resource {
text Phone "Phone"
}
}
# This is not a real copyright for this file. It's just used as an example.
copyright "© 2002 Crappy Software, Inc."
# The daily default rate of all resources. This can be overridden for each
# resource. We specify this, so that we can do a good calculation of
# the costs of the project.
rate 390.0
# Register Good Friday as a global holiday for all resources.
leaves holiday "Good Friday" 2002-03-29
flags team
# This is one way to form teams
macro allocate_developers [
allocate dev1
allocate dev2
allocate dev3
]
# In order to do a simple profit and loss analysis of the project we
# specify accounts. One for the development costs, one for the
# documentation costs, and one account to credit the customer payments
# to.
account cost "Project Cost" {
account dev "Development"
account doc "Documentation"
}
account rev "Payments"
# The Profit&Loss analysis should be rev - cost accounts.
balance cost rev
resource boss "Paul Henry Bullock" {
email "phb@crappysoftware.com"
Phone "x100"
rate 480
}
resource dev "Developers" {
managers boss
resource dev1 "Paul Smith" {
email "paul@crappysoftware.com"
Phone "x362"
rate 350.0
}
resource dev2 "Sébastien Bono" {
email "SBono@crappysoftware.com"
Phone "x234"
}
resource dev3 "Klaus Müller" {
email "Klaus.Mueller@crappysoftware.com"
Phone "x490"
leaves annual 2002-02-01 - 2002-02-05
}
flags team
}
resource misc "The Others" {
managers boss
resource test "Peter Murphy" {
email "murphy@crappysoftware.com"
Phone "x666"
limits { dailymax 6.4h }
rate 310.0
}
resource doc "Dim Sung" {
email "sung@crappysoftware.com"
Phone "x482"
rate 300.0
leaves annual 2002-03-11 - 2002-03-16
}
flags team
}
# Now we specify the work packages. The whole project is described as
# a task that contains subtasks. These subtasks are then broken down
# into smaller tasks and so on. The innermost tasks describe the real
# work and have resources allocated to them. Many attributes of tasks
# are inherited from the enclosing task. This saves you a lot of typing.
task AcSo "Accounting Software" {
# All work-related costs will be booked to this account unless the
# subtasks specify something different.
chargeset dev
# For the duration of the project we have running cost that are not
# included in the labor cost.
charge 170 perday
responsible boss
task spec "Specification" {
# The effort to finish this task is 20 man-days.
effort 20d
# Now we use the macro declared above to allocate the resources
# for this task. Because they can work in parallel, they may finish this
# task earlier than in 20 working-days.
${allocate_developers}
# Each task without subtasks must have a start or an end
# criterion and a duration. For this task we use a reference to a
# milestone defined further below as the start criterion. So this task
# can not start before the specified milestone has been reached.
# References to other tasks may be relative. Each exclamation mark (!)
# means 'in the scope of the enclosing task'. To descent into a task, the
# fullstop (.) together with the id of the tasks have to be specified.
depends !deliveries.start
}
task software "Software Development" {
# The software is the most critical task of the project. So we set
# the priority of this task (and all its subtasks) to 1000, the top
# priority. The higher the priority, the more likely the task will
# get the requested resources.
priority 1000
# All subtasks depend on the specification task.
depends !spec
responsible dev1
task database "Database coupling" {
effort 20d
allocate dev1, dev2
journalentry 2002-02-03 "Problems with the SQL Libary" {
author dev1
alert yellow
summary -8<-
We ran into some compatibility problems with the SQL
Library.
->8-
details -8<-
We have already contacted the vendor and are now waiting for
their advise.
->8-
}
}
task gui "Graphical User Interface" {
effort 35d
# This task has taken 5 man-days more than originally planned.
# We record this as well, so that we can generate reports that
# compare the delayed schedule of the project to the original plan.
delayed:effort 40d
depends !database, !backend
allocate dev2, dev3
# Resource dev2 should only work 6 hours per day on this task.
limits {
dailymax 6h {
resources dev2
}
}
}
task backend "Back-End Functions" {
effort 30d
# This task is behind schedule, because it should have been
# finished already. To document this, we specify that the task
# is 95% completed. If nothing is specified, the scheduler assumes
# that the task is on schedule and computes the completion rate
# according to the current day and the plan data.
complete 95
depends !database
allocate dev1, dev2
}
}
task test "Software testing" {
task alpha "Alpha Test" {
# Efforts can not only be specified as man-days, but also as
# man-weeks, man-hours, etc. By default, the scheduler assumes
# that a man-week is 5 man-days or 40 man-hours. These values
# can be changed, of course.
effort 1w
# This task depends on a task in the scope of the enclosing
# task's enclosing task. So we need two exclamation marks (!!)
# to get there.
depends !!software
allocate test, dev2
note "Hopefully most bugs will be found and fixed here."
journalentry 2002-03-01 "Contract with Peter not yet signed" {
author boss
alert red
summary -8<-
The paperwork is stuck with HR and I can't hunt it down.
->8-
details -8<-
If we don't get the contract closed within the next week,
the start of the testing is at risk.
->8-
}
}
task beta "Beta Test" {
effort 4w
depends !alpha
allocate test, dev1
}
}
task manual "Manual" {
effort 10w
depends !deliveries.start
allocate doc, dev3
purge chargeset
chargeset doc
journalentry 2002-02-28 "User manual completed" {
author boss
summary "The doc writers did a really great job to finish on time."
}
}
task deliveries "Milestones" {
# Some milestones have customer payments associated with them. We
# credit these payments to the 'rev' account.
purge chargeset
chargeset rev
task start "Project start" {
# A task that has no duration is a milestone. It only needs a
# start or end criterion. All other tasks depend on this task.
# Here we use the built-in macro ${projectstart} to align the
# start of the task with the above specified project time frame.
start ${projectstart}
# For some reason the actual start of the project got delayed.
# We record this, so that we can compare the planned run to the
# delayed run of the project.
delayed:start 2002-01-20
# At the beginning of this task we receive a payment from the
# customer. This is credited to the account associated with this
# task when the task starts.
charge 21000.0 onstart
}
task prev "Technology Preview" {
depends !!software.backend
charge 31000.0 onstart
note "All '''major''' features should be usable."
}
task beta "Beta version" {
depends !!test.alpha
charge 13000.0 onstart
note "Fully functional, may contain bugs."
}
task done "Ship Product to Customer" {
# The next line can be uncommented to trigger a warning about
# the project being late. For all tasks, limits for the start and
# end values can be specified. Those limits are checked after the
# project has been scheduled. For all violated limits a warning
# is issued.
# maxend 2002-04-17
depends !!test.beta, !!manual
charge 33000.0 onstart
note "All priority 1 and 2 bugs must be fixed."
}
}
}
# Now the project has been specified completely. Stopping here would
# result in a valid .tjp file that could be processed and
# scheduled. But no reports would be generated to visualize the
# results.
navigator navbar {
hidereport @none
}
macro TaskTip [
tooltip istask() -8<-
'''Start: ''' <-query attribute='start'->
'''End: ''' <-query attribute='end'->
----
'''Resources:'''
<-query attribute='resources'->
----
'''Precursors: '''
<-query attribute='precursors'->
----
'''Followers: '''
<-query attribute='followers'->
->8-
]
textreport frame "" {
header -8<-
== Accounting Software Project ==
<[navigator id="navbar"]>
->8-
footer "----"
textreport index "Overview" {
formats json
center '<[report id="overview"]>'
}
textreport "Status" {
formats json
center -8<-
<[report id="status.dashboard"]>
----
<[report id="status.completed"]>
----
<[report id="status.ongoing"]>
----
<[report id="status.future"]>
->8-
}
textreport development "Development" {
formats json
center '<[report id="development"]>'
}
textreport "Deliveries" {
formats json
center '<[report id="deliveries"]>'
}
textreport "ContactList" {
formats json
title "Contact List"
center '<[report id="contactList"]>'
}
textreport "ResourceGraph" {
formats json
title "Resource Graph"
center '<[report id="resourceGraph"]>'
}
}
# A traditional Gantt chart with a project overview.
taskreport overview "" {
header -8<-
=== Project Overview ===
The project is structured into 3 phases.
# Specification
# <-reportlink id='frame.development'->
# Testing
=== Original Project Plan ===
->8-
columns bsi { title 'WBS' },
name, start, end, effort, cost,
revenue, chart { ${TaskTip} }
# For this report we like to have the abbreviated weekday in front
# of the date. %a is the tag for this.
timeformat "%a %Y-%m-%d"
loadunit days
hideresource @all
balance cost rev
caption 'All effort values are in man days.'
footer -8<-
=== Staffing ===
All project phases are properly staffed. See [[ResourceGraph]] for
detailed resource allocations.
=== Current Status ===
The project started off with a delay of 4 days. This slightly affected
the original schedule. See [[Deliveries]] for the impact on the
delivery dates.
->8-
}
# Macro to set the background color of a cell according to the alert
# level of the task.
macro AlertColor [
cellcolor plan.alert = 0 "#90FF90" # green
cellcolor plan.alert = 1 "#FFFF90" # yellow
cellcolor plan.alert = 2 "#FF9090" # red
]
taskreport status "" {
columns bsi { width 50 title 'WBS' }, name { width 150 },
start { width 100 }, end { width 100 },
effort { width 100 },
alert { tooltip plan.journal
!= '' "<-query attribute='journal'->" width 150 },
status { width 150 }
scenarios delayed
taskreport dashboard "" {
headline "Project Dashboard (<-query attribute='now'->)"
columns name { title "Task" ${AlertColor} width 200},
resources { width 200 ${AlertColor}
listtype bullets
listitem "<-query attribute='name'->"
start ${projectstart} end ${projectend} },
alerttrend { title "Trend" ${AlertColor} width 50 },
journal { width 350 ${AlertColor} }
journalmode status_up
journalattributes headline, author, date, summary, details
hidetask ~hasalert(0)
sorttasks alert.down, delayed.end.up
period %{${now} - 1w} +1w
}
taskreport completed "" {
headline "Already completed tasks"
hidetask ~(delayed.end <= ${now})
}
taskreport ongoing "" {
headline "Ongoing tasks"
hidetask ~((delayed.start <= ${now}) & (delayed.end > ${now}))
}
taskreport future "" {
headline "Future tasks"
hidetask ~(delayed.start > ${now})
}
}
# A list of tasks showing the resources assigned to each task.
taskreport development "" {
scenarios delayed
headline "Development - Resource Allocation Report"
columns bsi { title 'WBS' }, name, start, end, effort { title "Work" },
duration, chart { ${TaskTip} scale day width 500 }
timeformat "%Y-%m-%d"
hideresource ~(isleaf() & isleaf_())
sortresources name.up
}
# A list of all tasks with the percentage completed for each task
taskreport deliveries "" {
headline "Project Deliverables"
columns bsi { title 'WBS' }, name, start, end, note { width 150 }, complete,
chart { ${TaskTip} }
taskroot AcSo.deliveries
hideresource @all
scenarios plan, delayed
}
# A list of all employees with their contact details.
resourcereport contactList "" {
scenarios delayed
headline "Contact list and duty plan"
columns name,
email { celltext 1 "[mailto:<-email-> <-email->]" },
Phone,
managers { title "Manager" },
chart { scale day }
hideresource ~isleaf()
sortresources name.up
hidetask @all
}
# A graph showing resource allocation. It identifies whether each
# resource is under- or over-allocated for.
resourcereport resourceGraph "" {
scenarios delayed
headline "Resource Allocation Graph"
columns no, name, effort, rate, weekly { ${TaskTip} }
loadunit shortauto
# We only like to show leaf tasks for leaf resources.
hidetask ~(isleaf() & isleaf_())
sorttasks plan.start.up
}
Schedule
Id,Start,End
AcSo,2002-01-16-00:00,2002-04-18-11:44
AcSo.spec,2002-01-16-09:00,2002-01-24-14:20
AcSo.software,2002-01-24-14:20,2002-03-28-13:20
AcSo.software.database,2002-01-24-14:20,2002-02-07-14:20
AcSo.software.gui,2002-02-28-14:20,2002-03-28-13:20
AcSo.software.backend,2002-02-07-14:20,2002-02-28-14:20
AcSo.test,2002-03-28-13:20,2002-04-18-11:44
AcSo.test.alpha,2002-03-28-13:20,2002-04-03-10:56
AcSo.test.beta,2002-04-03-10:56,2002-04-18-11:44
AcSo.manual,2002-01-16-09:00,2002-02-26-11:40
AcSo.deliveries,2002-01-16-00:00,2002-04-18-11:44
AcSo.deliveries.start,2002-01-16-00:00,2002-01-16-00:00
AcSo.deliveries.prev,2002-02-28-14:20,2002-02-28-14:20
AcSo.deliveries.beta,2002-04-03-10:56,2002-04-03-10:56
AcSo.deliveries.done,2002-04-18-11:44,2002-04-18-11:44
Project
/*
* Issue #56: The "Union Limit" Split
* Tests weeklymax limit enforcement with ISO week boundaries
* Task must split across week boundary when hitting 20h weekly cap
*/
project "Union_Contract" 2025-10-01 +2w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-10-01
}
shift standard "Standard" {
workinghours mon - fri 09:00 - 17:00
}
resource worker "Part Timer" {
workinghours mon - fri 09:00 - 17:00
limits { weeklymax 20h }
}
task chain "The Split" {
task step1 "Wed Work" {
effort 8h
allocate worker
start 2025-10-01-09:00
}
task step2 "Thu Work" {
effort 8h
allocate worker
depends !step1
}
task step3 "The Split Task" {
effort 8h
allocate worker
depends !step2
}
task step4 "Follow Up" {
effort 4h
allocate worker
depends !step3
}
}
taskreport union_output "union_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
}
Schedule
Id,Start,End
chain,2025-10-01-09:00,2025-10-06-17:00
chain.step1,2025-10-01-09:00,2025-10-01-17:00
chain.step2,2025-10-02-09:00,2025-10-02-17:00
chain.step3,2025-10-03-09:00,2025-10-06-13:00
chain.step4,2025-10-06-13:00,2025-10-06-17:00
Project
project "Cloud_Migration_Workflow" 2025-11-03 +2w {
timezone "Etc/UTC"
timeformat "%Y-%m-%d %H:%M"
now 2025-11-03
}
# 1. Shifts
# Standard: Mon-Fri
shift standard {
workinghours mon - fri 09:00 - 17:00
}
# Ops Shift: Tue-Sat (Sunday/Monday off)
shift ops_week {
workinghours tue - sat 09:00 - 17:00
}
# 2. Resources
resource devops "DevOps Team" {
# The Intern: 50% efficiency.
# 1 hour of effort takes 2 hours of clock time.
resource intern "Junior Dev" {
workinghours standard
efficiency 0.5
}
# The Admin: Standard efficiency, but works Tue-Sat.
resource admin "SysAdmin" {
workinghours ops_week
efficiency 1.0
}
}
# 3. Workflow
task migration "Migration Pipeline" {
# Step 1: Code Prep
# Effort: 16h
# Resource: Intern (0.5 eff) -> Requires 32h of work time.
# Calendar: Mon-Fri.
# Calculation: Mon(8) + Tue(8) + Wed(8) + Thu(8).
task prep "Code Refactor" {
effort 16h
allocate intern
start 2025-11-03-09:00
}
# Step 2: Deployment
# Effort: 16h
# Resource: Admin (1.0 eff) -> Requires 16h of work time.
# Dependency: Must wait for Prep (ends Thu 17:00).
# Calendar: Tue-Sat.
task deploy "Server Deployment" {
effort 16h
allocate admin
depends !prep
}
}
taskreport "workflow_output" {
formats csv
columns id, start, end
timeformat "%Y-%m-%d-%H:%M"
leaftasksonly true
}
Schedule
Id,Start,End
migration.prep,2025-11-03-09:00,2025-11-06-17:00
migration.deploy,2025-11-07-09:00,2025-11-08-17:00
| Projects | 24 |
|---|---|
| Scheduled | 24 |
| Not scheduled | 0 |