Repository navigation
fix(app-shell): Studio's publish review sheet says a customization lives in this environment's database and moves only by os package export - #30435
Merged
Conversation
…ives in this environment's database and moves only by os package export Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6Cay8ZjjPDJ1vkTcVDd
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Utp6Cay8ZjjPDJ1vkTcVDd
Contributor
Author
|
domain:ui#3 · os-bill · session_01Utp6CbPN5UYMnBaNJPJWfG 维护者速读
席位核对 — ACCEPT · head 8fc8d01
|
This was referenced Nov 5, 2026
9 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Bill · project thread
domain:ui#3 · os-bill · session_01Utp6CbPN5UYMnBaNJPJWfG
维护者速读
BASE.custom的条目(写的是服务端给的真实包 id),不在项目源码中;只有通过os package export才能带到其他环境(十种语言,命令原样不翻译)。os dev的 Studio 里调好视图,os build部署后改动不见了,Studio 从没说过它只在这个库里(ADR-0146 D2)。CLI 和脚手架那一半已由 PR feat(cli,create-objectstack): os build says when the dev database holds Studio customizations it leaves behind; the starter docs name os package export #30336 落地,这是 Studio 这一半。objectstack dev --seed-admin --fresh,在 Studio 定制一个 Showcase 视图后点「变更」,面板标题下应看到「保存到 ObjectStack Showcase 的定制」和新的一行,点名 com.example.showcase.custom 与 os package export。Fixes #30119
Clause-②: yes (widening)
Metadata-protocol: none
What changes
The card's first Expected bullet: "Studio says plainly, where a customization is saved, that it lives in this environment's database and how it moves." Triage 6652867871 states the done line: a Studio notice that a customization lives in this environment as an item of
BASE.customand travels only byos package export. The server half (CLIos buildnotice, scaffold README and AGENTS.md) landed in PR #30336.preview/savedToCustomization.tsx, ADR-0146 D3), is drawn in two places: the pending-changes sheet (DraftChangesPanel) and the Studio item header's note line. The new line sits under it in the sheet, once per surface, not on a save toast. The sheet is where a person reviews the pair's drafts before they go live, and every pillar opens the same sheet.customizationOfonly while it reviews a pair's drafts, and then itspackageIdis the pair: the ensure door's answer or the listed pair the server serves (StudioDesignSurface'sdraftScope). The sheet names that id. It computes no.customspelling.os package exportis the constantPACKAGE_EXPORT_COMMAND, passed into every pack as{{command}}, so no translation can change it.@object-ui/i18n:preview.changes.customizationEnvironmentin all ten packs ({{pair}},{{command}})./api/v1/discoveryservesenvironment(production/sandbox/development, fromNODE_ENV; measured"development"underobjectstack dev). The line is shown everywhere anyway, because it is true everywhere: a customization made in production also lives only in that environment's database and reaches staging or a new environment only by export. Gating it ondevelopmentwould hide a true statement where it still applies.Tests
Head
8fc8d012(after one merge oforigin/main, which brought PR #30361's change to the same file in cleanly).DraftChangesPanel.test.tsx, in the existing "names the base whose customizations it saves" describe, through the real i18next hook and shipped packs: the line namesthis environment's database,com.hotcrm.customandos package exportin en, keeps the pair id and the command untranslated in zh, and the control (a writable package's own drafts) draws neither sentence. A newit.eachover all ten packs:customizationEnvironmentTextnames the pair once andPACKAGE_EXPORT_COMMANDonce, with no{{left.false && …throughscripts/ablation-replace.mjs(anchor 1 → 0, blob changed): exactly the two new render tests fail, 26 pass; restored, blob identical toHEAD.Local runs
vitest run(fromui/, under the verify lock):DraftChangesPanel.test.tsx,StudioDesignSurface.customizePublish-28562.test.tsx(the importer that pins the shared sentence) and the wholepackages/i18n/(key parity included): Test Files 97 passed (97), Tests 1479 passed, 13 skipped. VERDICT command-exit 0.turbo run type-check --filter=@object-ui/app-shell --filter=@object-ui/i18n --concurrency=2: 69 tasks successful, VERDICT command-exit 0 (on the merged head).pnpm check:type-check-debt: exit 0.Acceptance notes
StudioDesignSurface.tsx, which PR fix(studio): after Restore package original the rail's customized mark and "only customizations" count refresh without a reload #30381 holds). It passes only the base's label, so naming the pair there needs that file. Left out; the seat files it as a follow-up after fix(studio): after Restore package original the rail's customized mark and "only customizations" count refresh without a reload #30381.preview/DraftChangesPanel.tsx,preview/savedToCustomization.tsxand their test, outside the Claim'sstudio-design/**.Verification
Live walk:
examples/app-showcase,objectstack dev --seed-admin --fresh -p 4730, console on Vite against it, signed in as the seeded admin.POST /api/v1/packages/com.example.showcase/ensure-customizationanswered 201 withpackageId: com.example.showcase.custom; a draft of viewshowcase_task.in_progresswas saved into the pair withoverrides: { package: com.example.showcase, basedOn: 0.1.0 }; then/studio/com.example.showcase/interfaces?changes=review.d3f23d20)The before leg is the same boot and the same draft, with the two
preview/files checked out atd3f23d20(Vite reloaded them; restored afterwards,git diff HEADempty). Screenshots (before-zh-CN.png,before-en.png,after-zh-CN.png,after-en.png) are in the project files underui-seat3/30119/.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackon8fc8d012: 35 families, each run with its exit code captured before any pipe, all exit 0 (node scripts/check-sdui-manifest.mjsamong them;pnpm check:type-check-debtunder the verify lock).--ran: 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN.pnpm --dir ui check:new-line-citations: 0 new citations.Generated by Claude Code