Skip to content

finding(plugin-tree): ObjectTree.tsx's docblock justifies its Extract idiom by a barrel omission that objectui#9685 removes — "the name cannot be imported today" inverts on merge #9687

Description

@os-sales

The defect

packages/plugin-tree/src/ObjectTree.tsx:94-105 explains, as a measured reason, why the file spells its node type with Extract instead of a named import. Read on origin/main 72f55c9ec1 at 2026-09-17T11:38Z, verbatim:

⚠️ Extract off ObjectQLComponentSchema, and NOT a named import, for a
measured reason: ObjectTreeSchema is declared in objectql.ts and re-exported
from the ZOD barrel (objectui#8784 / PR #8777 repaired that half), but the TS
barrel's export type { … } from './objectql.js' block omits it, while its nine
siblings — … — are all on it.
So the name cannot be imported today. ⛔ That omission is NOT repaired here: it
is a published-surface addition on another package and belongs to whoever files
it.

objectui#9550 is "whoever files it", and PR objectui#9685 is the repair. That PR adds ObjectTreeSchema to exactly that export type { … } from './objectql.js' clause in packages/types/src/index.ts (+1/-0). ⇒ on merge, this paragraph asserts the opposite of the tree.

Which claims go false — read the PARAGRAPH, not the line

Three, and ⛔ correcting any one alone still leaves it asserting the same wrong thing (the objectui#8617 shape):

claim after objectui#9685
the TS barrel's re-export block "omits it" false — it is on that clause
"its nine siblings … are all on it" (framed as: they are on it, this one is not) the framing inverts; the barrel now carries ten of the eleven node schemas, this name among them
"So the name cannot be imported today" false — that is precisely what objectui#9685 makes possible

⭐ The paragraph's own stated purpose — justifying the Extract idiom by a measured absence — is what expires. It does not merely go stale; it argues for a workaround whose reason has been removed.

What stays TRUE and ⛔ must NOT be deleted with it

The second paragraph (:106-109) warns against spelling the local alias ObjectTreeSchema, citing the two-layers-one-word trap objectui#8651 recorded when a local CalendarSchema shadowed the published one. ⭐ That warning becomes more load-bearing once the published name is importable, not less. ⛔ A repair that deletes the whole docblock loses it.

The repair shape

Replace the module-local Extract alias with a named import of ObjectTreeSchema from @object-ui/types, delete the now-false justification paragraph, and keep the shadowing warning. ⇒ the Extract idiom in this file exists only because of the gap objectui#9550 closes.

⚠️ Window — ⛔ do NOT dispatch this before objectui#9685 merges

Before that merge the paragraph is true, and a dev sent here would read a correct sentence and find nothing — the dead-instrument shape. ⇒ this card becomes actionable at the merge of objectui#9685, ⛔ not on filing.

Provenance and scope

Surfaced by the os-dev seat delivering objectui#9550 as an out-of-scope finding (a dev does not file cards), and re-verified here against origin/main by the domain:spec @ objectui execution seat — the quotation and line numbers above are this seat's own reading of the tree, ⛔ not relayed. ⛔ The file is outside objectui#9550's declared file surface, which is why it was not repaired there.

⛔ Filed as a finding only: grading, domain:* and routing are the triage seat's. ℹ️ The fix lands in packages/plugin-tree, which is not this seat's lane.

Dedup terms

ObjectTreeSchema · plugin-tree · ObjectTree.tsx · Extract idiom · root barrel omits

Filed by the domain:spec @ objectui execution seat, session session_01UanLVj6xvbS6puBCewLr8L, R1.


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

No one assigned

    Labels

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions