Skip to content

docs(plugin-map): README 按现码重写,不再教包里不存在的那套 API (#5002) - #5021

Merged
yinlianghui merged 2 commits into
mainfrom
claude/issue-5002-plugin-map-readme
Aug 17, 2026
Merged

docs(plugin-map): README 按现码重写,不再教包里不存在的那套 API (#5002)#5021
yinlianghui merged 2 commits into
mainfrom
claude/issue-5002-plugin-map-readme

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes#5002

前提复核:成立,并修正 issue 正文一处措辞

按「issue 正文是线索不是规格」先把卡面对照表逐行对着 origin/main@25819c42c 核了一遍。七行里六行准确;第五行需要修正,而且是往反方向修正的:

卡面复核结论
center: { lat, lng } 对象形失败并被忽略MapConfigSchema.centerz.tuple([z.number(), z.number()])(ObjectMap.tsx:48);对象形 safeParse 失败 → 告警(:224)→ center?.[0] 取不到数 → 不构成已声明相机(:599-603),取景照做
markers 从不被读✅ 全无读取点,marker 由记录派生(:514-545)
layers / height 从不被读✅ 零命中;容器是固定响应式高度 h-[300px] … lg:h-[600px](:670)
mapComponents 导出不存在✅ 运行时导出面实测恰为 ObjectMapObjectMapRenderer;object-map / map 自注册(index.tsx:62,72)
zoom 没有默认值了✅ 默认分支只回字段名,不造相机(:237-244)
onMarkerClick 只是 React prop,不是 schema 键两者都是。SchemaRenderer 会把节点的非元数据属性摊平成 props(packages/react/src/SchemaRenderer.tsx:575 解构、:619 展开),实测在 schema 上写 onMarkerClick 会带着记录被调用。docs 页把它记为 schema 键是对的,所以新 README 没有按卡面去否定它,而是写明这条通道

「照抄即空地图且无诊断」也需要一处补充,见下面的反向验证。

形态选择:对齐重写,但按减法做(不是指针式)

两个候选形态里选了 ①对齐重写,并按 #3881 / PR #4939 的减法路数执行 —— 新文比旧文短 116 行,完整作者参考只留一份。

新文另加一节「What this component does not read」,点名旧文那批虚构键。理由:旧文已经进过训练语料,照着旧文(或照着记住旧文的模型)写的读者需要一条能立刻对上的否定清单;这类否定陈述在功能不新增时是稳定的,不构成新的漂移面。

每个片段的核实方式

README 里没有一行是从旧文或卡面搬的。除逐行对源码坐标外,用一份临时探针(未入库,已删)把每个片段与每条断言在真包上跑了一遍,22 例全绿:

两个 schema 片段各自渲染出 marker;filter / sort 透传为 $filter / $orderby 且不发 $top;map 块不与默认字段名合并(map: { titleField: 'name' } 单独写 → 0 marker + 排除提示);块内省略 titleField → 标题兜底 Marker;fit 的 padding 48 与上限 12,且不附带合成 zoom;跨反经线取景为 [[179,-18],[181,-16]];空集开在 0,0 / zoom 2;center[latitude, longitude] 读;半声明相机的两种推导(zoom 单独 → 记录集中心;center 单独 → 大陆级 zoom 3);对象形 center 告警且保 fit;locationField 的对象 / 字符串 / 数组三形态(含 latitude/longitudelon 别名);越界记录被排除并计数;markers / layers / height / useGeolocation 全部无效果;导出面恰为两项;object-mapmap 两个类型自注册;聚合在 100 marker 以上自动开启;Edit / Delete 只在传了处理器时出现;schema 上写 onMarkerClick 确实到达组件。

一处没有照抄源码注释的地方:clusterRadius 的 doc comment 写「in pixels」,而实现是 radius / 2 ** zoom 的坐标度数网格(:326)。README 写实际语义,并把这条注释单据记为 #5020

反向验证(方向先判后跑)

文档单的等价物:把旧 README 的片段逐字跑一遍。预判方向 —— 0 个 marker,且不出现任何提及那些键的诊断。6 例全绿,并得到一条对 issue 措辞的修正:

  • 上下文里 dataSource(应用里的常态,如 docs 画廊):空地图、0 marker、无告警、连"记录坐标无效"提示都不会出现(根本没有记录进入管线),相机是空集世界视图 —— 顶层的 center / zoom 完全没参与。这就是 issue 说的形态。
  • 没有 dataSource(纯照抄的形态):组件反而渲染 Error: DataSource required for object/api providers —— 有诊断,但指向完全无关的另一件事,地图根本没挂载。

所以「every snippet renders an empty map with no diagnostic」是有条件成立,不是无条件的;PR 描述与 commit 都按实测写。

关键断言 → 源码坐标

  • center[latitude, longitude] 元组:packages/plugin-map/src/ObjectMap.tsx:48(center: z.tuple([z.number(), z.number()]).optional())+ :599-600(center?.[0] 取纬度、center?.[1] 取经度)
  • 没有默认 zoom:ObjectMap.tsx:237-244(默认分支只回 5 个字段名)+ :612-620(markerBounds && !hasDeclaredCamera → 交 bounds)+ camera.ts:44(padding 48)/ :52(上限 12)/ :55(空集 zoom 2)/ :62(半声明 zoom 3)
  • map 块替换而非合并默认值::217-227(有块则 { ...config, style } 原样返回)对比 :237-244

验证

  • pnpm exec vitest run(在 packages/plugin-map/ 内跑,该包 setupFiles 是 cwd 相对的)→ 7 files / 43 passed。跑之前先 pnpm --filter '@object-ui/plugin-map^...' build —— 新 worktree 里不建依赖,@object-ui/react 解析不到,红得像是改坏了导入
  • node scripts/check-doc-links.mjsLinks are valid across 13 scan roots.(packages/*/README.md 确实在扫描面内:scripts/check-doc-links.mjs:477,rule: 'disk')
  • node scripts/check-control-bytes.mjs → OK(4470 个文本文件,零命中);另做门禁盲区自扫 grep -naP 控制字节 → 零命中
  • 仓根 type-check 未全跑:本 PR 只改一份 markdown 与一份 changeset,没有 TS 产物面
  • changeset:.changeset/plugin-map-readme-truth-5002.md,按 ban-package-self-import.md 的空 frontmatter 先例(无代码/类型/运行时变化 → 不声明发布;文内写明校正后的 README 随 @object-ui/plugin-map 下次发布到达 npm)

兄弟 README 巡查(按裁定只查不改)

对 19 个 packages/plugin-*/README.md 的自包命名导入与各包真实导出面做了比对,命中 8 个包(不含本单的 map),各立一单交分诊:#5010 calendar、#5011 form、#5012 gantt、#5013 grid、#5014 view、#5015 dashboard、#5016 report。

方法学备注:第一版用「标识符在 src/ 是否出现」近似,会被注释里的名字放过(#5015DashboardSchema 只在注释里),也会误报 export * as X(plugin-chatbot 的 AIElements 是真导出)。改成对导出面取名集合后才稳定;多行 import 块仍只按单行匹配,所以报出的范围是下限

顺带记账(均不在本 PR 修):#5017 顶层 style 被当 MapLibre style 读、与 BaseSchema.style(内联 CSS)撞车,而 types 里 mapStyle 这个名字正是为避开它才起的;#5018ObjectMapSchema 没有建模 map 块,组件 props 类型写的是 ObjectGridSchema、每处 map 读取走 as any;#5019 docs 页两处残留不符(MapConfig 不从 types 导出、API provider 示例是未实现分支)—— 这一单因为新 README 把读者指向那一页而更值得修;#5020clusterRadius 单位注释(观察类,带 finding 标签)。


Generated by Claude Code

`packages/plugin-map/README.md` 教的是一个不存在的组件:作者手写的 `markers`
数组、`layers`、`height`、`useGeolocation`、`center: { lat, lng }` 对象、
`zoom` 的「Default: 10」,以及 `import { mapComponents }` + `Object.entries()`
的手动注册。这些键在 `packages/plugin-map/src` 里没有任何读取点,`mapComponents`
这个导出不存在。照抄任一片段的结果:上下文里有 dataSource 时是一张空地图且
零诊断(不会有「记录坐标无效」提示——根本没有记录进入管线),没有 dataSource
时反而弹一条指向别处的 `Error: DataSource required for object/api providers`。
两种情况下都没有任何一层告诉作者他写的键从未被读。
组件真正读的是查询(`objectName` / `staticData` / `data`,`filter` 与 `sort`
是查询自己的过滤与排序)加上注册时声明的 `map` 块(`latitudeField`、
`longitudeField`、`locationField`、`titleField`、`descriptionField`、`zoom`、
`center` 为 `[latitude, longitude]` 元组、`style`),注册是 import 的副作用。
相机语义按 #4941 / PR #5000:没有默认 zoom,未声明相机即取景到记录集(48px
padding、城市级 zoom 上限 12,包围盒沿最短弧度量),空集开在整个世界,声明的
一半胜出、另一半推导,读不出来的 `center` 被诊断而不被适配、也不夺走取景。
## 形态:对齐重写,但按减法做
新文比旧文短 116 行。完整的作者参考只留一份 ——
`content/docs/plugins/plugin-map.mdx`,它被 `check-doc-component-types` 扫、
且刚由 PR #5000 校正过;README 只保留包本地的事实:注册了什么、导出了什么、
两种 provider 各一个能跑的 schema、相机规则,以及读者无法自行推断的两个陷阱:
- `map` 块**替换**字段名默认值而不是与之合并 —— `map: { titleField: 'name' }`
单独写就没有命名任何坐标字段,放不下任何 marker;
- 不是二元数组的 `center` 会被 `MapConfigSchema` 拒绝并告警,不被适配。
在一份没有门禁的第二副本里重述整个 schema,正是这次漂移的生成器(与 #3881
同形),所以没有把 docs 页的参考再抄一遍。另加一节「本组件不读什么」,直接
点名旧文那批虚构键,让照着旧文(或照着记住了旧文的模型)写的读者能立刻对上。
## 核实方式
README 里每一行断言都对着 `packages/plugin-map/src` 逐条核过,并用一份临时
探针(未入库)把每个片段与每条断言在真包上跑了一遍:22 例全绿,含两个片段的
渲染、`$filter`/`$orderby` 透传且无 `$top`、`map` 块不合并默认值、`Marker`
兜底标题、fit 的 padding/上限、跨反经线取景、空集世界视图、`center` 的
[lat, lng] 顺序、半声明相机的两种推导、对象形 `center` 的告警且保 fit、
`locationField` 三种坐标形态、越界记录被排除并计数、`markers`/`layers`/
`height`/`useGeolocation` 全部无效果、导出面恰为 `ObjectMap` 与
`ObjectMapRenderer`、`object-map` 与 `map` 两个类型的自注册、聚合在 100 个
marker 以上自动开启、以及 schema 上直接写 `onMarkerClick` 经 `SchemaRenderer`
的属性摊平确实到达组件。
反向验证(方向先判后跑):把旧 README 的片段逐字跑一遍,预判是 0 个 marker
且不提及那些键 —— 6 例全绿,并修正了 issue 正文一处措辞:「空地图且零诊断」
只在上下文有 dataSource 时成立,没有 dataSource 时是上面那条指错方向的报错。
兄弟包 README 巡查按裁定只查不改,同族漂移另立单:#5010(calendar)、
#5011(form)、#5012(gantt)、#5013(grid)、#5014(view)、#5015(dashboard)、
#5016(report);顺带记账 #5017(顶层 `style` 与 `BaseSchema.style` 撞车)、
#5018(`ObjectMapSchema` 未建模 `map` 块)、#5019(docs 页两处残留不符)、
#5020(`clusterRadius` 单位注释,观察类)。
Co-authored-by: Claude <noreply@anthropic.com>
@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation plugin labels Aug 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)25.3 KB350 KB
Entry fileindex-B0819Wck.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.56KB3.59KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)25.13KB5.40KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)40.21KB10.79KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.71KB1.22KB
auth (invitation-status.js)1.22KB0.70KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)500.23KB111.77KB
core (index.js)4.11KB1.62KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)159.03KB44.08KB
fields (index.js)233.27KB58.22KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.35KB1.38KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.12KB7.62KB
i18n (useDisplayLocale.js)2.84KB1.45KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)39.16KB10.97KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.35KB3.31KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.42KB1.42KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.81KB0.83KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.75KB18.37KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)127.85KB32.73KB
plugin-designer (index.js)212.39KB42.83KB
plugin-detail (index.js)241.12KB60.43KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)120.42KB29.03KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)197.61KB53.03KB
plugin-kanban (index.js)52.72KB14.54KB
plugin-list (index.js)111.22KB26.98KB
plugin-map (index.js)18.72KB6.09KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)41.97KB11.33KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)83.81KB20.49KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)27.53KB9.41KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.28KB0.68KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)5.41KB2.34KB
sdui-parser (index.js)4.77KB2.16KB
sdui-parser (input-type.js)2.84KB1.40KB
sdui-parser (parse.js)10.76KB3.17KB
sdui-parser (provenance.js)3.66KB1.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)6.92KB2.40KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.05KB1.52KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

上一版把两个注册写成「`map` —— `ObjectView` / `ViewSwitcher` 用的 view-type
别名」,那句是比着 `plugin-tree/README.md` 的同位说法写的,而它在本包上查不出
消费者:`ObjectView` 的 `case 'map'` 把地图视图编译成 `type: 'object-map'`
节点(`packages/plugin-view/src/ObjectView.tsx:770-776`)再交 `SchemaRenderer`,
`ViewSwitcher` 那侧的 `map` 只是标签与图标(`ViewSwitcher.tsx:65`/`:79`);
全仓除本包测试外没有任何地方构造 `type: 'map'` 的组件节点。
改成能钉住的两条:`map` 是 spec `ViewTypeSchema` 的成员名
(`packages/types/src/zod/views.zod.ts:25`),给直接用该名字写的节点用;并写明
`ObjectView` 里的 map 视图会被编译成 `object-map`,两个拼法落到同一个组件。
这份 README 的全部意义就是每行都能对上代码,所以宁可把话说窄。
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)25.3 KB350 KB
Entry fileindex-B0819Wck.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.56KB3.59KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)25.13KB5.40KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)40.21KB10.79KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.71KB1.22KB
auth (invitation-status.js)1.22KB0.70KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)500.23KB111.77KB
core (index.js)4.11KB1.62KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)159.03KB44.08KB
fields (index.js)233.27KB58.22KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.35KB1.38KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.12KB7.62KB
i18n (useDisplayLocale.js)2.84KB1.45KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)39.16KB10.97KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.35KB3.31KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.42KB1.42KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.81KB0.83KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.75KB18.37KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)127.85KB32.73KB
plugin-designer (index.js)212.39KB42.83KB
plugin-detail (index.js)241.12KB60.43KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)120.42KB29.03KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)197.61KB53.03KB
plugin-kanban (index.js)52.72KB14.54KB
plugin-list (index.js)111.22KB26.98KB
plugin-map (index.js)18.72KB6.09KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)41.97KB11.33KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)83.81KB20.49KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)27.53KB9.41KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.28KB0.68KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)5.41KB2.34KB
sdui-parser (index.js)4.77KB2.16KB
sdui-parser (input-type.js)2.84KB1.40KB
sdui-parser (parse.js)10.76KB3.17KB
sdui-parser (provenance.js)3.66KB1.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)6.92KB2.40KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.05KB1.52KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

@yinlianghuiClaude

Copy link
Copy Markdown
CollaboratorAuthor

PM 验收 ✅ ACCEPT(#5002,批次 20 收官单)

实物核验(merge-base 25819c42c 与报告基线一致):2 files,+148/−236 —— README 285→125 行按减法重写,完整 schema 参考指向被门禁扫的 docs 页,包本地只留三件 docs 页不该承担的事实(注册面/导出面/map.style)+ 两个读者无法自行推断的陷阱;不选纯指针式的理由(README 随 npm tarball 发布,是包的 npm 落地页)成立。11 条关键断言全部钉到源码坐标。模型标识 msg/diff 双 0;releases/ 零触碰;changeset 空 frontmatter 按 README-only 先例。

CI 亲读:19/19 check runs completed,零失败(两项 path-filter skipped 计绿;label 首跑 429/503 基础设施红,按「同签名 + 前一提交绿」认签名重跑收绿,处置合规)。

卡面证伪的处理:对照表第 5 行(onMarkerClick 只是 React prop)被探针实测推翻 —— SchemaRenderer 把非元数据属性摊平成 props,schema 键通道真实存在;新 README 写明通道而非按卡面否定,正确。issue 措辞「空地图零诊断」被收窄为有条件成立(有 dataSource 时成立;无 dataSource 时有诊断但指向无关事项)—— 两种情况都不告诉作者键从未被读,缺陷成立。旧 README 片段逐字跑 6 例(0 marker)是本卡最直接的反向验证。

兄弟巡查产出超预期:19 包里 11 包干净、7 包同类虚构 API 各立卡(#5010#5016,含 #5013 的「改路径也仍然错」与 #5015 的「本族不能按名字模式批量断言」两条防误修笔记),另出 #5017(style 撞车)、#5018(map 块整体未建模 + as any,AI 元数据藏错形状)、#5019(docs 页两处残留 —— 因本 PR 把读者指向该页,优先级已抬)、#5020(clusterRadius 单位,观察类)。巡查方法的自我修正(标识符近似 → 导出面名集合)如实记录。

undraft + auto-merge(squash)。


Generated by Claude Code

@yinlianghui
yinlianghui marked this pull request as ready for review August 17, 2026 15:50
@yinlianghui
yinlianghui added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit b46cf11Aug 17, 2026
19 of 20 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-5002-plugin-map-readme branch August 17, 2026 15:50
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationplugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

plugin-map README teaches an API the package does not implement — every snippet in it renders an empty map

1 participant

@yinlianghui