Split out of #5840 by PM ruling: that card's fix extends the sys_activity type map; narrowing FeedItemType is a cross-repo spec retirement (the enum is published by @objectstack/spec, and retiring a member carries ADR-0087 registry obligations), so it is emphatically not that card's surface. Recorded here instead. Observation, not a queued fix.
Re-measured at live source, not from a shipped bundle
FeedItemType (@objectstack/spec/data) publishes 13 kinds. Read at the installed spec:
comment | field_change | task | event | email | call | note | file |
record_create | record_delete | approval | sharing | system
Producers that exist on any objectui surface today (after #5840 lands scheduled -> event):
| kind | producer |
|---|
field_change | sys_activity types created/updated/deleted/assigned/shared, via packages/plugin-detail/src/renderers/recordActivityFeed.ts |
task | sys_activity type completed |
system | sys_activity type system |
event | sys_activity type scheduled — new in #5840 |
comment | sys_comment rows, mapped in packages/app-shell/src/views/RecordDetailView.tsx (the host discussion-context path, not the sys_activity map) |
Eight kinds have no producer anywhere: email, call, note, file, record_create, record_delete, approval, sharing.
Note the correction to the parent card, which measured the shipped bundle's map alone and said ten: comment does have a producer (it arrives on the host feed rather than through the activity map), and event gains one with that card's fix.
Why it is worth recording
They are authorable. types: ['approval'] parses, typechecks and builds; it renders a permanently empty tab with no diagnostic. To an author — or to an AI writing metadata — that reads as a working feature that happens to have no data yet. It is a declared surface enforced by nothing.
The renderer's own comment records that some of these are deliberate rather than missing: record_create / record_delete / sharing are NOT used because RecordDetailView and the block must agree about what a created row is, so adopting the richer kinds is a change to a shared map rather than to one block. So the disposition per kind is a real question, not a batch decision.
Three directions, none taken here:
- Give the kinds producers (largest; several would need new system tables or new reads).
- Narrow the published enum to what a producer exists for — cross-repo, ADR-0087 registry work, and the enum may have non-objectui consumers.
- Make the emptiness diagnosable rather than silent — e.g.
types entries with no producer warn at author time.
Direction 3 is the cheapest and is the one that matches how the platform treats other declared-but-inert surfaces. Recommending nothing; triage decides.
Found while implementing #5840; deliberately not fixed there.
Generated by Claude Code
Split out of #5840 by PM ruling: that card's fix extends the
sys_activitytype map; narrowingFeedItemTypeis a cross-repo spec retirement (the enum is published by@objectstack/spec, and retiring a member carries ADR-0087 registry obligations), so it is emphatically not that card's surface. Recorded here instead. Observation, not a queued fix.Re-measured at live source, not from a shipped bundle
FeedItemType(@objectstack/spec/data) publishes 13 kinds. Read at the installed spec:Producers that exist on any objectui surface today (after #5840 lands
scheduled->event):field_changesys_activitytypes created/updated/deleted/assigned/shared, viapackages/plugin-detail/src/renderers/recordActivityFeed.tstasksys_activitytypecompletedsystemsys_activitytypesystemeventsys_activitytypescheduled— new in #5840commentsys_commentrows, mapped inpackages/app-shell/src/views/RecordDetailView.tsx(the host discussion-context path, not thesys_activitymap)Eight kinds have no producer anywhere:
email,call,note,file,record_create,record_delete,approval,sharing.Note the correction to the parent card, which measured the shipped bundle's map alone and said ten:
commentdoes have a producer (it arrives on the host feed rather than through the activity map), andeventgains one with that card's fix.Why it is worth recording
They are authorable.
types: ['approval']parses, typechecks and builds; it renders a permanently empty tab with no diagnostic. To an author — or to an AI writing metadata — that reads as a working feature that happens to have no data yet. It is a declared surface enforced by nothing.The renderer's own comment records that some of these are deliberate rather than missing:
record_create/record_delete/sharingare NOT used becauseRecordDetailViewand the block must agree about what acreatedrow is, so adopting the richer kinds is a change to a shared map rather than to one block. So the disposition per kind is a real question, not a batch decision.Three directions, none taken here:
typesentries with no producer warn at author time.Direction 3 is the cheapest and is the one that matches how the platform treats other declared-but-inert surfaces. Recommending nothing; triage decides.
Found while implementing #5840; deliberately not fixed there.
Generated by Claude Code