Skip to content

fix(templates): move the generator dependency ranges with today's dependabot wave - #4969

Closed
yinlianghui wants to merge 2 commits into
mainfrom
claude/issue-4968-lucide-range-hotfix
Closed

fix(templates): move the generator dependency ranges with today's dependabot wave#4969
yinlianghui wants to merge 2 commits into
mainfrom
claude/issue-4968-lucide-range-hotfix

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Fixes #4968

改了什么

两个生成器模板的第三方区间跟到 workspace 现值,各一行 + 各一个 changeset:

文件 依赖 改动 来自哪个 bump
@object-ui/cli src/utils/app-generator.ts lucide-react ^1.29.0^1.31.0 #4959 (c1454a2d9)
@object-ui/create-plugin src/templates.ts @testing-library/jest-dom ^7.0.0^7.0.1 #4948 (590dd6356)

⚠️ 第二条不在原卡范围内,但不修则本 PR 落地后全仓依然红。 详见「扫出第二处同症」。

修法选择:字面量,不派生(逐条说明为何)

钉的注释自述「A literal here is the very fossil generator this file exists to stop」,所以我先认真评估了派生路线,结论是不派生。理由是实测的,不是偏好:

  1. 拿不到 manifest。 派生要读 @object-ui/components 的 manifest(lucide 是它的 dependencies,且 cli 确实依赖它)。实测两种 specifier 都不通:

    FAIL @object-ui/components/package.json -> ERR_PACKAGE_PATH_NOT_EXPORTED
    OK   @object-ui/components -> .../packages/components/dist/index.umd.cjs
    

    前者是 exports map 只有 ../style.css 的必然结果 —— 要走通就得给另一个已发布包的公开 exports 面加 ./package.json,已越出本卡包边界;后者只在 build 之后才 resolve,且落到 dist/,拿 manifest 仍要目录上溯。

  2. 它只能治 13 个里的 1 个。 cli 侧锚表 DEPENDENCY_ANCHORS 有 13 个第三方区间,其中 9 个锚到仓库根 manifest,而根 manifest 不随 cli 发布(files: ["dist","README.md","CHANGELOG.md","LICENSE"])—— react / react-dom / react-router-dom / @types/react / @types/react-dom / autoprefixer / tailwindcss / typescript / vite 在运行期没有任何可派生来源。派生给不出全表共享的机制,只能给 lucide 单开一条 bespoke 路径:同类问题还在,还多一份不对称。create-plugin 侧同理(8 个里 6 个锚到根)。

  3. 锚定纪律本来就是「字面量 + 门」。 objectui#3742 / fix(create-plugin): 把脚手架 build 侧 devDependencies 锚到仓内工具链,并把整张清单钉进 parity 测试 #3754 写得很直白:「quoted rather than invented, so bumping an in-repo manifest and leaving a generator behind fails a test instead of shipping」。cli-version 之所以派生,是因为 fixed 组每次发版都重编号、字面量隔天就腐;第三方区间不是这个节奏,门就是为它设计的机制 —— 这次门也确实响了。

修法半衰期,如实声明:一次 bump。 下次 dependabot 动这两个包中任一个,对应钉会以同样方式再红。这不是推测,我实测了(反向验证方向 2)。真正的持久解在本文件上游,见下。

为什么 #4959 自己的 CI 没拦住:门响了,只是响得太晚

这不是检查面漏了,是时序。 #4959 自己的 head SHA 31745d8b 上,Test shard 1/4 与 3/4 的 conclusion 都是 failure,报的就是本卡引用的那两条断言(job 95325241579 日志):

AssertionError: routed manifest's lucide-react must match its in-repo range:
  expected '^1.29.0' to be '^1.31.0'
  packages/cli/src/__tests__/app-generator.test.ts:574:68
AssertionError: expected '^1.29.0' to be '^1.31.0'
  packages/cli/src/__tests__/app-generator.test.ts:1139:55

时间线是决定性的:

时刻 事件
08:07:41Z #4959 建立
08:13:07Z test shard job 启动
08:13:36Z PR 被 github-actions[bot] 合入 main
08:13:38Z shard 里的 vitest 才真正开跑(合并后 2 秒)
08:21:53Z shard 1/4 报 failure(合并后 8 分 17 秒)

dependabot-auto-merge.yml 对 semver-patch/minor 无条件执行 gh pr merge --auto --squash(1.29.0 到 1.31.0 是 minor,命中)。--auto 在 required check 集满足的那一刻就落,而承载这个门的 4 分片 test 矩阵是整个 workflow 里最慢的 job(本次 import 986.93s,单片约 9 分钟),因此系统性地最后报到、最容易被 auto-merge 跑过去。仓库 AGENTS.md 恰好禁止 agent 用 --auto,理由一字不差就是这个;而 dependabot-auto-merge.yml 仍在用。这是任何红都能落到 main 的通道,不限于区间漂移,所以我单独立卡而没在本 PR 改 CI。

这是一周内的第二次复发

#4098(8-10)是同一条测试、同一个依赖:lucide-react 1.28.0 → 1.29.0 打断同一个 ratchet,由 PR #4099 以同样的字面量跟进修掉。#4098 当时就写下了持久问题:

the durable question is whether that can be made automatic — a dependabot bump touching a range that a template mirrors should either update the template in the same PR or fail its own CI rather than a later, unrelated one.

那个问题没有落地,七天后同一处以同样方式再红。#4098 也已经观察到「only the first mismatch in each file is reported」—— 同样没落地,而这正是下面第二处同症一周后仍能藏住的原因。

扫出第二处同症:packages/create-plugin(本 PR 一并修)

#4099 的处理方式是一个 PR 修两个模板(标题即 "move generator dependency ranges with the dependabot wave"),我按同一先例做:

packages/create-plugin/src/__tests__/templates.test.ts:356main当前就是红的,与 lucide 无关:

AssertionError: @testing-library/jest-dom range must match the repo root:
  expected '^7.0.0' to be '^7.0.1'

来自 #4948 的 dev-dependencies 组 bump(590dd6356)。只修 #4968 不能让全仓转绿,受阻 PR 的 shard 仍会红,auto-merge 队列仍然堵着 —— 所以一并修。

顺带一条方法学教训:这处是按缺陷类别扫才发现的,不是按包扫。锚规则逐名 expect、首个不匹配即抛,所以第一个模板绿之前,第二个模板什么都不报。我用 grep 把这一类 ratchet 全量枚举了一遍,全仓只有这两个测试文件带它(app-generator.test.tstemplates.test.ts),两个都已在本 PR 内。

两个模板的全量区间核对:各只有一处漂

因为门只报第一处,下面两张表是我另写脚本全量算的,不是测试报的。

@object-ui/cliDEPENDENCY_ANCHORS 13 项:

name anchor generated repo 判定
lucide-react in-repo ^1.29.0 ^1.31.0 漂移,本 PR 修
react root 19.2.8 19.2.8 ok
react-dom root 19.2.8 19.2.8 ok
react-router-dom root ^7.18.2 ^7.18.2 ok
@tailwindcss/postcss in-repo ^4.3.3 ^4.3.3 ok
@types/react root 19.2.18 19.2.18 ok
@types/react-dom root 19.2.4 19.2.4 ok
@vitejs/plugin-react in-repo ^6.0.5 ^6.0.5 ok
autoprefixer root ^10.5.4 ^10.5.4 ok
postcss in-repo ^8.5.26 ^8.5.26 ok
tailwindcss root ^4.3.3 ^4.3.3 ok
typescript root ^6.0.3 ^6.0.3 ok
vite root ^8.2.1 ^8.2.1 ok

@object-ui/create-pluginDEV_DEPENDENCY_ANCHORS 8 项:

name anchor generated repo 判定
@testing-library/jest-dom root ^7.0.0 ^7.0.1 漂移,本 PR 修
@testing-library/react root ^16.3.2 ^16.3.2 ok
@vitejs/plugin-react in-repo-plugins ^6.0.5 ^6.0.5 ok
jsdom root ^30.0.1 ^30.0.1 ok
typescript root ^6.0.3 ^6.0.3 ok
vite root ^8.2.1 ^8.2.1 ok
vite-plugin-dts in-repo-plugins ^5.0.3 ^5.0.3 ok
vitest root ^4.1.10 ^4.1.10 ok

本批次点名的另外两个包与模板零交集:@sentry/react (#4957) 与 maplibre-gl (#4956) 在 packages/cli/srcpackages/create-plugin/src一次都没出现(plugin-report / plugin-map 的依赖);@objectstack/spec|client|formula|lint 的 GA bump (#4953/#4954/#4955/#4960) 也都不在两张锚表里。commands/init.ts 不自己写任何区间,全部读 scaffold-dependencies.ts,第三个生成器无需另改。

create-plugin 里那张写在注释里的 anchor 表也同步移了一行 —— 它逐条列出每个锚定区间,不动就只是把化石搬进注释。

验证

  • pnpm --workspace-concurrency=2 --filter '@object-ui/cli^...' build → exit 0
  • pnpm exec vitest run packages/create-plugin/ packages/cli/ --maxWorkers=2Test Files 6 passed (6) / Tests 138 passed (138)
  • 本卡点名的两处钉转绿:
    ✓ generated app manifests > sources every range from this repo instead of inventing one 20ms
    ✓ generation onto disk > writes a manifest whose @object-ui ranges name this CLI version 3ms
    
  • pnpm exec turbo run type-check --concurrency=281 successful, 81 total(cli 改动后全量);create-plugin 改动后另跑两包 scoped type-check,均 Done
  • node scripts/check-control-bytes.mjs → OK(4436 files);另对本 PR 改动的文件做了越过门盲区的自扫(grep -naP 覆盖门不扫的 0x01-0x1f),无控制字节
  • changeset 三个 guard 全绿(no-major / fixed / presence:2 源文件 / 2 changeset)

反向验证(每个方向都在跑之前先预判)

方向 1 — 预判「红」: 把 lucide 字面量退回 ^1.29.0(workspace 停在 ^1.31.0),两处钉必须红且与 issue 逐字一致。实测:

Tests  2 failed | 39 passed (41)
AssertionError: routed manifest's lucide-react must match its in-repo range: expected '^1.29.0' to be '^1.31.0'
  packages/cli/src/__tests__/app-generator.test.ts:574:68
AssertionError: expected '^1.29.0' to be '^1.31.0'
  packages/cli/src/__tests__/app-generator.test.ts:1139:55

证明这两处钉读的确实是我改的那个值。jest-dom 同样做了一次,expected '^7.0.0' to be '^7.0.1' at templates.test.ts:356:75,1 failed | 18 passed

方向 2 — 预判「反向红」,即半衰期的实测证明: 字面量保持 ^1.31.0,把 23 个仓内 manifest 全部改成假值 ^9.99.0(全部改,因为 dependabot 就是一个 commit 动所有 manifest —— 这也正是 #4959 上仓内一致性依然成立、门能判出值不匹配而不是先撞「in-repo manifests disagree」的原因)。预判:钉以相反方向红。实测:

AssertionError: routed manifest's lucide-react must match its in-repo range: expected '^1.31.0' to be '^9.99.0'
  packages/cli/src/__tests__/app-generator.test.ts:574:68
AssertionError: expected '^1.31.0' to be '^9.99.0'
  packages/cli/src/__tests__/app-generator.test.ts:1139:55

这就是上面「半衰期 = 一次 bump」的证据,而不是一句修辞。三次临时改动全部已回退,工作树只剩本 PR 的四个文件。

不在本 PR 范围内(已另立卡)

见下方 findings 评论。两条都是 CI / 门自身的问题,都是 #4098 一周前就写下、至今未落地的那两条,不该搭在一个全仓阻断的热修上:auto-merge 时序(持久解),与锚规则只报首个不匹配(正是它让第二处模板藏了一周)。

The routed temp app's generated manifest declared lucide-react at ^1.29.0
while all 22 sibling manifests that declare it had moved to ^1.31.0, so a
generated app asked npm for an icon library older than the one every
@object-ui/* package it installs alongside was built against.

app-generator.test.ts derives its expectation from the in-repo range, so the
drift was caught -- both pins were red. They just went red too late to stop
anything: the dependency PR merged while those shards were still running, and
the failure then surfaced on the merge ref of every unrelated open PR.

The other 12 anchored ranges were swept against the same dependabot batch and
are all in sync. Deriving the value rather than quoting it was considered and
rejected; the reasoning is recorded at the call site.

Fixes #4968

Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 9.56KB 3.59KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 8.92KB 3.41KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 25.13KB 5.40KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
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) 40.21KB 10.79KB
auth (createAuthenticatedFetch.js) 6.34KB 2.43KB
auth (index.js) 2.71KB 1.22KB
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.02KB 0.88KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 26.07KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.65KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 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) 498.79KB 111.24KB
core (index.js) 4.06KB 1.61KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 157.40KB 43.42KB
fields (index.js) 233.27KB 58.22KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.35KB 1.38KB
i18n (pickLocalized.js) 3.69KB 1.73KB
i18n (provider.js) 23.12KB 7.62KB
i18n (useDisplayLocale.js) 2.84KB 1.45KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 7.77KB 3.13KB
layout (index.js) 39.16KB 10.97KB
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.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 9.35KB 3.31KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 4.42KB 1.42KB
permissions (evaluator.js) 5.12KB 1.74KB
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.81KB 0.83KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 46.62KB 12.83KB
plugin-charts (index.js) 64.75KB 18.37KB
plugin-chatbot (index.js) 181.21KB 43.14KB
plugin-dashboard (index.js) 127.85KB 32.73KB
plugin-designer (index.js) 212.39KB 42.83KB
plugin-detail (index.js) 239.90KB 60.01KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 120.42KB 29.03KB
plugin-gantt (index.js) 164.10KB 39.87KB
plugin-grid (index.js) 197.58KB 53.00KB
plugin-kanban (index.js) 52.72KB 14.54KB
plugin-list (index.js) 111.23KB 26.97KB
plugin-map (index.js) 17.91KB 5.72KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 41.97KB 11.33KB
plugin-timeline (index.js) 26.68KB 7.66KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 83.81KB 20.49KB
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.66KB 3.50KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 27.53KB 9.41KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.28KB 0.68KB
react (schema-input.js) 1.45KB 0.83KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.55KB 2.07KB
sdui-parser (parse.js) 10.76KB 3.17KB
sdui-parser (provenance.js) 3.66KB 1.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 (dashboard-filter-alias.js) 6.23KB 2.74KB
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) 3.05KB 1.52KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
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

…pendabot wave

The scaffolded plugin's generated devDependencies declared
@testing-library/jest-dom at ^7.0.0 while the repo root had moved to ^7.0.1
(#4948's dev-dependencies group), so templates.test.ts's anchor rule was red
on main independently of the lucide-react drift in the previous commit.

Same defect class, same wave, and the same pairing the previous occurrence of
this incident was fixed as (#4098 / PR #4099 moved these two templates in one
PR). Found only by sweeping the class rather than the package: the anchor rule
throws on its first mismatch, so this second template reported nothing until
the first was green.

The doc table above the map is moved with it -- it states each anchored range,
so leaving it would just relocate the fossil into a comment.

Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 9.56KB 3.59KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 8.92KB 3.41KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 25.13KB 5.40KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
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) 40.21KB 10.79KB
auth (createAuthenticatedFetch.js) 6.34KB 2.43KB
auth (index.js) 2.71KB 1.22KB
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.02KB 0.88KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 26.07KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.65KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 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) 498.79KB 111.24KB
core (index.js) 4.06KB 1.61KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 157.40KB 43.42KB
fields (index.js) 233.27KB 58.22KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.35KB 1.38KB
i18n (pickLocalized.js) 3.69KB 1.73KB
i18n (provider.js) 23.12KB 7.62KB
i18n (useDisplayLocale.js) 2.84KB 1.45KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 7.77KB 3.13KB
layout (index.js) 39.16KB 10.97KB
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.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 9.35KB 3.31KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 4.42KB 1.42KB
permissions (evaluator.js) 5.12KB 1.74KB
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.81KB 0.83KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 46.62KB 12.83KB
plugin-charts (index.js) 64.75KB 18.37KB
plugin-chatbot (index.js) 181.21KB 43.14KB
plugin-dashboard (index.js) 127.85KB 32.73KB
plugin-designer (index.js) 212.39KB 42.83KB
plugin-detail (index.js) 239.90KB 60.01KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 120.42KB 29.03KB
plugin-gantt (index.js) 164.10KB 39.87KB
plugin-grid (index.js) 197.58KB 53.00KB
plugin-kanban (index.js) 52.72KB 14.54KB
plugin-list (index.js) 111.23KB 26.97KB
plugin-map (index.js) 17.91KB 5.72KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 41.97KB 11.33KB
plugin-timeline (index.js) 26.68KB 7.66KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 83.81KB 20.49KB
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.66KB 3.50KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 27.53KB 9.41KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.28KB 0.68KB
react (schema-input.js) 1.45KB 0.83KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.55KB 2.07KB
sdui-parser (parse.js) 10.76KB 3.17KB
sdui-parser (provenance.js) 3.66KB 1.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 (dashboard-filter-alias.js) 6.23KB 2.74KB
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) 3.05KB 1.52KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
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

Copy link
Copy Markdown
Collaborator Author

范围外发现(已立卡,均 unassigned)

两条都是 CI / 门自身的问题,不该搭在一个全仓阻断的热修上。

给 PM 的验收提示

本 PR 是 draft,未 undraft,等加急验收。

一个必须知道的点:本 PR 的 base 是 590dd6356(当前 main tip),不是派发卡里写的 e609aacc5 卡上那个 hash 在我起工时已经不是 tip 了 —— 590dd6356(#4948 dev-dependencies 组)在它之后落地。这个偏差不是可选的:@testing-library/jest-dom 那处漂移正是 590dd6356 引入的,基线停在 e609aacc5 就看不见它,本 PR 落地后全仓会以第二处红继续阻断,需要再来一轮。


Generated by Claude Code

yinlianghui pushed a commit that referenced this pull request Aug 17, 2026
…e-4977-ga-pin-residue

PM queue surgery: the two hot-fix PRs (#4969, #4978) each red on the other's
signatures, so neither could enter the merge queue alone. This merge makes
PR #4978 carry all three main-side fixes and go green solo, per the
sequencing note in PR #4978's body. Fixes #4968 rides with it.

Co-Authored-By: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

关闭:superseded by PR #4978(objectui 车道 PM,会话 session_01GTRjn8xBqp75dk7kFupVRt)。本 PR 与 #4978 互红对方修复面无法各自入队;本分支两个 commit 经 PM merge(11fca59)原样并入 #4978 并已随之落 main(195b9e4),diff、作者归属与验收证据完整保留。#4968 已 completed 关卡。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CLI app-generator 的 lucide-react 区间字面量落后 workspace(^1.29.0 vs ^1.31.0)—— 派生钉现在把全仓所有 PR 的 test shard 判红

2 participants