Skip to content

feat(deps)!: upgrade to @objectstack/spec 17.0.0-rc.1 and retire the wait timeout fields (#3101) - #3178

Merged
os-zhuang merged 2 commits into
mainfrom
claude/script-config-parse-contract-gy035e
Aug 2, 2026
Merged

feat(deps)!: upgrade to @objectstack/spec 17.0.0-rc.1 and retire the wait timeout fields (#3101)#3178
os-zhuang merged 2 commits into
mainfrom
claude/script-config-parse-contract-gy035e

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes #3101.

为什么现在升,而不是等含 framework#4343 的下一个 rc

waitEventConfig.timeoutMs / .onTimeout 在 rc.1 里已是 retiredKey() 墓碑(framework#4158),写进去的值会在加载时被拒绝。而本仓的 wait 面板仍在提供这两个字段——也就是说,现在有客户能在 Studio 里填出一份自家运行时会拒绝加载的流程元数据。这个洞在 rc.1 发布的那一刻就打开了,和本仓何时升版无关;升版 + 删字段正是把它关上。

#3101 也明确要求两件事必须同一个 PR:sibling-block 断言是双向的,对着仍声明这两个键的 spec 提前删,会在反方向红。

wait 从来没有超时:onTimeout 零读者;timeoutMs 的唯一读者在 timerDuration 缺失时把它当时长用——而 timerDuration 接受裸数字作为毫秒,所以旧的 timeoutMs: 60000 就是 timerDuration: '60000',行为不变。两条 zh 标签覆盖随字段一并删除。

升级带出的其余改动(逐项实测,非推测)

combo 成为 spec 图表类型 —— rc.1 对 ChartTypeSchema唯一新增(19 → 20)。它此前是 renderer-local 的族,所以两个按 spec 图表类型分类的表面都没有路由它:一个合法的 combo 在 dashboard 上会掉进红色「Unknown component type」面板,在 report 上会落到 out-of-spec 提示。两处现已路由(widgetDispatch.SERIES_CHART_TYPESplanReportChart)。renderer 本地的推导保留——那才是让作者写的 type: 'combo' 真正渲染而不只是校验通过的东西。

三个已退役的 spec 导出(spec 17.0.0 上游移除):

  • JoinStrategy / WindowFunction —— framework#4286 退役了 query.joinsquery.windowFunctions(查询路径上从没有引擎或驱动读过)。它们原本按 objectstack#4115 的「派生而非复述」规则绑定 spec 枚举;枚举没了,data-protocol.ts 改为本地复述成员——逐字取自最后一个发布过它们的 spec——作为它们已然变成的 objectui query-AST 词汇。AST 本身不变。
  • PerformanceConfig —— 随 dashboard.performance 退役(framework#3896)。本仓无人绑定它(@object-ui/reactusePerformance 有自己的 interface,未受影响)。dashboard 表单派生自 spec 自己的 dashboardForm,所以该字段自动消失;其测试改为钉住缺席

三处 inverted pin 触发了,本 PR 只记录不解决。 objectstack#4171 立的探针断言 NavigationItem / FormField / ConditionalValidation 的分支在上游仍擦除为 any/unknown——这正是本仓保留本地声明的前提。rc.1 把它们正确定型了,所以断言被翻转以陈述新事实。但它们要求的 burn-down(改为从 spec 派生)没有做:那会改动被广泛使用的公共类型,不该混进版本升级。已开 #3177 追踪。JoinNode 的 pin 直接删除——符号本身已不存在。

升级同时激活了什么

对账账本的 subflow / decision 面板靠 feature-detect 自己的 spec 导出,而 rc.0 早于 framework#4278,所以它们从未真正运行过。现在执行并通过。

script 面板的完整双向检查按设计仍跳过:rc.1 早于 framework#4343,那边退役的分发分支仍是契约键,只有「表单不提供执行器不读的键」这个方向有意义。它会在下一个 rc 自动激活(已在 framework#4516 里对着本地构建的 spec 验证过)。

验证

  • 全仓 803 文件 / 9397 用例全绿;type-check 78/78;lint 45/45,改动文件零 error。
  • 对账测试逐项确认:subflow / decision 首次运行通过,wait 转绿,script 单向断言通过 + 完整对账正确跳过。
  • 升级前后 ChartTypeSchema 成员逐一对比,确认 combo 是唯一差异。

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ct9NXp2JumjKuARtQnrbPf


Generated by Claude Code

…wait timeout fields (#3101)

`waitEventConfig.timeoutMs` / `.onTimeout` became `retiredKey()` tombstones in
rc.1 (framework#4158), so a value written there is now REJECTED at load — until
this lands, Studio can produce flow metadata the author's own runtime refuses.
That hazard opened when rc.1 published, not when this repo bumps, which is why
the bump and the field removal ride together. #3101 also requires them together
in the other direction: the sibling-block assertion is bidirectional, so deleting
the fields against a spec that still declares them fails the reverse check.

`wait` never had a timeout. `onTimeout` had zero readers; `timeoutMs`'s only
reader used it as the timer DURATION when `timerDuration` was absent, and
`timerDuration` accepts a bare number as milliseconds — so the old
`timeoutMs: 60000` is `timerDuration: '60000'`, unchanged. The two zh label
overrides go with the fields.

Everything else here is fallout the bump surfaced, each verified rather than
assumed:

- `combo` is the sole addition to `ChartTypeSchema` in rc.1 (19 members → 20).
  It had been renderer-local, so neither surface that classifies a SPEC chart
  type routed it: a spec-valid combo fell through to the red "Unknown component
  type" panel on a dashboard and the out-of-spec notice on a report. Both now
  route it; the renderer-local derivation stays, since that is what makes an
  authored `type: 'combo'` render rather than merely validate.
- `JoinStrategy` / `WindowFunction` / `PerformanceConfig` were removed upstream
  (framework#4286, #3896). The first two were bound under objectstack#4115's
  "derive, don't restate" rule; with no enum left to derive from, they are
  restated locally — verbatim from the last spec that published them — as the
  objectui query-AST vocabulary they have become. The AST is unchanged.
- Three objectstack#4171 inverted pins FIRED: `NavigationItem`, `FormField` and
  `ConditionalValidation`'s branches are no longer `any`/`unknown` upstream. The
  assertions are inverted to record that, deliberately WITHOUT the burn-down each
  asks for — deriving those from the spec touches widely-used public types and
  does not belong in a version bump. Tracked in #3177. `JoinNode`'s pin is gone
  outright; the symbol no longer exists.
- `dashboard.performance` was retired upstream and the dashboard form derives
  from the spec's own `dashboardForm`, so the field disappears for free. Its test
  now pins the absence — if that file ever hardcodes a field list again, a
  retirement would silently keep offering an input the loader rejects.

The bump also arms the reconciliation ledger's `subflow` and `decision` panels,
which feature-detect their spec exports and had never actually run (rc.0 predates
framework#4278). The `script` panel's full bidirectional check stays skipped by
design: rc.1 predates framework#4343, so only the one-directional check is
meaningful there. It arms itself on the next rc.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ct9NXp2JumjKuARtQnrbPf
@vercel

vercel Bot commented Aug 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 2, 2026 3:00am

Request Review

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-BSCmLBpS.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.45KB 3.08KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.12KB 3.41KB
auth (LoginForm.js) 17.86KB 5.29KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.43KB 2.09KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
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) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 18.38KB 4.49KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 3.65KB 1.42KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.25KB 0.53KB
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) 475.95KB 104.41KB
core (index.js) 2.25KB 0.80KB
create-plugin (index.js) 9.28KB 2.98KB
data-objectstack (index.js) 136.20KB 34.74KB
fields (index.js) 223.45KB 54.66KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.46KB 0.96KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 5.37KB 1.72KB
i18n (useObjectLabel.js) 26.14KB 6.07KB
i18n (useSafeTranslation.js) 3.26KB 1.44KB
layout (index.js) 38.44KB 10.66KB
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.74KB
mobile (index.js) 1.50KB 0.62KB
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) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.05KB 1.53KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.90KB 12.35KB
plugin-charts (index.js) 60.53KB 17.12KB
plugin-chatbot (index.js) 180.09KB 42.72KB
plugin-dashboard (index.js) 111.87KB 28.82KB
plugin-designer (index.js) 210.51KB 42.50KB
plugin-detail (index.js) 224.52KB 54.98KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 111.38KB 26.93KB
plugin-gantt (index.js) 162.26KB 39.53KB
plugin-grid (index.js) 184.69KB 48.91KB
plugin-kanban (index.js) 47.82KB 13.18KB
plugin-list (index.js) 104.87KB 25.31KB
plugin-map (index.js) 16.80KB 5.24KB
plugin-markdown (index.js) 13.65KB 4.67KB
plugin-report (index.js) 40.48KB 10.57KB
plugin-timeline (index.js) 25.76KB 7.32KB
plugin-tree (index.js) 8.34KB 2.82KB
plugin-view (index.js) 83.54KB 20.39KB
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.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.46KB 1.21KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 0.20KB 0.18KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
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 (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
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

…nd additions

`check:spec-symbols` runs in CI's Type Check job but not in `turbo run
type-check`, so the local run was green while CI was not — my miss, and the
reason this is a follow-up commit rather than part of the bump.

Two stale DEBT entries: `JoinNode` (@object-ui/types) and `PerformanceConfig`
(@object-ui/react) no longer collide with anything, because spec 17.0.0 retired
both exports. The guard fails on a ledger entry that outlives the code it
excuses, which is the point — removed.

Two new collisions, triaged rather than parked in DEBT, because neither is a
dialect of the spec's concept:

- `@object-ui/types:FieldNode` — the spec's is a bare `string`, a field NAME,
  after objectstack#4196 narrowed `QueryAST.fields` to names. Ours is a NODE in
  objectui's own query AST, sibling to `LiteralNode` / `OperatorNode`. Deriving
  would replace a structured node with a string; there is nothing to import.
- `@object-ui/app-shell:InboxNotification` — two layers, like the existing
  FormField entry. The spec's is the notification SERVICE contract (camelCase,
  `body`/`read` required). Ours is the materialized inbox ROW the popover groups:
  snake_case mirroring `sys_notification`, carrying the read-receipt keys the
  contract has no place for (ADR-0030), nullable where a stored row can be null.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ct9NXp2JumjKuARtQnrbPf
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-BSCmLBpS.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.45KB 3.08KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.12KB 3.41KB
auth (LoginForm.js) 17.86KB 5.29KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.43KB 2.09KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
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) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 18.38KB 4.49KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 3.65KB 1.42KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.25KB 0.53KB
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) 475.95KB 104.41KB
core (index.js) 2.25KB 0.80KB
create-plugin (index.js) 9.28KB 2.98KB
data-objectstack (index.js) 136.20KB 34.74KB
fields (index.js) 223.45KB 54.66KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.46KB 0.96KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 5.37KB 1.72KB
i18n (useObjectLabel.js) 26.14KB 6.07KB
i18n (useSafeTranslation.js) 3.26KB 1.44KB
layout (index.js) 38.44KB 10.66KB
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.74KB
mobile (index.js) 1.50KB 0.62KB
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) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.05KB 1.53KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.90KB 12.35KB
plugin-charts (index.js) 60.53KB 17.12KB
plugin-chatbot (index.js) 180.09KB 42.72KB
plugin-dashboard (index.js) 111.87KB 28.82KB
plugin-designer (index.js) 210.51KB 42.50KB
plugin-detail (index.js) 224.52KB 54.98KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 111.38KB 26.93KB
plugin-gantt (index.js) 162.26KB 39.53KB
plugin-grid (index.js) 184.69KB 48.91KB
plugin-kanban (index.js) 47.82KB 13.18KB
plugin-list (index.js) 104.87KB 25.31KB
plugin-map (index.js) 16.80KB 5.24KB
plugin-markdown (index.js) 13.65KB 4.67KB
plugin-report (index.js) 40.48KB 10.57KB
plugin-timeline (index.js) 25.76KB 7.32KB
plugin-tree (index.js) 8.34KB 2.82KB
plugin-view (index.js) 83.54KB 20.39KB
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.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.46KB 1.21KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 0.20KB 0.18KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
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 (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
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

@os-zhuang
os-zhuang marked this pull request as ready for review August 2, 2026 07:48
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 2, 2026
Merged via the queue into main with commit 022e4c3 Aug 2, 2026
16 checks passed
@os-zhuang
os-zhuang deleted the claude/script-config-parse-contract-gy035e branch August 2, 2026 07:48
os-zhuang pushed a commit that referenced this pull request Aug 2, 2026
Three conflict sites, all resolved mechanically:

  * `scripts/check-spec-symbol-derivation.mjs` — took main's file
    wholesale (it carries the rewritten case 2 / new case 2c header and
    three new ALLOW entries from #3178/#3199 that this branch never
    touched), then regenerated the DEBT block with `--ledger`. 45 → 29
    collisions; removed is exactly this batch's 16, added is empty, the
    other 13 packages are byte-identical.
  * `packages/types/src/app.ts` — kept main's #3177 import block and
    module header verbatim, adding only the `NavigationArea` import this
    branch's derivation needs.
  * `NavigationArea.navigation`'s justification and inverted pin —
    retargeted, see below.

The spec bump is the substantive part. rc.1 gave `NavigationItem` a real
type, so this branch's stated reason for pinning
`NavigationArea.navigation` ("the spec erases it to `any`") expired, and
the inverted pin fired exactly as designed. Re-triaged: the override
stands, but on case 2c rather than case 2 — the spec's element is precise
and describes a different shape, and objectui's items still carry
`visible: boolean`, which the spec rejects at every tier. The pin now
asserts that blocker directly instead of the erasure that used to imply
it, and points at `spec-derived-unions.test.ts`, where #3177 pins the
other two.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Jdef6ZFhJmiNRhNCd4DW3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

wait 表单仍提供已退役的 waitEventConfig.timeoutMs / .onTimeout —— 下一次 spec rc 刷新会被对账测试点名

2 participants