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
- Update, never re-post. One message per pull request, or one row in the table.
- Fold when done. Merged and closed become one grey line; in
board, the row leaves the table instead. - Age out. In
compact, a card with no transition for 48 hours folds to one line —still open · 2dplus what it is still waiting for — and unfolds on the next event. Onlycompactages: acardchannel keeps the card it paid for, and thehigh-tier cards aboardchannel posts are the exceptions it wanted in front of a person. - One notification per pull request. The mention set at first post, the author once at ready to merge, reminders as direct messages. Nothing else pings anyone.
- Bots and agents roll up, at every rung, into one message per repository.
- The digest carries the totals, so the channel itself does not have to.
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.
- It asks once. Whichever button gets pressed, that answer is recorded and the rung is never proposed for that channel again — Keep as is is a real answer, not a snooze.
- Switching writes the new rung onto every route into that channel, because a channel has one density.
- Nobody but the route's creator sees the note.
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.