Skip to content

Baselines

A baseline is a frozen snapshot of your project’s schedule at a point in time. Capture one when you commit a plan to stakeholders, then compare it against the live schedule to see exactly how far — and which tasks — have drifted.

Capturing and managing baselines in the app

Section titled “Capturing and managing baselines in the app”

From the Schedule view, open the Actions (···) menu:

  • Capture baseline takes a snapshot of every task’s current planned dates. It requires the Project Manager role, auto-names the snapshot (Baseline N), and makes it active. A short confirmation first explains what a baseline is and — if one is already active — reminds you that capturing a new one keeps the previous baseline in the project’s history rather than overwriting it. You can also capture from the Baseline section of a task’s detail drawer when no baseline exists yet.
  • Baselines… opens the baseline manager, where any project member can see every baseline (name, capture date, and task count) and which one is active. A Project Manager can Set active to switch the comparison baseline, and a Project Owner can Delete one.

The same operations are available through the REST API for automation. Baseline ghost bars drawn directly on the Gantt canvas and structured rebaseline reasons are planned for 0.5.

Capturing a baseline records, for every task in the project at that moment:

  • the task name (kept even if the task is later deleted),
  • planned start and finish dates,
  • duration, and any actual start/finish already recorded.

Snapshots are immutable — once written, a baseline’s task rows never change, so a baseline remains a faithful record of what the plan looked like when you took it. A baseline notes whether its tasks had computed CPM dates at capture time, so a comparison can flag a snapshot that was taken before the schedule was fully calculated.

A project can hold many baselines — for example one per phase gate — but one is active at a time. The active baseline is the one used for comparison. Activating a different baseline automatically deactivates the previous one.

Capturing and managing baselines via the API

Section titled “Capturing and managing baselines via the API”

All endpoints are project-scoped and authenticated with a bearer token ($JWT); $PROJECT_ID is the project UUID.

Terminal window
# 1. Capture a baseline (name optional — auto-named "Baseline N" if omitted).
# Requires the Project Manager role. Snapshots every task atomically.
curl -X POST -H "Authorization: Bearer $JWT" -H "Content-Type: application/json" \
-d '{"name": "Phase 1 commit"}' \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/
# 2. List baselines for the project.
curl -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/
# 3. Activate a baseline (deactivates any other). Requires the Project Manager role.
curl -X POST -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/$BASELINE_ID/activate/
# 4. Delete a baseline. Requires the Project Admin (owner) role.
curl -X DELETE -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/$BASELINE_ID/
Method & pathPurposePermission
GET /api/v1/projects/{id}/baselines/List baselinesProject member
POST /api/v1/projects/{id}/baselines/Capture a baseline (auto-named if blank)Project Manager (ADMIN)
GET /api/v1/projects/{id}/baselines/{baselineId}/Retrieve (with task count)Project member
POST /api/v1/projects/{id}/baselines/{baselineId}/activate/Make active, deactivate othersProject Manager (ADMIN)
DELETE /api/v1/projects/{id}/baselines/{baselineId}/Delete a baselineProject Admin (OWNER)

Once a baseline is active, opening a task in the Schedule view shows a Baseline section in the task detail drawer with the planned-vs-current comparison for that task:

Planned (baseline)Current (live)Delta
Start / finish at captureStart / finish from the latest CPM runVariance in days (e.g. +3 days)

The same per-task comparison is available directly from the API:

Terminal window
# Active baseline vs current schedule for a single task.
curl -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/tasks/$TASK_ID/baseline/

The response is discriminated by has_baseline / in_baseline: it reports no baseline, a task added after the baseline was taken, or a full comparison row with start_delta_days / finish_delta_days (positive = slipping later than planned).

current_start and start_delta_days compare against the task’s span (scheduled_start — see the bar vs. the remaining-work window), not the narrower remaining-work window that early_start shrinks toward as an in-progress task approaches completion. Comparing against the remaining-work window would make start_delta_days grow purely from progress being reported, not from any actual schedule slip.