Skip to content

docs(plugin-tree): add the ## License section the other 36 published READMEs carry (#3664) - #3695

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3664-plugin-tree-license-section
Aug 7, 2026
Merged

docs(plugin-tree): add the ## License section the other 36 published READMEs carry (#3664)#3695
yinlianghui merged 1 commit into
mainfrom
claude/issue-3664-plugin-tree-license-section

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #3664

packages/plugin-tree/README.md 是 38 个已发布包里唯一「有 README 却没有 ## License 小节」的。本 PR 补上该节,单文件 4 行新增。

前提复核(origin/main)

派发时 main 已前进到 be9cd38ac,其中 4747344da(#3688)刚重写过 36 个包 README,所以普查是在当前 origin/main 上重跑的,不是照抄 issue 正文的旧数:

issue 正文写的是「37 个已发布包的 README 都有」,实际应为 36(38 减去无 README 的 sdui-parser、再减去 plugin-tree 本身)。差 1 是计数口径,不影响结论。

兄弟包形态普查(36 个)

正文措辞分布:

形态 数量
MIT — see [LICENSE](./LICENSE). 32 绝大多数
MIT 2 types, react-runtime
MIT © ObjectStack Inc. 1 plugin-timeline
MIT © ObjectStack Inc. + 第三方声明 1 plugin-chatbot

位置分布:末节 34/36(例外:plugin-view、types,其后还有别的小节)。

其他格式约定(逐字核对):标题前无 --- 分隔线(0/36)、标题前后各一空行、文件末尾恰好一个换行、破折号是真 em dash U+2014 而非连字符。

取多数形态,与 packages/plugin-grid/README.md 的 License 节做了逐字节相等断言(a === b 为 true),位置放文末。该 README 其余内容一字未动。

与 issue 建议的出入(已在 commit 里写明):issue 正文建议照抄 plugin-timeline,但该形态是 1/36 的少数派,且完全不含 ./LICENSE 链接。多数形态既是仓库惯例,又能给链接门禁留下可校验的对象 —— 按派发口径取了多数形态。

门禁前后

scripts/check-doc-links.mjs 第 7 个扫描根 packages/*/README.md(disk 规则)把相对 href 当作仓库内路径解析,所以新增的 ./LICENSE 会被机械校验,指向 PR #3662 落地的文件。

时点 结果
修改前(基线) Links are valid across 7 scan roots. exit 0
修改后 Links are valid across 7 scan roots. exit 0

绿→绿本身不构成证明,所以补了一次反向验证(先定方向再跑):预测「若门禁真的扫这条链接,临时删掉 LICENSE 必须转红并点名该 href;若仍绿则说明链接未被检查、修后绿是空的」。实测与预测一致:

Found 1 broken link (1 distinct target):
- [example-relative] packages/plugin-tree/README.md:50 -> ./LICENSE

exit 1;恢复文件后重回 exit 0,git status 确认 LICENSE 按原样还原(1065 字节,未进入 diff)。这条链接因此是承重的,修后绿是「LICENSE 文件确实存在」的机械证明。

顺带印证了 issue 的那个观察:#3622/#3649 那轮死链清扫扫不到 plugin-tree 缺 LICENSE,正因为它的 README 一条链接都没有 —— 无链可死。现在这个盲区补上了。

CI 覆盖确认:docs-links.yml 的触发是 pull_request: branches: [main]无 paths 过滤,所以纯 markdown 的 PR 照样会跑到这道门禁(ci.yml/lint.yml**/*.md 列进 paths-ignore,不会启动)。另跑了 scripts/check-control-bytes.mjs:OK (scanned 3682 tracked text file(s)) exit 0。

无 changeset(判断依据)

文档改动,且有两条直接先例:

AGENTS.md 的口径也是「功能改进需写 changeset,纯修复不需要」。故不加。

文件面

packages/plugin-tree/README.md 单文件,+4 行 / -0 行。未动 content/docs/releases/,未改 assignee。


Generated by Claude Code

…d READMEs carry (#3664)

`packages/plugin-tree/README.md` was the only one of the 38 published packages
that had a README but no `## License` section. Census over origin/main:

- 38 published (non-private) packages
- 37 have a README (`sdui-parser` has none — out of scope, see #3647)
- 36 of those 37 carry `## License`; plugin-tree was the sole omission

The section is copied verbatim from the dominant form, 32 of the 36:

    ## License

    MIT — see [LICENSE](./LICENSE).

The four minority spellings are `MIT` (types, react-runtime) and
`MIT © ObjectStack Inc.` (plugin-timeline, plugin-chatbot). The issue suggested
plugin-timeline as the exemplar, but that form is 1-of-36 and carries no
`./LICENSE` link at all — the majority form is both the convention and the one
that gives the link gate something to check. Position matches too: final
section, as in 34 of the 36 (plugin-view and types continue past it).

This also closes the gap #3664 identified: `check-doc-links.mjs` scan root 7
(`packages/*/README.md`, `disk` rule) resolves relative hrefs as repository
paths, so the new `./LICENSE` link is now mechanically checked against the file
PR #3662 landed. Previously the README linked nothing, which is exactly why the
#3622/#3649 dead-link sweep could not detect the missing LICENSE — no link, no
dead link.

Verified the new link is load-bearing rather than vacuously green: temporarily
removing `packages/plugin-tree/LICENSE` turns the gate red with
`packages/plugin-tree/README.md:50 -> ./LICENSE` (exit 1); restoring it returns
`Links are valid across 7 scan roots` (exit 0).

No changeset: documentation-only, matching the precedent of PR #3662 (which
added this same package's LICENSE, likewise shipped in the tarball) and PR #3688
(36 package READMEs), neither of which carried one.

Fixes #3664

Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt

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

vercel Bot commented Aug 7, 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 7, 2026 9:51pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation plugin labels Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-C0qouk22.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) 480.72KB 105.64KB
core (index.js) 2.96KB 1.13KB
create-plugin (index.js) 9.08KB 2.92KB
data-objectstack (index.js) 137.51KB 35.11KB
fields (index.js) 230.87KB 56.83KB
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) 26.14KB 6.07KB
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.09KB 42.72KB
plugin-dashboard (index.js) 115.50KB 29.96KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 232.79KB 57.42KB
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) 186.61KB 49.34KB
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

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 plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

packages/plugin-tree/README.md 是 38 个已发布包里唯一没有 ## License 小节的

2 participants