Skip to content

feat(core,react,components,i18n,types): actions honour the spec's outcomeMessages; core and types floor at @objectstack/spec ^17.6.0; the row-5 booking is struck (objectui#11344) - #11552

Merged
objectstack-fleet[bot] merged 29 commits into
mainfrom
claude/issue-11344-action-outcome-messages-17-6
Oct 3, 2026
Merged

objectstack-fleet[bot] merged 29 commits into
mainfrom
claude/issue-11344-action-outcome-messages-17-6

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #11344

Clause-②: yes

What this PR is

The renderers now honour the spec's ActionSchema.outcomeMessages (@objectstack/spec 17.6.0).

  • @object-ui/core (ActionRunner, actionKeys) composes the success toast in this order: an own-property outcomeMessages entry, then successMessage, then the runner's default. The server's message no longer shows. SPEC_ACTION_KEYS and ACTION_DEF_KEYS list the key.
  • @object-ui/react's useActionTextLocalizer resolves outcomeMessages along the spec resolver's address: the object's _actions entry, then globalActions.
  • @object-ui/components' four action renderers forward the key.
  • @object-ui/i18n supplies actionOutcome.
  • @object-ui/types derives the member from the spec.
  • Floors: @object-ui/core and @object-ui/types raise their @objectstack/spec floor to ^17.6.0, because their published types read ActionSchema.outcomeMessages, which 17.6.0 first declares. types already reads ^17.6.0 on main (objectui#11227's floor commit), so only the core importer's specifier differs from main in the lockfile.

The row-5 booking is struck

objectui#11531 landed with row 5 booked to this card (OWED_TO_OBJECTUI_11344 in actionKeys.pin.test.ts). This PR removes it in full, together with .changeset/11344-row5-booking-17-6.md. The pin file's blob is byte-identical to its pre-booking state (3445b86f1), and the spec-inventory row is back to missing: [], stale: [].

Reviews

  • Contract review FAIL 5968432379 (floors), then REWORK 5968446861, then the delta contract review PASS 5969179064 on 89b21dafd.
  • The director's takeover claim is 5969091930.
  • This head merges main and strikes the booking, as the PASS's landing condition ③.1 requires. It also carries the PASS's two wording notes: objectui#10969's pending changeset, and the completedSuccessfully comment in packages/i18n/src/locales/en.ts. No contract surface moved beyond the reviewed head.

Tests (dev report 5969817428)

  • 8 files, 140 tests green;
  • type-check passes for core, types, react, i18n and components after a full build;
  • check:spec-floors --cross-check is green (21 of 39 packages, 435 pairs);
  • the lockfile integrity and dedupe checks are clean;
  • the changeset gates and citations (0 new) pass.

Changeset

.changeset/11344-action-outcome-messages.md: five minor entries, no major, with the floor sentence.

🤖 Generated with Claude Code

https://claude.ai/code/session_016tKoy8NJa35Yih1FdzrVmn

claude added 29 commits October 2, 2026 22:23
…i#11438)

Regenerated with pnpm 10.31.0 only, by the raise-and-restore route the
17.5.0 bump used: every @objectstack/* specifier raised to ^17.6.0 for one
`pnpm install`, every manifest restored byte-for-byte to HEAD, then a second
`pnpm install` reconciles the importers to their declared ranges.

Resolution census against the base lock: the seven @objectstack/* packages
(spec, types, core, client, formula, lint, sdui-parser) move 17.5.0 -> 17.6.0
and nothing else moves. No importer specifier changes. The registry's new
`deprecated` field on twelve @yuku-analyzer/binding-* 0.8.7 entries is
written into the lock by the same tooling.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…, a component under a name @objectstack/spec 17.6.0 now exports (objectui#11438)

@objectstack/spec 17.6.0 exports `EmptyState` from `@objectstack/spec/ui`:
the authoring type of a list view's empty-state config (title, message,
icon). @object-ui/components publishes `EmptyState` as an alias of the
`DataEmptyState` React component. A component is not a config shape, so
neither import nor derivation fits; the alias is a published name, so its
retirement or rename belongs to its own card. Same disposition objectui#11073
gave the four `Object*Props` collisions 17.5.0 surfaced.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…ing now that @objectstack/spec 17.6.0 carries the arm (objectui#11438)

objectui#11206 widened `STRIPPED_LINE`'s key type by `| 'computed'` so it
compiled against both a three-arm pin and objectstack `main`, and left a
tripwire in `writeWarningToast.test.ts` for the bump that carries the arm.
17.6.0's `DroppedFieldsEventSchema.reason` lists `computed`, so this does what
the tripwire says: the key type is the spec union again, the `computed` case
is spelled as the literal, the spent tripwire is deleted, and
spec-symbol-batch6's `_ReasonIsTheEnum` pins the exact four-member union.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…spec/migrations, where 17.6.0 moved it (objectui#11438)

17.6.0 carries the spec's migrations-entry-split: `MIGRATIONS_BY_MAJOR` is
exported from `@objectstack/spec/migrations` and no longer from the root. The
test read the root dynamically so it compiled against both the old pin and
objectstack `main`, with no fallback, and its docblock asked the bump that
moves the pin past the split to replace that with a static import from the
subpath. This does that.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…jectstack/spec 17.6.0 refuses by name (objectui#11438)

17.6.0 carries objectstack#20758: `PageHeaderProps.breadcrumb` is a tombstone
refused by name. objectui's renderer has not read it since objectui#11166,
and its `inputs` entry said it stayed only while the spec accepted the key and
would leave with the retirement. It leaves now, so the registry no longer
publishes an input the contract refuses
(`registry-inputs-spec-parity.test.ts`, "page:header declares no top-level
input the spec does not accept").

The slotted-pages guide example drops `breadcrumb: true`, which the contract
now refuses (its pin parses the example against the spec row), and the
page-header doc and the renderer comment say the key is refused rather than
"accepted until retired".

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…7.6.0 made stale (objectui#11438)

objectui#11111 decision 3 = B booked `action:button.endpoint` and
`action:icon.endpoint` as spec keys held unpublished, owed to objectui#11168.
17.6.0 refuses `endpoint` on both blocks (objectstack b3917d90, the rename to
`target`), so neither entry names a key the spec declares, and the
dangling-exemption check reds on them. Both are struck and the ledger cap
falls from 3 to 1 (`undoable` stays, still owed to objectui#11168).

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
… group, which @objectstack/spec 17.6.0 adds (objectui#11438)

17.6.0's `GetTranslationsResponseSchema.translations` carries a `picklists`
group (objectstack addbbf02, the `picklist` metadata kind). The recogniser's
group list is written out, and the console's `loadLanguage.test.tsx` walks the
spec's list so a group the spec adds turns it red instead of a bundle carrying
only that group being returned untransformed and read by nothing. Added; the
transform already copies an unlisted group through onto `app`.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…t its key, as @objectstack/spec 17.6.0 raises it (objectui#11438)

Through 17.5.0 the spec raised the reserved-name refusal on the `fields` map
(`custom @ fields`). objectstack#20997 names the key, and 17.6.0 carries it
(`custom @ fields.constructor`). The pin said only this reading moves when
that lands; it moves, in the instrument row and in the banner row, which now
names `fields.constructor`.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…@objectstack/spec 17.6.0 leaves true, and ledger the four that name a past release (objectui#11438)

`check:installed-pin-claims` reads every present-tense claim about the
installed `@objectstack/*` version against the resolved artifact. 38 sites
named 17.5.0. Each was decided, never find-and-replaced:

- RESTAMPED after re-measuring the fact the sentence states against the
  installed 17.6.0 (each probe was also run against a 17.5.0 tarball as the
  control, and answered the same on both): `FieldSchema`'s `dependsOn`, `rows`
  and option `description` readings; `object-calendar.data` and `.calendar`;
  `record:details.columns`; `record:highlights` `fields[]` and `layout`;
  `SelectOptionSchema` labels; the `@objectstack/lint` field-rule verdict text;
  `referenceTo` and its four alias spellings; `CalendarConfigSchema`'s required
  key, options and refusal hints; `record:alert.visible`; `object-kanban`'s
  fifteen keys; the screen node's `waitForInput`; `object-calendar`'s ten flat
  members; `ObjectListViewSchema`'s members; the `view.list.navigation.view`
  tombstone in the gantt README pin; and the sites whose own tests measure the
  fact and pass on 17.6.0.
- REWORDED where the fact moved: the retired-key type is the branded
  `[REMOVED]` mark at the pinned 17.6.0 (bare `undefined` through 17.5.0), on
  `retired-key-type.ts` and the five pins that cite its spellings.
- LEDGERED as `historical` (four files, seven sites): lines whose version says
  WHEN something changed or names a release's record set, where `pinned` is an
  unrelated verb or the sentence sits under a dated update heading.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…ack/spec 17.6.0 moves, and pair the live-e2e backend with it (objectui#11438)

Each pin names what moved, measured against a 17.5.0 control:

- `ObjectSchema`'s accepted keys are 44, not 43: 17.6.0 adopts `imageField`
  (gained set exactly that one, lost set empty). Both corpus-guard counts are
  re-pointed as the 17.3.0 adoption was.
- The spec's exports map has 21 entries, not 20: `./migrations` is added (no
  `browser` arm), nothing removed. Every count and its prose follow.
- `check-lockfile-integrity`'s two lockfile samples are rebuilt on the 17.6.0
  snapshot keys their own tripwire named.
- The objectui#11111 owner total for objectui#11168 follows the cap to 1 (the
  two `endpoint` entries struck earlier on this branch).
- `e2e/live/ci/backend.env` pins `OBJECTSTACK_VERSION=17.6.0`, the version the
  lockfile resolves, as the pin requires (`@objectstack/cli@17.6.0` resolves
  to the 17.6.0 tag commit).
- The page-header doc drops the version literal it gained on this branch;
  `doc-version-claims` holds docs to pointers, not version numbers.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…k/spec 17.6.0, so it joins the covered arms (objectui#11438)

17.6.0 types `ComponentPropsMap['object-grid'].grouping` as the grouping
config instead of `z.unknown()`. The authored arm's `properties` is that row
by reference, so a padded grouping field name is now refused at its entry on
all four faces. The census's recorded reason for leaving the bag member
uncovered stopped holding; it moves to the declaring table and is pinned like
every other arm. The node-level `grouping` stays uncovered: it is the flat
spelling's by-name refusal.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…stack/spec 17.6.0's walk descends it (objectui#11438)

objectui#11223's block (e) held `page:card`'s `properties.footer` as the one
slot the spec's exported walk did not descend, and said to retire itself when
that changed. 17.6.0's walk descends `properties.footer[]`, objectui's faces
now judge a footer child, and block (d) asked for the position to be added to
(a). It is: the footer is a row of (a) on both faces, (e) is deleted, and the
CLI doc no longer names the footer as an unjudged slot.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
… @objectstack/spec 17.6.0's root entry shed (objectui#11438)

The second payback of objectui#11073's ruled raise, objectstack#20646, reaches
objectui with the 17.6.0 bump: the spec root no longer exports its migration
chain. Measured with two console builds in one lock hold (`CI=true pnpm exec
vite build` after the packages build): `main` at `2d576e46` (17.5.0) weighs
3,636,289 gzipped eager bytes, this branch at `2ba091c` weighs 3,386,193;
`vendor-objectstack` alone is -250,108, the other 329 chunks +12.

Left alone, the ceiling would sit 3.01x the regression above the payload and
the gate's own sensitivity check exits 2 (a blind gauge). So, as objectui#11101
did for the first payback: `MAX_EAGER_CLOSURE_GZIP_BYTES` 3,660,380 ->
3,410,284 and `vendor-objectstack` 1,689,265 -> 1,439,157, each lowered by
exactly what it recovered; BASELINE and PER_CHUNK_BASELINE move to the
`2ba091c` reading; headroom 0.26x and 0.20x, the bands `main` already had.
The test's rendered literal is re-taken (3306.8). The changeset says what the
console gains.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…#11536 under objectui#11438 ruling A′ (objectui#11438)

@objectstack/spec 17.6.0 gives `record:line_items` a ComponentPropsMap row
(objectstack 24c554da, #21142 / #21244), so registry-inputs-spec-parity
judges it from that pin on. objectui#11438 ruling A′ (record 5965062249)
applies objectui#11111 decision 3 = B to the bump: the population is
re-pinned and every difference is booked to the owner card filed for the
group, objectui#11536, with an expiry. Nothing is declared or pinned here.

- EXPECTED_COVERED gains `MINOR_17_6_BLOCKS` (`record:line_items`), armed
  when the installed spec carries it; the census goes 55 -> 56 carried and
  39 -> 40 judged.
- UNPUBLISHED_EXEMPTIONS books the ten keys `inputs` omit; MEMBER_PIN_EXEMPTIONS
  books `columns` and `dataSource`, and MEMBER_PIN_EXEMPTION_CEILING goes
  0 -> 2 with the booking.
- The objectui#11111 ledger gains objectui#11536 as a fourth owner, routed by
  block. Its entries cite ruling A′ and decision 3 = B and expire 2026-11-02
  (thirty days after the ruling, as the 17.5.0 entries' 2026-10-30 is after
  theirs). Caps: unpublishedKeys 1 -> 11, memberPins 0 -> 2, owner total 12.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
… beside a pin marker (objectui#11438)

`check:installed-pin-claims` read two of the lines the booking added as
present-tense claims about the installed spec: the `MINOR_17_6_BLOCKS`
guard's docblock ("Does the installed ... carry the 17.6.0 set?") and the
`memberPins` cap comment, where the version sat beside the objectui#11168
slice's "pinned". Both were true at 17.6.0 and would go stale at the next
bump. The guard's docblock now asks about the spec this tree resolves, and
the two cap comments name the ruling that booked the entries instead of the
version. No assertion moves.

Claude-Session: https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w
Co-authored-by: Claude <noreply@anthropic.com>
…essMessage, then the default; stop reading data.message (objectui#11344)

The runner's success toast follows ActionSchema.outcomeMessages
(@objectstack/spec 17.6.0, ruling A on objectstack-ai/cloud#2315): the entry
named by the handler answer's top-level `outcome`, then `successMessage`, then
the runner's default text. Both author rungs fill in `${result.*}` through the
grammar and scope onSuccess.navigate reads (`substituteScopeTokens` over
`readActionPayload`), inserted as text rather than percent-encoded.
`result.data.message` is no longer read.

ActionDef declares `outcomeMessages` (derived from the spec), and both key
inventories list it, which turns the trunk's actionKeys.pin row green. The two
rows that pinned the retired server-message rung are replaced by rows pinning
the ruled behaviour.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…orward it from every declared action surface (objectui#11344)

- useObjectLabel gains actionOutcome, the resolver for
  `_actions.NAME.outcomeMessages.OUTCOME` (then `globalActions.…`).
- useActionTextLocalizer resolves each declared outcomeMessages entry and
  collapses an inline I18nLabel map (on an entry or on successMessage) to the
  active language before dispatch; `${result.*}` tokens pass through for the
  runner to fill in after the run.
- action:button, action:icon, action:group and action:menu forward
  outcomeMessages, which check:action-forward-parity owes once the runner reads
  it. The action:button / action:icon registrations do not publish it: their
  17.6.0 spec rows do not declare it.
- UIActionSchema declares outcomeMessages, derived from the spec.
- The successMessage input descriptions no longer say a server message takes
  precedence, and a useConsoleActionRuntime comment no longer names the
  retired data.message read.

Pins: the zh-CN (inline map) and ja-JP (bundle entry) toasts through a real
I18nProvider and ActionProvider, and the toast from each of the four surfaces
plus the action:bar member path.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…server-message rung (objectui#11344)

- enhanced-actions.mdx's notice bullet describes the three rungs, the
  `${result.*}` scope the copy reads, and that a server `message` is shown only
  when the copy asks for `${result.message}`.
- Two pending changesets (objectui#10900, objectui#10969) said a server message
  reaches the toast verbatim; this change makes that false in the release that
  will publish them, so the clause is dropped from each. check:changeset-claims
  named both files for a read.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…cit any (objectui#11344)

The localizer's generic already types the action as a string-keyed record, so
the cast added one no-explicit-any warning the file did not have before.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…pins (objectui#11344)

`tsc -p tsconfig.test.json` refused the three `execute(localized)` calls: the
localizer returns the type it was given, while its work changes the shape at
run time (an I18nLabel map in, a string out). One named helper states that hop,
as the hosts' own `any` does.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…Handler mock (objectui#11344)

`tsc -p tsconfig.test.json` refused `setToastHandler(toast)` for a bare
`ReturnType<typeof vi.fn>`; the sibling 10900 suite's `Mock<ToastHandler>` is
the spelling that type-checks.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…ward key order, useObjectLabel's member count, and the one config-bag predicate (objectui#11344)

- action-forward-precedence pins the exact key order of the action:button /
  action:icon forward; `outcomeMessages` is inserted beside `successMessage`,
  one added name with no neighbour moved, as the pin's own note on middle
  insertions reads it.
- useObjectLabel-identity-5564 anchors the resolver surface to an absolute;
  `actionOutcome` takes it from 26 to 27 on the one path both probes share.
- configBag.pin allows one "is this a real bag?" spelling in @object-ui/react;
  the localizer now asks `isConfigBag` instead of spelling it.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…he published types read ActionSchema.outcomeMessages (objectui#11344)

The contract review's ground: @object-ui/core's ActionDef and @object-ui/types'
UIActionSchema now index `Action['outcomeMessages']`, a member the spec first
declares in 17.6.0, while both packages still admitted ^17.5.0. Measured over
the five touched packages' published artifacts, with @objectstack/spec mapped
to the 17.5.0 tarball and to the installed 17.6.0 as the control: the only
diagnostics in a package's own dist that appear at 17.5.0 alone are the TS2339
on `outcomeMessages` in core's actions/ActionRunner.d.ts and in types'
ui-action.d.ts; no dist JS imports a runtime export 17.5.0 lacks. So exactly
those two floors move.

`pnpm install` moves only the two importers' `specifier:` lines; the resolved
version stays 17.6.0. The changeset names the raised floors. Two one-word
repairs ride along: enhanced-actions.mdx credits useActionTextLocalizer to
@object-ui/react, and objectui#10900's pending changeset says `successMessage`
reaches the toast "untranslated" rather than "verbatim".

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
…Messages slice (objectui#11344)

Two trunk-only files conflicted because the slice was cut from the trunk at
c9121f9 and main carries the trunk's later state of them; both take main's
version, which is the trunk's successor: .changeset/11438-objectstack-17-6-bump.md
and apps/console/src/__tests__/registry-inputs-spec-parity.test.ts.

pnpm-lock.yaml took main's file and was regenerated with pnpm install; it now
differs from main only in the packages/core importer's @objectstack/spec
specifier (^17.6.0). The packages/types floor was already ^17.6.0 on main.

Claude-Session: https://claude.ai/code/session_016tKoy8NJa35Yih1FdzrVmn
Co-authored-by: Claude <noreply@anthropic.com>
…der lists the key (objectui#11344)

The 17.6.0 bump booked `ActionSchema.outcomeMessages` as owed to this card in
actionKeys.pin.test.ts (objectui#11438 ruling A″). This slice lists the key in
SPEC_ACTION_KEYS and ACTION_DEF_KEYS, so the booking's own rows go red on
merge, as its ablation LEG 3 measured, and the delta contract review's landing
condition requires the strike in full.

- Removed: the OWED_TO_OBJECTUI_11344 ledger and its docblock, OWED_REASON,
  the header's "OWED TO objectui#11344" section, and the whole OWED describe.
- Restored: the spec-inventory cap row to
  `expect({ missing, stale }).toEqual({ missing: [], stale: [] })`.
- Removed: .changeset/11344-row5-booking-17-6.md, the booking's empty-frontmatter
  changeset, which releases nothing.

The file is now byte-identical to its state before the booking (bebd7ec).

Claude-Session: https://claude.ai/code/session_016tKoy8NJa35Yih1FdzrVmn
Co-authored-by: Claude <noreply@anthropic.com>
…changeset say what the runner does since outcomeMessages (objectui#11344)

The delta contract review's two residual precision notes, carried here because
this slice made both statements inexact:

- packages/i18n/src/locales/en.ts: the comment above `completedSuccessfully`
  said the default shows when an action declares no `successMessage` and the
  server returned no message. It now says the default shows when no
  `outcomeMessages` entry applies and no `successMessage` is declared, and
  that the server's message plays no part. It is also now "the one
  success-toast text the runner writes itself", since objectui#10969 added the
  runner's own error and Undo text.
- objectui#10969's pending changeset: an author's `successMessage` no longer
  stays "verbatim", since the runner fills its `${result.*}` tokens; the bullet
  is about the runner's translator, so the word is now "untranslated".

Claude-Session: https://claude.ai/code/session_016tKoy8NJa35Yih1FdzrVmn
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 3, 2026
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 17 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/11355-small-p1-sites-r2.md

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    ActionBarSchema, the action:bar node, is now exported by @object-ui/types. It used to be declared in @object-ui/components' renderers/action/action-bar.tsx, which is not on that package's entry, so a host could not import it. It now lives in @object-ui/types' ui-action.ts, beside UIActionSchema: actions and systemActions are UIActionSchema[], and location is @objectstack/spec's ActionLocation. It declares no [key: string]: any, so a literal typed ActionBarSchema may write only its declared members, which are the keys the renderer reads. The renderer imports it from @object-ui/types, and its parameter annotation keeps its own index signature for the DOM pass-through (objectui#4422). @object-ui/components adds no export.

.changeset/3917-retire-action-condition-branch.md

  • names content/docs/core/enhanced-actions.mdx → content/docs/core/enhanced-actions.mdx — edited by this change

    • ActionCondition is removed from @object-ui/types (and from the barrel export). - ActionSchema.condition is retyped to the predicate the runtime actually honours: boolean | string | { dialect?: string; source: string } — the same three arms ActionRunner's own ActionDef.condition carries, and the same vocabulary visible and disabled use. - ActionConditionSchema is removed from @object-ui/types/zod (and from the zod barrel); the condition key now validates against that predicate union. - The two teaching sites (content/docs/core/enhanced-actions.mdx Conditional Execution, content/docs/api/schema-reference.md ActionSchema table) are rewritten to the live vocabulary: condition is a gate; a branch is expressed as separate actions with mutually exclusive conditions.

.changeset/5793-spec-range-floors.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    Nothing a consumer installs today changes: normal resolution already picks the newest 17.x, and pnpm-lock.yaml still resolves 17.2.0 on this edge after the bump. The change is to the declared floor only, which is why it is scored patch rather than minor — the same reasoning objectui#5753 used for the other direction on this dependency.

.changeset/6306-action-icon-type-resolution.md

  • names action-button.tsx → packages/components/src/renderers/action/action-button.tsx — edited by this change

    Scope is this one renderer. type: schema appears in exactly two files under renderers/action/ — action-button.tsx (already correct) and action-icon.tsx; action:group and action:menu compose their members differently and are untouched.

  • names action-icon.tsx → packages/components/src/renderers/action/action-icon.tsx — edited by this change

    Scope is this one renderer. type: schema appears in exactly two files under renderers/action/ — action-button.tsx (already correct) and action-icon.tsx; action:group and action:menu compose their members differently and are untouched.

.changeset/6349-types-internal-name-collisions-batch-1.md

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    ActionSchema — renamed, because the two shapes are unrelated. crud.ts and ui-action.ts both declared it. Measured member-by-member they share 9 keys out of 28 each: crud.ts extends BaseSchema and pins type: 'action' (a UI node — a button in a component tree), ui-action.ts extends nothing and types type as ActionType (a spec-v2 action definition, with name, locations, params, target). Re-pointing either at the other would silently hand a consumer a different type, so this took the rename branch (objectui#5044 is the precedent for choosing the surviving name). ui-action.ts's declaration is now spelled UIActionSchema — the name src/index.ts has always PUBLISHED it under, via export type { ActionSchema as UIActionSchema }, which is now a plain re-export. The package's public surface is unchanged: ActionSchema still means crud.ts's legacy shape and UIActionSchema still means ui-action.ts's, exactly as before. Nothing outside ui-action.ts imported the old spelling — there is no ./ui-action subpath in exports, so the old name was never reachable from outside the package.

.changeset/6361-spec-floor-17-2-0.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    Nothing a consumer installs today changes: normal resolution already picks the newest 17.x, and pnpm-lock.yaml still resolves 17.2.0 on both edges after the bump — only the recorded specifier: moves. No source and no behaviour changes, which is why this is scored patch, on the reasoning 111741454 used for the same remediation on @object-ui/plugin-detail.

.changeset/6661-app-launcher-nav-menu-renderers.md

  • names en.ts → packages/i18n/src/locales/en.ts — edited by this change

    Three new strings — the launcher's and the menu's accessible names, and the menu's empty state — are declared under console.nav in en.ts and its nine sibling packs. An inline defaultValue alone is not a fix: it renders English at one call site and leaves the string untranslatable everywhere (objectui#3517).

.changeset/7122-objectstack-family-17-3-0.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    @objectstack/client, core, formula and lint each pin @objectstack/spec EXACTLY, so resolving the spec alone to 17.3.0 left the console bundling TWO copies of it. Moving the family with it in pnpm-lock.yaml collapses the duplicate; every declared range already admitted 17.3.0, so no manifest moved.

.changeset/8318-jsdoc-default-tag-corrections.md

  • names core/src/actions/ActionRunner.ts → packages/core/src/actions/ActionRunner.ts — edited by this change

    • CRUDDialogSchema.size / .closeOnOutsideClick / .closeOnEscape / .showClose — there is no register('crud-dialog' anywhere, so no node of that type ever reaches a renderer. Recorded once on the interface. Per key, the name census differs: two spellings occur nowhere outside the declaration and its zod twin, and showClose's one other occurrence (renderers/overlay/drawer.tsx:38) belongs to DrawerSchema. - ActionSchema.level — type: 'action' is not a rendered node type, and core/src/actions/ActionRunner.ts, which is what makes method / chainMode / reload / close live, does not read level. - CardSchema.variant — card IS registered, twice, and neither registration reads it: the ui route forwards the key to ui/card.tsx, which spreads onto a div and mentions variant nowhere, and the page route forwards only its designer props. - PageNodeSchema.isDefault — page IS registered, and PageRenderer neither reads the key nor forwards it: the wrapper element gets toDomProps(props), an allow-list that does not carry it.

.changeset/action-callback-retired-7068.md

  • names content/docs/core/enhanced-actions.mdx → content/docs/core/enhanced-actions.mdx — edited by this change

    What was measured, on this branch's base (900f8d99). ActionCallback ({ type: 'toast' | 'message' | 'redirect' | 'reload' | 'custom' | 'ajax' | 'dialog', message?, url?, api?, method?, dialog?, handler? }) was declared in crud.ts, mirrored in zod/crud.zod.ts, re-exported by both barrels, and carried on the legacy ActionSchema as onSuccess? / onFailure?. Producers: the package's own phase2-schemas.test.ts fixture and three ts fences in content/docs/core/enhanced-actions.mdx — nothing else (git grep -l ActionCallback over packages content skills hit the five packages/types files; positive control SchemaNodeSchema hit 22). Runtime readers: none — ActionRunner imports UIActionSchema, never this interface, and its own ActionDef.onFailure is a different (runner-native) meaning. It was the THIRD meaning of one key: objectui#5934 had already retired the runner's callback meaning of onSuccess and converged it on the spec's block.

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    Where the live meaning lives. Post-success navigation is the spec's onSuccess block, { navigate, openIn }, declared on UIActionSchema (ui-action.ts) and forwarded to the runner (objectui#5934). A success or failure notice is successMessage / errorMessage — adjacent keys on the same legacy ActionSchema, NOT retired, and still accepted on both faces.

.changeset/action-keys-warning-text-5642.md

  • names actionKeys.pin.test.ts → packages/core/src/actions/__tests__/actionKeys.pin.test.ts — edited by this change

    Both halves of the message's tail had outlived the change they described. It told the author the key was warned about rather than rejected because ActionDef "still carries [key: string]: any" — objectstack#4075 step 3 deleted that index signature, and actionKeys.pin.test.ts pins the deletion in the opposite direction ({ ActionDef: false, ActionContext: true }), while actionDef-closed-surface.test.ts pins that tsc now rejects exactly such a key at the construction site. And it prescribed promoting the key to an explicit field on ActionDef "(packages/core/src/actions/actionKeys.ts)" — that file holds the INVENTORY (ACTION_DEF_KEYS); the interface is in ActionRunner.ts. The wrong pointer had teeth: an author who followed it edited the inventory alone, which is precisely the half-change the pin test reddens on, since it re-derives the inventory from the interface's AST.

  • names ActionRunner.ts → packages/core/src/actions/ActionRunner.ts — edited by this change

    Both halves of the message's tail had outlived the change they described. It told the author the key was warned about rather than rejected because ActionDef "still carries [key: string]: any" — objectstack#4075 step 3 deleted that index signature, and actionKeys.pin.test.ts pins the deletion in the opposite direction ({ ActionDef: false, ActionContext: true }), while actionDef-closed-surface.test.ts pins that tsc now rejects exactly such a key at the construction site. And it prescribed promoting the key to an explicit field on ActionDef "(packages/core/src/actions/actionKeys.ts)" — that file holds the INVENTORY (ACTION_DEF_KEYS); the interface is in ActionRunner.ts. The wrong pointer had teeth: an author who followed it edited the inventory alone, which is precisely the half-change the pin test reddens on, since it re-derives the inventory from the interface's AST.

.changeset/host-dispatch-action-keys-5611.md

  • names actions/actionKeys.ts → packages/core/src/actions/actionKeys.ts — edited by this change

    Adds an exported HOST_DISPATCH_ACTION_KEYS (sole member overrideNotice) to actions/actionKeys.ts and unions it into KNOWN_ACTION_KEYS, which is the fourth input to that set and the first one that is not an authored-surface mirror. Measured before and after on the exact dispatch the bar composes: the warning went from one call naming overrideNotice to none, KNOWN_ACTION_KEYS grew by exactly one member, and an action carrying a real typo alongside it still warns — naming targt only.

  • names actionKeys.pin.test.ts → packages/core/src/actions/__tests__/actionKeys.pin.test.ts — edited by this change

    The authored surface does not move. overrideNotice is still NOT declared on ActionDef and still NOT in ACTION_DEF_KEYS; writing it in an action literal remains a compile error, and the AST-derived pin over the interface is unchanged. Membership in KNOWN_ACTION_KEYS widens what the WARNING tolerates, never what an author may write — actionKeys.pin.test.ts now pins both halves, including the new list's exact contents so a second member cannot arrive quietly.

.changeset/i18nlabel-inverted-pin-5612.md

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    The I18nLabel "inverted pin" now watches the premise it claims to watch, and ui-action.ts no longer imports a symbol it never uses (objectui#5612, objectui#5613).

.changeset/objectchart-fieldoptionlabel-ref-5587.md

  • names useObjectLabel.ts → packages/i18n/src/useObjectLabel.ts — edited by this change

    Pinned by ObjectChart.fieldOptionLabelRefetch.test.tsx, which counts fetches across forced re-renders both outside and inside a provider. Reverting useObjectLabel.ts to its pre-objectui#5564 state turns the no-provider case red (2 fetches instead of 1, alongside React's "Maximum update depth exceeded"), so the removal is pinned to the fix that unlocked it rather than to a comment.

.changeset/objectpivottable-i18n-resolver-refs-5625.md

  • names useObjectLabel.ts → packages/i18n/src/useObjectLabel.ts — edited by this change

    Pinned by ObjectPivotTable.i18nResolverDeps.test.tsx, which counts derivations across forced re-renders both outside and inside a provider, checks that the two derived state maps settle, and asserts the language-switch re-derivation. Reverting useObjectLabel.ts to its pre-objectui#5585 state turns the no-provider case red (derivations in the dozens instead of 1), so the removal is pinned to the fix that unlocked it rather than to a comment.

.changeset/param-dialog-title-fallback-4282.md

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    title is declared on no action surface in the ecosystem: it is absent from @objectstack/spec's ActionSchema (44 keys walked at spec 17.0.0), from @object-ui/core's ActionDef and its pinned ACTION_DEF_KEYS / SPEC_ACTION_KEYS inventories, and from @object-ui/types' renderer view (ui-action.ts) and crud.ts ActionSchema / BaseSchema. None of the four action renderers — action:button, action:icon, action:group, action:menu — forwards it either. So the right-hand side of that || could not be reached by authored metadata: a fallback that cannot fire, which is the "declared is not enforced" shape objectstack#4075 exists to reduce. Nothing a user hits changes; the line now reads exactly one key, matching the description line directly below it.

.changeset/record-detail-param-dialog-title-5610.md

  • names ui-action.ts → packages/types/src/ui-action.ts — edited by this change

    title is declared on no action surface in the ecosystem: it is absent from @objectstack/spec's ActionSchema (44 keys walked at spec 17.0.0), from @object-ui/core's ActionDef and its pinned ACTION_DEF_KEYS / SPEC_ACTION_KEYS inventories, and from @object-ui/types' renderer view (ui-action.ts) and crud.ts ActionSchema / BaseSchema. None of the four action renderers — action:button, action:icon, action:group, action:menu — forwards it either. So the right-hand side of that || could not be reached by authored metadata: a fallback that cannot fire, which is the "declared is not enforced" shape objectstack#4075 exists to reduce. Nothing a user hits changes; the line now reads exactly one key, matching the description line directly below it.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 7121221fa (merge-base with origin/main): 22 file(s) changed outside .changeset/, read against 2075 pending declaration(s) that publish a body (2709 pending in total). · run

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 3, 2026 13:55
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 3, 2026 13:55
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 330 chunks) 3307.7 KB 3330.4 KB
Main entry chunk (gzip) 150.3 KB 350 KB
Entry file index-BXTepTzx.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.88KB 6.25KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.17KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 571.12KB 136.83KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 231.08KB 64.07KB
fields (index.js) 261.51KB 66.22KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 35.66KB 9.49KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 39.47KB 11.25KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.04KB 3.92KB
plugin-calendar (index.js) 53.17KB 15.46KB
plugin-charts (index.js) 83.60KB 22.89KB
plugin-chatbot (index.js) 198.22KB 46.97KB
plugin-dashboard (index.js) 142.26KB 38.44KB
plugin-designer (index.js) 231.28KB 48.76KB
plugin-detail (index.js) 245.43KB 64.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 172.73KB 44.50KB
plugin-gantt (index.js) 179.16KB 45.06KB
plugin-grid (index.js) 234.37KB 64.34KB
plugin-kanban (index.js) 49.59KB 15.58KB
plugin-list (index.js) 116.55KB 28.95KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 38.80KB 11.71KB
plugin-tree (index.js) 14.51KB 5.15KB
plugin-view (index.js) 90.23KB 22.73KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.81KB 3.58KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 6.06KB 2.68KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 21.42KB 7.05KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.16KB 1.96KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 5.07KB 2.39KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.25KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 3, 2026
Merged via the queue into main with commit c476be0 Oct 3, 2026
47 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-11344-action-outcome-messages-17-6 branch October 3, 2026 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

1 participant