Zenoba
Documentation

Documentation — Planning

Guide to the Zenoba planning module: Gantt, dependencies, constraints, critical path, auto-scheduling, versions and undo.

Overview

The planning module runs on Zenoba’s React engine: gantt-core (14 computation modules — CPM, constraints, calendar, leveling, WBS, history, simulation) and gantt-react (grid, timeline, bars). It provides:

FeatureDescription
Interactive barsDrag and drop, resize, link creation by dragging.
4 dependency typesFS, SS, FF, SF with positive or negative lag.
Critical pathZero-slack tasks that set the project duration.
Auto-schedulingRecomputes dependent task dates after a move.
SlackTotal and free float computed server-side (CPM), shown in each bar’s tooltip.
8 constraintsASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO, MFO.
BaselinesDated references of the plan: compare, ghost bars, restore (Ctrl+B).
Hierarchical WBSAutomatic numbering (1.1, 1.2, 2.1…).
Non-working daysGreyed out according to the workspace work calendar.
4 zoom levelsDay, week, month, year, plus “fit to screen”.
Task panelTabs: properties, checklist, comments, deliverables, time, assignees, risks, actions, activities, traceability.
Filters and columnsFilter by assignee, hide completed tasks, WBS sort, configurable columns.
ExportJSON and CSV downloads; PDF through the browser print dialog.
Built-in AI10 agents in the contextual chat; AI proposals reviewed before they apply.
Consultation / Work modesConsultation: the AI changes nothing. Work: the AI may act; an automatic version is taken when the session starts (Ctrl+5).
Versions and historySaved or automatic versions, seven-day undoable action history (Ctrl+Z, Ctrl+H).
What-if scenariosExplore an alternative without touching the plan, compare, then apply.
4 viewsFull Gantt, chart only, table, kanban (Ctrl+1 to Ctrl+4).
WorkloadPer-resource load panel; resource leveling as an advanced setting.
AI wizardFull plan generated from a description; creates the “Initial AI plan” baseline.

Versions and undo

Five mechanisms complement each other, from the finest gesture to the broadest:

  1. Undo / History (Ctrl+Z, Ctrl+H) — every write — create, update, delete, link — is recorded with its before and after state. Undo replays the before state, redo the after state; an undone deletion brings back the whole task and its subtasks. A new action after an undo closes the redo. The journal survives reloads and is shared between users; unprotected entries are archived after seven days.
  2. Saved version — “Save a version” button (Gantt toolbar, versions bar or Versions page). It freezes the plan under a name and seals every earlier action: they stay readable in the history (audit trail) but can no longer be undone.
  3. Automatic versions — taken when a Work session starts and before any restore. An automatic version can be compared with the current plan, pinned (never purged) or restored. They expire after thirty days; saved versions never do.
  4. Baselines — the approved, dated plan; comparing the current plan with the baseline measures date and duration variances; it can be restored.
  5. Scenarios — a copy of the plan on which an alternative is explored, compared, then applied in one go; an applied scenario cannot be applied again.

Every rollback — version, baseline or scenario — first takes a safety version “Auto: before restore”, then seals the history: to undo it, go back to that safety version.

Tip : work freely in Work mode, undo at will, then save a version once the plan is approved — and create the baseline that variances will be measured against.

Dependencies (links)

Zenoba supports the four PMI / PMBOK link types:

FS

Finish → Start

B starts when A finishes. The most common.

SS

Start → Start

B starts together with A (optional lag).

FF

Finish → Finish

B finishes together with A.

SF

Start → Finish

A must start for B to finish. Rare.

Lag: delay between the two tasks. Positive = wait, negative = overlap.

POST /api/v1/projects/{id}/gantt/link
{ "source": 101, "target": 102, "type": "0", "lag": 2 }

Task constraints

Constraints limit when a task can be scheduled; auto-scheduling respects them.

CodeNameBehaviour
ASAPAs soon as possibleDefault. The task starts as early as its dependencies allow.
ALAPAs late as possibleThe task is pushed as late as possible without delaying the project.
SNETStart no earlier thanThe task cannot start before the constraint date.
SNLTStart no later thanThe task must start by the constraint date.
FNETFinish no earlier thanThe task cannot finish before the constraint date.
FNLTFinish no later thanThe task must finish by the constraint date.
MSOMust start onThe task starts exactly on the given date.
MFOMust finish onThe task finishes exactly on the given date.
PUT /api/v1/projects/{id}/gantt/task/104
{ "constraint_type": "snet", "constraint_date": "2026-12-01" }

PUT /api/v1/projects/{id}/gantt/task/106
{ "deadline": "2027-03-01" }

Critical path

The critical path is the longest sequence of tasks: it sets the minimum project duration. Every zero-slack task belongs to it.

Consequence : any delay on a critical task delays the whole project.

Enable it from the toolbar (“Critical path” button): critical tasks turn red.

GET /api/v1/projects/{id}/gantt/compute
{
  "wbs": { "1": "1", "101": "1.1", ... },
  "critical_path": [101, 102, 103, 107, ...],
  "slack": { "101": 0, "104": 11, "105": 30, ... }
}

Auto-scheduling

Auto-scheduling automatically recalculates dependent task dates when a task is moved. It respects:

  • All 4 link types (FS, SS, FF, SF) with positive/negative lag
  • All 8 constraint types (ASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO, MFO)
  • Non-working days (weekends + calendar holidays)

Enable auto-scheduling from the Gantt toolbar. After each task move, the server recalculates and the Gantt updates automatically.

POST /api/v1/projects/{id}/gantt/auto-schedule
{ "modified_count": 3, "modified_ids": ["104", "109", "113"] }

Free Slack

Free slack is the number of days a task can be delayed without impacting the project end date.

  • Slack = 0 : critical task, no delay possible without impacting the project
  • Slack = 5 : 5 days of flexibility before impacting the project
  • Slack > 10 : the task has plenty of flexibility, no immediate risk

Practical example: if a task has Slack=0 and slips by 1 day, the project end date slips by 1 day. If Slack=5, you have 5 days of buffer before impact.

Enable the Slack feature in the Gantt settings (gear icon): each task’s total and free float appear in its tooltip.

Baseline

A baseline freezes the approved plan at a given date. Comparing the current plan with the baseline measures variances.

  • Click “Baseline” in the toolbar (Ctrl+B)
  • Create a baseline and name it (e.g. “Approved plan — 28 Aug committee”)
  • Enable the baseline to see the ghost bars on the Gantt

Create a baseline at each key milestone to track variances over time.

Weekends and holidays

Saturdays and Sundays appear in light grey on the timeline, at Day and Week zoom.

Holidays come from the workspace work calendar (Administration → Calendars); auto-scheduling and the critical path respect them.

REST API

Every action goes through the JWT-authenticated REST API. Each write is journaled and stays undoable for seven days.

POST   /api/v1/projects/{id}/gantt/task              { "text": "...", "start_date": "2026-09-01", "duration": 5 }
PUT    /api/v1/projects/{id}/gantt/task/{task_id}    { "text": "...", "progress": 0.5, "constraint_type": "snet" }
DELETE /api/v1/projects/{id}/gantt/task/{task_id}
POST   /api/v1/projects/{id}/gantt/link              { "source": 101, "target": 102, "type": "0", "lag": 0 }
DELETE /api/v1/projects/{id}/gantt/link/{link_id}

POST   /api/v1/projects/{id}/checkpoint              // checkpoint: named version + sealed journal
GET    /api/v1/projects/{id}/snapshots               + /compare?a=&b=current, /{snapshot_id}/restore
GET    /api/v1/projects/{id}/journal                 + /undoable, /redoable, /{entry_id}/undo, /{entry_id}/redo
GET    /api/v1/projects/{id}/baselines               + /compare?a=&b=, /{baseline_id}/restore
GET    /api/v1/projects/{id}/scenarios               + /{scenario_id}/compare, /{scenario_id}/apply

Keyboard shortcuts and gestures

Ctrl+ZUndo
Ctrl+Y / Ctrl+Shift+ZRedo
Ctrl+1 … Ctrl+4Views: full Gantt, chart, table, kanban
Ctrl+5Toggle Consultation ↔ Work
Ctrl+BBaselines menu
Ctrl+HAction history
Shift+F10Context menu: work, edit, copy, decompose, indent, delete
ClickSelect the task and open its panel
Double-clickInline cell editing
Shift+dragPan the view (or middle button)
EscClose the open panel