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
4 changes: 2 additions & 2 deletions .changeset/10039-publish-drafts-advisories.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
The AI build bar, the Studio workbench and the chat transcript's draft cards report the runtime authoring gate's per-draft advisories (objectui#10039)

`POST /packages/:id/publish-drafts` has answered `advisories` on each
`published[]` element since objectstack#9343 landed, and objectui#6965 built the
`published[]` element since objectstack#9343 landed, and `ce986aafc` built the
seam that reports them — `MetadataClient.publishPackageDrafts`, which emits one
advisory event per advised element into the sink, renderer and wording the save
and single-item publish doors use. Three app-shell call sites were still firing
Expand All @@ -14,7 +14,7 @@ nobody: `console/ai/PendingDraftsBar`, `views/studio-design/StudioDesignSurface`
and the chat draft card's publish handler in `console/ai/AiChatPage`. Each of the
three now takes its client from `useMetadataClient` and calls that method, which
is the whole change — the advisory toast is the client's, so all three surfaces
report identically to the two objectui#6965 routed, with no new UI shape.
report identically to the two `ce986aafc` routed, with no new UI shape.

What moves with the route, at all three:

Expand Down
21 changes: 21 additions & 0 deletions .changeset/10803-dead-citation-sweep-fourth-batch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
---

Comment-only in `@object-ui/app-shell`, `@object-ui/cli`, `@object-ui/components`,
`@object-ui/core`, `@object-ui/data-objectstack`, `@object-ui/fields`, `@object-ui/i18n`,
`@object-ui/plugin-chatbot`, `@object-ui/plugin-grid`, `@object-ui/plugin-kanban`,
`@object-ui/plugin-timeline` and `@object-ui/types`, plus the private
`@object-ui/test-support`: docblocks and code comments that cited objectui issues which
answer 404 now cite the commit that landed each change, as a 9-character sha, the ruling
by its date where the sentence cites a ruling, or a live pointer the sentence already
named, and where nothing answers they name the card by role (objectui#10803, the fourth
batch). One bare number that was a sister-repo pull request is now written
`objectstack#6942`. 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 runtime text
the sweep touches, two tombstone guidance strings and two zod `.describe()` strings in
`@object-ui/types`, is declared on its own as a patch in
`10803-fourth-batch-runtime-strings.md`.

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

fix(types): four more runtime strings no longer point at objectui issues that answer 404

Two ADR-0049 retirement tombstones in the published zod mirrors and two runtime
descriptions carried a pointer to an objectui issue that answers 404. A reader of a parse
error or a zod `description` has no repository to resolve a commit against, so no dead
pointer becomes a commit: the tombstones cite `ADR-0049` in its place, and the two
description pointers are simply dropped (objectui#10803).

- **The tombstone guidance.** The legacy `ActionSchema`'s `onSuccess` and `onFailure`
tombstones feed both the parse error an author reads and the `.describe()` text, and
each now opens `RETIRED (ADR-0049) —` in place of the dead card. Everything after the
dash is unchanged, so the remedy each message gives is word for word what it was.
- **Two descriptions.** `DataTableSchema.rowActions` now ends "mirrors the boolean the
renderer truthiness-tests", and `DataTableSchema.cellClassName` ends "so row density has
to be set on both".

Nothing else in any string moves, and no key, path, issue code, accept set, refusal or
severity changes: every document that parsed before parses the same way and is refused at
the same path with the same code.
2 changes: 1 addition & 1 deletion .changeset/4895-retire-block-schema-family.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,4 @@ the node type `SchemaRenderer` actually takes.
`packages/types/src/blocks.ts` and `packages/types/src/zod/blocks.zod.ts` are kept as
ADR-0049 tombstones exporting nothing, and `block-family-retired-4895.test.ts` pins every
retired name out of them. `content/docs/blocks/block-schema.mdx` is deleted with the family,
and objectui#7023 — the narrower validator-only fix — dissolves into this retirement.
and the separate card for the narrower validator-only fix dissolves into this retirement.
2 changes: 1 addition & 1 deletion .changeset/6755-field-diagnostics-i18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ labels, gate hints and validation copy were all translated.
not restate the spec's bounds (a hand-copied range is a second contract).
- Not in scope, and recorded rather than folded in: `LocationField`'s third
refusal sentence — the residue arm objectui#6715 added after the ruling was
written — is still a literal. objectui#6888 carries it.
written — is still a literal. The card behind `320374d2a` carries it.
2 changes: 1 addition & 1 deletion .changeset/6872-app-shell-branding-title-jsdoc.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
'@object-ui/layout': patch
---

Correct the `AppShellBranding.title` doc comment (objectui#6872). It read "Page title
Correct the `AppShellBranding.title` doc comment. It read "Page title
suffix (sets document.title)" while `useAppShellBranding` assigns `document.title = title`
wholesale — nothing is appended; the caller composes the whole string (the console passes
`"App label — Product name"`). That comment ships in `dist/index.d.ts` and is the only
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6888-location-residue-refusal-keyed.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
---

Key `LocationField`'s THIRD refusal sentence — the residue arm — into the locale
packs (objectui#6888).
packs.

Typing a half that is only PARTLY a number (`12abc, 34`) is refused by
`LocationField` with its own sentence, added by objectui#6715. objectui#6755 had
Expand Down
6 changes: 3 additions & 3 deletions .changeset/6907-gantt-date-spelling-rule.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
'@object-ui/plugin-timeline': patch
---

Spell a refused gantt date by a RULE, not by `String` (objectui#6907)
Spell a refused gantt date by a RULE, not by `String`

`spellGanttDateValue` fills the `{{value}}` hole of the unusable-gantt-date
alert, whose job is to name the value the author wrote. Its `String(value)`
fallback was written when nothing but `[object Object]`-shaped values could
reach it; objectui#6905's type rule routes the whole non-date type space
reach it; `85f6a6097`'s type rule routes the whole non-date type space
through it, and it failed three ways — measured on `b458300ca`:

- it **VANISHES**: `endDate: []` rendered "endDate is , which is not a valid
Expand All @@ -18,7 +18,7 @@ through it, and it failed three ways — measured on `b458300ca`:
with no hint the wrapper was at fault;
- it **THROWS**: `{ toString() { throw } }`, a throwing `Symbol.toStringTag`
getter and `Object.create(null)` each crashed the render outright. #6759 built
this helper "total by construction" and #6905 made that load-bearing, but the
this helper "total by construction" and `85f6a6097` made that load-bearing, but the
type gate only stopped `new Date` from throwing — `String(value)` handed
control to author code one line later, so the crash class moved into the
speller instead of going away.
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6921-cellclassname-cell-population-pins.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
---

Test-only and comment-only change (objectui#6921); no published behaviour changes.
Test-only and comment-only change; no published behaviour changes.

Pins, in the rendered DOM, which body cells the SCHEMA-level `cellClassName` on
`DataTableSchema` reaches: exactly the three utility cells (selection, row-number,
Expand Down
3 changes: 1 addition & 2 deletions .changeset/6931-tombstone-guidance-remainder.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
'@object-ui/types': patch
---

The remaining eleven ADR-0049 tombstones now refuse with their remediation text
(objectui#6931).
The remaining eleven ADR-0049 tombstones now refuse with their remediation text.

objectui#6105 converted nine tombstones on `StaticTableColumnSchema` to
`retirementTombstone()`, which writes a guidance string ONCE into both
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6940-rowactions-boolean-mirror.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
---

`DataTableSchema.rowActions` validates as the boolean it has always been declared to be
(objectui#6940, maintainer ruling 2026-09-02, director seat summon #8, option A).
(maintainer ruling 2026-09-02, director seat summon #8, option A).

The hand-written zod mirror in `zod/data-display.zod.ts` declared
`rowActions: z.array(z.any()).optional()`. Every other face of the same key says
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6958-visiblewhen-clears-the-field-it-hides.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
---

A field its own `visibleWhen` hides is now cleared, so it stops carrying a stale value
to the server (objectui#6958).
to the server.

**Breaking, deliberately.** Until now a field the form renderer hid because the field's
own `visibleWhen` (or its deprecated view-level sibling `visibleOn`) resolved FALSE kept
Expand Down
2 changes: 1 addition & 1 deletion .changeset/6965-batch-publish-advisories.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
---

Studio's "publish whole app" reports the runtime authoring gate's per-draft
advisories (objectui#6965; server half objectstack#9343).
advisories (server half objectstack#9343).

`POST /packages/:id/publish-drafts` began answering `advisories` on each
`published[]` element when objectstack#9343 landed, but the author publishing a
Expand Down
5 changes: 2 additions & 3 deletions .changeset/7004-cli-root-path-line.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
'@object-ui/cli': patch
---

`objectui validate` now says when a validation issue sits at the document root
(objectui#7004, mechanical half).
`objectui validate` now says when a validation issue sits at the document root.

The printer guarded its Path line with `issue.path.length > 0`, so an issue at
`path: []` printed no Path line at all — silent in exactly the case a reader
Expand All @@ -24,5 +23,5 @@ Every reported issue now carries a Path line; a root-level one reads

Scope: the printer still reads only top-level issues. Whether a failing union
should also surface its per-arm diagnoses — and if so which arm's — is an
author-facing diagnostic contract left open on objectui#7004 for a maintainer
author-facing diagnostic contract left open for a maintainer
ruling, and is deliberately not decided here.
4 changes: 2 additions & 2 deletions .changeset/7004-cli-union-arm-selection.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
---

`objectui validate` now prints the failing union arm the document selected, instead of a
bare "Invalid input" (objectui#7004, maintainer ruling 2026-09-02 — option B).
bare "Invalid input" (maintainer ruling 2026-09-02 — option B).

`safeValidateSchema` checks a document against `AnyComponentSchema`, a `z.union`. When a
document matches no arm, Zod reports ONE top-level issue — `invalid_union` · `Invalid
input` · path `(root)` — and hangs every arm's real diagnosis off that issue's `errors`
array, which nothing read. So a menu whose item used the divider spelling retired in
objectui#6523 printed a bare verdict on the whole document, while the remediation text
objectui#6931 wrote into that arm sat one level down, unreachable.
`8063bcbdc` wrote into that arm sat one level down, unreachable.

**What is printed now.** When the top-level issue is a failing union:

Expand Down
4 changes: 2 additions & 2 deletions .changeset/7007-relatedlist-schema-chain-gate.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ fails at `:123` (`expected true to be false`) and at `:153` (`expected <button>T
to be null`), with the stored-column controls present in both blocks, reproducing the race.
The new spelling passes under the same delay.

Each block KEEPS its existing gate and ADDS the second one (the objectui#6959 precedent and
Each block KEEPS its existing gate and ADDS the second one (the `c0c436db8` precedent and
its trap): the first gate proves the view committed with rows at all, which is what keeps
`queryBy…).toBeNull()` from passing vacuously; the second proves the schema the verdict is
derived from has landed. Trading one for the other would have left the block blind on
whichever side it dropped.

The gate is not `expect(getObjectSchema).toHaveBeenCalled()` — a mock CALL is issued one
resolution before its value reaches state, which is the trap #6959 recorded. It awaits the
resolution before its value reaches state, which is the trap `c0c436db8` recorded. It awaits the
promise the component itself awaited and flushes the commit through `act`.
2 changes: 1 addition & 1 deletion .changeset/7008-field-edit-widget-host-plumbing.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
'@object-ui/plugin-kanban': patch
---

`FieldEditWidget` now delivers the NON-DOM half of the contract it declares (objectui#7008).
`FieldEditWidget` now delivers the NON-DOM half of the contract it declares.

objectui#7009 made the factory forward its declared DOM pass-through block. The rest of
`FieldWidgetComponentProps` was still dropped: `error`, `onUploadingChange`, and the whole
Expand Down
6 changes: 3 additions & 3 deletions .changeset/7025-nonoptional-enum-cast.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
---

Internal test-only change, no user-visible behaviour (objectui#7025).
Internal test-only change, no user-visible behaviour.

The SIXTH spelling of the Zod-internals reader hazard objectui#5872 catalogues:
9 spec-parity test files in 7 packages cast an enum node NON-optionally to an
options-bearing shape and read `.options` straight off it. They converge onto
`@object-ui/test-support`'s `enumOptions(node)` — the same walk objectui#6924
converged the optional-cast family onto in PR #7024.
`@object-ui/test-support`'s `enumOptions(node)` — the same walk PR #7024
converged the optional-cast family onto.

Unlike that family, these sites failed LOUDLY (spreading `undefined` throws), and
the shared reader deliberately answers `[]` rather than raising. So every site
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7077-button-group-retire-authored-surface.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
---

`button-group` honors per-button `disabled`, and the catalog stops authoring 29 keys
nothing reads (objectui#7077, maintainer ruling 2026-09-04, decision batch #25).
nothing reads (maintainer ruling 2026-09-04, decision batch #25).

**The renderer change.** `ButtonGroupButton` declares `disabled?: boolean` and the
renderer read it nowhere — it mapped `schema.buttons` to `Button` elements passing
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7079-schema-reference-base-props.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
---

Docs only — the canonical `BaseSchema` "Common Properties" table in
`content/docs/api/schema-reference.md` (objectui#7079). No package source, no
`content/docs/api/schema-reference.md`. No package source, no
published contract and no runtime behaviour is touched, hence the empty
declaration; `apps/site` is `private: true` and sits in `.changeset/config.json`'s
`ignore` list, so nothing under `content/` ships from this change.
Expand Down
4 changes: 2 additions & 2 deletions .changeset/7087-disabled-twin-symmetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
---

`disabled` accepts a predicate string — `boolean | string`, the `BaseSchema` union — on
the 18 concrete schemas that used to narrow it back to `boolean` (objectui#7087,
maintainer ruling 2026-09-01: option 1, scoped to `disabled`).
the 18 concrete schemas that used to narrow it back to `boolean`
(maintainer ruling 2026-09-01: option 1, scoped to `disabled`).

`visible` and `disabled` are twins: objectui#4581 widened both on `BaseSchema` on the same
evidence — `SchemaRenderer` evaluates both through `evaluator.evaluateCondition` rather
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7088-hidden-jsdoc-single-hide-path.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
---

Correct `BaseSchema.hidden`'s JSDoc: it hides by NOT RENDERING, exactly as
`visible: false` does (objectui#7088, maintainer ruling 2026-09-01).
`visible: false` does (maintainer ruling 2026-09-01).

The declaration promised "Controls whether the component is hidden (but still
rendered) … component is rendered but not visible (visibility: hidden)". The
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7126-inline-widgets-read-error.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ The last five inline edit widgets read the delivered `error` slot, so a failed
required `text` / `boolean` / `date` / `datetime` / `time` control finally
reports `aria-invalid` (objectui#7126).

objectui#7008 made `FieldEditWidget` DELIVER the declared `error` key to
`f08bcd9af` made `FieldEditWidget` DELIVER the declared `error` key to
whichever widget it resolves. Of the 27 distinct components in `EDIT_WIDGETS`,
21 read it; five did not — `TextField`, `BooleanField` (serving both `boolean`
and `toggle`), `DateField`, `DateTimeField` and `TimeField` — so for their field
Expand Down
4 changes: 2 additions & 2 deletions .changeset/7188-types-render-cell-editor-pending-row.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

feat(types): `renderCellEditor`'s context gains `pendingRow` — the persisted row merged with its staged, unsaved edits (#7188)

The inline cell editor's context on `DataTableSchema` (declared by #6882) carried the row
The inline cell editor's context on `DataTableSchema` (declared by `bf97b98c8`) carried the row
once, as `row` — the **persisted** record. A widget that scopes itself by a sibling field
(a `dependsOn` lookup) had no way to see a parent that was edited in the same row but not
yet saved, so it kept listing candidates for the old parent.
Expand All @@ -19,6 +19,6 @@ The context now carries the row twice, deliberately:
already-published member, and a host that needs the persisted value would have lost its
only source. Both are addressable. The zod mirror's `renderCellEditor` is `z.function()`
and encodes no parameter shape; its description records the delta and names the member
on `DataTableSchema` as the authority. The #6882 exact-shape pin was extended (not
on `DataTableSchema` as the authority. The `bf97b98c8` exact-shape pin was extended (not
weakened) in the same change, with a control proving the pin can tell the seventh member's
presence from its absence.
6 changes: 3 additions & 3 deletions .changeset/7196-plugin-grid-held-key-census.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ runtime code, no exported type, no declared member moves, so nothing publishes.

The card (objectui#7196) was filed on ONE measured entry: the schema-level census still
listed `renderCellEditor` as an undeclared-but-live HELD key and called the `packages/types`
ruling on it "pending", when objectui#6882 had declared it on 2026-08-30. The card
ruling on it "pending", when `bf97b98c8` had declared it on 2026-08-30. The card
deliberately did not claim the other entries were correct, only that nobody had checked, so
all sixteen claims across both censuses in the file were re-derived against `origin/main`
rather than read. Seven were defective:

Stale — correct when written, drifted since:

- `renderCellEditor` — declared by objectui#6882 on three surfaces (the member, the Zod
- `renderCellEditor` — declared by `bf97b98c8` on three surfaces (the member, the Zod
mirror, an `Equal` exact-shape pin). The `(schema as any)` cast the census cites went
with the declaration.
- `cellClassName` — declared by the SAME ruling. The card did not name this one; the
Expand All @@ -29,7 +29,7 @@ Wrong when written, not drift:
- the schema-level `cellClassName` was described as folded "into every body cell's
`className`". It reaches exactly three UTILITY cells (selection, row-number,
row-actions) and never a data cell, which folds the per-column twin. The failure mode
the census names is wrong in the same way. objectui#6882's declaration carries the
the census names is wrong in the same way. `bf97b98c8`'s declaration carries the
correct version upstream; this makes the local copy agree with it.
- "the 7-literal union `TableColumn` declares" — it has been eight since objectui#6370
(2026-08-25), a day before the docblock was written; that commit's own subject says
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7201-schema-slot-census-gate.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Gate the `plugin-grid` schema-level held-key census on its ENTRY CONDITION
(objectui#7201). The census's only pin asserted that the seam ACCEPTS
`renderCellEditor` and `cellClassName` — equally true while the keys are held
locally and once they arrive through `DataTableSchema` — so it stayed green
across objectui#6882, the ruling that expired both holds. The suite now also
across the 2026-08-30 ruling that expired both holds (`bf97b98c8`). The suite now also
carries the column-level twin's shape (`columnHoldsExpiry-6424.test.ts`):
a compile-time verdict per member of `ObjectGridDataTableSchemaHolds` recording
whether `DataTableSchema` declares that key, plus a pin on the member set so the
Expand Down
2 changes: 1 addition & 1 deletion .changeset/7344-handler-string-any-mirrors.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ string dialect is not a supported authoring form, executed in the objectui#6124
(`DetailView.handleBack`), throwing `onBack is not a function` at click.
- Three declared `z.any()` — `ActionSchema.onClick`, `DetailSchema.onBack`,
`CRUDDialogSchema.onClose` — wider than the callable the TypeScript face declares, so
any JSON value parsed green (the objectui#7069 direction).
any JSON value parsed green (the `2760075ff` direction).
- One, `CalendarViewSchema.onEventClick`, was `z.function()` in a multi-line spelling the
anchored census missed.

Expand Down
2 changes: 1 addition & 1 deletion .changeset/7655-chatbot-registration-authoring-faces.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ per key on the PR's base (one `schema.KEY` read per registration body in
- Neither face declares `ChatbotSchema`'s six legacy members (`loading`,
`showAvatars`, `userAvatar`, `assistantAvatar`, `markdown`, `height`) — no
registration reads them by name — and neither redeclares `disabled`, which
stays `BaseSchema`'s `boolean | string` (objectui#7087).
stays `BaseSchema`'s `boolean | string` (`c93b4d5f3`).

**`ChatbotSchema` is unchanged.** It keeps `displayMode` and `floatingConfig`
(declarations verbatim), and the floating face declares the same two, so
Expand Down
Loading
Loading