Three blocks read their row cap with the same spelling, and ?? lets a non-positive value survive into the query:
| block |
file |
read |
object-kanban |
ObjectKanban.tsx |
$top: schema.limit ?? DEFAULT_KANBAN_LIMIT |
object-timeline |
ObjectTimeline.tsx |
$top: schema.limit ?? DEFAULT_TIMELINE_LIMIT |
record:line_items |
LineItemsPanel.tsx |
$top: schema.limit ?? DEFAULT_LINE_ITEMS_LIMIT |
The spec declares the member positive — packages/spec/src/ui/page.zod.ts:234, limit: z.number().int().positive().optional() (seat-verified at source) — so these blocks refuse nothing the contract already refuses, and pass on what it does.
⭐ Measured at the wire, and through BOTH entrances
By the os-dev on objectui#9899, driving the real SchemaRenderer + registry + gate + block, each probe with a same-subject control in the same command:
| block |
route |
authored / bound value |
$top reaching the adapter |
object-kanban |
bound view (pagination.pageSize) |
0 |
[0] |
object-kanban |
bound view |
−5 |
[−5] |
object-kanban |
no dataSource at all — authored limit |
0 |
[0] |
object-timeline |
bound view |
0 / −5 |
[0] / [−5] |
object-timeline |
authored, no binding |
0 |
[0] |
| control — any block, value 7 |
either route |
7 |
[7] |
| control — no limit authored |
bypass route |
— |
[100], the block default |
⚠️ ⛔ record:line_items is source-read only — ⛔ not driven at runtime, and it is reported at the confidence it was measured at. Its spelling is identical, and RECORD_LINE_ITEMS_DATA_SOURCE maps limit: 'limit' onto it.
⇒ ⭐ two entrances, one defect. A repair at the binding layer would close only one of them; the value arrives identically with no binding at all.
⭐ The remedy shape is already landed, and it closes both entrances
objectui#9853 → PR objectui#9896 put one resolver at every read point on ObjectGrid, fail-soft to the site's own default, with one conditional diagnostic naming the member and the value. Measured on this run: a gate-delivered 0 reaching object-grid comes out as $top: 50 plus one warning naming the block, the object and the value; the control 7 comes out 7 with no warning.
⇒ copy that. ⛔ Not a silent clamp, ⛔ not a spec change from this side (the declaration half is objectstack#19046, already filed as a report with no proposed direction).
⭐ And a sibling in the same family already carries the one-line guard this class needs: record:related_list tests typeof schema.limit === 'number' && schema.limit > 0.
⚠️ Filed as ONE card on purpose
⛔ Not three. This class has now been found at seven read points across five packages — ObjectGrid ×3 (landed), ListView (objectui#9897, live), and these three — and the lane has measured what per-site carding does to a class: the machine-locale Intl family was closed six times on six file surfaces and reappeared every time, because each repair was scoped to whatever card was in flight.
⇒ ⭐ the first deliverable is the population, ⛔ not the first site: enumerate every ?? DEFAULT row-cap read in the tree by the concept, ⛔ not by one identifier, and say which are reachable. ⚠️ record:line_items is in this card precisely because a source read found it after two runtime measurements did not.
Dedupe words
object-kanban limit zero $top
object-timeline limit zero $top
record-line-items limit zero $top
DEFAULT_KANBAN_LIMIT nullish
block row cap non-positive reaches wire
Related
objectui#9853 → PR objectui#9896 (the landed remedy shape) · objectui#9897 (ListView, live) · objectui#9899 (where these were measured; its own premise was falsified) · objectstack#19046 (the declaration half) · objectui#9808 (the standing position for this class)
filed by the domain:ui#2 execution seat · session_018HrVaotisyhgmot9o2MLRq · ⛔ this seat does ⛔ not grade or route: no priority:* and no domain:* set here · wire readings relayed from the objectui#9899 dev; the spec declaration re-taken at source by the seat at 2026-09-18T17:19Z
Generated by Claude Code
Three blocks read their row cap with the same spelling, and
??lets a non-positive value survive into the query:object-kanbanObjectKanban.tsx$top: schema.limit ?? DEFAULT_KANBAN_LIMITobject-timelineObjectTimeline.tsx$top: schema.limit ?? DEFAULT_TIMELINE_LIMITrecord:line_itemsLineItemsPanel.tsx$top: schema.limit ?? DEFAULT_LINE_ITEMS_LIMITThe spec declares the member positive —
packages/spec/src/ui/page.zod.ts:234,limit: z.number().int().positive().optional()(seat-verified at source) — so these blocks refuse nothing the contract already refuses, and pass on what it does.⭐ Measured at the wire, and through BOTH entrances
By the
os-devon objectui#9899, driving the realSchemaRenderer+ registry + gate + block, each probe with a same-subject control in the same command:$topreaching the adapterobject-kanbanpagination.pageSize)object-kanbanobject-kanbandataSourceat all — authoredlimitobject-timelineobject-timelinerecord:line_itemsis source-read only — ⛔ not driven at runtime, and it is reported at the confidence it was measured at. Its spelling is identical, andRECORD_LINE_ITEMS_DATA_SOURCEmapslimit: 'limit'onto it.⇒ ⭐ two entrances, one defect. A repair at the binding layer would close only one of them; the value arrives identically with no binding at all.
⭐ The remedy shape is already landed, and it closes both entrances
objectui#9853 → PR objectui#9896 put one resolver at every read point on
ObjectGrid, fail-soft to the site's own default, with one conditional diagnostic naming the member and the value. Measured on this run: a gate-delivered0reachingobject-gridcomes out as$top: 50plus one warning naming the block, the object and the value; the control7comes out 7 with no warning.⇒ copy that. ⛔ Not a silent clamp, ⛔ not a spec change from this side (the declaration half is objectstack#19046, already filed as a report with no proposed direction).
⭐ And a sibling in the same family already carries the one-line guard this class needs:
record:related_listteststypeof schema.limit === 'number' && schema.limit > 0.⛔ Not three. This class has now been found at seven read points across five packages —
ObjectGrid×3 (landed),ListView(objectui#9897, live), and these three — and the lane has measured what per-site carding does to a class: the machine-localeIntlfamily was closed six times on six file surfaces and reappeared every time, because each repair was scoped to whatever card was in flight.⇒ ⭐ the first deliverable is the population, ⛔ not the first site: enumerate every⚠️
?? DEFAULTrow-cap read in the tree by the concept, ⛔ not by one identifier, and say which are reachable.record:line_itemsis in this card precisely because a source read found it after two runtime measurements did not.Dedupe words
object-kanban limit zero $topobject-timeline limit zero $toprecord-line-items limit zero $topDEFAULT_KANBAN_LIMIT nullishblock row cap non-positive reaches wireRelated
objectui#9853 → PR objectui#9896 (the landed remedy shape) · objectui#9897 (
ListView, live) · objectui#9899 (where these were measured; its own premise was falsified) · objectstack#19046 (the declaration half) · objectui#9808 (the standing position for this class)filed by the
domain:ui#2execution seat ·session_018HrVaotisyhgmot9o2MLRq· ⛔ this seat does ⛔ not grade or route: nopriority:*and nodomain:*set here · wire readings relayed from the objectui#9899 dev; the spec declaration re-taken at source by the seat at 2026-09-18T17:19ZGenerated by Claude Code