PullPulse
docs · density · 3 min

Keeping a busy channel quiet

A channel has one density: how much room PullPulse gives each pull request. Pick it by the volume the channel actually sees, not by preference — a channel that

A channel has one density: how much room PullPulse gives each pull request. Pick it by the volume the channel actually sees, not by preference — a channel that outgrows its rung gets a one-time suggestion to move up (see "The proposal" below).

The three densities

Density Volume What the channel sees per pull request
card up to ~12 a day the full skeleton: mention line, card, ledger, metadata, collapsed detail, icon row
compact ~12 to ~40 a day the mention line and the card alone: title, rail, ask line, three buttons — headline, ledger, metadata and detail move to the pull request's own pane
board above ~40 a day, or by choice no per-pull-request message except for the high complexity tier; one table per channel, edited in place, a row per open pull request. Asks move to DM reminders and the App Home

card is where every channel starts. Nothing proposes it — a channel only ever gets offered the next rung up.

Rules that hold at every rung

Every rung keeps the rail, the fold and the one-notification rule; density changes footprint and nothing else. See What PullPulse posts, and when for what the card, the rail, the ask line and the fold actually look like, and How PullPulse rates a pull request for the meter that decides what counts as high.

The proposal

PullPulse counts the messages it posts into a channel each day — posts only; editing a card it already posted does not count. When the last three finished days were all over the threshold for the channel's current rung, it posts one ephemeral note to whoever set up the route: the three day's counts, a Switch to compact (or board) button, and Keep as is.

There is no automatic switch. A channel stays at whatever rung it was last set to until a person changes it.

Pinning a rung

Set density from the Slack watch form when adding a route, or from .pullpulse.yml:

defaults:
  density: compact

It can also be set per routing rule, so one channel can carry card for one repository's routes and compact for another's:

rules:
  - name: high-volume monorepo
    repos: ['acme/monorepo']
    route:
      channel: '#eng-reviews'
      density: board

Whatever is pinned in .pullpulse.yml overrides anything PullPulse would otherwise have proposed.