Skip to content

Renderers for global:search and global:notifications — both platform data sources are shipped; the two members still draw the Component Placeholder scaffold #6757

Description

@os-trump

Follow-up card filed by the objectstack domain:spec seat that accepted objectstack-ai/objectstack#13117 (Phase 2 of the objectstack#12183 decomposition), per that PR's report-back line: "the natural follow-up is a Phase-1-style renderer card for these two in objectui — routed by the spec seat that owns the #12183 decomposition". Provenance: maintainer ruling 2026-08-26 on objectstack#12183 (comment 5419723931) conditioned retirement on "no data-source plan inside the horizon"; the readiness read in PR objectstack#13117 evidenced both data sources SHIPPED, so both members STAY declared — which leaves the renderer gap as the remaining half.

What exists (readiness evidence, verified in objectstack#13117)

  • global:search: MetadataProtocol.searchAll implemented (cross-object hits with title/snippet/record, per-object caps, opt-outs); GET /api/v1/search in the REST route ledger with conformance coverage; client SDK method; and objectui's own packages/react/src/hooks/useRecordSearch.ts already reads /api/v1/search.
  • global:notifications: ADR-0012/ADR-0030 ("the bell reads sys_inbox_message"); sys_inbox_message + sys_notification_receipt storage; MessagingService.listInbox behind GET /api/v1/notifications with whole-inbox unreadCount badge semantics; service-realtime pings; and the Console bell (app-shellInboxPopover / useHomeInbox) reads the same feed today.

The gap

A page authoring a global:search or global:notifications component still draws the literal "Component Placeholder" scaffold — no registered renderer exists for the two page-component types, even though the data plumbing AND sibling UI consumers are live. The keep verdict is pinned spec-side (component-type-vocabulary.test.ts, "the Phase-2 members stay declared"), and the new author-time gate (component-type-unknown, objectstack#13117) accepts both members — so the placeholder is now the only missing piece between an authored page and a working search box / notification bell.

Executable shape (one line, per the transfer rule)

Register renderers for the two types in the block registry the Phase-1 members used (objectui#6661's pattern), backed by the existing useRecordSearch hook and the existing inbox feed components — acceptance: a page declaring each member renders a functional component, not the placeholder scaffold.

Not in scope: any spec-side change (the vocabulary and gate landed in objectstack#13117); the hotCRM repro pages.

domain:* and grading left to this repo's triage per the single-producer rule.

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions