---
title: PM Feature Profiles (G12 -- per-board progressive disclosure)
---

# PM Feature Profiles (G12 -- per-board progressive disclosure)

## What it is

An in-development progressive disclosure engine that controls which PM features are visible on each
board. It is what keeps a simple board simple: instead of every board showing all 65 features at once,
each one shows the set that fits how it is being used.

## Where to find it

Per board and per workspace. The feature is in development, gated behind the `pm-feature-profiles`
unreleased feature (`pmFeatureProfilesEnabled`), and the entire profiles plus nudge system is hidden
when it is disabled.

## How it behaves

Each PM board has a **feature profile** that controls which features are visible.
Three presets provide curated feature sets:

- **Tasks** -- lightweight, personal task tracking.
- **Projects** -- mid-range project management.
- **Operations** -- full-featured, all PM features visible.

Users can also customize per-board. A **nudge engine** suggests features
contextually based on board data patterns -- for example, after importing from
Asana it may suggest Asana-specific features.

Key behaviors:

- **Rendered feature set is union-only** -- user overrides can only ADD features,
  never subtract. All UI reads go through `getRenderedFeatureSet()`.
- **Workspace defaults are inheritance-only** -- used during board creation, not
  during rendering. Changing a workspace default does not retroactively affect
  existing boards.
- **Nudge rate limits** -- per-board frequency setting (quiet/normal/eager/off)
  with daily and weekly caps.
- **Post-enable cooldown** -- 7-day pause after enabling a feature before nudges
  fire again.
- **Dismissed nudges are permanent** -- user-global, not per-board, no expiry.

## For agents

- Service in `src/main/services/pm/feature-profiles/pm-feature-profile-service.ts`.
- Nudge engine in `pm-feature-nudge-engine.ts`.
- 3 database tables (`pm_feature_profiles`, `pm_workspace_feature_defaults`,
  `pm_nudge_history`).
- Related settings: `pmDismissedNudges`, `pmComposabilityEnabled`.
- Contract: `pm-feature-profiles-contract.md`.

## Related

The boards whose visible feature set this engine decides are described in
[mission-control.md](mission-control.md). It is the consumer of the validation performed by
[pm-composability.md](pm-composability.md), which checks whether a set of features may be enabled
together at all, and it works alongside [pm-data-density.md](pm-data-density.md), which decides
whether a board has enough usage for a suggestion to be worth making. A reader who came here because
of a nudge will also want [pm-onboarding-help.md](pm-onboarding-help.md), the checklist and contextual
tips built on the same presets.
