Skip to content

refactor(types)!: delete ActionExecutor and the Batch Operations pair nothing reads - #31056

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-ln1pyf
Nov 6, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-ln1pyf

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

Part of #25921 (batch 11, claim 6696974190 with amendments 6697003965 naming the branch, 6697084388 naming the first batch and amendment 3 renaming it to this one; the card's other open items stay on it)

Clause-②: no (narrowing)
Metadata-protocol: none

维护者速读

  • 改了什么:从 @object-ui/types 的 ui-action.ts 删除 3 个没人读的类型:ActionExecutor,以及 "Batch Operations" 一组的 BatchOperationConfig、BatchOperationSummary。
  • 为什么改:retire the zero-consumer surface: nine dead modules (2,211 LOC), plugin-ai, runner's publish flag, test-only reset helpers on public barrels, the providers trio, 122 dead i18n keys, root orphans #25921 清理零消费者公开面;这 3 个名字在仓内与 hotcrm 都没有任何引用,动作实际由 @object-ui/core 的 ActionRunner 执行,留着会被当成 UI 协议包的公开承诺。
  • 风险与回滚:纯类型删除,构建出的 JavaScript 不变;旁边的 "Transaction Support" 一组(core 的 TransactionManager 在用)原样保留。对外部 npm 使用者是破坏性变更,带一个 ! patch changeset(BREAKING、FROM/TO、ADR-0087 runtime-export-retired 3 个)。回滚即 revert 本 PR。
  • 先看:ui/packages/types/src/ui-action.ts(删掉的三个声明与新注释)、.changeset/25921-types-action-executor-batch-ops.md(迁移说明)、ui/packages/types/src/index.ts(入口列表与注释)。
  • 两分钟验证:git grep -lw -e ActionExecutor -e BatchOperationConfig -e BatchOperationSummary -- ui packages 预期只命中 ui/packages/types 里的退役注释、本 changeset 与 CHANGELOG;pnpm --dir ui exec vitest run packages/types/ 预期全绿。
  • 需要你做的:无,席位落地。

What changes

@object-ui/types (its . entry) loses 3 types of src/ui-action.ts. They are deleted from the module, not only from the entry:

ActionExecutor, BatchOperationConfig, BatchOperationSummary.

  • src/ui-action.ts: the ActionExecutor function type and the "Batch Operations (Q2 2026 - Spec v2.0.1 Enhancement)" block go; a note at the end of the file, beside the existing undo/redo note, names them and points at @object-ui/core's ActionRunner / ActionRunnerHandler. The "Transaction Support" block right after them stays: TransactionConfig and TransactionResult are imported by core's TransactionManager.ts.
  • src/index.ts: the three names leave the ./ui-action.js type list; a two-line comment names them.
  • .changeset/25921-types-action-executor-batch-ops.md: one ! patch changeset, BREAKING, FROM/TO per name (no replacement in this package; actions run through ActionRunner), and the ADR-0087 runtime-export-retired marker naming all 3.

ui-action.ts is reached only through the . entry; no subpath entry of the package exports it.

Why this batch and not the first one named. Amendment 6697084388 first named the seven Spec-prefixed @objectstack/spec/ui type aliases of the entry (SpecFormView and six more), also dead. That edit was made (fa03472) and reverted in this branch (ae6a942), because check-adr-0087-registration cannot verify predicate 2 for them: they are export type { X as SpecX } from '@objectstack/spec/ui', a subpath of another workspace package, which the gate's export reader does not follow ("the declaration of SpecFormView cannot be located at the merge base"). The seat swapped the batch (amendment 3); the seven stay on the card, waiting on a predicate-2 ruling for that shape. The branch diff against main carries only this batch.

Tests

  • No in-package test reads any of the 3 names, so no test changes.
  • No ablation: a deletion of types with no tested behaviour behind it. The reverse probe below is the proof that the built .d.ts is the one read.

Verification

Census (read-only, before any edit; origin/main 81deb54, hotcrm 6961ab1)
  • Tool: the batch 8 census (TS AST of every published ui/packages/* main entry; identifier-token index over every tracked file of both repositories minus CHANGELOGs, changesets, the lockfile and release notes; prose and tests count as consumers; then not taught in README/demo/docs and not named by a kept export's declaration). @object-ui/types: 707 entry names, 147 zero-outside, 45 candidates; ui-action.ts 4 of them. Note: this project's files ui-seat-3/r2026-11-06/25921-b11-census.md.
  • git grep -lw per name, whole repository: 0 hits outside ui/packages/types/; hotcrm 0 for all 3. Inside the package: no reader besides the declaration and the entry line.
  • No zod twin, not an arm of AnySchema, no subpath entry, not taught.
  • Left in the module on purpose: OBJECTUI_LOCAL_ACTION_TYPES (the tool's fourth candidate; a runtime value pinned by spec-derived-unions.test.ts), and the Transaction trio (live in core).
  • Positive control, same module: TransactionConfig (core TransactionManager.ts).
  • No pending changeset names any of the 3; no open PR touches ui/packages/types/ (the claim's read at 22:01Z, plus every PR opened since).
Local runs on head 697756b (base 81deb54)
  • env -u OS_SKIP_DTS pnpm --filter '@object-ui/types...' build, then after the edit env -u OS_SKIP_DTS pnpm --filter @object-ui/types build from a clean dist + tsbuildinfo: VERDICT command-exit 0. Built dist: 0 files name ActionExecutor, BatchOperationConfig or BatchOperationSummary; the control TransactionConfig is in 2.
  • pnpm --filter @object-ui/types run type-check and pnpm --dir ui exec vitest run packages/types/: VERDICT command-exit 0; Test Files 387 passed (387), Tests 10460 passed (10460).
  • Reverse probe against the built dist/index.d.ts: a scratch file importing the 3 names plus the control TransactionConfig, tsc --noEmit --module nodenext: 3 errors (TS2305 / TS2724, one per retired name), 0 on the control line.
  • node scripts/pm/dispatch-gates.mjs --commands on 697756b: 30 derived families, every line run with stdin closed, all exit 0 (pnpm --dir ui exec vitest run scripts/: Test Files 170 passed, 2 skipped (172), after building @objectstack/client... and @objectstack/formula... in this fresh worktree); --ran reconciliation: 30 derived, 30 run, 0 NOT-MEASURED, 0 UNRUN.
  • check-adr-0087-registration --base origin/main: "verified: @object-ui/types#ActionExecutor (export, ui/packages/types/src/ui-action.ts)", and the same for the other two.
  • node scripts/check-platform-checklist.mjs --changed-from origin/main: exit 0 (0 anchored files in the change set). pnpm --dir ui run check:new-line-citations: 0 new citations.
  • Full dogfood (owed by the (narrowing) arm), head 697756b: runs on this head after the PR opens; its VERDICT line and counts go into the os-dev-report comment on retire the zero-consumer surface: nine dead modules (2,211 LOC), plugin-ai, runner's publish flag, test-only reset helpers on public barrels, the providers trio, 122 dead i18n keys, root orphans #25921.
  • Records: this project's files ui-seat-3/r2026-11-06/25921-b11/.

Acceptance notes


Generated by Claude Code

…ng reads

SpecDashboardHeader, SpecDashboardHeaderAction, SpecFormView,
SpecListColumn, SpecPageComponent, SpecPageRegion and SpecPageVariable
leave the @object-ui/types entry. They were type-only aliases of
@objectstack/spec/ui types with no reader in the workspace or in hotcrm;
the unprefixed upstream names stay the import to use.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibyZMb3aNnWtD2ukQXx
…es nothing reads"

This reverts commit fa03472. The seven aliases re-export a subpath of
another workspace package, which the ADR-0087 registration gate cannot
resolve, so their retirement waits on a ruling for that case.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibyZMb3aNnWtD2ukQXx
… nothing reads

ActionExecutor, BatchOperationConfig and BatchOperationSummary leave
ui-action.ts and the @object-ui/types entry. They were TypeScript-only
shapes with no reader in the workspace or in hotcrm; the Transaction
Support block beside them stays, core's TransactionManager reads it.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibyZMb3aNnWtD2ukQXx
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 6, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · os-tesla · session_01L9qibxW6qraU2Z3mwupUGp

Contract-review-claim: session_01L9qibxW6qraU2Z3mwupUGp · head 697756b · 2026-11-06T23:28Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · os-tesla · session_01L9qibxW6qraU2Z3mwupUGp

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 697756bb7094a01622eecdd5da06fca57b50cac7
Local-runs: none
Scope: net diff origin/main...697756bb (merge-base 81deb54; 3 files, +28/-52; the fa03472 alias edit and its revert ae6a942 cancel out); .changeset/25921-types-action-executor-batch-ops.md; ui/packages/types/src/ui-action.ts (head, 1225-1300); ui/packages/types/src/index.ts (head, 900-1280); ui/packages/types/package.json (exports); ui/packages/core/src/actions/TransactionManager.ts (18-30, 141-178); ui/packages/core/src/actions/ActionRunner.ts:573; .changeset/config.json; scripts/check-changeset-no-major.mjs; scripts/pm/clause2-line.mjs; scripts/check-adr-0087-registration.mjs (CATEGORIES, OPERAND, canonicalFromOperand, readFromBlock, verifyRuntimeExportRetired predicates 1-3, ZOD_PROJECTION_RE); precedent changesets 2cf269f (#30852), ac5d0ce (#31002), e396095 (#31038); PR #31056 body; seat amendment 3 (6697494793); os-dev-report 6698478968; CI check-runs on the head; hotcrm at 6961ab1.

① Derived judgments

  • Readers on the head, whole repo minus CHANGELOG.md and .changeset: git grep -lw for ActionExecutor, BatchOperationConfig, BatchOperationSummary hits only ui/packages/types/src/index.ts and ui-action.ts, both the retirement comments. Same on current origin/main (022b4e7): only the live declarations. hotcrm: 0 hits, and it imports nothing from @object-ui/types.
  • Homonyms resolved: actionExecutor in TransactionManager.ts:146 is a local parameter with its own inline signature; action-executor.ts in docs/adr/0019 is plugin-approvals history; the actionExecutor string in ui/scripts/check-doc-example-types.mjs:599 is a doc-fixture name; batch 8's BatchOperation/BatchResult and DataSource's BatchTransactionOperation are different names.
  • No kept export references a deleted name: TransactionManager.ts imports DataSource, TransactionConfig, TransactionResult, ActionResult, UIActionSchema, all kept; the kept Transaction block reads UIActionSchema and ActionResult only. No zod twin, not an AnySchema arm, no export * in the entry. No d.ts break.
  • Subpaths: ui-action.ts is reached only through ..
  • README/docs/skills/tests: none name the three; no pending changeset names them. The TO target ActionRunnerHandler exists (ActionRunner.ts:573).

② Semver level

'@object-ui/types': patch with !, **BREAKING**, Clause-②: no (narrowing), Metadata-protocol: none: the repo convention for a non-protocol breaking change in the fixed group, byte-for-byte the shape of batches 8-10. ADR-0087: category runtime-export-retired, three package#Export operands. Predicate 1 holds (exported at the merge base, gone at head). Predicate 2 holds: declared in ui-action.ts, not a *.zod.ts; a function alias and two interfaces, so ZOD_PROJECTION_RE does not match. Predicate 3 holds: three - FROM … TO … segments, one code span each, mapping 1:1 to the operands. CI "Lint & Repo Gates" is green on the head.

③ Boundary flags

None. No governed surface, no packages/spec, no *.zod.ts, no CHANGELOG or dist edit. Part of #25921, consistent with batches 8-10. The branch's alias edit and revert leave the seven Spec* aliases untouched, recorded on the card per amendment 3; no force-push. CI: 55 runs, every executed run success, the rest path-filtered skipped.

④ Design judgment

Dead surface only. ActionExecutor duplicated, more weakly, what @object-ui/core's ActionRunner registers (ActionRunnerHandler). The Batch Operations pair was a "Spec v2.0.1 Enhancement" placeholder that nothing produced or consumed. The kept Transaction block is correctly scoped (core's TransactionManager reads it). Types only, so built JS is unchanged; the changeset gives each name a FROM/TO.

Implemented-by: claude/project-thread-ln1pyf
Reviewed-by: session_01L9qibxW6qraU2Z3mwupUGp

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · os-tesla · session_01L9qibxW6qraU2Z3mwupUGp

维护者速读

  • 改了什么:从 @object-ui/types 的 ui-action.ts 删掉 3 个没人读的类型:ActionExecutor,以及「Batch Operations」一组的 BatchOperationConfig、BatchOperationSummary。旁边的事务(Transaction)一组保留,core 的 TransactionManager 在用。
  • 为什么改:retire the zero-consumer surface: nine dead modules (2,211 LOC), plugin-ai, runner's publish flag, test-only reset helpers on public barrels, the providers trio, 122 dead i18n keys, root orphans #25921 清理零引用的公共面,这是第十一批。工作区和 hotcrm 都没有读者。ActionExecutor 是 core ActionRunnerHandler 的弱化重复;批量操作那两个是从未被生产或消费的占位类型。
  • 风险与回滚:纯类型,编译出的 JS 不变;只影响直接 import 这些名字的外部宿主。changeset 标了 BREAKING 并给出 FROM → TO(改用 @object-ui/core 的 ActionRunnerHandler,或自行在本地声明)。回滚即撤本 PR。
  • 先看:ui/packages/types/src/ui-action.ts 删掉的那一段和留下的事务一组。
  • 两分钟验证:git grep -w ActionExecutor origin/main -- ui packages 合并后只剩退役注释。
  • 需要你做的:无,席位落地。

席位核对 — ACCEPT · head 697756b

  • 形态:3 个文件,+28/−52(净 diff;分支里先有一次别名改动及其 revert,相互抵消)。check-governed-merges --pr 31056:NOT governed,80 行 ≤ 3000。Part of #25921,目标 main。与认领 6696974190 及修订 6697003965(分支)、6697084388、6697494793(第三次修订:批次改为 ui-action 三个名字,方案 A)一致。本 PR 由本席派出的卡线程实现,席位不写码。
  • 契约:Clause-②: no (narrowing),Metadata-protocol: none,! patch + BREAKING,ADR-0087 runtime-export-retired 3 个、FROM 段 1:1,与第八至十批同形。CONTRACT_REVIEW_TIER(Fable)复核 6698623885 在本 head 上 PASS,无必改项。
  • 席位自己核对:读复核记录逐条对 diff:3 个名字在全仓与 hotcrm 无读者,同名项(core 里的 actionExecutor 参数等)各有自己的声明;留下的事务一组和 TransactionManager 不依赖它们;无子路径、无 zod 镜像、无测试。
  • 前提实测:dev 报告 6698478968(status done)。types vitest 387 文件 / 10,460 条通过,构建产物 d.ts 反向探测 3/3 拒绝;派生门禁 30/30 exit 0;全量 dogfood 430 文件 / 3,572 条通过。
  • 门禁 check-runs:本 head 每个检查最新一次 44 success、11 skipped,0 红;mergeable_state clean。
  • 落地条款:维护者常设令 「你应该是使用 pm-dispatch 技能自主审核和落地 pr」(2026-11-06T14:09Z)。中继 pr_ready + automerge_enable。Part of:合并后 retire the zero-consumer surface: nine dead modules (2,211 LOC), plugin-ai, runner's publish flag, test-only reset helpers on public barrels, the providers trio, 122 dead i18n keys, root orphans #25921 退回 pm:queue、清 assignee、摘 pm:dispatched;七个 Spec* 别名留在卡上,等 predicate 2 对子路径别名的裁定。

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 6, 2026 23:35
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 6, 2026
Merged via the queue into main with commit b5fd350 Nov 6, 2026
56 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-ln1pyf branch November 6, 2026 23:53
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/s tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant