From 3bf8003306d44e36477ab29adcc9d972898e335c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 23:15:17 +0000 Subject: [PATCH 1/3] fix(ui-cli): the release-lockstep test reads the Changesets config through changesetConfigPath() (objectstack#25711) 4a deleted ui/.changeset/config.json, since changesets reads the monorepo root's config. app-generator.test.ts "pins the release lockstep that lets the platform range be derived" still opened `/.changeset/config.json` directly and failed with ENOENT in Test UI 3/16. It now resolves the config the way every other reader does: the tree's own standalone, the monorepo root's when nested. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_0149BHSXfCdQywGaLdpRAtWe --- ui/packages/cli/src/__tests__/app-generator.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/packages/cli/src/__tests__/app-generator.test.ts b/ui/packages/cli/src/__tests__/app-generator.test.ts index 8dae097b3ea..3b2a8b1b637 100644 --- a/ui/packages/cli/src/__tests__/app-generator.test.ts +++ b/ui/packages/cli/src/__tests__/app-generator.test.ts @@ -80,6 +80,7 @@ import { type AppGeneratorContext, type RouteInfo } from '../utils/app-generator.js'; +import { changesetConfigPath } from '../../../../scripts/workspace-root.mjs'; const __dirname = dirname(fileURLToPath(import.meta.url)); /** packages/cli/src/__tests__ -> repo root */ @@ -741,8 +742,10 @@ describe('generated app manifests', () => { // current and guaranteed to exist on the registry. If that group were ever // split, deriving the range would silently start naming versions that were // never published — so the premise is asserted, not assumed. + // The tree's own config standalone, the monorepo root's when nested under + // objectstack's `ui/` (objectstack#25711): changesets reads one per repository. const changesetConfig = JSON.parse( - readFileSync(resolve(REPO_ROOT, '.changeset/config.json'), 'utf-8') + readFileSync(changesetConfigPath(REPO_ROOT), 'utf-8') ) as { fixed?: string[][] }; const cliVersion = readManifest(CLI_MANIFEST_PATH).version as string; const platformPackages = Object.entries(DEPENDENCY_ANCHORS) From 399fe2ae8bbcec464473af043780669131e0c14c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 23:31:19 +0000 Subject: [PATCH 2/3] fix(lint): the production witness pins the html tier by its tags, not the retired html component (objectstack#25711) 4a regenerated sdui.manifest.json from the in-tree ui/ (107 -> 106 components): objectui#13449 retired the raw `html` renderer, so the witness's `toContain('html')` failed in Test Core 5/8. The tier is now pinned by two of its intrinsic tags (`a`, `p`); the clean run over the three shipped pages, which never used `html`, still passes. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_0149BHSXfCdQywGaLdpRAtWe --- .../lint/src/validate-jsx-pages.production-witness.test.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/lint/src/validate-jsx-pages.production-witness.test.ts b/packages/lint/src/validate-jsx-pages.production-witness.test.ts index 0e62b6e20b0..958bc364014 100644 --- a/packages/lint/src/validate-jsx-pages.production-witness.test.ts +++ b/packages/lint/src/validate-jsx-pages.production-witness.test.ts @@ -58,7 +58,12 @@ describe('production witness: the checked-in manifest reaches validateTree', () // regeneration legitimately changes them, re-check the shipped pages in the // same PR. expect(keys).toContain('flex'); - expect(keys).toContain('html'); + // The html tier's intrinsic tags. The raw `html` component itself was + // retired by objectui#13449 and left the manifest when it was regenerated + // from the in-tree ui/ (107 -> 106, objectstack#25711); the shipped pages + // below never used it, which the clean-run witness re-checks. + expect(keys).toContain('a'); + expect(keys).toContain('p'); expect(keys).not.toContain('div'); }); From bd959d5757e818d40d6ccacd2e008b4f236d2e74 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 23:52:59 +0000 Subject: [PATCH 3/3] fix(ui-scripts): the cwd-subject register follows app-generator.test.ts's ambient read to its new line (objectstack#25711) The changesetConfigPath() import and comment moved the registered `existsSync(join(process.cwd(), 'pnpm-workspace.yaml'))` read from line 1326 to 1329, so check:test-path-roots saw it as unregistered and the entry as stale. Same entry, same reason, new line. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_0149BHSXfCdQywGaLdpRAtWe --- ui/scripts/check-test-path-roots.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/scripts/check-test-path-roots.mjs b/ui/scripts/check-test-path-roots.mjs index f1dda19f1a7..e52391f02ef 100644 --- a/ui/scripts/check-test-path-roots.mjs +++ b/ui/scripts/check-test-path-roots.mjs @@ -187,7 +187,7 @@ const FS_MODULES = new Set(['fs', 'node:fs', 'fs/promises', 'node:fs/promises', * what it excuses. */ export const SUBJECT_IS_THE_CWD = Object.freeze([ - 'packages/cli/src/__tests__/app-generator.test.ts:1326 -- `contextOfCurrentProcess()` mirrors the ambient cwd on BOTH sides of the assertion deliberately: the writer under test derives its context from `process.cwd()` and the expectation derives it the same way, so the pair is self-consistent under either cwd. Re-rooting one side desyncs the mirror and turns a passing test red. The real cost -- that WHICH generator branch those two cases pin is decided by the launch directory -- is filed as objectui#7807 and is closed in the same file by two further cases that name their branch instead of inheriting it.', + 'packages/cli/src/__tests__/app-generator.test.ts:1329 -- `contextOfCurrentProcess()` mirrors the ambient cwd on BOTH sides of the assertion deliberately: the writer under test derives its context from `process.cwd()` and the expectation derives it the same way, so the pair is self-consistent under either cwd. Re-rooting one side desyncs the mirror and turns a passing test red. The real cost -- that WHICH generator branch those two cases pin is decided by the launch directory -- is filed as objectui#7807 and is closed in the same file by two further cases that name their branch instead of inheriting it.', ]); /**