Skip to content

Commit 0063f22

Browse files
refactor!: retire nine zero-consumer modules, make runner private, take test-only reset helpers off the barrels (objectui#13453, part 1) (#13506)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9D4nNtkcxk6i4sCKHsvYsQgG)_ Part of #13453 Clause-②: no (nothing added a consumer or author can target) Metadata-protocol: none First of the two PRs the claim amendment (comment 6393918010) cuts on the governed line. This one is Tier S: no file under `.claude/**`, `skills/**`, `AGENTS.md` or `docs/adr/**`. #13453 remains open for PR 2 (the providers trio, the contributor-guide sentence and the two `skills/objectui/guides` files, Tier H) and for the 122 dead i18n keys. ## What this removes **1. Nine whole modules with no reader** (2,211 lines plus their own tests): - `@object-ui/core`: `builder/schema-builder.ts` (`form`/`button`/`input`/`card`/`grid`/`flex` and the six `*Builder` classes) and the whole `protocols/` directory (`DndProtocol`, `KeyboardProtocol`, `SharingProtocol`, and its now-empty `index.ts`). The barrel lines become short removal notes, the same disposition `NotificationProtocol` and `ResponsiveProtocol` got. - `@object-ui/react`: `useFocusTrap`, `useFocusManagement` (`useFocusReturn`, `useRovingFocus`), `usePageTransition`, `useSchemaPersistence` (+ `createLocalStorageAdapter`), with the two `useSchemaPersistence.*.test.tsx` files. The stale `check-doc-example-types.mjs` row for the deleted hook goes too. - `@object-ui/collaboration`: `LiveCursors` (+ `LiveCursorsProps`); the package README drops its section. `usePresence` still reports cursors. - Comments that named the deleted files (`types/src/index.ts`, `crud-retirement-5373.test.ts`, `useAnimation.ts`, `useETagCache.ts` and its test) now say "since-retired". **2. `@object-ui/runner` is private and out of the release group.** `private: true`; it leaves the `fixed` group for `ignore`, because `check-changeset-fixed.mjs` wants every workspace package classified. Two consequences handled here: - Two pending changesets, `13464-declare-side-effects.md` and `25685-one-react-line.md`, each listed `"@object-ui/runner": patch`. With runner ignored, changesets refuses them as mixed ("Found mixed changeset 13464-declare-side-effects … Mixed changesets that contain both ignored and not ignored packages are not allowed", read from `pnpm exec changeset status` on this tree before the edit). The runner line is deleted from both; nothing else in them changes. `check-changeset-overwrite` reports the modification (report-only); after it, `pnpm exec changeset status --since=origin/main` exits 0. - `check-published-tsconfig-tooling-exclude.mjs` reported `FAIL [stale-carve-out] @object-ui/runner`, so its runner carve-out entry is deleted and the shipped-list pin in its test shrinks to four. `check-changeset-presence.test.ts` pinned `packages/runner/index.html` as a guarded file; an unreleased package's entry is not guarded, so the pin moves it to the not-guarded list. - Docs: `content/docs/utilities/runner.mdx` and `packages/runner/README.md` no longer say it is on npm; the root README table marks it private. **3. Test-only reset helpers off the public barrels:** `resetColumnIdentityWarnings`, `resetRetiredSortSpellingReports`, `resetDashboardFilterWarnings`, `resetReferenceKeyWarnings` (core), `resetRuntimeConfigForTesting` (app-shell), `resetInflightGetsForTesting` (types), `__clearRecordEditableCache` (plugin-detail). The module keeps the export and the barrel stops re-exporting it; the 15 test files outside the owning package that imported one from a package root now import the module's `src` path relatively, the pattern `__resetVisibilityPredicateWarnings` and `useRecordEditable` already follow. Core's four `export *` lines for those modules become named lists, with a one-line note on each. ⛔ Not here, per the claim: `resetActionKeyWarnings` (its barrel path is `core/src/actions/index.ts`) and `clearSharedDiscoveryCache` (`data-objectstack`) wait for #13442, which holds those files. ## Census before deleting (lit controls) | Repository | Read at | Searched | Hits | Control | |---|---|---|---|---| | objectui | `76c560e` (branch base) | `git grep -w` for every exported name of the nine modules and the seven helpers; generic builder names (`form`, `card`, …) searched as named imports from `@object-ui/core` | only the module, its own tests, its barrel line and comments | `SchemaRenderer` lit | | objectstack | `d1e329e` | same name list | one prose mention of `LiveCursors` in `docs/qa/platform-checklist/FOLLOW-UPS.md`; no import | `@object-ui/` lit in 150 files, `SchemaRenderer` in 38 | | hotcrm | `700b567` | same name list | none | `@object-ui/` lit in 5 files, `SchemaRenderer` in 3 | | cloud, npm dependents | n/a | **NOT MEASURED**: not reachable from this session | n/a | n/a | ## Changesets One per package, all `minor` with the removal named (`13453-core-retire-dead-modules.md`, `13453-react-retire-dead-hooks.md`, `13453-collaboration-retire-live-cursors.md`, `13453-test-helpers-off-barrels.md`). Runner gets none: it is ignored now, and naming it would be a mixed changeset. ## Verification (local) The type-check and vitest readings below were taken on the branch while it still carried PR 2's providers commits too, so the tree they read is this PR plus the providers retirement. The gates line was re-run on this PR's own head. - **type-check** (`turbo run type-check --continue`, under the verify lock): core, react, collaboration, providers, types, app-shell, plugin-detail, plugin-grid, plugin-view, plugin-calendar, console, runner and the byo example. First run caught `http-inflight.test.ts` importing the helper from `../index.js`; fixed in `44c01fe`, after which `packages/types` type-check exits 0. - **vitest, whole packages** core, types, providers, collaboration, plugin-detail, react: Test Files 1028 passed, 1 skipped; Tests 19019 passed. - **vitest, files** (every touched test file outside those packages, plus the script tests that read runner or the release config): 21 files / 432 tests, one red, `check-changeset-presence.test.ts` (the runner pin above), fixed in `45580a0` and re-run green (53/53). Console project, the three touched files: 28/28. A wider sweep of 95 `scripts/__tests__` files that mention runner, providers or the release config: green apart from `check-doc-links.test.ts` and `check-skills-paths.test.ts`, which read paths PR 2 deletes; both scripts exit 0 on this PR's head. - **gates**, at `a5dc7bb`: `check-changeset-presence`, `check-changeset-no-major`, `check-changeset-fixed`, `check-changeset-claims`, `check-pending-changeset-literals`, `check-published-tsconfig-tooling-exclude`, `check-new-cross-file-line-citations`, `check-control-bytes`, `check-skills-paths`, `check-doc-links` all exit 0; earlier on this branch also `check:phantom-deps`, `check:unused-deps`, `check:lockfile-integrity`, `check:lockfile-dedupe`, `check:test-path-roots`, `check:unreferenced-sources`, `check:side-effects-array`, `check:sdui-registration-pins`, `check:self-import`, `check:vi-mock-specifiers`, `check:lint-rule-coverage`, `check:node-esm-load`. - **eslint** on the touched files with the repo config: 0 errors. With `--no-inline-config` there are 2 errors, both on untouched lines and both present at the base (`useETagCache.ts` preserve-caught-error, `types/src/index.ts` restricted `FormField` import). - **NOT MEASURED locally:** the whole `app-shell` package suite (its touched files ran), `check:readme-exports` and `check:doc-snippets` (need every package's `dist`); CI runs them. ## Follow-ups - **Stale published guides until PR 2 lands:** `skills/objectui/guides/project-setup.md` and `skills/objectui/guides/architecture.md` still describe `@object-ui/runner` as a standalone runtime; PR 2 fixes them (Tier H). - **Release-lane hazard to watch:** any open PR whose new changeset lists `"@object-ui/runner"` alongside other packages becomes a mixed changeset once this merges, and nothing on a PR runs `changeset status`. None of the pending changesets on `main` at `5399bbc` names it. - `origin/main` moved two commits (#13501, #13503) after the branch base; neither touches a file in this diff. --- _Generated by [Claude Code](https://claude.ai/code/session_011yfYeuX2ptMSCcYZiq61tS)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5399bbc commit 0063f22

56 files changed

Lines changed: 147 additions & 2987 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@object-ui/collaboration": minor
3+
---
4+
5+
Clause-②: no
6+
Metadata-protocol: none
7+
8+
**Breaking:** removed `LiveCursors` and `LiveCursorsProps`, which nothing rendered (objectui#13453). Declared `minor` per the version-alignment policy (a changeset never declares `major`). `usePresence` still reports each user's cursor, so a host can draw them itself.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
"@object-ui/core": minor
3+
---
4+
5+
Clause-②: no
6+
Metadata-protocol: none
7+
8+
**Breaking:** removed exports with no reader (objectui#13453). Declared `minor` per the version-alignment policy (a changeset never declares `major`).
9+
10+
- The fluent schema builders from `builder/schema-builder`: `form`, `button`, `input`, `card`, `grid`, `flex` and the `FormBuilder`, `ButtonBuilder`, `InputBuilder`, `CardBuilder`, `GridBuilder`, `FlexBuilder` classes. Write the schema object literally instead.
11+
- The three protocol bridges, `DndProtocol`, `KeyboardProtocol` and `SharingProtocol`: `resolveDndConfig`, `createDragItemProps`, `createDropZoneProps`, `resolveDragConstraints`, `resolveKeyboardConfig`, `parseShortcutKey`, `matchesShortcut`, `createFocusTrapConfig`, `resolveSharingConfig`, `resolveEmbedConfig`, `generateEmbedCode`, `validateSharingConfig` and their types (`DndConfig`, `DragItem`, `DropZone`, `KeyboardShortcut`, `FocusTrapConfig`, `KeyboardNavigationConfig` and the rest). The spec vocabulary they bridged was already deleted upstream; no replacement.
12+
- The test-only helpers `resetColumnIdentityWarnings`, `resetRetiredSortSpellingReports`, `resetDashboardFilterWarnings` and `resetReferenceKeyWarnings` are no longer on the package root. They reset module state for tests and had no other reader.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@object-ui/react": minor
3+
---
4+
5+
Clause-②: no
6+
Metadata-protocol: none
7+
8+
**Breaking:** removed four hooks with no reader (objectui#13453): `useFocusTrap`, `useFocusReturn` and `useRovingFocus` (from `useFocusManagement`), `usePageTransition`, and `useSchemaPersistence` with `createLocalStorageAdapter`, plus their option and result types. Declared `minor` per the version-alignment policy (a changeset never declares `major`). No replacement inside ObjectUI; a host that used one should keep its own copy.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
"@object-ui/app-shell": minor
3+
"@object-ui/types": minor
4+
"@object-ui/plugin-detail": minor
5+
---
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
**Breaking:** test-only reset helpers are no longer on the package roots (objectui#13453): `resetRuntimeConfigForTesting` (`@object-ui/app-shell`), `resetInflightGetsForTesting` (`@object-ui/types`) and `__clearRecordEditableCache` (`@object-ui/plugin-detail`). They reset module state between tests and had no other reader. Declared `minor` per the version-alignment policy (a changeset never declares `major`).

‎.changeset/13464-declare-side-effects.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
"@object-ui/plugin-view": patch
2828
"@object-ui/providers": patch
2929
"@object-ui/react": patch
30-
"@object-ui/runner": patch
3130
---
3231

3332
Clause-②: no

‎.changeset/25685-one-react-line.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
"@object-ui/plugin-tree": patch
2929
"@object-ui/providers": patch
3030
"@object-ui/react": patch
31-
"@object-ui/runner": patch
3231
---
3332

3433
Clause-②: no

‎.changeset/config.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
"@object-ui/data-objectstack",
1515
"@object-ui/cli",
1616
"@object-ui/create-plugin",
17-
"@object-ui/runner",
1817
"@object-ui/auth",
1918
"@object-ui/permissions",
2019
"@object-ui/mobile",
@@ -51,6 +50,7 @@
5150
"ignore": [
5251
"@object-ui/example-*",
5352
"@object-ui/site",
53+
"@object-ui/runner",
5454
"@object-ui/test-support"
5555
],
5656
"privatePackages": {

‎QUICK_REFERENCE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pnpm changeset publish # Publish to npm (CI only)
8181

8282
| Path | Purpose |
8383
| --- | --- |
84-
| `packages/*` | 38 published packages (`@object-ui/*`), plus the private `vscode-extension` and `test-support` (test-only, never released) |
84+
| `packages/*` | 37 published packages (`@object-ui/*`), plus the private `vscode-extension`, `test-support` (test-only, never released) and `runner` (workspace demo app, never released) |
8585
| `apps/console` | Full ObjectUI console app (Vite + React) |
8686
| `apps/site` | Public docs site at <https://www.objectui.org> (fumadocs) |
8787
| `examples/*` | Runnable examples and the schema catalog — see [`examples/README.md`](./examples/README.md) |

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ Grouped by dependency weight — atoms and fields stay light, heavy widgets live
424424
|---------|-------------|
425425
| **[@object-ui/cli](./packages/cli)** | Scaffold, develop, build, and validate schema-driven apps |
426426
| **[@object-ui/create-plugin](./packages/create-plugin)** | Scaffold a new Object UI plugin |
427-
| **[@object-ui/runner](./packages/runner)** | Universal application runner for testing schemas |
427+
| **[@object-ui/runner](./packages/runner)** | Universal application runner for testing schemas (private workspace app, not published) |
428428
| **[@object-ui/sdui-parser](./packages/sdui-parser)** | Constrained JSX source → schema tree compiler (parse, never execute) |
429429
| **[@object-ui/react-runtime](./packages/react-runtime)** | Trusted runtime execution for `kind: 'react'` pages |
430430
| **[vscode-extension](./packages/vscode-extension)** | IntelliSense and live preview for schema files |

‎apps/console/src/__tests__/faviconAfterNavigation.test.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ import { AppShell } from '@object-ui/layout';
4141
import {
4242
getFaviconUrl,
4343
initRuntimeConfig,
44-
resetRuntimeConfigForTesting,
4544
} from '@object-ui/app-shell';
46-
import { resetInflightGetsForTesting } from '@object-ui/types';
45+
import { resetRuntimeConfigForTesting } from '../../../../packages/app-shell/src/runtime-config';
46+
import { resetInflightGetsForTesting } from '../../../../packages/types/src/http-inflight';
4747
import { FaviconSync } from '../components/FaviconSync';
4848

4949
/** What an operator configures as `branding.faviconUrl` on the runtime. */

0 commit comments

Comments
 (0)