Skip to content

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 stdin using -:
    cat network.json | ccpm-scheduler build - --out-dir plan --json
    

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.