Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .changeset/10803-dead-citation-sweep-second-batch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
---

Comment-only in `@object-ui/app-shell`, `@object-ui/components`, `@object-ui/core`,
`@object-ui/fields`, `@object-ui/plugin-calendar`, `@object-ui/plugin-chatbot`,
`@object-ui/plugin-dashboard`, `@object-ui/plugin-gantt`, `@object-ui/plugin-grid`,
`@object-ui/plugin-list`, `@object-ui/plugin-map`, `@object-ui/plugin-timeline`,
`@object-ui/plugin-tree`, `@object-ui/plugin-view`, `@object-ui/react`,
`@object-ui/sdui-parser` and `@object-ui/types`: docblocks and code comments that cited
objectui issues which answer 404 now cite the commit that landed each change, as a
9-character sha, or the ruling by its date where no single commit answers (objectui#10803,
the second batch after objectui#10771). Some of these docblocks reach the emitted `.d.ts`
and `.js`; none of them moves a claim, and none of these comment edits changes a code or
type token. No published behaviour changes through them, so this declares no release.
The one runtime text the sweep touches, eleven zod `.describe()` strings in
`@object-ui/types`, is declared on its own as a patch in
`10803-describe-string-citations.md`.

The same repair in the pending changesets that carried these citations is prose-only, and
their frontmatter is byte-identical.
19 changes: 19 additions & 0 deletions .changeset/10803-describe-string-citations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'@object-ui/types': patch
---

fix(types): eleven zod `.describe()` strings no longer point at an objectui issue that answers 404

The runtime descriptions of eleven members of the published zod mirrors ended with, or
carried, a pointer to an objectui issue that answers 404: `CheckboxSchema.wrapperClass`,
`TreeViewSchema.nodes`, `ObjectMapSchema.objectName`, `ObjectGanttSchema.objectName`,
`ObjectGanttSchema.data`, `TooltipSchema.trigger` / `content` / `children`, and
`ContextMenuSchema.triggerClassName` / `contentClassName` / `modal`. A reader of a zod
`description` has no repository to resolve a commit against, so each dead pointer is dropped
rather than replaced (objectui#10803). On `ObjectGanttSchema.data` the clause that carried it,
"undeclared on either face until" that issue, goes with it, leaving
"Data source configuration — read FIRST by resolveRecordSourceConfig": the same shape as its
`ObjectMapSchema.data` twin, which names `getDataConfig`.

Nothing else in any string moves, and no key, path, accept set or refusal changes: every
document that parsed before parses the same way.
2 changes: 1 addition & 1 deletion .changeset/5853-tablecolumn-type-canonical-union.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
---

`TableColumn.type` now has ONE canonical value set across all three ends that disagreed
(objectui#5853, maintainer ruling 2026-08-25, Option B: the 8-literal interface union is
(maintainer ruling 2026-08-25, Option B: the 8-literal interface union is
canonical). The interface declared `'text' | 'number' | 'date' | 'datetime' | 'currency' |
'percent' | 'boolean' | 'action'`; the zod mirror declared `z.string()` and accepted
anything; the renderer branched on a third set and could only read the key through an
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6004-grid-column-emit-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ Key verdicts: `headerIcon`, `pinned` and `wrap` are HELD and now declared at the
seam; `options` is RETIRED — nothing on either side of the seam read it, and
every value it carried still reaches its consumer through the field metadata the
cell closure captures and the object schema the inline editor reads. `type` stays
objectui#5853's and `name` is not emitted here at all.
under `fc62bb490`'s fold and `name` is not emitted here at all.

No rendering change.
4 changes: 2 additions & 2 deletions .changeset/6150-undeclared-but-consumed-keys.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ decisions publish in this same release.** This paragraph used to end "Declaring
`data` stays required on both faces." Neither half of that is true any more, on
either face:

- **A `nodes`-only `tree-view` document IS legal.** objectui#6939 made `data`
- **A `nodes`-only `tree-view` document IS legal.** `777e5c6f4` made `data`
optional, so the `nodes` spelling the renderer reads FIRST stands on its own
(`6939-tree-view-nodes-mirror.md`, published beside this note). `bind` is read
before either and is unchanged.
Expand All @@ -95,7 +95,7 @@ either face:
and the zod arm is a `retirementTombstone(...)` whose guidance points the author
at `nodes` (`6951-tree-view-data-retired.md`, also published beside this note).
`nodes` is `z.array(TreeNodeSchema).optional()`, and its own describe text
records that a `nodes`-only document became legal at objectui#6939.
records that a `nodes`-only document became legal (at `777e5c6f4`).

⛔ Nothing on the branch carrying this amendment falsified that sentence: it was
already untrue at that branch's base, and both cards that made it untrue are
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6373-datatable-emit-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ closure captures is what this widget's type-aware rendering has always read, and
untouched. Authored spellings still pass through, so a column the author wrote as
`{ format: '$0,0' }` keeps its `format` exactly as before.

`type` is unchanged — objectui#5853's fold at this seam still applies. `name` is unchanged
`type` is unchanged — the fold `fc62bb490` put at this seam still applies. `name` is unchanged
and still written: `data-table` reads `col.accessorKey || col.name` and objectui#5120 holds
that alias while two published skill guides still teach a `{ name, label }` column. The hold
is now declared at the seam instead of arriving anonymously inside a spread.
Expand Down
4 changes: 2 additions & 2 deletions .changeset/6594-headercolor-mirror-enum.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ against synthetic inputs so the guard has been shown to fail rather than only to

## Shape, and where it departs from the nearest precedent

The nearest precedent is objectui#5853 (`.changeset/5853-tablecolumn-type-canonical-union.md`),
The nearest precedent is `fc62bb490` (`.changeset/5853-tablecolumn-type-canonical-union.md`),
which narrowed `TableColumn.type` on the same three-ends pattern and **exported** a
`TABLE_COLUMN_TYPES` tuple for the zod mirror to build its enum from. That shape is not
available here and the difference is structural, not a preference: `packages/types/src/views.ts`
is a **type-only** module, so a tuple there would add a runtime export to the package barrel
(a value export cannot ride the barrel's `export type` block) and a runtime import edge from
the zod entry into `views.js`. #5853 had a second reason to export — producers needed its
the zod entry into `views.js`. `fc62bb490` had a second reason to export — producers needed its
`normalizeTableColumnType()` at their emit seam — and `headerColor` has no producer that needs
a runtime value. The literals are therefore written on each half and the anti-drift guarantee
is carried by the pin above, which also covers the third end a shared tuple could not reach:
Expand Down
4 changes: 2 additions & 2 deletions .changeset/6938-checkbox-wrapper-class.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
'@object-ui/types': patch
---

Declare `wrapperClass` on `CheckboxSchema`, on both faces (objectui#6938 — the
residue of that card; its `context-menu` half landed with objectui#6939 group 1).
Declare `wrapperClass` on `CheckboxSchema`, on both faces (the residue of its
card; that card's `context-menu` half landed with `bfaa1589c`).

`packages/components/src/renderers/form/checkbox.tsx:36` reads
`cn("flex items-center space-x-2", schema.wrapperClass)` — classes on the wrapper
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
---

Corpus + test-only (objectui#6939): the three `components-complex-filter-builder`
Corpus + test-only: the three `components-complex-filter-builder`
schema-catalog entries now spell `conditions[].operator` with the members
`FilterOperatorSchema` declares (`equals` / `less_than` / `greater_than`) instead
of the spec's alias table (`eq` / `lt` / `gt`), so they pass
Expand Down
10 changes: 5 additions & 5 deletions .changeset/6939-filter-builder-mirror.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

Repair the `filter-builder` mirror: the field key is `value`, the type
vocabulary is the value families the component actually folds a column into,
and a filter group is `{ id, logic, conditions }` (objectui#6939, maintainer
ruling recorded 2026-09-02 — one of the eight groups on that card, dispatched
and a filter group is `{ id, logic, conditions }` (maintainer ruling
recorded 2026-09-02 — one of the eight groups under that ruling, dispatched
as its own PR per the ruling).

Three independent mis-declarations sat in one member, and each is a key-name or
Expand Down Expand Up @@ -77,7 +77,7 @@ and both flagged for contract review rather than made quietly:**
column draws the option-driven Select and no `<input>` at all, against a text
box for an unrecognised spelling. Dropping it would refuse a spelling this
mirror accepts *today* and the renderer draws distinctly, which is a fresh
instance of the class objectui#6939 exists to close.
instance of the class that ruling's eight groups exist to close.
- **The group's `id` is declared OPTIONAL.** `isValidGroup` never consults it
and nothing reads `filterGroup.id`; deleting it from an authored group renders
byte-identically. Requiring it would invent a refusal the renderer does not
Expand All @@ -100,11 +100,11 @@ inside this same release by objectui#9559: `FilterOperatorSchema` became the
spec rule's own operator member, so the alias and dropdown spellings are now
accepted and normalised to canonical on parse), while the
canonical spellings it accepts render a **blank** operator trigger — and it is
reported on objectui#6939 rather than decided here. Seven further live field
reported on its own card, objectui#7561, rather than decided here. Seven further live field
types (`status`, `currency`, `percent`, `rating`, `lookup`, `master_detail`,
`user`) each have their own bucket and control and are still refused; they were
refused before this change as well, so that gap is pre-existing rather than a
regression introduced here, and it is reported on the same card. The published
regression introduced here, and it is reported on its own card, objectui#7562. The published
doc for this component already offers all fourteen spellings and already marks
`type` OPTIONAL, which the mirror still does not — a third declaration that
agrees with the renderer, pinned here so the gap is measured rather than
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6939-kanban-column-cards.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
---

Rename `KanbanColumn.items` to `cards`, in both halves of the published surface
(objectui#6939, maintainer ruling 2026-09-02).
(maintainer ruling 2026-09-02).

**Breaking, deliberately.** `KanbanColumn` declared its card list as `items` in
`complex.ts` and in the zod mirror `complex.zod.ts`. Every board reads `cards`.
Expand Down
4 changes: 2 additions & 2 deletions .changeset/6939-objectql-record-source-refinement.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

Repair the `object-map` and `object-gantt` mirrors: `objectName` is optional,
and a refinement requires that at least one of `data`, `staticData`,
`objectName` is present (objectui#6939, maintainer ruling recorded 2026-09-02 —
this is one of the eight groups on that card, dispatched as its own PR per the
`objectName` is present (maintainer ruling recorded 2026-09-02 — this is one
of the eight groups under that ruling, dispatched as its own PR per the
ruling).

Both renderers resolve their records from one of three keys, in this order —
Expand Down
4 changes: 2 additions & 2 deletions .changeset/6939-overlay-trigger-mirror.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

Repair the `tooltip` and `context-menu` mirrors: declare the keys their renderers
actually read, and stop requiring the `children` neither of them reads
(objectui#6939, maintainer ruling recorded 2026-09-02 — this is one of the eight
groups on that card, dispatched as its own PR per the ruling).
(maintainer ruling recorded 2026-09-02 — this is one of the eight groups under
that ruling, dispatched as its own PR per the ruling).

Both members demanded `children` and omitted keys the renderer reads first, so
`safeValidateSchema` refused two catalog entries that draw correctly:
Expand Down
4 changes: 2 additions & 2 deletions .changeset/6939-tree-view-nodes-mirror.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
---

Repair the `tree-view` mirror: `data` is optional, so the `nodes` spelling the
renderer reads FIRST is a legal document on its own (objectui#6939, maintainer
ruling recorded 2026-09-02 — this is one of the eight groups on that card,
renderer reads FIRST is a legal document on its own (maintainer ruling
recorded 2026-09-02 — this is one of the eight groups under that ruling,
dispatched as its own PR per the ruling).

`TreeViewSchema` REQUIRED `data`, the limb the renderer reads THIRD:
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6950-binding-framework-injected-input.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
'@object-ui/core': patch
---

`binding` on a component input is framework-set, not author-declared: `@object-ui/types` gains `InjectedComponentInput`, the `'field'` binding arm is retired from `@object-ui/sdui-parser`'s `RegistryConfigLike`, and the `as ComponentMeta` cast at the injection seam in `@object-ui/core` is gone (objectui#6950; maintainer ruling of 2026-09-07, director decision batch #69; ADR-0049 enforce-or-remove).
`binding` on a component input is framework-set, not author-declared: `@object-ui/types` gains `InjectedComponentInput`, the `'field'` binding arm is retired from `@object-ui/sdui-parser`'s `RegistryConfigLike`, and the `as ComponentMeta` cast at the injection seam in `@object-ui/core` is gone (maintainer ruling of 2026-09-07, director decision batch #69; ADR-0049 enforce-or-remove).

**What was measured.** `binding` was published — the manifest serializer forwards it — and read — `validateTree` records a binding site for it — while `ComponentInput`, the authoring type every registration writes against, did not declare it. The one writer in the tree, `ELEMENT_DATA_SOURCE_INPUT`, therefore carried a hand-written inline type and reached a registration's `inputs` through `as ComponentMeta` in `Registry.register`. Declared narrower than enforced, on a published type — and `ComponentInput`'s own docblock listed `binding` among the forwarded per-input keys.

Expand Down
2 changes: 1 addition & 1 deletion .changeset/6951-tree-view-data-retired.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ unchanged and still read first.
spellings for its one inline-nodes slot — `nodes` (read second) and `data` (read
third: `boundData || schema.nodes || schema.data || []` at
`renderers/data-display/tree-view.tsx:105`), both declared by objectui#6150.
`data` had been REQUIRED until objectui#6939 / PR #7533 made it optional, so
`data` had been REQUIRED until `777e5c6f4` (PR #7533) made it optional, so
this retirement starts from a declared-and-optional member on both faces. The
in-repo corpus at the retirement: seven `tree-view` nodes under
`examples/schema-catalog` and `packages/types/examples` plus one `content/docs`
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7014-select-option-spec-claim-correction.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Option-A ruling on objectui#6140 / objectui#6153 — and this repo's pin has mov
Everything below was measured correctly against 17.2.0 and is kept as the dated record of
why the comments were rewritten; ⛔ do not read it as the contract you are authoring
against today. `rows` and `options[].description` are **authorable now**, and the doc
comments were corrected again in objectui#7635, which releases alongside this entry.
comments were corrected again in `544ecba84`, which releases alongside this entry.

Three doc comments claimed the installed `@objectstack/spec` DECLARES a key that it in
fact **refused by name**. Measured on `@objectstack/spec@17.2.0`, each paired with a
Expand Down
4 changes: 2 additions & 2 deletions .changeset/7070-no-invented-gantt-date-fields.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
'@object-ui/plugin-view': minor
---

Gantt views no longer render on invented date field names (objectui#7070).
Gantt views no longer render on invented date field names.

The half PR #7062 fenced out and reported separately. A view that carried no
`gantt:` block used to have a complete-looking date axis synthesized for it:
Expand Down Expand Up @@ -45,7 +45,7 @@ Also corrected: the objectui#3129 note at the top of `app-shell/ObjectView.tsx`
certified the gantt branch below it as already using the safe two-rung shape.
It did not. The note now states each sibling branch as measured, and says
explicitly which fabrication REMAINS — the timeline `'created_at'` floor at the
two plugin faces, which objectui#7070 routes to a ruling rather than settling
two plugin faces, which is routed to a ruling rather than settled
per-face.

Deliberately out of scope, and left in place: `progressField` / `dependenciesField`
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7070-timeline-date-axis-floors-retired.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
---

Retire the `'created_at'` timeline date-axis floors at both plugin faces
(objectui#7070 step ③, maintainer ruling 2026-09-01, 总监批 #28).
(step ③ of the maintainer ruling 2026-09-01, 总监批 #28).

**Breaking, deliberately.** A timeline view that declares **no** date axis anywhere no
longer renders. `ListView`'s and `ObjectView`'s timeline branches used to hand
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7083-richtext-field-metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
`RichtextFieldMetadata` — the third registry key of `RichTextField` becomes declarable
(objectui#7083, maintainer ruling 2026-09-07, director decision batch #71).

`markdown`, `html` and `richtext` are one widget (objectui#5498). Two of the three
`markdown`, `html` and `richtext` are one widget (`4bb940b6e`). Two of the three
already had an exported metadata type; `richtext` had none, so the runtime served it by
structure while an author could not write its metadata under an annotation at all. The
only way to write one was `as unknown as MarkdownFieldMetadata`, and that deliberate
Expand Down
8 changes: 4 additions & 4 deletions .changeset/7113-chart-data-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
`ChartSchema` declares the data model it renders — chart-level `data` and `xAxisKey`, with
the bare-string `xAxis` folded onto the latter — and `ChartDataSeries` accepts both binding
dialects (objectui#7113 option B, 项目总监席 总监批 #28 2026-09-01 「同意」; and
objectui#6939's `chart` row, maintainer ruling 2026-09-02 「同意」 — both rulings
the `chart` row of the eight-group maintainer ruling of 2026-09-02 「同意」 — both rulings
independently instructed declaring these two keys, so they land as one change).

⚠️ Shipped as `minor`, not `patch`, because two document classes that validated before now
REFUSE. objectui#6939 grades this class "patch where the accept set only widens toward what
REFUSE. The 2026-09-02 ruling grades this class "patch where the accept set only widens toward what
already renders"; this change is not a pure widening, so it takes the level objectui#6896
set for the same transition in this same file — the mirror starting to refuse — and for the
same reason: this repository's `major` is a cross-repo pin to `@objectstack`'s major rather
Expand Down Expand Up @@ -40,7 +40,7 @@ documents whose chart was already broken. Class 3 is not: at base it parsed to
`normalizeChartSchema` renders it — `str(123)` is `undefined`, so the read falls back to
`name` and yields `series: [{ dataKey: 'a' }]` (`normalizeChartSchema.ts:239`). So this is a
narrowing away from a document that **renders today**, which is precisely the distinction
objectui#6939's grading language turns on. `dataKey: null` behaves identically. Measured on
the 2026-09-02 ruling's grading language turns on. `dataKey: null` behaves identically. Measured on
both states; the declaration itself is right, and this note is the disclosure it was owed.

## Corrected: what class 2 actually did
Expand Down Expand Up @@ -95,7 +95,7 @@ would discard them.

## Not done, deliberately

objectui#6939's `chart` row also says "`series[].data` stops being required". On this base
The 2026-09-02 ruling's `chart` row also says "`series[].data` stops being required". On this base
it already is not: objectui#6896 replaced it with `retirementTombstone(...)` —
`z.never({ error }).optional()` — which is optional AND refuses any authored value by name.
Implementing the clause literally would re-widen a retired key and reverse a landed ruling,
Expand Down
4 changes: 2 additions & 2 deletions .changeset/7122-spec-17-3-0-parity-reconciliation.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ and `@object-ui/plugin-detail` `^17.1.0`, so a floor above the family minimum is
this repo's normal state, not an exception.

⚠️ **Measured on both sides, because it is bump-caused rather than pre-existing
and objectui#7688 records the opposite.** The gate is a scheduled / push-to-main
and the card that filed the `[floor-too-low]` finding recorded the opposite.** The gate is a scheduled / push-to-main
workflow that cannot red a pull request, and `main` is green on it — the last
eight runs, most recently at `c2e3cee2c`. On this branch's built tree it exits 1
with CI's own `--cross-check` invocation, and exits 0 with this raise, judging
278 (subpath, symbol) pairs across 19 published packages either way. Its blocking
copy runs on the publish path, so leaving it would have surfaced as a cancelled
release rather than as a red check. The correction is recorded on objectui#7688.
release rather than as a red check. The correction is recorded in `639114c4d`, the commit that landed this entry.
Loading
Loading