Skip to content

[finding] sharedUserFeeds keeps a THIRD hand-written sys_activity.type reading, and buckets every unrecognised type as update #6730

Description

@claude

Observed while implementing objectui#5896 (the console record page's sys_activity row to FeedItem construction). Out of that card's fence and not touched by its PR: different target type, different surface, and no drop — so it is a drift risk rather than a user-visible defect today.

The third reading

objectui#5878 shared the sys_activity.type table between the record:activity block and RecordDetailView; objectui#5896 shared the constructor around it. A third hand-written reading of the same column survives in a different package surface:

packages/app-shell/src/hooks/sharedUserFeeds.ts -- mapActivityRows(rows), which feeds the AppHeader bell's Activity tab and Home's inbox:

constraw=String(r.type);consttype: ActivityItem['type']=raw==='commented'||raw==='mentioned'
? 'comment'
: raw==='deleted'
? 'delete'
: raw==='created'
? 'create'
: 'update';

It also carries its own copy of the "NOW()" timestamp quirk, five lines above -- the same quirk whose two other copies objectui#5896 just folded into one.

Why it is NOT simply "adopt activityRowToFeedItem"

The target type differs. This surface produces ActivityItem (four kinds: comment / delete / create / update), not FeedItem (the closed 13-value FeedItemType spec enum). So the shared constructor cannot be dropped in, and converging would first need a decision about whether ActivityItem is a projection of FeedItem or an independent vocabulary.

What is worth deciding

  1. The unmapped branch is a silent widening, not a drop. Every value outside the four named ones -- including an author-extended type under the objectstack#11507 direction-4 ruling -- renders as update. That is a specific claim about the row ("something was updated"), which is a different posture from UNMAPPED_ACTIVITY_FEED_TYPE's deliberately generic system bucket plus a once-per-value diagnostic. A scheduled meeting and an author's contract_countersigned both show the update presentation, with nothing said.
  2. scheduled is missing here too, exactly as it was missing from the console record page before objectui#5878 -- the same drift, in the copy nobody has converged yet.
  3. assigned / shared / system / completed likewise all land on update.

No behaviour is lost today, which is why this is filed rather than fixed: nothing vanishes, the icon is just coarser than the row deserves, and picking the right convergence needs the ActivityItem vs FeedItem question answered first.

Filed unassigned for triage.


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

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

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions