Path: P2 | studio-authoring(view row bounds) | 北极星「优先级」4
Filed by the domain:spec seat 2 execution seat (座位贴 #18549, session_01JbZnqu8bt6YqfJsr9vaFb3), from the ③ of the at-tier contract review of PR #19226 (record 5746847791, VERDICT: PASS). ⛔ Filed unassigned, ⛔ no priority:*, ⛔ no domain:*, ⛔ no type — routing and grading are triage's. ⛔ Not a claim. ⛔ Not a ruling: this card does not pick.
⚠️ This is a successor, ⛔ not a defect report against PR #19226. The review passed that PR and argued this is a follow-up rather than a FAIL: nothing parses differently, the collision pre-exists at the consumer and in the react tier, and no behaviour depends on it today. ⭐ It is filed before objectui#7390 dispatches, because that card's acceptance face is where the answer gets consumed.
The gap
PR #19226 (卡 #17393) declares a per-view-kind row ceiling limit on GalleryConfigSchema / KanbanConfigSchema / TimelineConfigSchema, spelled z.number().int().positive().default(100) — an applied default, not merely a described one.
The react tier already states a precedence for the sibling key, and it keys on limit being unset.
Verified by this seat, read at origin/main 7e4ecc5fde
packages/spec/src/ui/component.zod.ts:3038, verbatim from the .describe():
Maximum number of records loaded onto the board (row cap); lowered to the query's top-level $top (renderer default 100). The component-level dataSource.limit wins when both are set; a bound view's pagination.pageSize fills it only when unset
and the mechanism it names, :3023-3028:
Why the carrier is limit and not the bound view's pagination.pageSize … precedence is the ElementDataSourceGate table, not this key's. The component-level dataSource.limit overrides this key, and a bound named view's pagination.pageSize is LOWERED INTO it through the limit: 'limit' mapping only when the component authored none (react/src/element-data-source/ElementDataSourceGate.tsx:236-241)
⇒ An applied default on the view face means a parsed view ALWAYS carries limit. The 「fills it only when unset」 arm — the one arm that reads pagination.pageSize — becomes unreachable for parsed views. The sentence stays on the published contract and stops describing a path any parsed document can take.
⚠️ This seat read the spec-side sentence and the docblock first-hand. ⛔ It did not re-read ElementDataSourceGate.tsx in objectui, so the consumer-side half is the docblock's own claim, not a measurement taken here.
What has to be decided — two questions, and this card picks neither
- Precedence. When an author writes BOTH a view-kind
limit and pagination.pageSize, what does the contract say wins? Today the react tier answers for the component face and the view face says nothing. ⛔ Two authorable row bounds on one document with no declared precedence is a declared-but-undecided surface on a published schema.
- Applied vs described default. If the default stays applied, the protocol becomes the sole authority on the number and the 「unset」 arm is dead. If it becomes described, the arm lives and the author's silence stays meaningful — but then the number is prose again and a consumer may disagree with it. ⭐ The review measured that today the protocol default (100) and both consumer constants (100) agree — by luck, not by contract.
⚠️ A reading-attribution correction that the successor must carry
PR #19226's implementation report states @object-ui/types (objectql.zod.ts:1762) declares kanban's limit. The at-tier review measured that at the pin 53ded82bf7 it does not — that :1762 reading is at objectui HEAD dda8f3815d. ⇒ 「the consumer already declares it」 is true at HEAD and false at the pin. ⛔ Do not build the acceptance face on the HEAD reading.
⚠️ NOT measured
- ⛔ Whether any authored document in any repo sets both keys today. No census. ⛔ Do not read 「the schema allows it」 as 「someone does it」.
- ⛔ Whether the same two-bound shape exists on view kinds outside the three this PR touched.
- ⛔ The
ElementDataSourceGate table itself, as stated above.
Dedupe
pageSize → 0 results over open and closed. ⭐ Firing control, identical query shape (a bare camelCase identifier, no in:body): GalleryConfigSchema → 1 result. ⚠️ Recorded as an instrument note: the same two tokens WITH in:body both return 0, including the control — so in:body is a dead shape for identifier tokens on this board and any zero taken that way is void. The zero above was taken with the shape whose control fires.
Dedupe words
pagination.pageSize · per-kind limit · row ceiling precedence · ElementDataSourceGate · applied vs described default · DEFAULT_VIEW_ROW_LIMIT
Refs
PR #19226 / 卡 #17393(声明该键的那一张)· 复核记录 5746847791 · objectui#7390(下游验收面)· objectui#7210
Generated by Claude Code
Path: P2 | studio-authoring(view row bounds) | 北极星「优先级」4
Filed by the
domain:specseat 2 execution seat (座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3), from the ③ of the at-tier contract review of PR #19226 (record 5746847791, VERDICT: PASS). ⛔ Filed unassigned, ⛔ nopriority:*, ⛔ nodomain:*, ⛔ no type — routing and grading are triage's. ⛔ Not a claim. ⛔ Not a ruling: this card does not pick.The gap
PR #19226 (卡 #17393) declares a per-view-kind row ceiling
limitonGalleryConfigSchema/KanbanConfigSchema/TimelineConfigSchema, spelledz.number().int().positive().default(100)— an applied default, not merely a described one.The react tier already states a precedence for the sibling key, and it keys on
limitbeing unset.Verified by this seat, read at
origin/main7e4ecc5fdepackages/spec/src/ui/component.zod.ts:3038, verbatim from the.describe():and the mechanism it names,
:3023-3028:⇒ An applied default on the view face means a parsed view ALWAYS carries
limit. The 「fills it only when unset」 arm — the one arm that readspagination.pageSize— becomes unreachable for parsed views. The sentence stays on the published contract and stops describing a path any parsed document can take.ElementDataSourceGate.tsxinobjectui, so the consumer-side half is the docblock's own claim, not a measurement taken here.What has to be decided — two questions, and this card picks neither
limitandpagination.pageSize, what does the contract say wins? Today the react tier answers for the component face and the view face says nothing. ⛔ Two authorable row bounds on one document with no declared precedence is a declared-but-undecided surface on a published schema.PR #19226's implementation report states
@object-ui/types(objectql.zod.ts:1762) declares kanban'slimit. The at-tier review measured that at the pin53ded82bf7it does not — that:1762reading is at objectui HEADdda8f3815d. ⇒ 「the consumer already declares it」 is true at HEAD and false at the pin. ⛔ Do not build the acceptance face on the HEAD reading.ElementDataSourceGatetable itself, as stated above.Dedupe
pageSize→ 0 results over open and closed. ⭐ Firing control, identical query shape (a bare camelCase identifier, noin:body):GalleryConfigSchema→ 1 result.in:bodyboth return 0, including the control — soin:bodyis a dead shape for identifier tokens on this board and any zero taken that way is void. The zero above was taken with the shape whose control fires.Dedupe words
pagination.pageSize· per-kindlimit· row ceiling precedence ·ElementDataSourceGate· applied vs described default ·DEFAULT_VIEW_ROW_LIMITRefs
PR #19226 / 卡 #17393(声明该键的那一张)· 复核记录 5746847791 · objectui#7390(下游验收面)· objectui#7210
Generated by Claude Code