PullPulse
docs · surfaces · 5 min

What PullPulse posts, and when

PullPulse posts one message per pull request and edits it as things happen. This page covers that message, its thread, and the surfaces around it: the digest, t

PullPulse posts one message per pull request and edits it as things happen. This page covers that message, its thread, and the surfaces around it: the digest, the reminder DM, the agent rollup and the markdown fallback.

One card, never re-posted

A pull request gets one Slack message. Every later event — a check finishing, a review landing, a push — edits that message in place; nothing is re-sent for the same pull request. Posting can wait for a draft to be marked ready or for checks to start, per the repository's holdUntil setting. Once posted, the message stays one message until merged or closed, when it collapses (see "The fold").

The four-stop rail

Every card carries a rail: four stops, one glyph each, always in this order, always the same labels.

● Ready · ● Checks · ◐ Review · ○ Merge      (full card)
●●◐○                                          (compact row)

Only the glyph changes; one event moves one character and nothing else. The same rail, compact, appears in the digest table, the reminder and the App Home queue.

Stop not started done in progress blocked
Ready draft ready for review
Checks no CI passing running failing
Review nobody looked fully approved someone reviewing, partial changes requested
Merge not yet merged conflicts

The ask line

Line one of the card body: what the pull request wants, how much work it is, and what to know before approving.

👀 Needs a reviewer · ▮▮▮▮ high · ~45 min · migration, no tests

Before the file list has arrived, the line shows only the ask — no meter, no estimate, no guess.

The ledger line

One line under the card answers "what just happened, and when, in your own timezone":

Posted · asked Lee and Sam · 11:34 AM

It updates on every transition and names who did it; the time is a Slack date token, so each reader sees their own clock. It never disappears — with nothing new to report it says when the card was first posted and who was asked.

The three buttons

Fixed order, so a reader's thumb keeps its place:

  1. Open on GitHub
  2. Brief — the AI summary, in the thread
  3. I'll review it while the card is asking a reviewer for something (nobody has looked, someone is mid-review, or one approval is not enough); Explain otherwise (red build, changes requested, conflict, or already ready to merge).

I'll review it does what reacting 👀 does: requests a GitHub review from whoever clicked, and the Review stop updates to show them holding it.

The low-emphasis row

Four icon buttons, always reachable: 🔍 Explain (the routing trace — matched rule, rejected rules and why, resolved targets), ⏰ Snooze (hides the card from the clicker only), 🔕 Mute (shared — shows on the card with who muted it and until when), 📅 Snooze until… (pick a time). Snooze is personal and invisible to everyone else; mute is shared and visible to everyone.

The fold: merged or closed

A merged or closed pull request stops being a card. It collapses to one line: the state mark, the title, the finished rail, who resolved it, and — for a merge — the one number kept, time from ready to merge:

Add rate limiting to the ingest path #412 · ●●●● · merged by @dana · 3h 48m from ready to merged · View

No alert, no detail, no buttons — the thread and reactions stay, since it is the same message, just shorter. A compact-density card with no transition for 48 hours folds the same way temporarily, and unfolds on the next event; see Keeping a busy channel quiet.

What each event changes

Event What changes Notifies
Draft opened; ready with checks running nothing posted yet
Checks turn green first post mention set, once
Claimed Review → in progress; ledger names who
Push, checks turn red Checks → failing; ask moves to author
Checks green again Checks → passing; previous ask restored
Changes requested Review → changes requested; ask moves to author
Approved, more needed Review → partial; ledger names who is left
Approved, mergeable, green Review → done; ask becomes Ready to merge one reply to author
Base moves, conflicts appear Merge → conflicts; ask moves to author
Merged / closed folds to one line
Reminder fires ledger notes how long it's been quiet DM to reviewer(s)
Channel route muted metadata line gains who and until when

Exactly one notification

The table above has one Notifies entry, and that is the whole rule: the mention set (reviewers, by default) is named once, in the first post's mention line; the author gets one thread reply the first time the pull request can merge, via notifyAuthorOnReady (default on, never for an agent or bot author); reminders are DMs, never channel pings, and stop once a human approves or requests changes. Every other transition is a silent edit — nobody is re-notified for a card they already saw.

The thread

Three things only: the brief (one reply, rewritten on every push — what changed, why it matters, what to check, suggested reviewers); the ready-to-merge ping (sent once, to the author); relayed review comments from GitHub. There is no per-transition log — the ledger on the card is the log.

Digest, reminders, and the agent rollup

Markdown fallback

A Slack client that does not know the card and carousel blocks sees a plain markdown message stating the same facts in the same order instead.

Releases

A repository's releases are a separate surface with its own opt-in, its own three-stop rail and its own fold; see Releases and what shipped.