Public: anyone can read this; the crew can change it.

An ask lives only while its cause does: stale asks expire, a dismissal holds until something new, one cause in one place is one row #688

shipped production is serving it opened this has it
opened this

Pillar: P1 Feed (umbrella #587). Builds the rule #634's pinned "needs you" will render. One run, fresh from today's main.

Why. Owner, 2026-10-05: "I've got soooo many things to mute and dismiss. Do these really need my attention? This should be high entropy… Maybe it's just noise now since so much is stale." Measured that day: /asks said 18 things need you. 10 of the 16 pull asks were "green, waiting for your look" on pulls that no longer merge into main (conflicts), so Ship could not work; 8 of the 16 sat in one repository; and the three he dismissed in the feed still counted on /asks, on the header and on the phone notifier, because only the feed reads dismissals.

The job: an ask exists only while its cause does, and one cause in one place is one row.

Acceptance.

  • [ ] Expiry. A green pull whose current head conflicts with its base, or has nothing left to add to it, is not a "look" ask. The forge learns this off the request path (a sweep over open green pulls, keyed by head and base tip) and the ask reads the result; unknown means still asked. The pull's own page still says it conflicts.
  • [ ] Dismiss holds until the cause is new. /asks, the header count, the board's "Needs you", the feed and the phone notifier all skip an ask the viewer dismissed, until something new happens to it: a check runs on it again (a new head), it is parked again, or a new UTC day for a ceiling pause.
  • [ ] Collapse. Asks of the same kind in the same repository are one row with a count ("cs: 3 green changes wait for your look"), in the feed and on /asks; dismissing that row dismisses what it held at that moment, and something new under it brings the row back.
  • [ ] One rule for every surface: the count is the number of rows a person sees, so the header, /asks, the board and the feed cannot disagree.
  • [ ] An ask card does not offer Mute app: asks are never muted away, so the button did nothing there. Removed, not hidden.
  • [ ] Reachable: the page (/asks, the feed's pinned rows), the API (GET /api/v1/feed, POST /api/v1/feed/interactions with kind: dismissed on a row), tests for each rule, and looks at phone and desktop widths on the pull.

Start from: src/web/studio/asks.ts (askCandidatesFor, the one source), src/feed/items.ts, src/feed/feed.ts, src/core/interactions.ts, src/crew/notify.ts, src/core/pulls.ts (pullStatus).

Must not touch: the release workflow, the chart, other repositories.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs