Skip to content

fix(types): type dueLike by reference and declare settledWhen on date and datetime field metadata (objectui#12297) - #12861

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-12297-duelike-by-reference
Oct 17, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-12297-duelike-by-reference

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #12297
Clause-②: yes

What changed

@object-ui/types, packages/types/src/field-types.ts

  • DateFieldMetadata.dueLike and DateTimeFieldMetadata.dueLike are typed by reference, SpecField['dueLike']. This is the file's existing idiom (import type { Field as SpecField } from '@objectstack/spec/data', the same one visibleWhen, currencyConfig and inlineHelpText use). Field is the spec's z.input face, so the authored shapes are what the type admits. The value type is unchanged.
  • settledWhen is new on both interfaces, typed SpecField['settledWhen']. That is the spec's expression input: a bare CEL string or the { dialect, source } envelope. The doc comments follow the spec: a CEL predicate over record, display only, date / datetime only, and accepted only beside dueLike: true.
  • The doc comments also say two things the runtime does not do yet. First, the spec reads an absent or false dueLike as 'not a deadline', but today's date cells still fall back to the field-name convention. Second, settledWhen is declared, not yet rendered. Both reads belong to objectui#11815, which is not addressed here and remains open.

Faces left as they are, and why

  • DetailViewFieldSchema.dueLike (views.ts and its zod/views.zod.ts mirror) is not re-typed. The spec declares dueLike only on FieldSchema. The detail-view entry is an objectui view key of the same name, with its own documented precedence and fallback, and its type already equals the spec's boolean | undefined. Typing it by reference would claim a spec row that does not exist, and no settledWhen is added there for the same reason.
  • No zod mirror of field metadata exists under packages/types/src/zod/, so nothing was added there.

Docs

  • content/docs/fields/date.mdx and content/docs/fields/datetime.mdx name both keys as FieldSchema.dueLike / FieldSchema.settledWhen and add a typed settledWhen snippet each (bare string on date, envelope on datetime). They state the spec's 'absent is not a deadline' alongside today's name fallback, and that settledWhen is declared and not yet rendered.
  • content/docs/api/schema-reference.md: the detail-view dueLike note adds that settledWhen is an object-metadata key (a detail-view entry does not carry it), declared and not yet rendered.

A stale header in field-metadata-family-retired-12242.test.ts said the installed spec refuses dueLike. It now points at this card's pin.

Spec version and where each reference resolves

The installed @objectstack/spec is 18.0.0-next.2; packages/types/package.json declares ^18.0.0-next.2. In its src/data/field.zod.ts, FieldSchema declares:

  • dueLike: z.boolean().optional().describe("Deadline semantic (date / datetime only): TRUE declares this date a deadline ...")
  • settledWhen: EvaluatedExpressionInputSchema.optional().describe("Predicate (CEL) — the deadline is SETTLED while TRUE ...")

The type-only export Field = z.input of FieldSchema is what SpecField names.

Test evidence (HEAD 868d7b8)

  • New pin packages/types/src/__tests__/field-metadata-deadline-by-reference-12297.test.ts:
    • Exact Equal checks that DateFieldMetadata and DateTimeFieldMetadata dueLike / settledWhen equal SpecField of the same key.
    • Control: neither key is in keyof TimeFieldMetadata or keyof TextFieldMetadata, and fresh time / text literals carrying them are refused.
    • Runtime half against the installed FieldSchema: accepts both keys in both wire shapes; refuses dueLike on time and settledWhen without dueLike: true, each beside an accepting control.
  • Ablation, once: replacing DateFieldMetadata's SpecField['settledWhen'] with a local string made tsc -p tsconfig.test.json exit 2 with TS2344 on exactly that Equal row. Restored, with the file's HEAD blob hash matching and git diff HEAD empty.
  • pnpm --filter @object-ui/types test: 386 files, 10513 tests passed.
  • pnpm --filter @object-ui/types type-check, lint (0 errors; the 3 warnings on field-types.ts are pre-existing) and build: exit 0.
  • pnpm check:spec-symbols: exit 0, output identical before and after.
  • Docs gates check:doc-snippets (801 of 801 blocks), check:doc-examples, check-doc-json-fences, check-doc-links, check-doc-component-types, check-doc-example-ids, plus check-control-bytes, check-changeset-presence and check:new-line-citations: exit 0.

No screenshots: this change moves no pixel.

Implemented in session https://claude.ai/code/session_01Qe458QJ3QyHSzgf9t1dDEH.

🤖 Generated with Claude Code


Generated by Claude Code

… and datetime field metadata (objectui#12297)

DateFieldMetadata and DateTimeFieldMetadata now take dueLike from
@objectstack/spec's FieldSchema instead of a local boolean, and declare
settledWhen beside it by the same reference. settledWhen is declared, not
yet rendered: the date cells' read belongs to objectui#11815.

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

The date and datetime field pages and the schema reference name both keys
as FieldSchema members, say the spec reads an absent dueLike as "not a
deadline" while today's cells still apply the field-name fallback, and say
settledWhen is declared and not yet rendered.

Claude-Session: https://claude.ai/code/session_01Qe458QJ3QyHSzgf9t1dDEH
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation package: types tests labels Oct 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 2 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/12242-types-field-metadata-family.md

  • names field-metadata-family-retired-12242.test.ts → packages/types/src/__tests__/field-metadata-family-retired-12242.test.ts — edited by this change

    TypeScript that writes a retired member, or type: 'auto_number' / type: 'object', on an annotated field metadata literal no longer compiles. For visible_on, write visibleWhen with a CEL predicate. For currency, write currencyConfig: { currencyMode: 'fixed', defaultCurrency }. Otherwise drop the key. The spec refuses every one of these keys and values by name, so a field written with them could not be published anyway. field-metadata-family-retired-12242.test.ts pins each member and both type values, beside the installed spec's own answer. (The bump is minor by this repo's release model: objectui's major follows the @objectstack family major, and its own breaking changes ship as minor with the breaking semantics stated here.)

.changeset/12242-types-kept-positions.md

  • names field-metadata-family-retired-12242.test.ts → packages/types/src/__tests__/field-metadata-family-retired-12242.test.ts — edited by this change

    TypeScript that writes one of these keys on an annotated field metadata literal, or assigns a type: 'geolocation' literal to FieldMetadata, no longer compiles. Move idField / picker / subtitle to the form entry (FormField) or the action parameter that builds the picker. Declare a regex check on the object as a format validation rule. Use location for a map point. Drop mobile_fullscreen: ObjectForm stamps it from mobile.fullscreenLongText. field-metadata-family-retired-12242.test.ts pins each key and the type value, beside the installed spec's own answer. (The bump is minor by this repo's release model: objectui's major follows the @objectstack family major, and its own breaking changes ship as minor with the breaking semantics stated here.)

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 024d44694 (merge-base with origin/main): 6 file(s) changed outside .changeset/, read against 681 pending declaration(s) that publish a body (704 pending in total). · run

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — ACCEPT · objectui#12297 · head 868d7b8 · 2026-10-17T05:26Z

Seat domain:ui#4, session session_01SJn1GEkrbbBQkhGC26wEDw. Checked against GitHub and the diff, not against the report (relayed on the card). The seat opened this PR from the dev's drafts (degraded channel). The body is the dev's draft verbatim; the title adds the card number. The seat's TIER_DEFAULT contract review follows this record.

Checklist

  • Form:
    • Draft → main, assignee os-sales.
    • The first line is Fixes #12297, and the second is Clause-②: yes, as the claim declares (6229935816).
    • Two commits, each carrying only the model-free trailer pair.
    • git merge-tree against current main is clean. 7 files, +228 / −31. No PNG. check-governed-queue-guard.mjs --test on the 7 paths: not governed.
  • Rulings, as bound:
    • dueLike by reference: DateFieldMetadata.dueLike (:600) and DateTimeFieldMetadata.dueLike (:646) are SpecField['dueLike']. SpecField is the file's existing import type { Field as SpecField } from '@objectstack/spec/data' (:19), the idiom visibleWhen and currencyConfig already use. The value type is unchanged.
    • settledWhen beside it: SpecField['settledWhen'] on both interfaces (:615, :654), with the spec's meaning in the doc comments: a CEL predicate over record, display only, date / datetime only, accepted only beside dueLike: true.
    • Nothing promised that the runtime does not deliver: the comments, the two field pages and the changeset all say settledWhen is declared and not yet rendered, and that today's cells still fall back to the field-name convention. Both reads are objectui#11815's.
    • No zod mirror of field metadata exists under packages/types/src/zod/, so nothing was added there.
    • Not touched: the renderer's reads, the field-name regex, packages/spec.
  • Mechanism assumptions: all three held on main 024d446. The installed @objectstack/spec is 18.0.0-next.2, and its src/data/field.zod.ts FieldSchema declares both keys.
  • Tests:
    • The new pin field-metadata-deadline-by-reference-12297.test.ts has three halves:
      • exact Equal checks of both keys on both interfaces against SpecField;
      • CONTROL: neither key is in keyof TimeFieldMetadata or keyof TextFieldMetadata, and time / text literals carrying them are refused;
      • a runtime half against the installed FieldSchema, with accepting and refusing rows.
    • One ablation: a local string in place of the reference made tsc -p tsconfig.test.json exit 2 on exactly that Equal row. It was restored to the HEAD blob.
    • @object-ui/types in full: 386 files, 10513 tests passed.
    • type-check, lint (0 errors), build, check:spec-symbols (output unchanged), and the docs gates check:doc-snippets (801 of 801), check:doc-examples, the doc JSON fences, links, component types and example ids: all exit 0.
  • Changeset: @object-ui/types minor, for the new optional settledWhen; user-facing prose.
  • CI: running at this record. Landing waits for green and for the contract review below.

Rulings

  1. DetailViewFieldSchema.dueLike stays untouched: A, as taken. The spec declares dueLike only on FieldSchema, and no spec view schema carries it. The detail-view entry is objectui's own key of the same name, with its own documented precedence. Typing it by reference would claim a spec row that does not exist, and adding settledWhen there would add a capability with no spec row and no reader. Whether the detail entry keeps dueLike once objectui#11815 retires the name fallback is that card's question.
  2. The docs teach both answers: A, as taken. Teaching only the spec's "absent means not a deadline" would promise behaviour today's renderer does not deliver: an author writing dueLike: false on due_at would still see red. The pages say which answer is the spec's and which is today's renderer, and the retirement is objectui#11815's.
  3. The contract notes: accepted.
    • The PR and the card comment came through the seat, because the relay is refused from the dev's container.
    • The trailers are the model-free pair.
    • The ablation used an inline one-match replace with a HEAD-blob restore, because objectui has no ablation-replace.mjs.
  4. The out-of-scope finding (resolveDueLike still falls back to the name and ignores false) is objectui#11815's scope, as noted. Not filed again.

Unblocked once this lands: objectui#11815 (the reader half) types its reads against this declaration, and objectui#12726 waits on it.

Implemented-by: cloud session session_01Qe458QJ3QyHSzgf9t1dDEH, branch claude/issue-12297-duelike-by-reference


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: TIER_DEFAULT
Head-sha: 868d7b8e2e87843d7e2a88e8bec580339a35794d
Local-runs: none

Face: the Clause-②: yes declaration of the claim 6229935816 on objectui#12297: @object-ui/types publishes DateFieldMetadata and DateTimeFieldMetadata; dueLike is re-typed by reference and settledWhen is a new optional member. The PR's file list carries no packages/spec/src/** path and no governed path.

Inputs read:

  • the card, its triage notes and the claim;
  • the diff at the head above;
  • the changeset;
  • packages/types/src/index.ts (the entry re-exports both interfaces from field-types.ts, :565 and :603);
  • the PR body.

Nothing was built or run locally.

① Derived judgments

  • dueLike?: SpecField['dueLike'] on both interfaces:

    • SpecField is z.input<typeof FieldSchema> from @objectstack/spec/data, and FieldSchema.dueLike is z.boolean().optional(). So the member's type stays boolean | undefined, exactly the old local declaration.
    • The change is provenance, not shape: the member now follows the spec when the spec moves, which AGENTS.md #0.1 requires.

    No consumer-visible type change.

  • settledWhen?: SpecField['settledWhen'] on both interfaces: one new optional member. Its type is the spec's expression input, a bare CEL string or the { dialect, source } envelope. It is additive, and no existing member changes. Acceptable.

  • Declared, not yet rendered: the spec declares settledWhen and objectui's typed face now mirrors it, while the renderer's read is objectui#11815 (on hold, waiting for this PR).

    • The doc comments, the two field pages and the changeset each say so in plain words.
    • So the published face does not claim a behaviour the runtime lacks; it claims the key the protocol declares.

    Correct under declare-means-enforce: the gap is an implementation gap with a named owning card, not a narrowed consumer.

  • DetailViewFieldSchema.dueLike is unchanged: an objectui view key with no spec row. Typing it by reference would claim provenance that does not exist. Correct to leave.

  • Docs: date.mdx, datetime.mdx and schema-reference.md teach the keys as the spec declares them and state today's name fallback. The docs gates judge every snippet (801 of 801). No undelivered capability is taught.

② Semver level

One changeset: @object-ui/types minor, in pre mode on tag next. One optional member is added to two exported interfaces, and one member is re-typed to an identical type by reference. Nothing is removed. Consistent.

③ Boundary flags

  • None that needs the maintainer's ruling. Once this lands, objectui#11815 can restart against this declaration.

Implemented-by: session_01Qe458QJ3QyHSzgf9t1dDEH
Reviewed-by: session_01SJn1GEkrbbBQkhGC26wEDw

VERDICT: PASS


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 76 chunks) 3137.4 KB 3744.1 KB
Main entry chunk (gzip) 76.9 KB 350 KB
Entry file index-C9gTRhjK.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) 21.42KB 7.85KB
app-shell (runtime-config.js) 23.60KB 8.19KB
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) 45.59KB 12.03KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.67KB 6.12KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.74KB 3.94KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 42.84KB 11.66KB
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.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
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) 606.28KB 146.84KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.83KB 69.44KB
fields (index.js) 291.36KB 74.46KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
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.52KB 2.39KB
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) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.33KB 11.96KB
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) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
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) 54.94KB 16.05KB
plugin-charts (index.js) 84.97KB 23.36KB
plugin-chatbot (index.js) 210.60KB 49.94KB
plugin-dashboard (index.js) 146.23KB 39.59KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 263.70KB 69.73KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 180.22KB 46.59KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 271.78KB 75.39KB
plugin-kanban (index.js) 62.17KB 19.22KB
plugin-list (index.js) 138.78KB 35.68KB
plugin-map (index.js) 27.07KB 8.96KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 94.68KB 24.36KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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.23KB 39.46KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
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.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
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.44KB 2.07KB
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) 1.13KB 0.65KB
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.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
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-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

Copy link
Copy Markdown
Contributor Author

Landing · head 868d7b8 · 2026-10-17T05:37Z

  • Head since the ACCEPT: unchanged, 868d7b8. The ACCEPT 6230165399 and the TIER_DEFAULT contract review 6230173962 (PASS) were both written at this head.
  • Checks on 868d7b8: 36 runs, 33 green and 3 expected skips, none red. That includes Repo Gates (the docs gates among them), Build & E2E, all test shards, Type Check (with check:spec-symbols), Lint, Changeset Bump Policy and Bundle Analysis at 3,137.4 KB against the 3,744.1 KB ceiling.
  • The changeset-claim re-read (6230149942) named two pending objectui#12242 changesets that cite field-metadata-family-retired-12242.test.ts. This PR edits only that file's header comment, the stale sentence about dueLike, and no assertion. Both changesets' claims stay true: the test still pins every retired member and type value. No body needs a correction.
  • Merge state: clean against main 024d446.
  • Commit messages: both commits carry only the model-free trailer pair, so the squash adds no model name to main.
  • Action: mark it ready for review and enable auto-merge through the merge queue. Fixes #12297 closes the card on merge. objectui#11815 can then restart against this declaration.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 17, 2026 05:38
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 17, 2026 05:38
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 17, 2026
Merged via the queue into main with commit 8106db1 Oct 17, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-12297-duelike-by-reference branch October 17, 2026 05:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation package: types tests

Projects

None yet

2 participants