---
title: PM Voting
---

# PM Voting

## What it is

**PM Voting** is per-item upvoting on board items to signal priority. Users toggle their vote on
any board item, and the vote count and voter list are fetched per board -- so you can see at a
glance which items the people on a board care about most.

## Where to find it

It appears twice on the board. A vote badge sits inline on kanban cards and table rows, so you can
vote without opening anything, and a vote button sits in the item detail header. Both carry the
running count and open the voter list.

## How it behaves

The feature is gated behind the `collab-voting` board feature flag, so on a board where that flag
is off, neither the badge nor the button appears.

The vote toggle is deduplicated -- `createRequestDedup` keyed on `{itemId, boardId, userId}`
prevents concurrent duplicate toggles from double-counting. Every handler verifies the active user
via `authService` before any database operation.

Toggling also requires an editor role (owner, admin or member -- not viewer) on the board the ITEM
belongs to, not on the board the caller names: the sent `boardId` is cross-checked against the
item's own board and a mismatch is refused, and the board recorded on the vote row is the resolved
one. The vote count is computed by item alone, so before that check any caller could inflate any
item's count.

There is no dedicated toggle beyond that flag; the feature also requires Mission Control to be
enabled.

## For agents

Defined in `src/shared/ipc-channels/pm.ts`:

- `pm:vote:toggle` -- toggle the current user's vote on an item
- `pm:vote:data` -- fetch vote data for all items on a board

Both handlers gate on `requirePmEnabled()` and validate input with Zod schemas
(`pmVoteToggleSchema`, `pmVoteDataSchema`).

**UI components**

Two UI anchors in `voting.ui-anchors.ts`:

- `mc-vote-badge` (action kind) -- inline on kanban cards and table rows
- `mc-vote-button` (action kind) -- item detail header

Both are gated on the `collab-voting` board feature flag.

**Settings**

No dedicated toggle. The feature is controlled by the `collab-voting` board feature flag and
requires `missionControlEnabled`.

## Related

The boards these votes are cast on are described in [mission-control.md](mission-control.md), the
parent page. The sibling that puts a different kind of marker on an item card is
[pm-stickers.md](pm-stickers.md), and if it is your own items you want to sort rather than the
board's, [pm-my-work.md](pm-my-work.md) is the closer match. The full behavioural contract is
recorded in [pm-voting-contract.md](../../.claude/memory/contracts/pm-voting-contract.md), and
every other page in this library is listed in [INDEX.md](INDEX.md).
