Skip to content

Commit 8f20201

Browse files
Jack Qclaude
andauthored
feat(spec): the object-* block family enters ComponentPropsMap — typo'd props warn with did-you-mean (#7751) (#8524)
* feat(spec): object-* block family enters ComponentPropsMap (#7751) Direction A per the maintainer ruling (2026-08-12): six object-* blocks get props schemas derived from objectui's renderer read points, so validate-component-props has schemas to dispatch and 'filters' -> 'filter' did-you-mean comes free. object-chart deliberately excluded (two-vocabulary problem). Parity rides check:react-declaration-parity, which now iterates the object-* map entries under the same baseline ratchet. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL * feat(spec): regen artifacts, ADR-0122 aliases + pins for the object-* props schemas (#7751) - api-surface/export-origins/docs-references/strictness-ledger counts regenerated (the four check:generated proved stale) - each new schema gets its author-state type alias (ObjectGridProps ...) per ADR-0122; all six are default-free so they pin isomorphic (Iso838-Iso843) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL * merge origin/main (os-regen artifacts taken from main; regeneration follows) * chore(spec): regenerate artifacts on merged base (#7751) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL * chore(spec): regenerate artifacts on merged base; renumber ADR-0122 pins to Iso839-Iso844 (#7751) Main's #8211 (PR #8450) took Iso838; the six object-* pins renumber to the next free ids on the merged tree (ids are claims about pins, not positions — renumbering unmerged pins is legal). Pin count 825 + 6 = 831, asserted by the count case, not arithmetic. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent c91e19a commit 8f20201

14 files changed

Lines changed: 1156 additions & 18 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
"@objectstack/spec": minor
3+
---
4+
5+
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)
6+
7+
A misspelled key inside a page component's `properties` used to be accepted in
8+
silence for exactly the block family that carries the platform's data-bound
9+
authoring surface: `object-grid`, `object-metric`, `object-kanban`,
10+
`object-calendar`, `object-form` and `object-master-detail-form` had no entry in
11+
`ComponentPropsMap`, so the ADR-0078 / #5068 authoring gate
12+
(`validate-component-props`) had no schema to dispatch and skipped the node. The
13+
live specimen was #7750: an `object-grid` authored `filters:` (plural) where the
14+
renderer reads `filter` — the wire carried no `$filter` and a personal work
15+
queue listed every row, with a success receipt.
16+
17+
Per the maintainer's ruling on #7751 (2026-08-12, direction A), the six blocks
18+
above now carry props schemas in `ComponentPropsMap`:
19+
20+
- **Key sets are derived from the objectui renderers' own read points**
21+
(per-key citations in the section header), never from the designer palette or
22+
registry `inputs` alone — both have published keys with zero read points, and
23+
re-declaring one would recreate the declared-but-inert trap this closes.
24+
Read legacy fallbacks stay honoured (`defaultFilters` on the grid is read;
25+
only the plural `filters` has zero read points anywhere).
26+
- **The typo class is rejected by name with the fix in the message**:
27+
`filters``filter` on every block that reads `filter`, and the designer's
28+
dead `groupField` spelling → the `groupBy` the kanban board actually reads.
29+
- **Findings stay warning-tier.** The gate's warning→error upgrade remains
30+
gated on the #5068 inventory; this change does not move that gate.
31+
- **spec↔objectui parity rides the existing `check:react-declaration-parity`
32+
machinery** — the gate now compares the `object-*` map entries against the
33+
registry manifest under the same baseline ratchet (no new gate).
34+
- `object-chart` is deliberately not registered: its authored vocabulary is
35+
two-layered (`chartType` vs `ChartConfigSchema.type`) and not derivable with
36+
the same confidence, so it stays a silently-skipped unregistered type rather
37+
than a partial schema that warns on working keys.
38+
39+
New exports: `ObjectGridPropsSchema`, `ObjectMetricPropsSchema`,
40+
`ObjectKanbanPropsSchema`, `ObjectCalendarPropsSchema`, `ObjectFormPropsSchema`,
41+
`ObjectMasterDetailFormPropsSchema`.

content/docs/references/index.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Protocol Reference
3-
description: Every schema published by @objectstack/spec — 1571 schemas across 14 protocol modules
3+
description: Every schema published by @objectstack/spec — 1577 schemas across 14 protocol modules
44
---
55

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

3838
---
3939

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

365365
## UI Protocol
366366

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

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

@@ -375,7 +375,7 @@ Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI lay
375375
| [`app.zod.ts`](/docs/references/ui/app) | `ActionNavItem`, `App`, `AppBranding`, `AppContextSelector`, `ComponentNavItem`, `DashboardNavItem`, `GroupNavItem`, `NavigationArea`, `NavigationContribution`, `NavigationItem`, `ObjectNavItem`, `PageNavItem`, `ReportNavItem`, `UrlNavItem` |
376376
| [`bulk-action.zod.ts`](/docs/references/ui/bulk-action) | `BulkActionDef`, `BulkActionExecution`, `BulkActionOperation`, `BulkActionParam` |
377377
| [`chart.zod.ts`](/docs/references/ui/chart) | `ChartAggregate`, `ChartAggregateFunction`, `ChartAnnotation`, `ChartAxis`, `ChartConfig`, `ChartDrillDown`, `ChartGroupBy`, `ChartInteraction`, `ChartSeries`, `ChartType` |
378-
| [`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` |
378+
| [`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` |
379379
| [`dashboard.zod.ts`](/docs/references/ui/dashboard) | `Dashboard`, `DashboardHeader`, `DashboardHeaderAction`, `DashboardWidget`, `DashboardWidgetOptions`, `GlobalFilter`, `GlobalFilterOptionsFrom`, `WidgetActionType`, `WidgetColorVariant` |
380380
| [`dataset.zod.ts`](/docs/references/ui/dataset) | `Dataset`, `DatasetDimension`, `DatasetMeasure`, `DerivedMeasureOp` |
381381
| [`i18n.zod.ts`](/docs/references/ui/i18n) | `AriaProps`, `I18nLabel`, `InlineLocaleMap` |

0 commit comments

Comments
 (0)