Skip to content

finding(plugin-list): ObjectGallery carries the same pre-gate shape objectui#7895 just removed from ObjectTimeline — 2 find calls per load #7903

Description

@claude

Found by the domain:ui execution seat while implementing objectui#7895 (the timeline's settled-schema gate). Filed unassigned, not fixed there: that card's file surface is binding — packages/plugin-timeline/ only — and this sits in a different package.

The observation

packages/plugin-list/src/ObjectGallery.tsx still carries the pre-gate shape byte for byte, including the same log wording the timeline's copy had:

  • :222const [objectDef, setObjectDef] = useState(null), a local hook rather than the shared useSettledSchema from @object-ui/react;
  • :292 — its own metadata effect, whose three exits (no dataSource, no getObjectSchema, no objectName) and whose catch all return WITHOUT settling anything. That is objectui#7232's trap, and it is what makes a gate unsafe to add until the resolution is moved to the shared hook;
  • :352objectDef sits in the record-fetch effect's dependency array, while :320 derives the query's expansion from buildExpandFields(objectDef?.fields).

That is the exact combination objectui#7895 measured on ObjectTimeline: the record query runs once before the definition lands, carrying no $expand at all, and again once it does.

What is claimed, and what is not

⚠️ Not measured here. This is a shape reading off origin/main, not an instrumented run. The timeline's numbers (2 find calls with expand sets [null, ['owner']]; 1 paint plus 3 late writes under a held metadata read; a first paint that does not track the hold) are objectui#7895's, on a different component. Whoever picks this up should re-measure on the gallery rather than inherit them — objectui#6482's own per-component standard is that the cost differs by component, and the timeline's three-step paint argument turns on that component calling setLoading(true) on the effect's re-run, which needs checking here separately.

Not the expand set. Whether the expansion this query carries is FLS-gated is objectui#7429, which already names gallery among its seven buildExpandFields call sites. This is about WHEN the record query fires, not about what it asks for.

Not the row ceiling. objectui#7390 is the unbounded fetch on this same component (no $top, no ceiling report). Different defect, same file.

Why it is worth recording

objectui#6482 converged ObjectKanban, ObjectView, ObjectCalendar and ObjectTree; objectui#7225 ask 2 took ObjectGantt; objectui#7895 took ObjectTimeline and called it the last unconverted member. It was the last of the set that ruling NAMED. ObjectGallery is a record view outside that list, and nothing marks it a deliberate exclusion either.

Duplicate check before filing, with a control that fires: a repo-scoped listing of all 401 open issues paged to exhaustion and grepped locally (/search/* answers 403 for this seat). The control returned on-topic hits — objectui#7429, objectui#7390, objectui#7547 and objectui#7232 — so the absence of a match for this concern is a reading rather than a broken query.

Refs: objectui#7895 (the timeline conversion and its measurement shape) · objectui#7225 (the shared hook and the gantt gate) · objectui#6482 (the ruling) · objectui#7232 (the settle-on-every-exit precondition) · objectui#6453 (the calendar gate).

Generated by Claude Code, session session_01KbJQ1y1J12nZxYzFWhP8Q3.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpluginpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions