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:
:222 — const [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;
:352 — objectDef 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
Found by the
domain:uiexecution 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.tsxstill carries the pre-gate shape byte for byte, including the same log wording the timeline's copy had::222—const [objectDef, setObjectDef] = useState(null), a local hook rather than the shareduseSettledSchemafrom@object-ui/react;:292— its own metadata effect, whose three exits (nodataSource, nogetObjectSchema, noobjectName) and whosecatchall 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;:352—objectDefsits in the record-fetch effect's dependency array, while:320derives the query's expansion frombuildExpandFields(objectDef?.fields).That is the exact combination objectui#7895 measured on
ObjectTimeline: the record query runs once before the definition lands, carrying no$expandat all, and again once it does.What is claimed, and what is not
origin/main, not an instrumented run. The timeline's numbers (2findcalls 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 callingsetLoading(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
galleryamong its sevenbuildExpandFieldscall 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,ObjectCalendarandObjectTree; objectui#7225 ask 2 tookObjectGantt; objectui#7895 tookObjectTimelineand called it the last unconverted member. It was the last of the set that ruling NAMED.ObjectGalleryis 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