Skip to content

chore(console): 刷新 objectui pin 到 785b8a5d432c —— 2026-08-02 的 7 个 PR 进入 v17 - #4732

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-4665-objectui-refresh-console-pin
Aug 3, 2026
Merged

chore(console): 刷新 objectui pin 到 785b8a5d432c —— 2026-08-02 的 7 个 PR 进入 v17#4732
os-zhuang merged 2 commits into
mainfrom
claude/issue-4665-objectui-refresh-console-pin

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4665

做了什么

  • .objectui-sha: 7d9734d5e321785b8a5d432c(objectui origin/main 当前 tip)
  • packages/console/dist 按新 pin 重建(gitignored,不在 diff 里;产物证据见下)
  • .changeset/console-785b8a5d432c.md@objectstack/console: minor):脚本自动生成的清单之外,补上四个"改动已发布包"的 objectui changeset 的语义,尤其 objectui#3203 的作者破坏性迁移(处方 + 理由)

跑的就是 pnpm objectui:refresh 的两条命令,都持容器级锁、带堆上限:

flock -w 7200 /tmp/os-heavy-verify.lock \
  NODE_OPTIONS=--max-old-space-size=4096 \
  bash scripts/bump-objectui.sh 785b8a5d432cf009389a1a9180fdac2a8297543f
flock -w 7200 /tmp/os-heavy-verify.lock \
  NODE_OPTIONS=--max-old-space-size=4096 \
  bash scripts/build-console.sh

给 bump 传了显式 SHA,没走默认路径bump-objectui.sh 不带参数时取 ../objectuiHEAD,而容器里那个共享 checkout 停在功能分支 claude/project-manager-skill-task-xg9j87444457c)上 —— 默认路径会把 pin 钉到一个不是 objectui main 的提交,还会漏掉其后 6 个已合并提交。传的 SHA 就是 origin/main 的 tip。

为什么钉到 tip,而不是那 7 个 PR 的末尾(6be575c

停在 6be575c 能让对照表和本单一一对应,但它当场重造本单要消灭的那个滞后:objectui main 立刻又领先 6 个提交,下一张"进不了 v17"的单接着开。多带进来的 6 个提交对本仓作者是中性的(见下),所以按刷新的本义钉到 tip。

对照表 —— 4 个改动已发布包的 PR,逐行给证据

产物路径均为 packages/console/dist/assets/。"刷新前没有"用 objectui 旧 pin 7d9734d5e321 的源码树 git grep 0 命中佐证,不是"应该在"。

objectui PR 包 / 级别 刷新后在产物里的证据
objectui#3196 @object-ui/core minor framework-DZLzTqF9.js 里有 [dashboard-filters] 告警前缀(3 处)、skipping filter unknown date range preset 。旧 pin 源码树 unknown date range preset = 0 文件命中,新 pin = 2 文件
objectui#3203 @object-ui/types + @object-ui/app-shell minor作者破坏性 类型层:新 pin 的 packages/types/src/ui-action.ts 里九个键全部消失(旧 pin 的 273/276/279/282/285/288/291/294/297 行九个都在),ActionParam 现在写成 extends Omit< z.input< typeof SpecActionParamSchema >, 'type' > —— 从 spec schema 派生,作者类型与服务端 parser 不可能再各说各话。运行时层:resolveActionParams() 的点名告警是 NODE_ENV === 'production' 门控,生产包里按设计被剥掉(产物 grep 不到;构建树 .cache/objectui-785b8a5d432c/packages/app-shell/src/utils/resolveActionParams.ts 里在)—— 这条如实记为"类型/源码层证据",不谎称产物里有
objectui#3204 @object-ui/plugin-detail minor plugins-views-CKBrHjEj.js 里有 sys_activity 的自取数调用:sys_activity`,{$filter:{object_name:v,record_id:y},$orderby:{timestamp:`desc`},$top:Math.max;以及 showSubscriptionToggleNOT IMPLEMENTED — no record-subscription backend exists yet 描述。旧 pin 该串 0 命中
objectui#3210 @object-ui/plugin-detail patch plugins-views-CKBrHjEj.js 里 loading 分支已生效:.length===0?(...)("div",{role:"status","aria-live":"polite","data-testid":"activity-loading",... 。旧 pin activity-loading 0 命中,新 pin 2 文件

链路自证:packages/console/dist/.objectui-sha = 785b8a5d432cf009389a1a9180fdac2a8297543f = .objectui-shapnpm check:console-sha 通过;构建树 HEAD 就是该 SHA,且七个 PR 的提交都是它的祖先(逐个 git merge-base --is-ancestor 验证,7/7 ✓)。

objectui 侧的版本号还没动@object-ui/* 在 pin 处都是 17.1.0,那 4 个 changeset 还挂在 objectui 的 .changeset/ 里没发版)。这不影响本仓:objectstack 不从 npm 消费 @object-ui/*,而是在 pin 处从源码构建 SPA,所以"是否进来了"的证据只能是产物,上表给的就是产物。

三个 release-nothing / 纯 CI PR:没有带出版本变化

objectui PR objectui 侧 本仓 changeset 清单
objectui#3195 root-screenshot-dash-flag-ignore.md空 frontmatter(release-nothing) 未收(提交类型 chore:
objectui#3211 ci-cd-pipeline-doc-matches-the-workflow.md空 frontmatter 未收(提交类型 docs(ci):
objectui#3198 根本没有 changeset(纯 CI) 曾被收进(类型是 fix(ci):)—— 我已连同同类的 fix(ci) objectui#3186 一起从清单里删掉

版本层面三者都没有产生变化:@objectstack/console 这次的 minor 由区间里的 feat 决定(脚本 auto-type 规则),与这三个 PR 无关。

fix(ci) 被收进清单这件事本身是个发现 —— 连同"带 ! 的破坏性 refactor 一条都进不去"和"head -40 静默截断",已单开 #4731,不在本 PR 修。

一并带进来的 6 个提交(2026-08-03 合并)

39033a3 c5ccbd5 4a51e77 6d868e1 b06f78a 785b8a5 + 444457c。四条带 !,但破坏面都在 objectui 自己的 TS 导出名(burn ledger 批次 6/7、删除未注册的 PageNodeRenderer、收窄 FieldWidgetComponentProps)—— objectstack 只消费构建产物,不 import @object-ui/*,所以对本仓作者是中性的。444457c 是跟随本仓 managedBy: 'system' → 'system-data' 退役的收敛,方向一致。

objectui#3203 的迁移落点 —— 需要维护者定夺

处方与理由已写进 changeset(发布说明的法定输入层):

  • 内联 picker 目标:{ type: 'lookup', referenceTo: 'account' }{ type: 'lookup', reference: 'account' }
  • 其余八个键:改成 field-backed({ field: 'account_id' }),整组从对象字段继承
  • 理由(原样带上,因为它说明这不是回退):这九个键从来就存不进去 —— ActionParamSchema.strict(),authorable 键表里只有 reference,别名表点名 referenceto → referencepackages/spec/src/ui/action.zod.ts:61-82),所以作者写 referenceTo 在服务端一直是硬性 parse 拒绝,只是 tsc 一直放行。移除的是一个从未生效的编译期假象,不是一个能力。

本 PR 没有动 v17 升级指南:本仓唯一带 "Breaking changes & migration" + "Upgrade checklist" 的页面是 content/docs/releases/v17.mdx,而 content/docs/releases/ 对代码 PR 是禁区(AGENTS.md 目录表 / CLAUDE.md 第三条)。顺带一提,该页第 1917 行的 console 段标题写着 bundled objectui advanced `4a4829d0ef39 → 7d9734d5e321` —— 本 PR 落地后这个区间就旧了,是同一个落点问题的另一半。

三个选项:

  • A. 只留在 changeset(本 PR 已做),由 release 时集中编译进 v17 页。合仓规默认路径、零冲突;代价是 RC 期间作者在文档站上读不到这条迁移。
  • B. A + 一个 docs-only PR,把这条迁移补进 v17 的 "Breaking changes & migration",顺手把 console 段的区间改成 4a4829d0ef39 → 785b8a5d432c。CLAUDE.md 明确允许这个例外("dedicated docs-only PR,never a rider on code changes")。
  • C. 写进 content/docs/ui/actions.mdx 不推荐:该页从未教过那九个键(本仓文档全库 referenceTo 0 命中),补一段"别写这九个键"等于凭空造出一个作者从没有过的印象,而且那不是升级指南。

推荐 B。 长期看,changeset 是发布说明的单一输入这条不能破(A 必须有,已做),但一条作者破坏性迁移在 RC 期间只存在于 .changeset/ 里,对正在升级的作者等于不存在;docs-only PR 是仓规为这种情况留的正门,且不与任何代码 PR 抢那张表。对"让 AI 写的元数据不容易写错"这条轴,B 也更好:作者(和替作者写元数据的 agent)读的是文档站,而这条迁移的全部价值就是把失败从 publish 时挪到敲键盘时 —— 文档站上没有它,authoring-time 就少一层拦截。等 v17 正式发布,这段本来也要进那页,B 只是把它提前到还有人在升级的时候。

验证

$ node scripts/check-console-sha.mjs
✓ Console dist matches the objectui pin (objectui@785b8a5d432c).

$ pnpm --filter @objectstack/cli test        # console 解析 + SHA drift 守卫所在包
 Test Files  65 passed (65)
      Tests  581 passed (581)

$ pnpm --filter @objectstack/cli typecheck   # tsc --noEmit,无输出即通过
$ node scripts/check-changeset-fixed.mjs     # exit 0
$ node scripts/check-changeset-no-major.mjs  # exit 0
$ node scripts/check-release-notes.mjs       # exit 0

构建侧:build-console.sh 自带的 bundle canary(import/jobs)通过 —— 产物里的 @objectstack/client本仓这棵树的,不是 objectui lockfile 里的旧版本。

首轮 cli 测试有 3 个文件失败(@objectstack/service-* / @objectstack/verify 的 dist 未构建导致 TS2307 / 动态 import 失败),构建完 CLI 的依赖闭包(turbo run build --filter=@objectstack/cli...)后 65/65 全绿 —— 与本 PR 无关,是 worktree 首次 install 后的构建状态。

未跑 Playwright e2e(需要真实浏览器 + 起服务,本轮四个 agent 共用一个容器)。

不在本 PR 里

  • packages/spec/** 零改动
  • content/docs/releases/** 零改动
  • objectui 侧零改动(objectui 的 main 是既成事实;本次刷新没有遇到需要在本仓打补丁才能构建的情况)

🤖 Generated with Claude Code

https://claude.ai/code/session_015Br2xsJsczFsTR9bvbh2Ny


Generated by Claude Code

claude added 2 commits August 3, 2026 00:35
fix(fields)!: FieldWidgetComponentProps stops claiming to have every key (#3221) (#3230)

objectui@785b8a5d432cf009389a1a9180fdac2a8297543f
…the pin changeset

The auto-generated pin changeset lists commit subjects only, so the one
author-BREAKING change in the range (objectui#3203 — `ActionParam` loses the
nine resolved-only picker keys) would have reached the release notes as a
one-line Chinese subject with no migration and no rationale. Spell out the
FROM/TO prescription and why the removal is not a regression (the keys were
never storable: `ActionParamSchema` is `.strict()` and its alias table names
`referenceto -> reference`), plus the author-visible halves of objectui#3196 /
#3204 / #3210.

Also drops the two `fix(ci)` lines from the enumerated range: they release
nothing and are not in the shipped bundle, so listing them as "frontend
changes" overstates what the artifact carries.

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

vercel Bot commented Aug 3, 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)
objectstack Ignored Ignored Aug 3, 2026 1:01am

Request Review

Copy link
Copy Markdown
Contributor Author

PM 裁定(session_015Br2xsJsczFsTR9bvbh2Ny,维护者可否决):「objectui#3203 迁移落点」三案选 B —— changeset 保留(本 PR 已做),v17 升级指南走独立 docs-only PR。

理由从简(两轴分析 PR 正文已写全,结论一致):changeset 单一输入的仓规不破;而一条作者破坏性迁移在 RC 期间必须在文档站可读 —— 它的全部价值就是把失败从 publish 时挪到敲键盘时。C 案否决理由采纳(全库 referenceTo 0 命中,凭空造印象)。

已落账 #4733(docs-only,Blocked-by: 本 PR),含 console 段区间 → 785b8a5d432c 的同步更新 —— 正文 :1917 那半个落点问题一并收进去了,不留尾巴。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 01:12
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 072806a Aug 3, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4665-objectui-refresh-console-pin branch August 3, 2026 01:16
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…5d432c (objectstack-ai#4744)

objectui#3203 从公共 `ActionParam` 移除九个 resolved-only picker 键,对作者
破坏性。迁移处方已进 objectstack-ai#4732 的 pin changeset(发布说明的法定输入层),但 RC
期间正在升级的作者读的是文档站 —— 一条只活在 `.changeset/` 里的破坏性迁移
对他们等于不存在。CLAUDE.md 为此留的正门是 dedicated docs-only PR,本 PR
就是那个 PR(PR objectstack-ai#4732 的 PM 裁定,选项 B 的第二半)。

两处改动,零代码:

1. `## Breaking changes & migration` 新增一条,紧跟 ADR-0104 D2 的 action
   param 条目(同一主题):九个键全名、两条处方(内联 picker 目标改
   `reference`;其余八个改 field-backed 整组继承)、以及"这不是能力回退"
   的理由 —— `ActionParamSchema` 是 `.strict()`,authorable 键表只有
   `reference`,别名表点名 `referenceto → reference`,服务端一直硬性 parse
   拒绝,只是 `tsc` 放行。

   处方逐条与 spec 核对过:`displayField` / `descriptionField` /
   `lookupColumns` / `lookupFilters` / `lookupPageSize` / `dependsOn` 确为
   `FieldSchema` 键(packages/spec/src/data/field.zod.ts),field-backed 参数
   由字段元数据继承;`idField` / `titleFormat` 两侧都从来不可作者化 ——
   记录标识由 picker 自解,候选标题取被引对象的 `nameField`(ADR-0079)。
   这一层精度是 changeset 未展开的,写进文档站是因为错的处方比没有更糟。

2. console 段标题区间 `4a4829d0ef39 → 7d9734d5e321` 更新为
   `4a4829d0ef39 → 785b8a5d432c` —— objectstack-ai#4732 已合并,`.objectui-sha` 现为
   785b8a5d432c,旧区间已失真。

全 diff 只有 `content/docs/releases/v17.mdx` 一个文件。不发版,不 bump 任何
包版本,改动最小化(不重排既有内容、不顺手修别的段落)—— 这个文件是全仓
最热的冲突磁铁。

Fixes objectstack-ai#4733


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

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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 size/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pnpm objectui:refresh 并落 console pin —— 2026-08-02 合并的 7 个 objectui PR 目前进不了 v17

2 participants