Data Formats & Schemas¶
ccpm-scheduler accepts input either as separate CSV files or as a single, unified JSON document. It outputs a CSV schedule, a Markdown build summary, and optional Gantt chart PNG / interactive HTML dependency graph artifacts.
Input Formats¶
1. CSV Files¶
A network can be represented by 2 or 3 CSV files: tasks.csv, resources.csv, and optional calendar.csv.
tasks.csv¶
Defines project tasks, duration estimates, dependencies, and resource assignments.
| Column | Required | Type | Description |
|---|---|---|---|
id |
Yes | String | Unique task ID (e.g. T1, design). |
name |
No | String | Human-readable name (defaults to id). |
realistic_duration |
No* | Integer | Duration estimate including safety (working days; 0 marks a milestone, see below). |
optimal_duration |
No* | Integer | Padding-free aggressive duration estimate (0 marks a milestone). |
predecessor_ids |
No | String | Semicolon-separated predecessor link string (e.g. T1, T1:SS+2, T2:FF). |
resource_ids |
Yes† | String | Semicolon-separated resource IDs assigned to task (at least 1 required). |
url |
No | String | Optional web URL (passed through to HTML interactive graph and Gantt). |
*At least one of realistic_duration or optimal_duration must be specified. If optimal_duration is omitted, it defaults to ceil(realistic_duration / 2).
†Not required for a milestone task (duration 0) — see below.
Legacy column names: predecessors and resources are still accepted as aliases for predecessor_ids and resource_ids (and duration/duration_safe/duration_aggressive for realistic_duration/optimal_duration), but using them raises a W_LEGACY_COLUMNS warning — new files should use the _ids names above. The alias only applies when the current column is absent; if both are present, the current name wins.
Milestone tasks: a task whose duration resolves to exactly 0 is a milestone (a phase gate, a project terminus, an "all done" marker) and is exempt from the "at least 1 resource" rule — it contends for nothing and takes no time. This is the same convention ccpm-scheduler's own internal FINISH node uses; see Network Layout: Guaranteed Single Termination Point for how it's scheduled and merged. A negative or non-numeric duration is still rejected — only exactly 0 qualifies.
Dependency Link Notation:
- A or A:FS: Finish-to-Start link (task starts after A finishes).
- A:SS+2: Start-to-Start link with 2-day lag (task starts 2 days after A starts).
- A:FF: Finish-to-Finish link (task finishes when A finishes).
- A:SF-1: Start-to-Finish link with -1 day lag.
resources.csv¶
Defines available resources and their default capacity.
| Column | Required | Type | Description |
|---|---|---|---|
id |
Yes | String | Unique resource ID (e.g. dev, designer). |
name |
No | String | Resource name (defaults to id). |
capacity |
No | Integer | Concurrent capacity limit per day (default: 1). |
url |
No | String | Optional detail URL. |
calendar.csv (Optional)¶
Overrides resource capacity over half-open day intervals [from, to).
| Column | Required | Type | Description |
|---|---|---|---|
resource_id |
Yes | String | Target resource ID. |
from |
Yes | Integer | Start day offset (inclusive). |
to |
Yes | Integer | End day offset (exclusive). |
capacity |
Yes | Integer | Override capacity during interval (0 = unavailable). |
2. Unified JSON Exchange Format¶
The single JSON document format consolidates tasks, resources, calendar, and settings into one structure:
{
"buffer_method": "cap",
"resources": [
{ "id": "dev", "name": "Lead Developer", "capacity": 1 },
{ "id": "designer", "name": "UI Designer", "capacity": 1 }
],
"calendar": [
{ "resource_id": "dev", "from": 10, "to": 15, "capacity": 0 }
],
"tasks": [
{
"id": "T1",
"name": "Design Wireframes",
"realistic_duration": 10,
"optimal_duration": 5,
"resources": ["designer"]
},
{
"id": "T2",
"name": "Implement Frontend",
"realistic_duration": 14,
"optimal_duration": 7,
"predecessors": [
{ "id": "T1", "type": "FS", "lag": 0 }
],
"resources": ["dev"]
}
]
}
- JSON network inputs can be passed as a file path or piped via
stdinusing-:
Output Formats¶
1. schedule.csv¶
The generated resource-leveled and buffered schedule.
| Column | Description |
|---|---|
id |
Task or buffer ID (e.g. T1, PB, FB_T2). May include the synthetic FINISH milestone — see Guaranteed Single Termination Point. |
name |
Row display name. |
type |
Row type: task (FINISH is a type: task row too — duration 0, no resources), project_buffer, or feeding_buffer. |
chain |
Chain assignment: critical, feeding-1, feeding-2, or none. FINISH, when present, is always critical. |
start |
Scheduled start day offset. |
finish |
Scheduled finish day offset. |
duration |
Scheduled (optimal) duration in working days. |
realistic_duration |
Original realistic duration estimate (empty for buffers). |
resource_ids |
Semicolon-separated list of assigned resources. |
predecessor_ids |
Semicolon-separated list of predecessor links (includes X:PB and X:FB buffer attachment links). |
url |
Detail URL passed through from input. |
2. summary.md¶
A Markdown document generated by build summarizing key project metrics:
- Overall project completion promise date (end of Project Buffer).
- Critical Chain length and task sequence.
- Project Buffer (PB) size and selected sizing method (cap, hchain, or rsem).
- Feeding Buffer (FB) breakdown and protected chains.
- Calendar availability constraints applied during leveling.
3. Interactive Dependency Network (project-network.html)¶
Generated by ccpm-scheduler graph. A single standalone HTML file containing an interactive vis-network view:
- Color-coded nodes (Critical Chain = firebrick, Feeding Chains = blue/green/purple, Buffers = gold/khaki).
- Resource filtering dropdown menu to isolate tasks assigned to a specific team member.
- Detail tooltips showing realistic vs. scheduled duration estimates.