Project Commander Docs ← Back to site

Epics Tab — Feature Guide

Epics tab — search/filter toolbar, epics table with progress and scope-change
Epics tab — search/filter toolbar, epics table with progress and scope-change

What it's for

The Epics tab shows the project's hierarchical scope — every epic plus its child issues — and rolls up progress, scope-change, and status per epic. Where the Sprints tab is organised around time (which iteration owns which work) and the Scope tab around change over time, the Epics tab is organised around grouping (what work belongs together) and completion against that grouping.

It answers four questions: what are we building right now; how far through each epic are we; which epics are growing in scope versus shrinking; and which epics are at risk of missing their target. It is intended for product, programme, and delivery leads who want to assess the project at the work-package level without opening Jira.

The tab requires that issues are linked to a parent epic in Jira. Issues without an epic parent are excluded.

Toolbar

A single row at the top with the search input, the status filter, and the assignee filter. All three filters compose — an epic must match all of them to appear.

Search field

A text input that filters the epic list as the user types. Matching is case-insensitive and runs against the epic's summary and Jira key. Empty input shows everything.

Status filter

A dropdown labelled All Epics. The options are All Epics plus every status string that appears in the current set of epics — typically a mix of Done, On Track, At Risk, Behind, Overdue, To Do. The status values are derived (see Status derivation below), not pulled directly from Jira's workflow.

Owner filter

A dropdown labelled All Owners. Lists every assignee found across the visible epics; selecting one narrows the list to that person's epics only.

Section header

Collapse All button

Appears only when at least one epic is currently expanded. Clicking it closes every open epic in one click. There is no symmetric Expand All button — expanding is one-at-a-time by clicking individual rows.

Epic row (always visible)

The Epics tab is presented as a flat list of epic rows, each clickable to expand a child-issue table beneath it.

Epic row columns

Hover and done styling

Hovering a row tints the background (#FAFBFC). Epics in Done status render at 60% opacity so the open epics stand out.

Sorting

Every column header is clickable. Clicking toggles between ascending and descending; the active column shows a ▲ or ▼ next to its label. Clicking a different column resets to the default direction for that column. Sorts are stable, so a tied secondary order is preserved between sorts.

Child-issues table (expanded view)

Clicking an epic row toggles a child table below it. Only one epic's children are open at a time — clicking a different epic's row collapses any other open epic.

Authentication epic expanded showing the inset child-issues table with key, status, assignee, points, and sprint columns
Authentication epic expanded showing the inset child-issues table with key, status, assignee, points, and sprint columns

Child table columns

Child table styling

Inset background #F4F5F7, 12px font, 32px left padding, no further nesting (subtasks under a story are not shown).

Status derivation

The pill in the Status column is computed, not read from Jira:

  1. If the epic itself has a Jira status in the done set (done, closed, resolved, complete, completed) or progress hits the rounded 100% mark → Done (green).
  2. Else if the epic has a due date and that date is before today and the epic is not done → Overdue (red).
  3. Else if the epic has no children or progress is 0% with no in-progress child → To Do (grey).
  4. Else by progress band: ≥ 60% → On Track (green); 30–59% → At Risk (amber); < 30% → Behind (red).

Scope change

A baseline date is the earliest active or future sprint start in the project. Issues created on or after that date count as added scope; issues that no longer exist (removed) reduce the original count. The percentage is (currentPts − originalPts) / originalPts × 100.

When the backend exposes a richer per-epic scope endpoint, that data is preferred; otherwise the client-side fallback runs over the issue list. The percentage is (grey) when the epic is Done or when no baseline can be established (for example, no active or future sprints exist).

Empty / loading / error states

Points vs. Hours mode

The whole panel respects the project's estimation mode.

In hours mode, done per issue is the time spent; total is the largest of original estimate, remaining + spent, and points-as-hours. Done equals total on issues marked done so the epic completion percentage matches the points-mode result.

Roll-up logic

The epic's Done and Total values are pure sums over its children, with the same point-or-hour rule applied to each child. Subtasks roll up into their parent story automatically through Jira's hierarchy — they do not appear as their own row in the child table.

Numbers are rounded to one decimal place to keep the column tidy.

Cross-cutting modes and settings

How the numbers are computed

Effects on other parts of the app

© 2026 Project Commander · projectcommander.app · Support