Uh oh!
There was an error while loading. Please reload this page.
feat(app-shell): repoint Console bell to sys_inbox_message + receipts (ADR-0030) - #1429
Merged
Merged
Conversation
… (ADR-0030)
The bell read the legacy `sys_notification.{recipient_id,is_read,title,body}`
columns. ADR-0030 re-modeled `sys_notification` into the L2 event (no
recipient/read-state), so the bell returned nothing — every notification the
new pipeline produced was invisible.
The bell now reads the L5 materialization:
- List `sys_inbox_message` by `user_id` (mine scope), 20 most-recent.
- Join `sys_notification_receipt` (user_id + channel:'inbox') for read-state;
unread = no read/clicked/dismissed receipt → drives the badge.
- Mark-read UPDATEs the existing `delivered` receipt to `read`
(keyed notification_id,user_id,channel), inserting only as a fallback.
- Navigate via the materialization's `action_url` (absolute / `/apps/...` /
app-relative `/{object}/{id}`), falling back to source_object/source_id.
- "View all" → `/apps/setup/sys_inbox_message?view=mine`.
Pairs with the framework ADR-0030 pipeline. Verified in-browser (showcase):
a materialized inbox message + delivered receipt lit the bell badge; the
popover rendered the row; "mark all read" flipped the receipt to read in place
(no duplicate) and cleared the badge.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The notification bell read the legacy
sys_notificationobject'srecipient_id/is_read/title/bodycolumns. ADR-0030 re-modeledsys_notificationinto the L2 event (topic/payload/severity/dedup_key/source — no recipient, no read-state), so the bell'srecipient_idquery returned nothing: every notification the new pipeline produced (@mention, assignment,notifyflows, email/preference pipeline) was invisible in the UI. This is the user-facing half of the ADR-0030 cut-over.The bell now reads the L5 in-app materialization:
sys_inbox_messagefiltered byuser_id(theminescope), 20 most-recent,created_at desc.sys_notification_receipt(filtered byuser_id+channel:'inbox'). A message is unread until its event carries aread/clicked/dismissedreceipt; the unread count drives the badge.UPDATEs the existingdeliveredreceipt toread(keyed(notification_id, user_id, channel)), inserting only as a fallback when no receipt exists. Replaces the oldsys_notification.is_readwrite (and drops thesys_notificationbulk path).action_url(absolute URL,/apps/..., or app-relative/{object}/{id}), falling back to the legacysource_object/source_id./apps/setup/sys_inbox_message?view=mine.Stale doc comments in
RecordDetailViewupdated to describe theemit()single-ingress path.Pairs with
Framework PR
objectstack-ai/framework#1456(synthesizesaction_urlfrom the eventsourceso collaboration notifications stay deep-linkable). The cut-over works against the already-shipped ADR-0030 P0–P3 pipeline.Verification (showcase Console, live)
Fresh sqlite backend, full messaging pipeline. Seeded one
sys_inbox_messagefor the signed-in user + itsdeliveredreceipt (exactly what the inbox channel materializes):deliveredreceipt flipped toreadin place (same id, freshat, no duplicate — unique index respected) and the badge cleared.tsc --noEmitclean on@object-ui/app-shell.🤖 Generated with Claude Code