Skip to content

docs(app-shell): 两个 AppContent 路由测试的生产端叙述改写为「历史 + 现状」两段 (#3749) - #3860

Merged
yinlianghui merged 2 commits into
mainfrom
claude/issue-3749-appcontent-test-headers
Aug 8, 2026
Merged

docs(app-shell): 两个 AppContent 路由测试的生产端叙述改写为「历史 + 现状」两段 (#3749)#3860
yinlianghui merged 2 commits into
mainfrom
claude/issue-3749-appcontent-test-headers

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Fixes #3749

纯注释 / 标题改写,零行为改动。三处叙述以现在时枚举「侧边栏 / QuickActions 现在发哪些 URL」,而这些 URL 已经被 #3660#3739 改掉了。

前提复核(动笔前,origin/main @ c32323e1e)

前提仍活,两条都逐一核过:

生产端 现在发的 URL 谁改的
AppSidebar / UnifiedSidebar sys-datasources /apps/setup/metadata/datasource #3660(d2fd044b7)
AppSidebar / UnifiedSidebar sys-objects /apps/setup/metadata/object #3739(PR #3748)
QuickActions "Manage Objects" /apps/setup/metadata/object #3739

AppContent.noAppComponentRoutes.test.tsx:8-14 仍写着 sys-datasources -> …/component/metadata/resource?type=datasourcesys-objects -> …/system/metadata/object,并以现在时说「侧边栏 offers two entries」。下一个按 grep 找生产端的 agent 会把它读成现状 —— #3661 / #3669 已经为同一族转写付过一次真实代价。

手法(照 #3666)

每处拆成两段:「#3610 当时如此」(过去时)+「#3660 / #3739 之后如此」(现在时)。现状段正面陈述两条别名今天的身份 —— 不再是任何导航的目标,而是书签、外部链接、以及宿主自己的别名路由所对应的到达路径,这正是重定向必须继续工作的理由。按 #3656,现状段不靠「不再指向 X」这类否认句复述别名 URL(那会让针对 X 的 grep 继续命中改写本想清掉的那一条)。

三处改动

1. packages/app-shell/src/console/__tests__/AppContent.noAppComponentRoutes.test.tsx

  • 头注 ## The defect -> ## The defect, as it stood at objectui#3610(整段转过去时),新增 ## What those two URLs are NOW (objectui#3660, #3739)
  • 两个 it 标题从生产端名改为它们真正所量的东西,并按各自的改写者区分 —— 这条区分文件正文本来就画了(「the alias here is the ENTRY」 vs 「rewritten by the HOST」):
    • sys-datasources: …renders the resource page -> shell alias: …resolves in the zero-app branch and hops ONCE to the canonical page
    • sys-objects: …reaches this branch's metadata/:type in ONE hop -> host alias: …(同句尾)
  • 同一头注里另两处按生产端命名的指针同步:systemRoutesStub 的「the sys-objects leg」-> 「the system/metadata/:type leg」;app-shell 测试里的 MetadataRedirectStub 在 PR #3658 后不再是逐字转录,sys-objects 用例测的是生产中已不存在的链路(绿得没有意义) #3661 那段的「the sys-objects case」-> 「the system/metadata/object case」(标题改名后原引用会悬空)。

2. packages/app-shell/src/console/__tests__/AppContent.pseudoRouteSegments.test.tsx:41-46

生产端表格按实读重写(逐条读自 AppSidebar / UnifiedSidebar / QuickActions / HomePage / InboxPopover,顺带把 QuickActionsHomePage / InboxPopover 拆成两行 —— 它们发的不是同一组 URL),并补一段说明两条旧拼写并未消失,只是从 navigation移到了上面两行的到达面(shell 的 component/metadata/{directory,resource/*}、宿主的 system/metadata{,/:type})。metadata 在两种拼写下都是完整路径段,所以本文件要证伪的论断不受这次搬家影响 —— 这一点在文中写明,免得下一个读者以为表格换了就得重跑结论。

3. packages/app-shell/src/console/AppContent.tsx:645-661(#3610 那段)

收尾句从「#3660 re-pointed it anyway」补成 #3660(sys-datasources)与 #3739(sys-objects + 首页卡片)都已重指,并注明 sys-objects 的链路早在 #3658 就离开了这两条路由。该段前半的过去时叙述原样保留,两条 Route 声明与其余每一行代码未动。

越出 issue 字面范围的两小处(同文件、同一缺陷,都已在上面列出)

按范围纪律说明,不是夹带:

  1. 用例体内两处重申同一陈旧断言的行内注释(:273-276 「the zero-app fallback sidebar's sys-datasources item still points straight at this spelling」;:304-307 「this case now measures what production actually does」)。只改标题、留着正文两行继续断言同一件已不成立的事,文件会自相矛盾 —— 改名后的标题反而变得更难读。
  2. 同一段落里 isMetadataRoute 的现在时「substring test (pathname.includes('/metadata'))」console: isSystemRoute / isMetadataRoute 的子串判断把 /apps/未知app/system_log 认成伪路由,静默回退渲染另一个 app #3638 起它是 pathSegments.includes('metadata') 段测试(AppContent.tsx:198),同属「现在时叙述被后续 PR 证伪」,且就在被转成过去时的那一句里;不动它会在同一段落留下一个新的时态矛盾。

Changeset:空 frontmatter(第二个 commit)

第一版漏了 changeset,CI 的 Changeset Declaration 门直接红,已修。记一笔为什么漏,因为这是个可复用的读错先例:

我照 #3666(bd04651ee,同族 docblock 改写)与 #3785(f9d70a72e,docs-only)判断「注释-only 不带 changeset」。两条先例都不适用 —— #3666 早于这道门(#3387 引入),#3785 只动 content/docs/**,根本不在守护面内。而本次三个文件全在 packages/app-shell/src 下,正是 scripts/check-changeset-presence.mjs.changeset/config.jsonfixed推导出来的守护面。

门自己写明了正确出口,不是绕路:「If this change really should release nothing, say so — that is a pass, not a workaround」。故 .changeset/appcontent-route-test-headers-3749.md空 frontmatter,写法照 .changeset/registry-inputs-spec-parity-gate-3797.md 先例。空而非 patch:确无可发布的行为改动(见下)。

验证

改动前后同一命令、同一结果 —— 断言与用例数零改动:

$ pnpm exec vitest run \
    packages/app-shell/src/console/__tests__/AppContent.noAppComponentRoutes.test.tsx \
    packages/app-shell/src/console/__tests__/AppContent.pseudoRouteSegments.test.tsx --maxWorkers=2

改动前:  Test Files  2 passed (2)     Tests  43 passed (43)
改动后:  Test Files  2 passed (2)     Tests  43 passed (43)

改名后的两个用例确实在跑(verbose,非空跑过):

✓ … > shell alias: /apps/setup/component/metadata/resource?type=datasource resolves in the
      zero-app branch and hops ONCE to the canonical page 83ms
✓ … > host alias: /apps/setup/system/metadata/object reaches this branch's metadata/:type in
      ONE hop 12ms
      Tests  7 passed (7)

全仓类型检查(CI 同命令):

$ pnpm exec turbo run type-check --concurrency=2
 Tasks:    78 successful, 78 total
  Time:    1m9.876s

Changeset 两道门(本地):

$ node scripts/check-changeset-presence.mjs
✅  3 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)
    Every one of them has an EMPTY frontmatter — declared as releasing nothing, which
    is the explicit exemption and a complete answer to this gate.
$ node scripts/check-changeset-no-major.mjs
✅  No changeset declares a `major` bump.

控制字符自查:四个改动文件 grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]' 零命中(CI Control Byte Scan 亦 green)。未触碰 content/docs/releases/**

三处注释以现在时枚举「侧边栏 / QuickActions 现在发哪些 URL」,而这些 URL 已被
#3660(`sys-datasources`)与 #3739(`sys-objects` + 首页 Manage Objects 卡片)改指
metadata-admin 引擎的规范路由。断言全部正确且全绿 —— 陈旧的只有叙述,以及两个以
生产端命名的 `it` 标题:它们实际量的是别名路由仍能解析且只跳一次。

手法照 #3666:每处拆成「#3610 当时如此」(过去时)与「#3660/#3739 之后如此」
(现在时)两段,现状段正面陈述两条别名今天的身份 —— 不再是任何导航的目标,而是
书签与外部链接的到达路径,这正是重定向必须继续工作的理由。按 #3656,现状段不靠
「不再指向 X」的否认句复述别名 URL。

- `AppContent.noAppComponentRoutes.test.tsx`:头注拆段;两个 `it` 标题从
  `sys-datasources:` / `sys-objects:` 改为 `shell alias:` / `host alias:`,即两条
  别名各自的改写者(shell 自己的 `LegacyMetadataRedirect` vs 宿主的
  `MetadataRedirect`)—— 文件正文本来就画了这条区分。用例体内两处重申同一陈旧
  断言的行内注释同步(`sys-datasources` item still points straight at this
  spelling / this case now measures what production actually does),否则改完标题
  的文件会自相矛盾。顺带把同一段落里 `isMetadataRoute` 的现在时「substring test」
  收敛为过去时 —— #3638 起它是 `pathSegments.includes('metadata')` 段测试。
- `AppContent.pseudoRouteSegments.test.tsx`:生产端表格按实读重写(逐条读自
  `AppSidebar` / `UnifiedSidebar` / `QuickActions` / `HomePage` / `InboxPopover`),
  并补一段说明两条旧拼写并未消失,只是从 `navigation` 行移到了上面两行的到达面。
  `metadata` 两种拼写下都是完整路径段,所以本文件要证伪的论断不受影响。
- `AppContent.tsx`(#3610 那段):收尾句补上 #3739 也已重指,并注明 `sys-objects`
  的链路早在 #3658 就离开了这两条路由。该段前半的过去时叙述保留。

零行为改动:两个测试文件跑前跑后同为 43 passed,断言与用例数未动。
无 changeset —— 注释-only,照 #3666(bd04651)与 #3785(f9d70a7)先例。

Fixes #3749
@vercel

vercel Bot commented Aug 8, 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 8, 2026 10:03pm

Request Review

@github-actions github-actions Bot added the tests label Aug 8, 2026
CI 的 Changeset Declaration 门(scripts/check-changeset-presence.mjs)守的是
「fixed 组内任一包的 `<pkg>/src/**` 被改动 -> 必须有 `.changeset/*.md` 声明」,
本次三个改动文件全部落在 packages/app-shell/src 下,所以门要求声明。

先前照 #3666(bd04651)与 #3785(f9d70a7)判断「注释-only 不带 changeset」是
读错了先例:那两个 PR 早于这道门(#3387 引入),且 #3785 只动 content/docs/**,
根本不在守护面内。门自己写明了正确出口 —— 「If this change really should release
nothing, say so — that is a pass, not a workaround」,即空 frontmatter,照
.changeset/registry-inputs-spec-parity-gate-3797.md 的先例写法。

空 frontmatter 而非 patch:AppContent.tsx 只改 JSX 注释,两条
LegacyMetadataRedirect 路由声明与其余每一行代码未动;两个测试文件断言与用例数
逐字节未变(前后同为 43 passed)。确无可发布的行为改动。

本地验证:
  node scripts/check-changeset-presence.mjs  -> exit 0(识别为空 frontmatter 豁免)
  node scripts/check-changeset-no-major.mjs   -> exit 0
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.66KB 3.13KB
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.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) 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) 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) 482.41KB 106.35KB
core (index.js) 2.96KB 1.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 139.61KB 35.99KB
fields (index.js) 230.82KB 56.70KB
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.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.53KB 10.71KB
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) 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.98KB 12.37KB
plugin-charts (index.js) 61.04KB 17.31KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 117.21KB 30.27KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 236.14KB 58.81KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 112.10KB 27.10KB
plugin-gantt (index.js) 162.55KB 39.57KB
plugin-grid (index.js) 187.63KB 49.66KB
plugin-kanban (index.js) 48.30KB 13.28KB
plugin-list (index.js) 105.12KB 25.48KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
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
react (spec-input.js) 0.20KB 0.18KB
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.71KB 1.34KB
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

1 similar comment
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.66KB 3.13KB
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.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) 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) 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) 482.41KB 106.35KB
core (index.js) 2.96KB 1.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 139.61KB 35.99KB
fields (index.js) 230.82KB 56.70KB
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.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.53KB 10.71KB
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) 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.98KB 12.37KB
plugin-charts (index.js) 61.04KB 17.31KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 117.21KB 30.27KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 236.14KB 58.81KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 112.10KB 27.10KB
plugin-gantt (index.js) 162.55KB 39.57KB
plugin-grid (index.js) 187.63KB 49.66KB
plugin-kanban (index.js) 48.30KB 13.28KB
plugin-list (index.js) 105.12KB 25.48KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
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
react (spec-input.js) 0.20KB 0.18KB
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.71KB 1.34KB
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

✅ 验收(PM,session session_01GTRjn8xBqp75dk7kFupVRt)

实物核验:origin/claude/issue-3749-appcontent-test-headers675860911,文件面 = 授权三文件 + 空 frontmatter changeset;trailer 自查 0 命中;与在飞 #3849/#3546s6/#3735/#3746 零相交。
CI 终态(独立复核):19 检查全部 completed —— 17 success + 2 skipped(coverage/dependabot 按设计),含四个 Test shard、Lint、Type Check、Build & E2E 全绿,零失败。

裁定要点:

转 ready 并挂 auto-merge。


Generated by Claude Code

@yinlianghui
yinlianghui marked this pull request as ready for review August 8, 2026 22:13
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 8, 2026
Merged via the queue into main with commit 7fbef94 Aug 8, 2026
20 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3749-appcontent-test-headers branch August 8, 2026 22:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

2 participants