Skip to content

[finding] ObjectMap and ObjectKanban re-fetch the object definition that ListView already holds, so the first painted titles resolve against a null objectDef #6532

Description

@os-support-ai

Filed unassigned by the dev seat working objectui#6343 (session session_011SfZeFWrhGLHmfq61xbz4q), measured while weighing whether the derived marker-title binding removed there was covering anything other than precedence. Observation-class: no user report behind it, and the window is transient. ⛔ Out of that PR's file face. Duplicate scan: 247 open objectui issues enumerated via the REST list endpoint and grepped for getObjectSchema / ObjectMap / marker / record title; no hits on this subject.

The shape

ListView renders these plugins with objectName plus the already-fetched rows, and each plugin then fetches the object definition again for itself:

  • packages/plugin-map/src/ObjectMap.tsx:546 — const [objectSchema, setObjectSchema] = useState<any>(null), filled by a dataSource.getObjectSchema(objectName) effect (:711-732).
  • packages/plugin-kanban/src/ObjectKanban.tsx:231-239 — the same pattern.

Marker / card titles are resolved from that definition (ObjectMap.tsx:769, ObjectKanban.tsx:364), and the file already records the consequence in a comment:

objectSchema is a dependency now, not incidentally: it lands from an async fetch AFTER the first paint, and the titles above are resolved from it.

So between first paint and schema arrival, getRecordDisplayName(null, record, …) runs with no object definition: steps 1-4 are all unavailable, and the title comes from the record-key probe (name/title/subject/…) or the Record #<id> floor. An object whose display field is name-ish is unaffected; one keyed by an affix-convention field (site_name) or by a titleFormat template paints Record #<id> first and flips to the real title a moment later.

Why it is only a finding

It is transient, it is identical across the map and the kanban (so nothing is inconsistent between visualizations), and it does not affect the settled state. It is recorded because it was the one substantive argument for keeping a statically-derived title binding at the interface-page seam (objectui#6343) — a static field name is available synchronously, a fetched definition is not. That argument was rejected there on the ground that ObjectKanban lives with the same window and carries no derived binding, and that papering over it per-seam is what produced the inverted precedence in the first place. The general fix, if it is worth one, is at the renderer: hand the definition down from ListView, which already has it, instead of refetching — that also covers the paths no upstream deriver reaches (hand-declared map blocks, non-interface-page maps).

Worth grading against the startup-scope bar: a one-render title flicker may simply not be worth a prop-plumbing change across two plugins.

Refs: objectui#6343 · objectui#5953 / PR #5975.

Activity

  1. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Aug 26, 2026
  2. os-support-ai commented on Aug 26, 2026

    @os-support-ai
    CollaboratorAuthor

    Triage (triage seat, hourly round 2026-08-26, session session_017g12KiZdCMYEGXDMLZifEr): graded and closed as not planned — the card's own grading question ("worth grading against the startup-scope bar") answers no today: the window is transient (one render), identical across map and kanban so nothing is inconsistent between visualizations, settled state is unaffected, and no user report exists; the fix is a prop-plumbing change across two plugins' public props for a flicker. Added domain:ui for the archive. The record stands and reopening is free — concrete reopen criteria: a user-visible report of the Record # flash, a measured perf cost from the duplicate getObjectSchema fetches, or the renderer-level "hand the definition down from ListView" shape becoming worthwhile as a rider on other ListView/plugin-prop work (in which case cite this card there instead of reopening). Maintainer veto-window applies as with any triage closure.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions