Release Notes

2026-08-21

Log time at every level of the hierarchy: epics, features, and objectives can now carry their own time, and every surface shows an honest own-plus-descendants total.

⏱️ Time tracking at every level of the hierarchy

Until now, time could only be logged on items whose work type had no child types — leaves like tasks and stories. Epics, features, and objectives showed a rolled-up total and nothing else.

That restriction is gone. Any item, at any level, can now hold its own time. Every item keeps two separate figures — its own logged time and the rolled-up total from its descendants — and every surface that shows time now reports the combined figure, with each logged hour counted exactly once.

What you'll notice:

  • Log time anywhere. The right-bar Time Spent field, the Items Table cell, the item drawer's Time Tracking tab, and board cards all accept time entries on parents now, not just leaves.
  • An honest breakdown. A parent's sidebar caption now breaks its total down into the item's own time and the time rolled up from child items, so the two are never conflated.
  • Sorting and filtering match what you see. Sorting a table by Time Spent, or filtering on it, now uses the same own-plus-descendants total the column displays. Previously a parent ranked by whichever of the two figures happened to be non-zero.
  • Completion Stats got more accurate. The stats donut now compares the full subtree's time against the matching estimates (it previously compared descendant time against the item's own estimate), the (this item) row shows the item's own time instead of a dash, and the Time Entries header sums all entries rather than only the first page.

Roll-ups that deliberately count each item's own time exactly once — board lane totals, board footers, and the per-user time report — are unchanged, so nothing is double-counted.

🔒 Time-entry lists now respect item visibility

The time-entry list (the entries table, and the findTimeEntries API) is now scoped to what you can see: your own entries, plus entries on items and workstreams your permissions grant read access to. Item-level time totals are unaffected — if you can see an item, its rollup is honest. Admins holding the manage-all-items or manage-all-time-entries capability, and the organization owner, continue to see the full list.

🔌 For API and MCP consumers

  • WorkItemDto gains two derived fields: rolledUpTimeSpentSeconds (descendants only) and totalTimeSpentSeconds (own + descendants). timeSpentSeconds remains the item's own time.
  • timeEntriesTotalSeconds is deprecated — and now returns a correct value derived from the per-user map. It previously read a column that was no longer being written, so consumers of this field will see its value change (from stale-or-zero to correct).
  • The hierarchy filter on findTimeEntries now actually filters to the requested subtree (including workstream roots). It was previously accepted but silently ignored, so integrations that passed it will see fewer — correct — rows.
  • Because parents can now hold their own time, totals on items that already had latent parent-level time will grow the moment this release lands. That is the corrected number.