What happens
Three report and dashboard figures do not show what their labels say.
- Capacity is described as "How allocation is spread across the people working on projects". The page shows one row per project, with member count, open tasks and overdue tasks. It never groups work by person.
- Task status is described as "What is open, what is blocked, and what is overdue". The report counts open, in progress and blocked. Nothing on it counts or flags overdue tasks. "Due soonest" lists open tasks by due date only.
- Projects I am in on the dashboard counts every project the reader can see. It has no member filter. For an admin, who can read every project, the number is all projects.
Why
Read at development 6fa5ef5.
src/manifest.json:151 (the Portfolio page note) promises "one row per assignee aggregating allocation". src/manifest.json:163 is the Capacity card. src/views/Portfolio.vue:131-152 loops over active projects and pushes one row per project.
src/manifest.json:162 is the Task status card. The TaskStatusReport widgets (src/manifest.json:169 onward) are open, in progress, blocked, by status, by priority and due soonest. None filters on a past due date. The page's own note explains why: OpenRegister's aggregation endpoint only evaluates scalar equality, so a relative-date filter would be silently dropped.
src/manifest.json:97-110 (kpi-member-projects) is a plain count on project with no filter.
Fix direction
- Either build the per-person view (group open tasks by
assignedTo across projects), or rename the card and note to "Projects at a glance".
- Add an overdue count that does not depend on a relative-date aggregation filter, for example a small custom widget that reuses
summariseProjectTasks(). Or drop "overdue" from the card text.
- Filter
kpi-member-projects on members containing the current user, or remove it if RBAC scoping already makes it equal to the active count for non-admins.
Live check
- Open Reports, then Capacity, in a project where two people have tasks. Expected today: rows are projects, not people.
- Give a task a due date in the past. Open Reports, then Task status. Expected today: no overdue figure.
- As admin, create a project you are not a member of. Expected today: "Projects I am in" goes up by one.
Matrix rows
prt-capacity, prt-task-status, prt-dashboard, prt-project-capacity in openspec/parity/capabilities.json (PR #645).
Related: #228 (portfolio dashboard spec), #227 (capacity planning spec).
What happens
Three report and dashboard figures do not show what their labels say.
Why
Read at development 6fa5ef5.
src/manifest.json:151(the Portfolio page note) promises "one row per assignee aggregating allocation".src/manifest.json:163is the Capacity card.src/views/Portfolio.vue:131-152loops over active projects and pushes one row per project.src/manifest.json:162is the Task status card. TheTaskStatusReportwidgets (src/manifest.json:169onward) are open, in progress, blocked, by status, by priority and due soonest. None filters on a past due date. The page's own note explains why: OpenRegister's aggregation endpoint only evaluates scalar equality, so a relative-date filter would be silently dropped.src/manifest.json:97-110(kpi-member-projects) is a plaincountonprojectwith no filter.Fix direction
assignedToacross projects), or rename the card and note to "Projects at a glance".summariseProjectTasks(). Or drop "overdue" from the card text.kpi-member-projectsonmemberscontaining the current user, or remove it if RBAC scoping already makes it equal to the active count for non-admins.Live check
Matrix rows
prt-capacity,prt-task-status,prt-dashboard,prt-project-capacityinopenspec/parity/capabilities.json(PR #645).Related: #228 (portfolio dashboard spec), #227 (capacity planning spec).