Skip to content

fix(studio): the landing page names the .custom customization route, not the environment overlay - #29537

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-uoyyoy
Nov 2, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-uoyyoy

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steedos · project thread

Fixes #29489

Clause-②: no
Metadata-protocol: none

The two lines are copied from the claim (comment 6583617139).

维护者速读

  • 改了什么:Studio 首页(App Builder)的页面说明和"已安装(只读)"区的提示语,英文与中文两份,不再叫用户"用环境覆盖定制"只读包,改为指向现有路径:打开条目,用「自定义」或「新建类似」,修改存进该包配对的 .custom 定制包,升级仍到达已安装的包。
  • 为什么改:ADR-0146 D11 之后,不带包的写入落到已打包条目会被 403 NOT_OVERRIDABLE 拒绝并点名 .custom 配对包;首页教的第一条路正是被拒的那条。
  • 风险与回滚:只改两个文案值(en、zh)和 BuilderLanding.tsx 里两段注释,不加不删键,没有行为改动。回滚即撤销本 PR。
  • 先看:ui/packages/i18n/src/namespaces/studio/en.ts 的 engine.studio.landing.description 与 engine.studio.landing.readonlyHint;重钉的 BuilderLanding.environmentOverlayCopy-12171.test.ts;新测试 BuilderLanding.customizeCopy-29489.test.tsx。
  • 两分钟验证:pnpm --dir ui exec vitest run packages/app-shell/src/views/studio-design/BuilderLanding.customizeCopy-29489.test.tsx packages/app-shell/src/views/studio-design/BuilderLanding.environmentOverlayCopy-12171.test.ts,预期 6 个用例全过(换回 main 的文案时其中 3 个转红)。
  • 需要你做的:无,席位落地。

What changes

  • engine.studio.landing.description (en, zh): the page description's last clause said read-only packages are customized "with an environment overlay". It now says their items are changed with Customize or New similar, which save into the package's .custom customization package.
  • engine.studio.landing.readonlyHint (en, zh): the read-only section's hint said "Customize one with an environment overlay, for the metadata types that accept one". It now says: open an item and choose Customize or New similar; the change is saved in the package's .custom customization package, and upgrades keep reaching the installed package. The comment above the en row names the routes that exist now.
  • BuilderLanding.tsx: two code comments that still described a read-only package as customized by environment overlay now name its .custom pair. Comments only; no code changes.
  • The words are the tables' own: the Customize and New similar action labels (engine.studio.customize.action, engine.studio.auto.newSimilar.action; zh 「自定义」, 「新建类似」), and zh 定制包 as in the landing's existing customization-package strings. No key is added or removed.
  • Where the keys live: only in the Studio namespace tables (ui/packages/i18n/src/namespaces/studio/en.ts and zh.ts). None of the ten locales/*.ts packs carries engine.studio.landing.*, so the locale-pack parity tests do not read them, and only en and zh change.

Tests

  • Re-pinned BuilderLanding.environmentOverlayCopy-12171.test.ts. Same population (every designer table readDesignerPairs reads that carries the keys) and same reader control. The org-axis pin still covers all three keys. The pin that required every value to name the environment overlay is split: the two landing keys must name no environment overlay / 环境覆盖, and must name the .custom package and the table's own Customize label; perm.readOnly.artifact.hint keeps its environment-overlay assertion, which is now the matcher's lit control (that hint names the overlay because it says the overlay is refused).
  • New BuilderLanding.customizeCopy-29489.test.tsx. Renders the real BuilderLanding with a read-only package in en and in zh (through I18nProvider, the zh studio catalogue preloaded at module scope). It reads the description and the hint off the page, checks they are the tables' rows, and checks each names .custom, Customize and New similar, with no overlay phrase.
  • Red on main: with both tables restored to the main blob (git restore --source=c88467d4, mutation counted on disk: old en phrase 1, old zh phrase 1, new en phrase 0), 3 cases go red: the 12171 landing pin and both 29489 locale cases. Restored with git checkout HEAD --, git diff HEAD empty, both blob hashes equal HEAD.

Acceptance notes

  • Does any metadata type still take a package-less environment overlay? Not as a route the landing can offer. Read on main c88467d: packagelessCloseSubject (packages/metadata-protocol/src/protocol-packageless-overlay-migration.ts) closes the package-less save, publish, delete and rollback onto an item one read-only code package ships, wherever os migrate packageless-overlays could move its row, with 403 NOT_OVERRIDABLE naming the pair (packagelessOverlayWriteRefusal). It stays open only for rows that ceremony leaves: an item more than one package ships, a base with no pair id, a stored row declaring a foreign override or shadowed by the pair, an email_template locale the base does not ship, or a base that records no version. A package-less row for a name no read-only package ships is environment metadata, not an overlay. The pin is the metadata-protocol suite "an item a CODE package ships: the package-less write is closed (ADR-0146 D11)" in protocol.packageless-save-address.test.ts. Not confirmed live on a running server.
  • Noted, not changed: view and dashboard (and report, translation, email_template) still declare allowEnvironmentOverlay: true in DEFAULT_METADATA_TYPE_REGISTRY (packages/spec/src/kernel/metadata-plugin.zod.ts). On the write, the D11 close wins: ADR-0146 D11 keeps the flag as the predicate the migration reads and the read path honours for an unmigrated row, not as a write door. The spec stays off this PR.
  • Noted, not changed: engine.studio.pkg.readonlyLink ("Read-only · Customize with an overlay", zh 「只读 · 用覆盖定制」) is no longer rendered anywhere; only StudioReadOnlyLink.overlay-27356.test.tsx reads it, as the label that must be absent. It is a dead row teaching the closed route, invisible to users, and outside this card's surface.
  • Docs and the turned-off sentence are N-31: docs and the turned-off sentence stop sending people to the Setup pages N-28 retired #29374's and are untouched here.

Verification

All on head f1c366f (base c88467d), in worktree objectstack-issue-29489.

Tests
  • pnpm --dir ui exec vitest run --maxWorkers=2 over the 2 touched test files: 2 files, 6 tests passed.
  • The same, over every app-shell and console test naming BuilderLanding, studio.landing, readDesignerPairs or zh-base-term (37 files, including zh-base-term.i18n-13131.test.ts and the StudioRoute.* console tests), plus packages/i18n/: 132 files passed, 1706 tests passed, 13 skipped.
  • pnpm --dir ui exec vitest run scripts/: 169 files passed, 2 skipped; 4921 tests passed.
  • pnpm exec turbo run type-check --filter=@object-ui/app-shell --filter=@object-ui/i18n: 66 of 66 tasks successful (app-shell runs tsc --noEmit and tsc -p tsconfig.test.json).
  • pnpm exec eslint over the five touched ui files: exit 0.
Gates
  • node scripts/pm/dispatch-gates.mjs --commands: 34 derived families. All 34 ran and exited 0, including check-sdui-manifest.mjs and its --self-test, check-changeset-no-major, check-adr-0087-registration, check-closing-keyword-parity, check-empty-changeset, check:published-files and check:cross-package-test-inputs.
  • dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN.
  • pnpm --dir ui check:new-line-citations: 0 new citations.
  • Dogfood battery: n/a, because there is no ! in the title and no (narrowing) arm.

Generated by Claude Code

…the environment overlay

The App Builder landing's description and read-only hint told users to
customize a read-only package with an environment overlay, a write that
ADR-0146 D11 now refuses. Both strings, en and zh, name Customize / New
similar into the package's .custom customization package instead. The
overlay-copy pin is re-pinned on the new route, and a render test reads
both strings off the real landing in en and zh.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsR2jTSExv2so3yrUvy5Qz
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation tests tooling labels Nov 2, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

席位核对 · ACCEPT · 2026-11-02T18:27Z

Head-sha: f1c366f2234917dfe6c41f501f31c4bae8938540

  • Shape:
    • The PR is a draft against main. The first card line is Fixes #29489, under claim 6583617139.
    • 6 files, +202 / −31: studio/en.ts and studio/zh.ts (the two landing values and the comment above the en hint), BuilderLanding.tsx (two comments, no code), the re-pinned BuilderLanding.environmentOverlayCopy-12171.test.ts, the new BuilderLanding.customizeCopy-29489.test.tsx and a changeset (@object-ui/i18n patch). That is the claimed surface. check-governed-merges --pr 29537: not governed, 233 changed lines, under the human-merge threshold.
    • Clause-②: no and Metadata-protocol: none start their lines in the body and the changeset, as claimed. No key is added or removed; only two values change in each of the two Studio tables, which the locale packs do not carry.
  • Read in the diff:
    • Both landing strings, en and zh, drop the environment overlay and name the route ADR-0146 leaves open: Customize or New similar, saved in the package's .custom customization package, upgrades still reaching the installed package.
    • The 12171 pin now splits the keys. The landing keys must name no overlay, must name .custom, and must contain the table's own engine.studio.customize.action label, so the check reads the language each table is written in. perm.readOnly.artifact.hint keeps its overlay match as the lit control on the matcher, which is still correct: it names the overlay it refuses. The organization-axis pin and the reader control are unchanged.
    • The BuilderLanding.tsx comments now cite ADR-0146 D2, D3 and D11 instead of the ADR-0070 overlay route.
  • Pins changed: BuilderLanding.environmentOverlayCopy-12171.test.ts, re-pinned as above. That is the card's acceptance, not a weakening: the overlay assertion moved to the key that still says it.
  • Gates (check-runs on this head): 44 success, 11 skipped, 0 failed or pending. mergeable_state is clean.
  • Tests (dev):
    • The touched files pass 6 of 6. With main's copy restored, 3 go red, and the restore is proven by hash.
    • The 132-file landing and i18n sweep is green, ui scripts/ 169 files green, app-shell and i18n type-check 66 of 66, eslint clean. Derived gates 34 of 34, 0 NOT-MEASURED.
  • NOT MEASURED: the seat ran no live session, and the dev rendered the landing in jsdom only, not in a browser.
  • Findings: not filed.
    • engine.studio.pkg.readonlyLink ("Customize with an overlay") is a dead row, read only by a test as an absent label. It is noted in the body, with no carrier.
    • The five overlay types keep allowEnvironmentOverlay: true in the spec registry. The dev reads it as the migration predicate, not a write door, with the D11 close winning on write. That is noted, not confirmed live, and the spec stays off this card.
  • Serial: open draft PR feat(app-shell): offer Disable / Enable on a suite's module rows from the served disableable verdict #28903 edits studio/en.ts and zh.ts in another hunk; git merges the two cleanly in either order.
  • Landing: ordinary queue landing, pr_ready then automerge_enable. Fixes #29489 closes the card on merge.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 2, 2026 18:28
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit 3ab9136 Nov 2, 2026
56 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-uoyyoy branch November 2, 2026 19:01
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/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio landing: the description and read-only hint still say to customize a read-only package "with an environment overlay", which ADR-0146 closed

1 participant