PM Voting
Per-item upvoting on Mission Control board items to signal priority: users toggle their vote and counts are read per board. Covers where the vote badge and button appear, how duplicate toggles are prevented, and the channels and feature flag behind it.
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 itempm: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 rowsmc-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, the parent page. The sibling that puts a different kind of marker on an item card is pm-stickers.md, and if it is your own items you want to sort rather than the board's, pm-my-work.md is the closer match. The full behavioural contract is recorded in pm-voting-contract.md, and every other page in this library is listed in INDEX.md.
Last verified 2026-09-27