Skip to content

docs: per-member exclusions for user-group notification recipients - #11686

Merged
mngr merged 1 commit into
masterfrom
gleb/cub-3302-group-notification-recipients
Aug 28, 2026
Merged

docs: per-member exclusions for user-group notification recipients#11686
mngr merged 1 commit into
masterfrom
gleb/cub-3302-group-notification-recipients

Conversation

@mngr

@mngr mngr commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Companion docs for cubedevinc/cubejs-enterprise#14418 (CUB-3302), which reworked how a scheduled refresh picks its notification recipients. Both pages described the previous UI, so this is mostly a correction rather than an addition.

What was wrong

notifications.mdx claimed recipients were "a searchable picker with checkboxes… grouped into Users and User groups sections". They are now two separate controls, and the second is a dropdown holding an expandable checklist of groups and their members.

scheduled-refreshes.mdx claimed that "subscribing adds you to the schedule's email recipients; unsubscribing removes you". That was the exact hole the ticket fixed: someone reached only through a user group had no recipient row to remove, so the toggle could never turn itself off.

What this documents

  • Excluding individual group members — the new checklist. Tick a group, expand it, untick anyone who should be skipped; they are stored as exceptions to that group on that schedule, so the group keeps picking up new members while the excluded ones stay out.
  • What the viewer's toggle now covers — one click stops every route the schedule could reach you by, direct row and each group; subscribing reverses both.
  • The exception is not a block on the person — a direct recipient row and group membership are independent, so someone excluded at group level who is also selected under Users still gets the email. Easy to assume otherwise.
  • The email footer's Unsubscribe link runs through the same path, so it covers group delivery too.

Smaller drifts corrected on the same surfaces

  • The delivery channel is radio buttons (Send via), not a toggle — it was previously ambiguous whether both channels could be used at once. They cannot.
  • The frequency select is now labelled Schedule. The heading follows it; its anchor is preserved as {#frequency} so any external deep links keep working.
  • Switching a schedule to Slack clears group exceptions as well as individual subscriptions — the page previously mentioned only the latter.

Verification

Every claim was checked against the shipped implementation rather than inferred from the diff, including the two the pages already had right, which are preserved:

  • "emailed only once" if selected both individually and via a group — confirmed, pushRecipient de-dupes.
  • The User groups control appears only when the workspace has at least one group — confirmed, it renders behind userGroups.length > 0.

Link references resolve in both files with none unused, and /admin/users-and-permissions/user-groups (newly referenced from scheduled-refreshes.mdx) exists.

Not done here, as it is a separate concern: both pages use <Info> for the plan-availability callout where docs-mintlify/CLAUDE.md asks for <Note>. Pre-existing on both, and worth its own sweep across the docs rather than a drive-by on two files.

Cube Cloud reworked how a scheduled refresh picks its notification
recipients (CUB-3302), and both of these pages described the old UI.

Recipients used to be one picker with Users and User groups as sections
inside it; they are now two separate controls, the second a dropdown
holding an expandable checklist of groups and their members. That
checklist is the feature: tick a group, expand it, and untick anyone who
should be skipped, stored as an exception to that group on that
schedule.

The viewer's subscribe toggle changed meaning as well. Someone reached
only through a group previously had no recipient row to remove, so the
toggle could not turn itself off; it now also records them as an
exception in every group notifying them, and subscribing reverses both
halves. The email footer's Unsubscribe link goes through the same path,
so it covers group delivery too.

Also corrects three smaller drifts on the same surfaces: the delivery
channel is radio buttons rather than a toggle, the frequency select is
now labelled Schedule (its anchor is kept as #frequency for inbound
links), and switching a schedule to Slack clears group exceptions as
well as individual subscriptions.
@mngr
mngr requested a review from keydunov as a code owner August 28, 2026 19:09
@mintlify

mintlify Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
cubed3 🟢 Ready View Preview Aug 28, 2026, 7:10 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@github-actions github-actions Bot added the pr:community Contribution from Cube.js community members. label Aug 28, 2026
@claude

claude Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Claude finished @mngr's task in 2m 3s —— View job


Docs review — approve with nits: 2 medium, 3 low, posted inline

Full review
  • Gather context (diff, changed files)
  • Check docs conventions (docs-mintlify/CLAUDE.md)
  • Verify links/anchors resolve
  • Post review

Verification I ran

Check Result
[ref-user-groups]/admin/users-and-permissions/user-groups docs-mintlify/admin/users-and-permissions/user-groups.mdx exists
[ref-subscribe]scheduled-refreshes#subscribing-to-notifications ✅ heading present at scheduled-refreshes.mdx:119
[recipients](#recipients) (new inline anchor) ### Recipients at notifications.mdx:75
All link refs defined / none unused, both files
{#frequency} anchor preserved across the rename

No inbound links to #frequency from elsewhere in the docs, so the anchor preservation is belt-and-braces — correct instinct regardless, since external links aren't greppable.

I can't verify the behavioural claims: the implementation is in cubedevinc/cubejs-enterprise, which isn't in this checkout. Taking the PR description's account of what was checked at face value, with one exception noted inline.

Findings

Medium

  1. scheduled-refreshes.mdx:134 — the new <Note> inverts the callout convention. docs-mintlify/CLAUDE.md reserves <Note> (gray) for plan-availability and uses <Info> (blue) as the catch-all, precisely so gray stays a scannable plan-gating signal. This is a general note, so it wants <Info>. Combined with the deliberately-deferred <Info> plan callout at line 8, the page ends up with the convention exactly backwards on both callouts. Deferring the sweep is a reasonable call; new callouts landing on the right side of it is close to free.

  2. scheduled-refreshes.mdx:141 — "schedules that email individual recipients" is pre-existing wording that this PR's own new paragraph turns into a trip hazard. Having just explained that a group can reach you with no individual recipient row, the reader hits a sentence implying group-only schedules have no toggle — the opposite of what CUB-3302 fixed. The em-dash clause self-corrects a beat later, but dropping "individual" removes the problem outright.

Low

  1. scheduled-refreshes.mdx:51## Creating a schedule### Schedule gives three nested "schedule"s in the TOC on a page titled Scheduled Refreshes, where only the innermost means cadence. Matching the UI label is defensible; naming the control in the first line would orient the reader. Separately, lines 105 and 109 still say "frequency, timezone, and notification settings" — the rename didn't reach them.

  2. notifications.mdx:86-87 — the "number beside a group's name" / "member with no email address" sentence is the one new claim not listed among the things verified against the implementation, and it asserts two separable facts (what the number counts, and that email-less members are both hidden and uncounted). Worth confirming, and the second clause may not describe a reachable state.

  3. scheduled-refreshes.mdx:171 — still no trailing newline; cheap to fix on a line already being touched.

What's good

The framing choices are the strongest part of this. "An exception is not a block on the person" is exactly the misconception a reader would otherwise walk away with, and stating it as an explicit bullet rather than leaving it implied is the right instinct — same for "Exceptions are saved with the rest of the form, not applied as you click," which pre-empts a real "did that take effect?" moment. Preserving {#frequency} on the heading rename, and being explicit in the description about which pre-existing claims were re-verified and preserved rather than assumed, are both the careful version of this work.

The scope discipline is also right: correcting the <Info>/<Note> plan callouts across the docs genuinely is a separate sweep, not a drive-by on two files.

· [`gleb/cub-3302-group-notification-recipients`](https://github.com/cube-js/cube/tree/gleb/cub-3302-group-notification-recipients)

Comment thread docs-mintlify/docs/explore-analyze/scheduled-refreshes.mdx
Comment thread docs-mintlify/docs/explore-analyze/scheduled-refreshes.mdx
Comment thread docs-mintlify/docs/explore-analyze/scheduled-refreshes.mdx
Comment thread docs-mintlify/docs/explore-analyze/notifications.mdx
Comment thread docs-mintlify/docs/explore-analyze/scheduled-refreshes.mdx
@mngr
mngr merged commit c506987 into master Aug 28, 2026
44 checks passed
@mngr
mngr deleted the gleb/cub-3302-group-notification-recipients branch August 28, 2026 19:12
mngr added a commit that referenced this pull request Aug 28, 2026
* docs: address review feedback on #11686

#11686 was merged while five review comments were still open. This
applies all of them.

- The new "affects only this schedule" callout used <Note>, which
  docs-mintlify/CLAUDE.md reserves for plan availability. It is a
  general note, so it becomes <Info>. Left the page's actual plan
  callout alone; converting those is a separate sweep.
- "schedules that email individual recipients" predates the change but
  now contradicts the paragraph above it, which has just explained that
  a group reaches you without an individual row. Now "schedules that
  send email".
- The Frequency -> Schedule rename left "frequency" in two sentences of
  Duplicating a schedule, and the renamed heading arrived with no line
  naming the control. Both fixed.
- Tightened the group member-count sentence: it made two claims at once
  where one, phrased around what a reader would actually notice (a
  count lower than the group's membership), carries the same
  information.
- Trailing newline on scheduled-refreshes.mdx.

* docs: name the schedule control consistently when duplicating

The previous commit's rename left "schedule" doing two jobs in one
sentence — the object being duplicated and the field being re-entered —
and dodged it in the bullet below by inventing "cadence", a third name
for a control the UI calls Schedule.

Both now bold **Schedule** as the control name, which disambiguates it
from the object without adding a term.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr:community Contribution from Cube.js community members.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant