Issue Log

The Issue Log is a dedicated active-problems tracker, distinct from the Risk Register. Where risks are potential future events, issues are problems happening right now — blockers, escalations, defects, and anything impeding progress. Issues can be raised directly from any task or Gantt bar, or created standalone in the Issue Log view. Everything lives in the .dplan file alongside your tasks — no separate spreadsheet needed.

DPlan is one of the only free Gantt tools to combine a Risk Register and a separate Issue Log with task-linked creation, right-click raise, blocker surfacing, and three export formats — all offline, all in one file.

Opening the Issue Log

Click the Issues tab in the view bar (between Risks and Alerts). The tab shows all open issues for the active project. Switch projects using the sidebar — the log updates immediately.

Two Sources of Issues

The Issue Log automatically pulls from two data sources, merged into a single view:

Source A — Standalone Issues (p.issues[])

Issues you create explicitly from the Issue Log, a task modal, or a Gantt right-click. These are full issue objects with all fields editable. Stored in project.issues[] inside the .dplan file.

Source B — Blocker Comments (zero new data)

Any task comment flagged as a 🔴 Blocker automatically appears in the Issue Log as a Blocker Comment card (read-only, shown with a 📌 chip). No extra data is created — DPlan simply scans task.comments[].isBlocker. This means any blocker you flag today already exists in the Issue Log retroactively for all existing projects.

Blocker comment cards show the linked task name, the comment text, the author, and the date. They can be marked Resolved directly from the Issue Log without opening the Task Editor.

Issue Object — Fields

FieldDescription
TitleOne-line summary of the issue. Pre-filled from task name when raised via right-click or modal button.
PriorityCritical / High / Medium / Low. Maps from task priority when raised from task context.
StatusOpen / In Progress / Resolved / Closed. Setting to Resolved auto-stamps the resolved date.
CategoryTechnical, Resource, Schedule, Scope, Quality, Dependency, Communication, Budget, External, Other.
DescriptionFull description of what happened and why it matters.
ImpactEffect on scope, schedule, cost, or quality — free text.
OwnerWho is fixing it. Pre-filled from first assigned resource when raised from task context.
Raised ByWho identified the issue.
Linked TaskOptional link to a specific task. Pre-filled when raised from task context.
Target DateWhen the issue should be resolved. Shows ⏰ Overdue badge when past today.
Resolved DateAuto-set when status changes to Resolved. Editable manually.
Resolution NoteHow the issue was resolved. Visible only when status is Resolved or Closed.
Days OpenAuto-calculated from raised date. For resolved issues, shows days to resolution instead.

Raising an Issue — Three Entry Points

1. From the Issue Log View

Click + Add Issue in the top-right of the Issue Log header. A new blank issue card is inserted at the top, auto-expanded and ready to edit. All fields start empty — no pre-fill.

2. From the Task Modal — "Log Issue" Button

Open any task (double-click on Gantt, or press Enter on a selected task). In the top-right corner of the task modal header, next to the × close button, there is a red Log Issue button (🔴 icon).

Clicking it:

  1. Creates a new issue pre-filled from the current task.
  2. Sets Title to Issue: [task name].
  3. Sets Priority to match the task's priority.
  4. Sets Owner to the first assigned resource's name.
  5. Sets Linked Task to this task's ID.
  6. Closes the task modal.
  7. Switches to the Issues view with the new card expanded and the title field focused.
Edit the pre-filled title to make it more specific — e.g. change "Issue: Database Migration" to "Issue: Migration script failing on prod replica".

3. From the Gantt — Right-Click Context Menu

Right-click on any task row (left panel) or any Gantt bar (timeline). A flat context menu appears with:

The menu is dismissed by clicking anywhere outside it, or pressing Escape. It auto-clamps to the viewport so it never disappears off-screen.

Issue Cards — Collapsed & Expanded

Each issue renders as a card in the Issue Log list. Cards are collapsed by default to maximise list density — click anywhere on the card header to expand.

Collapsed View

The collapsed header shows (left to right):

Expanded View

Expanding reveals the full form grid: all fields editable inline with auto-save on blur. The resolved date and resolution note fields appear only when status is Resolved or Closed.

Filtering & Search

Three filter controls appear below the stats strip in the Issue Log header:

FilterOptionsBehaviour
Status chipsAll / Open / In Progress / Resolved / ClosedShows only issues matching that status
Priority chipsAll Priorities / 🔴 Critical / 🟠 High / 🟡 Medium / 🟢 LowShows only issues at that priority level
SearchFree textMatches title, description, owner, and linked task name (partial, case-insensitive)

All three filters combine with AND logic. A Clear Filters button appears when filters are active and no issues match.

Stats Strip

The header shows a live strip of issue counts for the current project (both standalone and blocker comment issues combined):

Status Lifecycle

Change status directly from the collapsed card without expanding — optimised for rapid triage in a status meeting.

StatusMeaningBehaviour
OpenIdentified but no active fix in progressDefault on creation. Clearing resolved fields if set back from resolved.
In ProgressActively being investigated or fixedNo automatic side effects
ResolvedFix applied, pending verificationAuto-stamps Resolved Date if not already set. Shows resolution note field.
ClosedVerified resolved, no further action neededSame as Resolved. Issue no longer counted in open metrics.

Overdue Detection

An issue is Overdue when:

Overdue issues show a ⏰ badge in both the collapsed header and the stats strip. The target date chip turns red. The issue card gets a faint red background tint.

Days Open Counter

Every issue shows a days open count derived from the raised date:

This feeds the Avg Resolution Time KPI in the Issue Report.

Issue Report

Go to Reports → 🐛 Issue Report to see an analytical view of all issues for the active project.

The report includes:

Export

CSV Export

Click Export ▾ → CSV in the Issue Log header, or click Issues CSV in the Export ribbon. Downloads a UTF-8 CSV with all issues (both standalone and blocker comment issues), including all fields:

ID, Title, Status, Priority, Category, Owner, Raised By, Linked Task, Target Date, Days Open, Overdue, Description, Impact, Resolved Date, Resolution Note

Compatible with Excel, Google Sheets, and project management tools that accept CSV import.

HTML Export

Click Export ▾ → HTML Download in the Issue Log header, or Issues HTML in the Export ribbon. Downloads a self-contained standalone HTML file:

Print / PDF

Click Export ▾ → Print / PDF. Opens the browser print dialog immediately. Use Save as PDF in the dialog. For best results use Portrait orientation.

Integration with WBS Tree View

The Blocker overlay in the WBS Tree View counts unresolved blocker comments per task and shows a pulsing 🔴 dot on the affected node. Since blocker comments also appear in the Issue Log, resolving them from the Issue Log removes the blocker dot from the WBS.

Integration with Risk Register

Issues and risks are complementary — the same right-click menu lets you raise either from a task. A common workflow is:

  1. Log a risk early in the project (potential future problem).
  2. If the risk occurs, set its status to Occurred in the Risk Register.
  3. Right-click the affected task → Log Issue to create a matching active issue to track the resolution.

There is no automatic link between a risk and an issue — this is by design, keeping the two registers independent. The issue's Linked Task field and the risk's scope field both point to the same task, which is sufficient for correlation during review.

Data Storage

Standalone issues are stored in project.issues[] inside the .dplan JSON file. This array is optional — projects without it load normally and start with an empty register.

Blocker comment issues are derived at read-time from task.comments[].isBlocker — they are not stored separately and cannot be accidentally lost or duplicated.

Resolved dates are stored as ISO 8601 strings ("2026-04-11T09:00:00.000Z"). Target dates are stored as YYYY-MM-DD strings to match Gantt date format.

Keyboard Reference

KeyAction
Click card headerExpand / collapse the issue card
TabMove between fields in the expanded card
EscapeClose the right-click context menu (in Gantt)
Enter in SearchApplies search filter immediately (also works live on input)

See also: Risk Register, Tags, Comments & Blockers, WBS Tree View, Reports.