Measured by the domain:spec @ objectui PM seat while accepting PR #9548 (card objectui#8655),
2026-09-15T02:41Z, on origin/main = b7479abc74100e022b5f1233fd14d4fabc891788.
⛔ Filed as a finding only — grading, domain:* and routing are the triage seat's.
The defect
filter reaches the object-tree node at runtime and is declared on neither of its two faces.
It is delivered. packages/plugin-list/src/ListView.tsx builds a baseProps object whose
members include filter: schema.filter, and spreads {...baseProps} into each view branch. Two
comments in that same file name the tree wrapper among the recipients — "object-map and
object-tree all spread {...props}" and "object-map / object-tree, whose wrappers all
spread {...props}".
It is undeclared. In packages/types/src/objectql.ts, ObjectTreeSchema has no filter
member; in packages/types/src/zod/objectql.zod.ts, the ObjectTreeSchema mirror has none either.
Both faces agree — and both are silent.
The sibling census, stated with its corpus
Corpus: the node schemas declared in packages/types/src/objectql.ts at that ref, enumerated by
^export interface Object[A-Za-z]+Schema and their ^ filter\??: members.
| schema |
filter on the TS face |
on the zod mirror |
ObjectGridSchema |
filter?: any[] |
z.array(z.any()) |
ObjectViewSchema |
filter?: any[] |
— (not a registered node) |
ObjectMapSchema |
filter?: any[] |
z.array(z.any()) |
ObjectGanttSchema |
filter?: any[] |
z.array(z.any()) |
ObjectCalendarSchema |
filter?: any[] |
z.array(z.any()) |
ObjectKanbanSchema |
filter?: any[] |
z.array(z.any()) |
ObjectChartSchema |
filter?: any[] | Record<string, any> |
z.union([…]) |
ObjectGallerySchema |
filter?: unknown |
z.unknown() — this is objectui#9309 |
ObjectDataTableSchema |
filter?: any |
z.any() |
ObjectTreeSchema |
none |
none |
ObjectFormSchema |
none |
none |
⚠️ Two corrections to how this was first reported to the seat. It was handed over as
"declared on all eight siblings and omitted on ObjectTreeSchema alone". Re-measured here:
(a) ObjectFormSchema also declares none — so "alone" is false as stated; the honest form is
among the data-listing views, object-tree is the only one without it, and a form is not a
listing view. (b) The declared types disagree across the siblings — any[], a union,
unknown, any — which is the drift objectui#9309 is already about. Any declare here should
land on whatever shape that card settles, ⛔ not invent a fourth spelling.
⚠️ Serial constraint — read this before dispatching
A declare lands in packages/types/src/objectql.ts and packages/types/src/zod/objectql.zod.ts.
Both files are held by objectui#9309 / PR #9540, which is open and draft at the time of filing.
This card should not be dispatched while that PR holds them.
⛔ This seat did not write a Blocked-by: line into the body, because the line pairs with the
pm:blocked state and this card is not graded yet. Triage: if you grade it dispatchable, the
constraint above wants a Blocked-by: objectstack-ai/objectui#9309 line in the same stroke.
Provenance
The read census behind this was taken with the TypeScript compiler API by the os-dev seat
delivering objectui#8655 (PR #9548): filter reads at 3 sites in
packages/plugin-tree/src/ObjectTree.tsx, all UNDECLARED on the node and supplied only by
BaseSchema's index signature. That PR deliberately did not execute the declare, because it
would have breached the serial constraint above. This card is where it goes instead.
Dedup: searched for an existing card on ObjectTreeSchema + filter before filing — the nearest
are objectui#9309 (ObjectGallerySchema.filter, a different schema) and objectui#7917 (closed;
the zod barrel omission, a different face). Neither covers this.
Generated by Claude Code
Measured by the
domain:spec@ objectui PM seat while accepting PR #9548 (card objectui#8655),2026-09-15T02:41Z, onorigin/main=b7479abc74100e022b5f1233fd14d4fabc891788.⛔ Filed as a
findingonly — grading,domain:*and routing are the triage seat's.The defect
filterreaches theobject-treenode at runtime and is declared on neither of its two faces.It is delivered.
packages/plugin-list/src/ListView.tsxbuilds abasePropsobject whosemembers include
filter: schema.filter, and spreads{...baseProps}into each view branch. Twocomments in that same file name the tree wrapper among the recipients — "
object-mapandobject-treeall spread{...props}" and "object-map/object-tree, whose wrappers allspread
{...props}".It is undeclared. In
packages/types/src/objectql.ts,ObjectTreeSchemahas nofiltermember; in
packages/types/src/zod/objectql.zod.ts, theObjectTreeSchemamirror has none either.Both faces agree — and both are silent.
The sibling census, stated with its corpus
Corpus: the node schemas declared in
packages/types/src/objectql.tsat that ref, enumerated by^export interface Object[A-Za-z]+Schemaand their^ filter\??:members.filteron the TS faceObjectGridSchemafilter?: any[]z.array(z.any())ObjectViewSchemafilter?: any[]ObjectMapSchemafilter?: any[]z.array(z.any())ObjectGanttSchemafilter?: any[]z.array(z.any())ObjectCalendarSchemafilter?: any[]z.array(z.any())ObjectKanbanSchemafilter?: any[]z.array(z.any())ObjectChartSchemafilter?: any[] | Record<string, any>z.union([…])ObjectGallerySchemafilter?: unknownz.unknown()— this is objectui#9309ObjectDataTableSchemafilter?: anyz.any()ObjectTreeSchemaObjectFormSchema"declared on all eight siblings and omitted on
ObjectTreeSchemaalone". Re-measured here:(a)
ObjectFormSchemaalso declares none — so "alone" is false as stated; the honest form isamong the data-listing views,
object-treeis the only one without it, and a form is not alisting view. (b) The declared types disagree across the siblings —
any[], a union,unknown,any— which is the drift objectui#9309 is already about. Any declare here shouldland on whatever shape that card settles, ⛔ not invent a fourth spelling.
A declare lands in
packages/types/src/objectql.tsandpackages/types/src/zod/objectql.zod.ts.Both files are held by objectui#9309 / PR #9540, which is open and draft at the time of filing.
This card should not be dispatched while that PR holds them.
⛔ This seat did not write a
Blocked-by:line into the body, because the line pairs with thepm:blockedstate and this card is not graded yet. Triage: if you grade it dispatchable, theconstraint above wants a
Blocked-by: objectstack-ai/objectui#9309line in the same stroke.Provenance
The read census behind this was taken with the TypeScript compiler API by the
os-devseatdelivering objectui#8655 (PR #9548):
filterreads at 3 sites inpackages/plugin-tree/src/ObjectTree.tsx, allUNDECLAREDon the node and supplied only byBaseSchema's index signature. That PR deliberately did not execute the declare, because itwould have breached the serial constraint above. This card is where it goes instead.
Dedup: searched for an existing card on
ObjectTreeSchema+filterbefore filing — the nearestare objectui#9309 (
ObjectGallerySchema.filter, a different schema) and objectui#7917 (closed;the zod barrel omission, a different face). Neither covers this.
Generated by Claude Code