Skip to content

chore(tooling): retire the objectstack tooling port — PM scripts run from objectstack with PM_SWEEP_REPO; hooks become plain copies (objectui#10208) - #10458

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-10208-retire-tooling-port
Sep 25, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/issue-10208-retire-tooling-port

Conversation

@os-support-ai

@os-support-ai os-support-ai commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #10208
Supersedes #9391 (closed): the H26 wording it corrected lives in objectstack's original, which this repo now runs.

⚠️ GOVERNED. The diff touches .claude/hooks/** (8 files). node scripts/check-governed-queue-guard.mjs --test over the 25 changed paths answers ⛔ GOVERNED — 8 of 25 path(s) are on a governed surface (exit 3). This PR stays draft until os-zhuang or hotlong approves it. No seat approves it, flips it ready or enqueues it.

Implemented by session_013RDBh5DqXd2xnLwvHLgLFr on claim 5825488668. Base ca5d671e4, head ed66f1055. Every list below was re-derived at that head. None was copied from the card.

What changes

  • The parity machinery is gone. scripts/upstream-port-pin.json, scripts/check-upstream-port-parity.mjs (with its --self-test and --resync), scripts/__tests__/upstream-port-parity-wiring.test.ts, the check:upstream-port-parity script and the lint.yml step are deleted. No replacement gate, ledger or re-sync command is added.
  • The ported PM scripts are gone. scripts/pm/check-half-states.mjs, scripts/pm/board-snapshot.mjs and scripts/__tests__/check-half-states.test.ts are deleted. half-state-patrol.yml and board-snapshot.yml now check out objectstack-ai/objectstack (sparse, scripts/pm) and run objectstack's scripts against this board.
  • The copies that stay are plain copies. These are the eight .claude/hooks/guard-* files, scripts/invoked-as.mjs and scripts/check-bash32-floor.mjs. Each gets one line 2 header, copied from objectstack@SHA. The hooks get no other edit.

Re-derived file table

file class treatment evidence
scripts/upstream-port-pin.json ledger deleted 13 entries at base. node scripts/check-upstream-port-parity.mjs at base: 13 ported file(s) match … 6 distinct: bf10debd5, 70e77ec3b, 61362932b, c2520416c, 7c2c5aedd, eec56c37d, exit 0
scripts/check-upstream-port-parity.mjs (+ --self-test, --resync) gate deleted Two invokers: the package.json check:upstream-port-parity entry and the lint.yml step "Verify the ported objectstack tooling still matches its pin". Both are removed.
scripts/__tests__/upstream-port-parity-wiring.test.ts the gate's wiring test deleted its only subjects are the gate and the pin
scripts/pm/check-half-states.mjs PM script deleted. half-state-patrol.yml runs objectstack's, treatment (a) importers and readers are listed below
scripts/pm/board-snapshot.mjs PM script deleted. board-snapshot.yml runs objectstack's, treatment (a) byte-identical to objectstack origin/main (blob cb625f096511 on both sides). It has no importer.
scripts/__tests__/check-half-states.test.ts test of the port only deleted named by the card. Its only subject is the deleted sweeper.
scripts/invoked-as.mjs helper kept, plain copy + header line still imported: 92 files match an import of it, including packages/fields, plugin-grid and plugin-kanban scripts/build-css.mjs
scripts/check-bash32-floor.mjs gate kept, plain copy + header line. The two port paragraphs are rewritten. node scripts/check-bash32-floor.mjs: 13 tracked shell file(s) under scripts/**, .claude/hooks/**, e2e/**
8 × .claude/hooks/guard-*.sh (4 hooks + 4 .selftest.sh) harness hooks kept, ONE header line each sha table below
.github/workflows/board-snapshot.yml workflow (was a pin entry) treatment (a) see "Workflow treatment"
.github/workflows/half-state-patrol.yml workflow (not in the pin; it ran the sweeper) treatment (a) see "Workflow treatment"

Header shas: no copy matches a single objectstack commit exactly

For each kept copy I compared this repo's blob with objectstack's blob at every commit on objectstack origin/main that touched the path. None matches exactly. Each copy is the upstream blob at its last sync, plus the divergences the retired pin declared. At base the parity gate verified that for all 13 entries.

So the header names the last-sync sha: the retired pin's ref for that file. I re-verified the pin's upstreamSha256 against objectstack's blob at that ref, and 13 of 13 match.

kept copy header sha (last sync) upstream commits touching the path exact matches divergences declared at base
guard-main-checkout.sh c2520416cff0 7 0 2
guard-main-checkout.selftest.sh 70e77ec3b566 4 0 2
guard-main-checkout-bash.sh 7c2c5aedd94d 8 0 21
guard-main-checkout-bash.selftest.sh 7c2c5aedd94d 6 0 10
guard-shared-stash.sh 7c2c5aedd94d 5 0 10
guard-shared-stash.selftest.sh 7c2c5aedd94d 4 0 17
guard-tree-enum.sh 7c2c5aedd94d 2 0 3
guard-tree-enum.selftest.sh 7c2c5aedd94d 2 0 6
scripts/invoked-as.mjs bf10debd587f 4 0 9
scripts/check-bash32-floor.mjs 61362932b5ad 9 0 22

The line carries the full 40-hex sha. It sits on line 2, directly under the shebang.

Workflow treatment: (a) for both, measured on objectstack origin/main 5b9402d89b

  • ⚠️ Neither objectstack script takes --repo. Both refuse it by name.
    • node check-half-states.mjs --repo=objectstack-ai/objectui exits 2 with unknown option --repo.
    • board-snapshot's parseOptions(['--repo=…']) returns unknown option --repo=….
    • Both take the board from PM_SWEEP_REPO (resolveSweepRepo: PM_SWEEP_REPO, then GITHUB_REPOSITORY, then the default).
    • So every invocation here uses PM_SWEEP_REPO=objectstack-ai/objectui, not --repo. The card's board-snapshot row and this PR's title say --repo; the mechanism is the variable.
  • The sweeper also names the checkout it reads. --help lists exactly three knobs: PM_SWEEP_REPO, PM_SWEEP_CHECKOUT and PM_SWEEP_CLOSED_FLOOR. The patrol step sets PM_SWEEP_CHECKOUT: ${{ github.workspace }}. That way H17's and H57's local git reads use this checkout and not the objectstack one. I measured it with objectstack's own checkoutPrerequisite:
    • with this repo's origin, it returns null (the checkout serves the board);
    • control, with objectstack's origin, it returns checkout-does-not-serve.
  • The workflows' own arguments are accepted.
    • refuseUnknownArgs(['--format=markdown','--provenance=…']) returns null.
    • board-snapshot's parseOptions accepts both SNAPSHOT_ARGS spellings.
  • The sparse layout runs. I emulated cone-mode sparse-checkout: scripts/pm (root files, the files directly under scripts/, and scripts/pm/**) from objectstack origin/main:
    • the static import graph of both scripts resolves inside it;
    • board-snapshot.mjs --self-test passes 156 cases, also with GITHUB_REPOSITORY=objectstack-ai/objectui as on the runner.
  • Checkout shape. actions/checkout@v7 with repository: objectstack-ai/objectstack, path: objectstack-tooling, sparse-checkout: scripts/pm and persist-credentials: false. objectstack is public, so the default token reads it. changeset-release.yml already uses sparse-checkout on actions/checkout@v7.
  • Not pinned to a sha. Each run executes objectstack main, the same sweeper a seat runs from its own checkout. The accepted cost is written into both workflow headers: no reviewed moment here. This is a choice, and it is offered as an open question below.
  • Both pull_request filters now list only the workflow file. No script from this repo is loaded any more.
  • NOT MEASURED locally: a live sweep and a live snapshot. Both read the whole board. This PR's own pull_request legs run both on a real runner, because both path filters match this diff.

Importer and invoker grep results (at base, git grep -n -F NAME, whole tree)

  • check-half-states
    • Imported by scripts/pm/board-snapshot.mjs and scripts/__tests__/check-half-states.test.ts. Both are deleted.
    • Read at runtime by the check-governed-queue-guard.mjs self-test and by ci-cd-pipeline-doc.test.ts. Both are re-pointed, as described below.
    • Invoked by half-state-patrol.yml, rewired under (a).
    • Listed in the paths: filters of half-state-patrol.yml and board-snapshot.yml. Both entries are removed.
    • Declared as a doc phantom governed-surface-guard.yml: scripts/pm/check-half-states.mjs in the doc test. Removed with its prose.
    • Prose that is updated: dependabot-merge-gate.mjs reason strings, ci-cd-pipeline.md, and comments in check-bash32-floor.mjs, check-comment-mask-corpus.mjs and check-governed-queue-guard.mjs.
    • Kept as is:
      • invoked-as.mjs (a historical comment);
      • one past-tense sentence in check-governed-queue-guard.mjs;
      • cross-file-line-citation-census.test.ts, which uses the path as fixture input to a pure function and reads no file.
  • board-snapshot
    • Invoked by board-snapshot.yml, rewired under (a).
    • Listed in its paths: filter. Removed.
    • Prose that is updated: the dependabot-merge-gate.mjs reason string and ci-cd-pipeline.md.
    • It has no importer.
  • invoked-as: 92 importing files, so it is kept. Workflow paths: entries for it in ci.yml, lockfile-dedupe.yml and performance-budget.yml are untouched.
  • check-bash32-floor: kept, together with its callers:
    • the lint.yml step;
    • the package.json check:bash32-floor entry;
    • bash32-floor-wiring.test.ts;
    • child-verdict.test.ts;
    • comments in ci-setup-pnpm.sh and ensure-chromium-ready.sh.
  • check-upstream-port-parity
    • package.json and lint.yml: removed. The ci-cd-pipeline.md bullet: removed.
    • child-verdict.test.ts keeps a sample output line that it feeds to a generic count parser. It runs nothing.
    • A ci-cd-pipeline-doc.test.ts comment records a measurement "on 4b4d35a7d" and is history.
    • The pending .changeset/*.md entries are covered in the next section.

What the deletion forced elsewhere

  • scripts/check-governed-queue-guard.mjs. Its self-test read scripts/pm/check-half-states.mjs to pin the CONTRACT_REVIEW_LABEL mirror.
    • I ran the base guard with that file removed: FAIL check-governed-queue-guard self-test: 2 of 191 case(s) failed. The two were H31s-file-is-readable… and the-carrier-label-MIRRORS-H31s-OWNED-constant….
    • Two pins are removed because their subject file is gone: the mirror equality and "objectui's H31 has no top-level await".
    • The "imports nothing out of scripts/pm/" pin is kept.
    • The CLEAR boundary text no longer names the deleted file, and its assertion now checks that it names no absent file.
    • Self-test: 190 cases at base, 188 at head, exit 0.
  • scripts/__tests__/ci-cd-pipeline-doc.test.ts.
    • The window pin read the local sweeper to extract CLOSED_ISSUE_WINDOW_PAGES. objectstack's sweeper exports no such name any more; its closed window is CLOSED_ISSUE_WINDOW_DAYS behind CLOSED_ISSUE_WINDOW_PAGE_CEILING. The pin now requires the page to name CLOSED_ISSUE_WINDOW_DAYS, with no numeral window in pages or days, and says in the test that it cannot re-read an out-of-tree export.
    • Two phantom declarations whose prose is gone are dropped.
    • One line-address citation into the patrol header, made stale by this change, is replaced with a description.
  • content/docs/guide/ci-cd-pipeline.md. Changed parts:
    • the inventory rows;
    • the removed parity bullet;
    • the Governed Surface Guard H31 sentence;
    • the Changeset Guard invoked-as sentence;
    • the Half-State Patrol and Board Snapshot sections.
  • The seats' patrol invocation is documented in the Half-State Patrol section as one command run from an objectstack checkout: cd ../objectstack && PM_SWEEP_REPO=objectstack-ai/objectui PM_SWEEP_CHECKOUT=../objectui node scripts/pm/check-half-states.mjs. objectui's AGENTS.md never described running the patrol and is not touched.

Acceptance readings (head ed66f1055), each with a control

  • git grep -l upstream-port-pin outside CHANGELOG, excluding .changeset/: 0.
    • Control, same form at base ca5d671e4: 9.
    • Control, same form with the term copied from objectstack@: 11.
    • Hits in **/CHANGELOG.md: 0.
    • ⚠️ Without the .changeset/ exclusion the reading is 3, and all three are pending .changeset/*.md entries (8385, 8696, 9206). Each is an empty-frontmatter release declaration of a PR that already merged, and the next changeset version consumes it. check-changeset-overwrite exists to report exactly that edit, so I treat them as CHANGELOG-class and leave them untouched.
  • The parity gate is gone.
    • package.json scripts matching port-parity|upstream-port: 0. The key count goes from 122 to 121.
    • Workflows matching upstream-port|port-parity: 0. Control, check-bash32-floor.mjs in workflows: 1.
  • Every kept copy has the header line. git grep -n 'copied from objectstack@' hits line 2 of all 10 kept copies. It also hits two prose lines that point at the header.
  • No new gate, ledger or --resync replacement. The diff adds no file and deletes 6.
  • The dropped switches have no live consumer. PM_SWEEP_CLOSED_WINDOW_PAGES|closedWindowDisabled|resolveClosedWindowPages at head matches 4 lines, all prose: the history line in the patrol header, plus doc-test comments and one failure-message string about the objectui#8043 history.
    • No workflow sets the variable as an env key. Control: PM_SWEEP_CLOSED_FLOOR is set in half-state-patrol.yml.
    • objectstack origin/main has 0 hits for either switch. Control: PM_SWEEP_CLOSED_FLOOR, 17 hits in its sweeper.
    • Nothing is re-opened.

Checks run (all at head ed66f1055)

  • pnpm exec vitest run scripts/ --maxWorkers=4, run through the shared verify lock: Test Files 177 passed | 2 skipped (179), Tests 5263 passed | 2 skipped (5265), VERDICT command-exit 0. The two skipped files are the suite's own skip-marked network and timezone tests.
  • pnpm type-check:scripts: exit 0.
  • eslint (--no-inline-config --format json) on the 6 touched scripts and tests: 6 files, 0 errors, 0 warnings, 0 ignored.
    • Population, read from eslint's own config: the .ts test resolves 118 rules and the five .mjs files resolve 0 rules.
    • No parserOptions.project or projectService is set, so linting is not type-aware and the diff cannot move an untouched file's verdict.
    • The full pnpm lint is left to CI.
  • Hook self-tests: guard-main-checkout-bash 130, guard-main-checkout 120, guard-shared-stash 50 and guard-tree-enum 38 passed, 0 failed. The base counts are identical.
  • Gates with their own verdict lines, all exit 0:
    • check-lint-coverage;
    • check-entry-guard (--self-test passes 63 cases; the scan covers 105 files);
    • check-bash32-floor (--self-test passes 160 cases; the scan covers 13 files);
    • invoked-as --self-test (12 cases);
    • check-governed-queue-guard --self-test (188 cases);
    • check-pre-install-import-graph;
    • check-new-cross-file-line-citations (0 new);
    • check-control-bytes;
    • check-action-ref-convention;
    • check-changeset-presence, check-changeset-overwrite and check-changeset-no-major;
    • check-test-path-roots;
    • check-vi-mock-override-shape;
    • check-cross-repo-closer-outcome, both legs;
    • check-required-check-set --self-test;
    • check-shell-escape-residue;
    • check-doc-links;
    • check-comment-mask-corpus (1 disagreeing file, within the residue objectui#7882 is holding open).
  • Workflows: actionlint is not installed here. Instead:
    • a strict YAML parse (yaml, uniqueKeys) of half-state-patrol.yml, board-snapshot.yml and lint.yml succeeds;
    • every scripts/… path they reference exists; the objectstack-tooling/ paths were checked against the emulated objectstack tree.
  • Changeset: none is required. check-changeset-presence reports: 25 file(s) changed, 0 of them published source of a package the release covers, 0 of them a manifest whose published contract moved. Every touched path is root tooling, workflows, docs or .claude/, and none of it ships in a released package.

Open question for the seat

Should the objectstack checkout be pinned?

  • A. Run objectstack main, as written. This follows the ruling's "no new ledger". The cost is no reviewed moment in this repo.
  • B. Pin a sha with ref:. Upstream's own composite-action header recommends that for siblings. The cost is a hand-bumped sha, which is a one-line ledger.

My recommendation is A: the ruling retired exactly that bookkeeping, both workflows only report or back up, and a sweep that cannot run still goes red.

Acceptance notes (out of scope; reported, not filed)

  • objectstack's sweeper self-test depends on the install. check-half-states.mjs --self-test fails 3 of 4912 cases with PM_SWEEP_REPO=objectstack-ai/objectui: two H38 seat-foreignness rows and one seat-marker-window row. With the default repo, all 4912 pass. This is the class the retired port carried as three divergences ("upstream's to remove"). The patrol does not run the sweeper's self-test, so CI is unaffected.
  • objectstack retired the needs:contract-review label and its H31/H35 rows (objectstack 628e55dfa6, #19737). objectui's check-governed-queue-guard.mjs still has its contract-review merge_group leg keyed on that label (objectui#9018). Untouched here.
  • Two stale comments. performance-budget.yml (two identical comment blocks) and render-budget-comment.test.ts cite "half-state-patrol.yml lists its script AND scripts/invoked-as.mjs" as the measured convention. After this PR the patrol lists only itself. These are unpublished comments and are left alone.
  • Ports outside the card's 13 get no header line. Examples: check-comment-mask-corpus.mjs, check-entry-guard.mjs and the hook-selftests.yml collector.

维护者速读(草稿)

改了什么 —— objectui 不再自己维护从 objectstack 移植来的工具副本:

  • 删掉移植钉 upstream-port-pin.json 和核对它的一致性门禁。
  • 删掉两份 PM 脚本副本(半状态巡逻、看板快照)。两个定时任务改成每次运行时从 objectstack 仓库取原版脚本来跑。
  • 8 个钩子文件和 2 个本仓仍在用的脚本保留为普通副本,每个只加一行 copied from objectstack@SHA。

为什么改 —— 维护者在 objectui#10205 上的裁决:「同意,10205 根治(一张 devx 卡,你一字)——退役端口本身」。给副本记账本身就是在浪费时间。

风险与代价(含回滚) ——

  • ① objectstack 上对这两个脚本的改动,会在本仓下一次运行时直接生效,本仓没有审阅环节。这两个任务只报告、只备份,不拦任何合并。
  • ② 钩子和上游之间的漂移,只能靠人工发现,这是维护者已接受的代价。
  • ③ 本仓治理守卫的自测不能再对照本地副本核对一个标签常量。
  • 回滚:revert 本 PR 即可恢复原状。

席位意见 ——

本席(domain:spec#1,session_013RDBh5DqXd2xnLwvHLgLFr,按维护者直派「甲」认领本卡)已对照 GitHub 复核本轮(head ed66f10557):

  • 改动:25 个文件,删 6 个。两个 workflow 改为每次运行时检出 objectstack 原版,用 PM_SWEEP_REPO 指定本仓。10 份保留副本各加一行来源头。
  • CI:与新接线直接相关的检查已经跑绿,包括看板快照(在真实 runner 上跑了原版自测)、钩子自测、受管面守卫。其余 CI 还在跑。
  • 三个待定问题,本席的取舍:
    • objectstack 检出不钉 sha。这与「不再手工记账」的裁决一致,而且两个任务都只报告、只备份。
    • 标题里的 --repo 已改为 PM_SWEEP_REPO。两个原版脚本都按名字拒收 --repo。
    • 3 条待消费的 .changeset 记录保持原样。
  • 结论:CI 全绿后,本席建议批准。

你要做的 ——

  • 审阅后,由 os-zhuang 或 hotlong 在本 PR 留一条 APPROVED review,之后由认领席翻 ready 并入队。
  • 另有一个待定问题:objectstack 的检出要不要钉到固定 sha(见上方 open question,本席推荐不钉)。

Generated by Claude Code

Retire the port pin and its parity gate, and the ported PM scripts, on the
maintainer's ruling on objectui#10205.

- Delete scripts/upstream-port-pin.json, scripts/check-upstream-port-parity.mjs
  (with its --self-test and --resync), its wiring test, its package.json
  entry and its lint.yml step.
- Delete scripts/pm/check-half-states.mjs, scripts/pm/board-snapshot.mjs and
  scripts/__tests__/check-half-states.test.ts. half-state-patrol.yml and
  board-snapshot.yml now check out objectstack-ai/objectstack (sparse,
  scripts/pm) and run ITS scripts with PM_SWEEP_REPO set to this board; the
  patrol also names this checkout with PM_SWEEP_CHECKOUT. Neither objectstack
  script takes a --repo flag; both refuse one by name.
- Keep scripts/invoked-as.mjs (imported across scripts/ and three package
  build-css scripts) and scripts/check-bash32-floor.mjs (13 tracked shell
  files under its roots) as plain copies, and the eight .claude/hooks guard
  files as plain copies, each with one "copied from objectstack@SHA" line at
  its last-sync commit.
- check-governed-queue-guard: the self-test can no longer pin its
  contract-review label mirror against a local sweeper source; that pin is
  removed and the property the mirror rests on (no import out of scripts/pm)
  stays pinned. The docs, the doc test and the dependabot gate's reason
  strings are updated to match.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr
…(objectui#10208)

Re-wrap the Half-State Patrol paragraph to the page width, say the archiver
refuses a --repo flag (measured: "unknown option --repo=…"), and replace a
line-address citation into half-state-patrol.yml's header that this change
had made stale with a description of what it points at.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr
@os-support-ai os-support-ai changed the title chore(tooling): retire the objectstack tooling port — PM scripts run from objectstack with --repo; hooks become plain copies (objectui#10208) chore(tooling): retire the objectstack tooling port — PM scripts run from objectstack with PM_SWEEP_REPO; hooks become plain copies (objectui#10208) Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3044.6 KB 3104.5 KB
Main entry chunk (gzip) 148.0 KB 350 KB
Entry file index-DSWFIObV.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.68KB 6.20KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
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) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.13KB 7.95KB
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.68KB 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) 543.20KB 129.69KB
core (index.js) 9.22KB 3.71KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.86KB 62.25KB
fields (index.js) 256.84KB 65.07KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
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.75KB
mobile (index.js) 1.99KB 0.87KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.39KB 3.10KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.01KB 3.93KB
plugin-calendar (index.js) 51.22KB 14.56KB
plugin-charts (index.js) 74.76KB 20.82KB
plugin-chatbot (index.js) 198.27KB 47.18KB
plugin-dashboard (index.js) 133.45KB 35.33KB
plugin-designer (index.js) 216.12KB 44.37KB
plugin-detail (index.js) 231.66KB 61.23KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 146.34KB 37.47KB
plugin-gantt (index.js) 168.25KB 41.46KB
plugin-grid (index.js) 215.43KB 58.90KB
plugin-kanban (index.js) 49.30KB 15.39KB
plugin-list (index.js) 114.37KB 28.24KB
plugin-map (index.js) 21.83KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.64KB 8.94KB
plugin-tree (index.js) 10.52KB 3.69KB
plugin-view (index.js) 87.90KB 21.97KB
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.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 114.58KB 37.60KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
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 (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
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

@os-zhuang
os-zhuang marked this pull request as ready for review September 25, 2026 04:38
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 25, 2026
Merged via the queue into main with commit b274b61 Sep 25, 2026
47 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10208-retire-tooling-port branch September 25, 2026 04:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

3 participants