View all documentations

Notifications Board

A single page that lists open, parentless work across organizations Wizard can reach on your behalf — Goals, Problems, Bugs, HR cards, and other issue types — in the team's shared priority order, with attention signals for work that concerns you.

Open it at: https://wizard.holdex.io/notifications

Sign in

The board uses GitHub App authorization (not the same login as invoices or calendar).

  1. Open /notifications.
  2. If you are not signed in, authorize the Holdex GitHub App when prompted.
  3. Wizard only shows work in repositories you can already open on GitHub, intersected with orgs where the App is installed.

Use Sign out on the page to clear the App session.

What you see

Each row is an open parentless issue: nothing linked above it in GitHub's parent–child hierarchy. A quiet Goal with no activity still appears; it is on the board because the work is open, not because something is unread.

For each item the board shows:

  • Title (opens the issue on GitHub)
  • Organization / repository and issue number
  • Assignee avatars, or unclaimed when there is none (hover an avatar for its GitHub handle)
  • When the issue was last updated on GitHub
  • Its ETA, when the issue body has one (see below)
  • A signal dot when you have attention on that item or a child thread under it (see below)

Signal dots and expand

Expanding a row lists your non-done threads for that item: activity on the item itself, plus child threads that roll up to it (e.g. a PR that closes a Problem under the Goal, or a sub-issue under the Goal). Roots are resolved when a signal is raised; older thread rows without roots stay invisible under the Goal until something new raises on them.

Preferences (toolbar) can turn on Expand all items. Visible rows that have threads then start open; quiet rows stay closed. You can still collapse any row. The choice stays on this browser only. Default is off: items start collapsed.

If the same PR closes work under two Goals, it appears under both. Mark done or read on either Goal clears that thread everywhere — there is one notification state per person per thread.

Dot Meaning
Filled Unread signal; colour follows the loudest class (Direct → Participating → Watching)
Hollow Only read signals remain (row stays, dimmed)
None Nothing waiting for you on this item

Colours today: Direct (primary), Participating (amber), Watching (slate).

Each expanded line shows a short summary (who + what) and how long ago the signal was raised, and links to the thread on GitHub. A thread that is closed or merged on GitHub carries that word before its summary; an open thread carries nothing. The word comes from the events Wizard handles, so a thread with no event since this shipped shows none. Hover or focus lights the whole line. The trailing icons toggle read / unread (envelope), open the subscription menu (bell / bell-off / eye), mark done (check), and copy AI prompt (sparkles). Opening the thread / item from the board marks read. Read dims the line with a hollow dot; the item stays in its ranked place. Mark done removes that thread from the expand list and shows a short Undo toast; after it dismisses, the thread stays gone. Clear all at the top of the expanded list marks every thread under that item done at once — the item stays in its ranked place with no dot. A single Undo toast restores those threads while it is visible.

Copy AI prompt puts a predefined prompt template plus a link to that thread on your clipboard, ready to paste into an AI tool — it never changes read or done state, and never includes the actual comment text.

The subscription menu is one of three states, per thread — it only affects threads you already have a row for:

State Delivers
Subscribe (default) Every signal class
Mute Direct only
Watch outcome Direct, plus closed / reopened / merged

Direct — a mention, assignment, or review request — always reaches you no matter which state is set; muting or watching outcome only ever narrows Participating/Watching, never Direct.

With the Wizard browser extension installed, the same state is written to GitHub's own subscription for that thread, from any open github.com tab (within a few seconds) or on your next GitHub page load. Until then the bell icon carries a small dot. Subscribe maps to Subscribed, Mute to Unsubscribed, Watch outcome to Custom (closed and reopened, plus merged on a PR). Changing a subscription on GitHub with the extension's own buttons updates the board the same way. Without the extension, the board keeps its setting and GitHub is left unchanged.

Reading a thread's subscription from GitHub also gives you a board row for that thread if you had none: a subscribed state on GitHub means you took part in the thread or subscribed to it yourself. The row starts read and carries no signal, so it marks nothing until one arrives.

ETA

When an item's body has an ETA: DD-MMM-YYYY line (the # Deadline section Goals and Bugs already use), the board shows it next to the item's org/repo. Its colour is a hint, nothing else — it never changes the item's rank or raises a signal:

Colour Meaning
Plain No ETA, far off, or ETA: undefined
Yellow Due within a few days
Orange Due today
Red Past due

[DRAFT] items show their ETA in plain text; it never tints, whatever its value.

What raises a signal (for you)

Raised by Wizard from GitHub App webhooks in orgs where the App is installed.

Direct — aimed at you: mention, assign, review requested (from you, or from a team you belong to); or (as PR author) changes requested / a comment-only review. Mentions on draft PRs still raise. Editing a body or comment raises again only when your @handle is newly added.

Participating — activity on a thread you authored, are assigned to, or have already commented on (including submitting a review): someone else comments (conversation or inline review), or approves your PR. Draft PR conversation / approve stays quiet. Comment edits do not raise Participating. Commenting or reviewing still counts as participation even when that action raised no signal for you.

Watching — lifecycle on a thread you follow: opened, closed, reopened, or merged (non-draft PRs). You follow a thread when you are assigned to it, or when your subscription on it is Subscribe or Watch outcome. Assignees of a parent Goal are not notified for a child PR yet.

Signals are stored per person. The actor who did the action does not get a signal for their own action. Bot accounts and logins in the org whitelist’s excludedUsers list do not receive signals.

Needs me

Needs me shows items assigned to you, plus any item that still has an uncleared signal for you (filled unread or hollow read), in the same ranked order. Marking a thread read does not drop it from the filtered list — Clear or done does, unless you are still assigned. Quiet items you are not assigned to stay hidden. Turn it off to see the full board again. The filter is in the URL (?needs-me=1), so it survives refresh and can be shared.

Types

Types lists every GitHub Issue Type currently on your board (Goal, Bug, HR, and so on — issues with no type set show as Untyped), each with how many items carry it. Uncheck a type to drop every item of that type from the board entirely; check it again to bring it back. It combines with Needs me — both narrow the same list, neither reorders it. The hidden set is in the URL (?hide-types=...), so it survives refresh and can be shared.

Assignees

Assignees lists everyone currently assigned to something on your board, each with how many items carry them. Uncheck a name to hide their items — an item with more than one assignee only drops once every one of its assignees is hidden, so hiding a co-assignee never hides an item you're also on. Unassigned pins under All, same treatment — uncheck it to hide unclaimed items, the same way unchecking a name hides theirs. It combines with Needs me and Types — all three narrow the same list, none reorders it. The hidden set is in the URL (?hide-assignees=...), so it survives refresh and can be shared.

Known Holdex team members sort to the top of the list, ahead of everyone else (alphabetical within each group), so you don't have to scroll through every org member to find who you're looking for. Type in the search box at the top to narrow the list by name — All and Unassigned stay pinned above it and are never filtered out by a search. The All checkbox toggles every entry at once, Unassigned included, regardless of the search box — useful for isolating a couple of people by unchecking All, then checking just those names back on, instead of unchecking everyone else one at a time. The Types filter has the same search box and All control. Both lists scroll internally past a couple hundred pixels rather than growing the page.

Coverage

Use Coverage to see which organizations (and repositories) Wizard can look at for you. Compare that to what you use day to day — if something is missing, the board is not looking there (install or access gap), not necessarily that the work does not exist.

Refresh coverage in that dialog re-queries GitHub Search for every covered org and updates the cached item list. Day to day, the page also refreshes covered orgs in the background; use it when an org or repo you expect is missing. While a refresh is running, the Coverage button is disabled and shows a spinner.

The subtitle under Items shows when the item list was last fetched, when its cache expires (items are cached for up to 10 minutes — hover the subtitle for exactly what that means), when Wizard last accepted a signal event (pipeline heartbeat across the team, not only your open threads), and — when someone has set the shared order — when that order last changed and by whom.

Marks poll every few seconds from Wizard's own signal store, so a new mention or review request appears without a reload and without moving any row. The list of items itself is not refreshed on that cadence, and nothing refreshes it in the background on a timer either — once its cache expires, it just stays as-is until the next time this page is loaded or reloaded, which then fetches fresh data for whatever expired. Use Refresh coverage in Coverage to fetch now instead of waiting on that.

Shared order

There is one cross-organization ranked order for the whole team. Ranked items appear first, in that order. Everything else is unranked (newest updated first), under an unranked separator when both sides are present.

Nothing on the board reorders rows by urgency, assignee, signal class, or how late an ETA is. Position is importance; the dot is separate.

Managers

Managers (isManager: true in Holdex team-members config) see reorder controls on each row:

Control Effect
Send to top First among ranked items
Send to bottom Last among ranked items
Set position Place at a chosen 1-based slot in the ranked list
De-rank Remove from the shared order (item joins unranked while it stays open)

Promoting an unranked item with top / bottom / set position inserts it into the ranked list at that place. Non-managers see the same sorted list but cannot change the order.

Closed or missing ranked items

Closing an issue removes it from the open Search results, so it leaves your board list. Its place in the shared order is kept until a manager de-ranks it (so a reopen can return to the same slot). Those ids are not listed separately on the board yet — if you need to clear a closed item from the order, reopening it (or using a later cleanup) and de-ranking may be required until a dedicated management surface exists.

What this is not (yet)

  • Not a replacement for github.com/notifications or read-state sync with GitHub.
  • GitHub's native Subscribe / Unsubscribe controls do not report to the board live; the extension picks the change up the next time you open that thread.
  • Parentless PRs are not top-level board rows yet (Search today is parentless issues only); a PR with no closing link still will not appear under a Goal.
  • Stand-in rows for work whose Goal you cannot access are not on this page yet.
  • Re-parent / re-link on GitHub does not refresh rollup targets until the next signal raise on that thread.

The product intent and fuller behaviour are described in the Goal Spec contextual GitHub notifications (in the monorepo at docs/specs/contextual-github-notifications-presence-based.md).