Skip to content
41 changes: 41 additions & 0 deletions .changeset/object-block-props-map.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
"@objectstack/spec": minor
---

feat(spec): the `object-*` block family enters `ComponentPropsMap` — a typo'd key inside a data-bound block's `properties` is now caught at authoring time (#7751)

A misspelled key inside a page component's `properties` used to be accepted in
silence for exactly the block family that carries the platform's data-bound
authoring surface: `object-grid`, `object-metric`, `object-kanban`,
`object-calendar`, `object-form` and `object-master-detail-form` had no entry in
`ComponentPropsMap`, so the ADR-0078 / #5068 authoring gate
(`validate-component-props`) had no schema to dispatch and skipped the node. The
live specimen was #7750: an `object-grid` authored `filters:` (plural) where the
renderer reads `filter` — the wire carried no `$filter` and a personal work
queue listed every row, with a success receipt.

Per the maintainer's ruling on #7751 (2026-08-12, direction A), the six blocks
above now carry props schemas in `ComponentPropsMap`:

- **Key sets are derived from the objectui renderers' own read points**
(per-key citations in the section header), never from the designer palette or
registry `inputs` alone — both have published keys with zero read points, and
re-declaring one would recreate the declared-but-inert trap this closes.
Read legacy fallbacks stay honoured (`defaultFilters` on the grid is read;
only the plural `filters` has zero read points anywhere).
- **The typo class is rejected by name with the fix in the message**:
`filters` → `filter` on every block that reads `filter`, and the designer's
dead `groupField` spelling → the `groupBy` the kanban board actually reads.
- **Findings stay warning-tier.** The gate's warning→error upgrade remains
gated on the #5068 inventory; this change does not move that gate.
- **spec↔objectui parity rides the existing `check:react-declaration-parity`
machinery** — the gate now compares the `object-*` map entries against the
registry manifest under the same baseline ratchet (no new gate).
- `object-chart` is deliberately not registered: its authored vocabulary is
two-layered (`chartType` vs `ChartConfigSchema.type`) and not derivable with
the same confidence, so it stays a silently-skipped unregistered type rather
than a partial schema that warns on working keys.

New exports: `ObjectGridPropsSchema`, `ObjectMetricPropsSchema`,
`ObjectKanbanPropsSchema`, `ObjectCalendarPropsSchema`, `ObjectFormPropsSchema`,
`ObjectMasterDetailFormPropsSchema`.
10 changes: 5 additions & 5 deletions content/docs/references/index.mdx
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
---
title: Protocol Reference
description: Every schema published by @objectstack/spec — 1571 schemas across 14 protocol modules
description: Every schema published by @objectstack/spec — 1577 schemas across 14 protocol modules
---

{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
Expand DownExpand Up@@ -32,8 +32,8 @@ counts are sums of the rows they head. Regenerate with
| [Shared Protocol](/docs/references/shared) | 8 | 31 | Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums. |
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
| [System Protocol](/docs/references/system) | 36 | 287 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
| [UI Protocol](/docs/references/ui) | 16 | 148 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
| **Total** | **198** | **1571** | 14 protocol modules |
| [UI Protocol](/docs/references/ui) | 16 | 154 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
| **Total** | **198** | **1577** | 14 protocol modules |

---

Expand DownExpand Up@@ -364,7 +364,7 @@ The runtime environment — logging, jobs, cache, metrics, notifications, i18n a

## UI Protocol

**Source:** `packages/spec/src/ui/` · **Import:** `@objectstack/spec/ui` · **16 pages, 148 schemas**
**Source:** `packages/spec/src/ui/` · **Import:** `@objectstack/spec/ui` · **16 pages, 154 schemas**

Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer.

Expand All@@ -375,7 +375,7 @@ Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI lay
| [`app.zod.ts`](/docs/references/ui/app) | `ActionNavItem`, `App`, `AppBranding`, `AppContextSelector`, `ComponentNavItem`, `DashboardNavItem`, `GroupNavItem`, `NavigationArea`, `NavigationContribution`, `NavigationItem`, `ObjectNavItem`, `PageNavItem`, `ReportNavItem`, `UrlNavItem` |
| [`bulk-action.zod.ts`](/docs/references/ui/bulk-action) | `BulkActionDef`, `BulkActionExecution`, `BulkActionOperation`, `BulkActionParam` |
| [`chart.zod.ts`](/docs/references/ui/chart) | `ChartAggregate`, `ChartAggregateFunction`, `ChartAnnotation`, `ChartAxis`, `ChartConfig`, `ChartDrillDown`, `ChartGroupBy`, `ChartInteraction`, `ChartSeries`, `ChartType` |
| [`component.zod.ts`](/docs/references/ui/component) | `AIChatWindowProps`, `ElementButtonProps`, `ElementFilterProps`, `ElementFormProps`, `ElementImageProps`, `ElementMetadataViewerProps`, `ElementNumberProps`, `ElementRecordPickerProps`, `ElementTextInputProps`, `ElementTextProps`, `PageAccordionProps`, `PageCardProps`, `PageContainerProps`, `PageHeaderProps`, `PageTabsProps`, `RecordActivityProps`, `RecordChatterProps`, `RecordDetailsProps`, `RecordHighlightsField`, `RecordHighlightsProps`, `RecordPathProps`, `RecordRelatedListProps` |
| [`component.zod.ts`](/docs/references/ui/component) | `AIChatWindowProps`, `ElementButtonProps`, `ElementFilterProps`, `ElementFormProps`, `ElementImageProps`, `ElementMetadataViewerProps`, `ElementNumberProps`, `ElementRecordPickerProps`, `ElementTextInputProps`, `ElementTextProps`, `ObjectCalendarProps`, `ObjectFormProps`, `ObjectGridProps`, `ObjectKanbanProps`, `ObjectMasterDetailFormProps`, `ObjectMetricProps`, `PageAccordionProps`, `PageCardProps`, `PageContainerProps`, `PageHeaderProps`, `PageTabsProps`, `RecordActivityProps`, `RecordChatterProps`, `RecordDetailsProps`, `RecordHighlightsField`, `RecordHighlightsProps`, `RecordPathProps`, `RecordRelatedListProps` |
| [`dashboard.zod.ts`](/docs/references/ui/dashboard) | `Dashboard`, `DashboardHeader`, `DashboardHeaderAction`, `DashboardWidget`, `DashboardWidgetOptions`, `GlobalFilter`, `GlobalFilterOptionsFrom`, `WidgetActionType`, `WidgetColorVariant` |
| [`dataset.zod.ts`](/docs/references/ui/dataset) | `Dataset`, `DatasetDimension`, `DatasetMeasure`, `DerivedMeasureOp` |
| [`i18n.zod.ts`](/docs/references/ui/i18n) | `AriaProps`, `I18nLabel`, `InlineLocaleMap` |
Expand Down
Loading
Loading