PM Portfolios
Cross-board aggregation for Mission Control: group multiple boards into a named portfolio and see a unified status summary of total items, completed items and a status-bucket breakdown across every linked board.
Cross-board aggregation for Mission Control: group multiple boards into a named portfolio and see a unified status summary.
What it is
A portfolio is a named grouping of PM boards within a workspace. It lets you aggregate items across multiple boards for a unified view of total items, completed items, and a status-bucket breakdown.
Each portfolio has a title, optional description, and a list of linked
boards. The aggregation works by loading each linked board's full data,
finding its status column, running bucketByColumn (reused from the
dashboard widgets), merging buckets across boards by key, and counting done
items using each board's done-index setting.
Where to find it
Portfolios live in a Mission Control workspace. You create one there, give it a title and optional description, link the boards you want it to cover, and open its summary view to see the cross-board rollup. The same operations are exposed over the CLI routes listed under For agents, so a portfolio can also be built and read programmatically.
How it behaves
- Create -- workspace-scoped, with a title and optional description
- Link / Unlink boards -- add or remove boards from the portfolio
- View summary --
PortfolioSummaryloads each linked board, buckets items by status, and merges across boards for a cross-board rollup - Delete -- soft delete (
is_deleted = 1) that cascades to board links within a transaction
For agents
Key files
src/shared/types/pm.ts(lines 359-373) --PmPortfolioandPmPortfolioBoardinterfacessrc/shared/ipc-schemas/pm-portfolios.ts-- Zod validation schemas for all 8 operationssrc/main/db/queries-pm-portfolios.ts-- SQLite CRUD againstpm_portfoliosandpm_portfolio_boardstablessrc/main/ipc/pm-portfolios-handlers.ts-- 8 IPC handler registrationssrc/main/services/cli/pm/pm-portfolio-routes.ts-- CLI route registrationsrc/plugins/mission-control/web/lib/session-bridge-portfolios.ts-- frontend bridge wrappers (timed IPC calls)src/plugins/mission-control/web/features/portfolios/PortfolioSummary.tsx-- aggregation UI (loads boards, buckets by status, merges)
Implementation notes
- 9 IPC channels prefixed
pm:portfolio:andpm:portfolio-*: list, get, create, update, delete, board list/link/unlink, pluspm:portfolios:changedpush event - CLI routes:
GET /pm/portfolios,GET /pm/portfolios/:id,POST /pm/portfolios,PATCH /pm/portfolios/:id,DELETE /pm/portfolios/:id, plus board link/unlink endpoints; feature-gated viapm_portfolios - Aggregation reuses
bucketByColumnfrom the dashboard widget infrastructure - Soft delete cascades from portfolio to board links within a DB transaction
Related
mission-control.md is the parent feature doc, and
mc-dashboards.md matters here because dashboards share the
bucketByColumn aggregation logic this feature reuses. If what you want to roll up is not boards
but objectives above them, pm-goals.md covers goal tracking, which sits one level
higher. The full list of library pages is in INDEX.md.
Last verified 2026-09-23