Skip to content

operate/audit-logs.mdx diagnoses a missing notification as "a subscription filtered the event out" — subscriptions filter nothing #146

Description

@os-project-manager

Found while implementing #132 (whose file surface is content/docs/configure/notifications.mdx only, so this was recorded rather than fixed). Filed unassigned.

content/docs/operate/audit-logs.mdx:100-104:

Because this log sits upstream of routing, a row here with no matching inbox message usually means a subscription or preference filtered the event out — check Notifications when a user reports a missing alert.

The subscription half of that sentence is the same claim #132 corrects on the Notifications page: the subscription→recipient expansion is not wired, so a subscription row cannot filter anything out. This one is worse than a description error because it is diagnostic advice — it sends an admin chasing a missing alert to the Setup "Notification Subscriptions" grid, where nothing they change can affect delivery.

Measured on objectstack origin/main @ 2866d5f97e (the same measurement #132 rests on, re-run):

  • AudienceSpec (packages/services/service-messaging/src/messaging-service.ts:51) has no 'subscribers' member; EmitInput.audience is required.
  • RecipientResolver.resolveOne() (recipient-resolver.ts:113-146) branches on user: / role: / team: / owner_of: / email / bare id — no branch reads sys_notification_subscription.
  • Outside its own declaration, the Setup nav entry and tests, nothing references sys_notification_subscription.
  • The object's own header carries the upstream ⚠️ [#9807] … NOT WIRED in this repo annotation.

What is true for that sentence: the preference half. MessagingService.emit() calls PreferenceResolver.filter() on the resolved recipients (messaging-service.ts:707) and logs suppressed for all recipients by preference when it empties. So the honest advice is: an event with no inbox message means the producer's audience did not resolve to that user, or their preference muted the topic on that channel.

Scoping, kept the same as the framework's annotation and as #132's wording: this is a statement about the platform notification pipeline (objectstack measured; objectui measured — zero runtime readers, counter-checked against sys_inbox_message; the cloud repo was not measured, recorded as a declared narrowing rather than guessed).

Suggested fix: drop "a subscription or" from that sentence and let it name the two real causes (audience did not include the user; preference muted it). One-line edit, but on a page outside #132's surface and inside no other card's completion scope, hence a separate issue.

Related: #132, objectstack-ai/objectstack#9807 (ruling), objectstack-ai/objectstack#10027 (the landed annotation).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions