From bdbdebf818ec63baf3c7d998a75faef276767fb8 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 7 Sep 2026 22:32:33 +0800 Subject: [PATCH 1/2] feat(types)!: drop the `Cloud` namespace re-export from the root entry (objectui#8225) `@object-ui/types` re-exported the whole `@objectstack/spec/cloud` subpath as the `Cloud` type namespace. The objectstack#16325 ruling (director batch #62, option B) takes the cloud control-plane contracts out of `@objectstack/spec`, and the spec's `./cloud` subpath is deleted upstream once cloud and objectui stop importing it. This is step 2 of 3: the single import in this repository. - `packages/types/src/index.ts`: the `export type * as Cloud` line is removed and the gap in the 15-line namespace family is marked in place so it reads as deliberate (14 re-exports remain) - changeset (`@object-ui/types` minor, breaking spelled out): the `Cloud` namespace is gone, no alias and no deprecation window - measured at `289d14687`: 0 `Cloud.` member accesses and 0 named `Cloud` imports from `@object-ui/types` across 4106 tracked ts/tsx files under `packages/**` and `apps/**` (PCRE census; the same regex fires on the consumed siblings `UI.` and `Data.`), 0 star re-exports of `@object-ui/types` in other packages, and 0 imports of the spec's cloud subpath outside that line --- .../8225-drop-cloud-namespace-reexport.md | 27 +++++++++++++++++++ packages/types/src/index.ts | 4 ++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .changeset/8225-drop-cloud-namespace-reexport.md diff --git a/.changeset/8225-drop-cloud-namespace-reexport.md b/.changeset/8225-drop-cloud-namespace-reexport.md new file mode 100644 index 0000000000..37a0483ccf --- /dev/null +++ b/.changeset/8225-drop-cloud-namespace-reexport.md @@ -0,0 +1,27 @@ +--- +'@object-ui/types': minor +--- + +**Breaking for `@object-ui/types` consumers:** the `Cloud` type namespace is +REMOVED from the package's root entry. `export type * as Cloud from +'@objectstack/spec/cloud'` is gone, so `import type { Cloud } from +'@object-ui/types'` and every `Cloud.X` member access now fail to compile +(TS2305 / TS2694). No alias and no deprecation window are left — the maintainer's +standing posture is immediate removal (objectui#8225; step 2 of 3 of the +objectstack#16325 ruling, option B: the cloud control-plane contracts leave +`@objectstack/spec`, and the spec's `./cloud` subpath is deleted upstream once +cloud and objectui stop importing it). + +The rest of the namespace family — `Data`, `UI`, `System`, `AI`, `API`, +`Automation`, `Shared`, `QA`, `Kernel`, `Contracts`, `Integration`, `Studio`, +`Identity`, `Security` (14 re-exports) — is unchanged; the gap in that block is +deliberate and is marked in place. + +Measured in this repository at `289d14687`: zero consumers of the `Cloud` +namespace across `packages/**` and `apps/**` (a `Cloud.` member-access census +plus a named-import census, both 0 against a control of 15 namespace re-export +lines in the same file), and zero imports of the spec's cloud subpath outside +that one line — the three cloud-shaped types objectui does use +(`PackageTranslation`, `resolvePackageL10n`'s result, `PackageManifest`) were +already declared inline in `app-shell` rather than imported. No runtime +behaviour changes; the emitted JavaScript is identical. diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index b92fa6959f..06d971e8b1 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1117,7 +1117,9 @@ export type * as UI from './spec-ui-namespace.js'; export type * as System from '@objectstack/spec/system'; export type * as AI from '@objectstack/spec/ai'; export type * as API from '@objectstack/spec/api'; -export type * as Cloud from '@objectstack/spec/cloud'; +// `Cloud` is deliberately absent from this family since objectui#8225: the +// cloud control-plane contracts leave the spec's public surface (objectstack#16325, +// option B), so nothing here re-exports that subpath and no consumer reads it. export type * as Automation from '@objectstack/spec/automation'; export type * as Shared from '@objectstack/spec/shared'; export type * as QA from '@objectstack/spec/qa'; From 21b1bf51fdd3fc28015a4cc630d6953e2293b8a5 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Tue, 8 Sep 2026 00:31:15 +0800 Subject: [PATCH 2/2] test(scripts): re-pin the spec-specifier floor at 16 after the `/cloud` literal left the tree (objectui#8225) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `scripts/__tests__/vite-objectstack-spec-dist.test.ts` guards `collectSpecSpecifiers()` — the distinct set of `@objectstack/spec[/subpath]` literals under packages/apps/examples — with an anti-vacuity floor of 17. Dropping the `Cloud` namespace re-export removed the repository's only `'@objectstack/spec/cloud'` literal in that scanned tree, so the distinct count is 16 and the floor red on CI shard 1/4: `expected 16 to be greater than or equal to 17`. - floor 17 -> 16; the comment now names objectui#8225, the removed `/cloud` subpath and the objectstack#16325 chain, so a shrunken floor reads as deliberate rather than as a silently emptier scan - changeset: the census control clause cited the wrong-shape control (15 namespace re-export lines, which never exercise the pattern under test); it now cites the firing control that the PR body and report carry (the same PCRE pattern hits the consumed siblings `UI.` and `Data.`) --- .changeset/8225-drop-cloud-namespace-reexport.md | 5 +++-- scripts/__tests__/vite-objectstack-spec-dist.test.ts | 11 ++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.changeset/8225-drop-cloud-namespace-reexport.md b/.changeset/8225-drop-cloud-namespace-reexport.md index 37a0483ccf..b20bfa3e1e 100644 --- a/.changeset/8225-drop-cloud-namespace-reexport.md +++ b/.changeset/8225-drop-cloud-namespace-reexport.md @@ -19,8 +19,9 @@ deliberate and is marked in place. Measured in this repository at `289d14687`: zero consumers of the `Cloud` namespace across `packages/**` and `apps/**` (a `Cloud.` member-access census -plus a named-import census, both 0 against a control of 15 namespace re-export -lines in the same file), and zero imports of the spec's cloud subpath outside +plus a named-import census over 4106 tracked ts/tsx files, both 0, with a +firing control: the same PCRE pattern hits the consumed sibling namespaces +`UI.` and `Data.`), and zero imports of the spec's cloud subpath outside that one line — the three cloud-shaped types objectui does use (`PackageTranslation`, `resolvePackageL10n`'s result, `PackageManifest`) were already declared inline in `app-shell` rather than imported. No runtime diff --git a/scripts/__tests__/vite-objectstack-spec-dist.test.ts b/scripts/__tests__/vite-objectstack-spec-dist.test.ts index ac1da3c387..8de6f6f9c4 100644 --- a/scripts/__tests__/vite-objectstack-spec-dist.test.ts +++ b/scripts/__tests__/vite-objectstack-spec-dist.test.ts @@ -210,9 +210,14 @@ describe('objectui#4854: OBJECTSTACK_SPEC_DIST is subpath-aware', () => { const injection = inject(installedSpecDir)!; const specifiers = collectSpecSpecifiers(); - // Anti-vacuity: the sweep found the measured surface (17 distinct - // specifiers, `/ui` and `/data` the heaviest), not an empty scan. - expect(specifiers.size).toBeGreaterThanOrEqual(17); + // Anti-vacuity: the sweep found the measured surface, not an empty scan. + // 16 distinct specifiers since objectui#8225 removed the repository's only + // `@objectstack/spec/cloud` literal (the `Cloud` namespace re-export in + // `packages/types/src/index.ts`; step 2 of the objectstack#16325 chain that + // deletes the `/cloud` subpath upstream) — 17 before that, `/ui` and `/data` + // the heaviest. A floor, so a specifier gained does not move it; one lost + // does, and the commit that loses it re-pins it here and says why. + expect(specifiers.size).toBeGreaterThanOrEqual(16); expect([...specifiers]).toContain(`${SPEC_PACKAGE_NAME}/ui`); expect([...specifiers]).toContain(SPEC_PACKAGE_NAME);