Event-driven "needs you" notification so the operator knows the moment he is the blocker #439

Closed
opened 2026-07-28 03:00:14 +00:00 by igor · 1 comment
Collaborator

The operator's stated biggest problem: not knowing when he is the blocker. Today that is only discoverable by asking, or by opening Forgejo and reading.

Decision: an event-driven "needs you" notification, NOT an hourly digest. An hourly mail that usually says "nothing needs you" trains the reader to stop opening it, and then it fails exactly when it matters. Fire when something ENTERS the needs-you set; say nothing when the set is unchanged.

Something enters the set when:

  • a PR is open and awaiting the human (shadow verdict is not APPROVE, or the repo carries automerge.require_human)
  • an issue gains Status/Blocked or Status/Need More Info
  • a CEO proposal or question is filed awaiting a greenlight
  • a systemd unit enters failed state

Content: repo, item, one line of why it needs him, and a direct link. Group by repo. Include how long it has been waiting — a PR that has sat three days is a different message from one that landed a minute ago.

Requirements:

  • Event-driven. Persist the last-notified set; notify only on additions. Removals are silent.
  • No repeats. The same item must not re-notify while it stays in the set. A weekly "still waiting on you" summary of anything older than N days is acceptable and probably useful; per-tick nagging is not.
  • Reuse the existing ship-report delivery path rather than building a second mailer.
  • Silent when nothing changed — no heartbeat mail.

Acceptance criteria:

  • Adding a blocked issue produces exactly one notification; a subsequent tick with no change produces none.
  • An item leaving the set produces no mail.
  • The notification names the repo, the item, why, and the wait time.
  • Tests cover: first entry notifies, unchanged set is silent, removal is silent, a second distinct item notifies.

Blocked (2026-07-28 05:03Z)

Scope exceeded: this branch reached 0 commits / 792 changed lines, over the per-issue cap (10 commits / 400 lines).

Files touched (first 30):

  • bin/test-needsyou.sh
  • bin/test-review.sh
  • bin/tick.sh
  • lib/needsyou.sh
  • lib/review.sh

Split this into smaller issues, then remove Status/Blocked and the next tick will re-claim what's left.

The operator's stated biggest problem: **not knowing when he is the blocker.** Today that is only discoverable by asking, or by opening Forgejo and reading. **Decision: an event-driven "needs you" notification, NOT an hourly digest.** An hourly mail that usually says "nothing needs you" trains the reader to stop opening it, and then it fails exactly when it matters. Fire when something ENTERS the needs-you set; say nothing when the set is unchanged. Something enters the set when: - a PR is open and awaiting the human (shadow verdict is not APPROVE, or the repo carries `automerge.require_human`) - an issue gains `Status/Blocked` or `Status/Need More Info` - a CEO proposal or question is filed awaiting a greenlight - a systemd unit enters failed state Content: repo, item, one line of why it needs him, and a direct link. Group by repo. Include how long it has been waiting — a PR that has sat three days is a different message from one that landed a minute ago. Requirements: - **Event-driven.** Persist the last-notified set; notify only on additions. Removals are silent. - **No repeats.** The same item must not re-notify while it stays in the set. A weekly "still waiting on you" summary of anything older than N days is acceptable and probably useful; per-tick nagging is not. - Reuse the existing ship-report delivery path rather than building a second mailer. - Silent when nothing changed — no heartbeat mail. Acceptance criteria: - Adding a blocked issue produces exactly one notification; a subsequent tick with no change produces none. - An item leaving the set produces no mail. - The notification names the repo, the item, why, and the wait time. - Tests cover: first entry notifies, unchanged set is silent, removal is silent, a second distinct item notifies. --- ## Blocked (2026-07-28 05:03Z) Scope exceeded: this branch reached **0 commits / 792 changed lines**, over the per-issue cap (10 commits / 400 lines). Files touched (first 30): - bin/test-needsyou.sh - bin/test-review.sh - bin/tick.sh - lib/needsyou.sh - lib/review.sh Split this into smaller issues, then remove `Status/Blocked` and the next tick will re-claim what's left.
igor self-assigned this 2026-07-28 04:30:42 +00:00
igor added spent time 2026-07-28 04:52:37 +00:00
21 minutes 51 seconds
igor removed their assignment 2026-07-28 04:52:38 +00:00
igor self-assigned this 2026-07-28 04:55:44 +00:00
Author
Collaborator

Scope exceeded: this branch reached 0 commits / 792 changed lines, over the per-issue cap (10 commits / 400 lines).

Files touched (first 30):

  • bin/test-needsyou.sh
  • bin/test-review.sh
  • bin/tick.sh
  • lib/needsyou.sh
  • lib/review.sh

Split this into smaller issues, then remove Status/Blocked and the next tick will re-claim what's left.

(Appended to the issue description above -- removing Status/Blocked re-queues the ticket with this context already in hand.)

Scope exceeded: this branch reached **0 commits / 792 changed lines**, over the per-issue cap (10 commits / 400 lines). Files touched (first 30): - bin/test-needsyou.sh - bin/test-review.sh - bin/tick.sh - lib/needsyou.sh - lib/review.sh Split this into smaller issues, then remove `Status/Blocked` and the next tick will re-claim what's left. _(Appended to the issue description above -- removing `Status/Blocked` re-queues the ticket with this context already in hand.)_
igor removed their assignment 2026-07-28 05:03:25 +00:00
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Total time spent: 21 minutes 51 seconds
igor
21 minutes 51 seconds
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joshtronic/igor#439
No description provided.