Repository navigation
fix(app-shell): Studio's rails mark a customization with a short word, no fill, instead of a filled plus that read as an add button - #30468
Merged
Conversation
…ill, instead of a glyph that read as an add button The compact customization mark now prints 定制 / Customized for a customized row and 新增 / Added for an added one, in the kind's colour with no background. Its accessible name and tooltip keep the full text and the sentence naming the pair. New studio key engine.customizationMark.customizedShort (en, zh). Claude-Session: https://claude.ai/code/session_01L6bhgXtD8kC2LpK5YoB2sK Co-authored-by: Claude <noreply@anthropic.com>
Customized measured 61 px on the 223 px automations rail and cut the row's name to "Convert Lea"; Custom is 40 px (定制 is 22 px). Claude-Session: https://claude.ai/code/session_01L6bhgXtD8kC2LpK5YoB2sK Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6bhgXtD8kC2LpK5YoB2sK Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6bhgXtD8kC2LpK5YoB2sK Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
|
domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif Contract reviewServed-tier: Reviewed 2026-11-05T12:43Z. Face: the ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS |
Contributor
Author
|
domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif 维护者速读
席位核对 — ACCEPT · domain:ui#5 · head
|
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.
domain:ui#5 · os-sales · session_01L6bhgXtD8kC2LpK5YoB2sK
Requested by Sales · project thread
Fixes #30070
Clause-②: yes (widening)
Metadata-protocol: none
维护者速读
ui/packages/app-shell/src/views/studio-design/CustomizationMark.tsx的if (compact)分支、StudioDesignSurface.oneSurface-28572.test.tsx的「the rail mark never takes the row’s name」用例、ui/packages/i18n/src/namespaces/studio/en.ts的engine.customizationMark.customizedShort。pnpm --dir ui exec vitest run packages/app-shell/src/views/studio-design/StudioDesignSurface.oneSurface-28572.test.tsx,预期 27 个用例全绿。What changes
CustomizationMark'scompactbranch (every pillar rail row throughRailCustomizationMark, and the Interfaces rail's navigation-override mark, which wraps it in its popover button) no longer draws an 18×18 filled block with a lucide glyph. It prints one short word in the kind's colour with no background:customizedreads the newengine.customizationMark.customizedShort(定制 / Custom),addedreads the existingengine.customizationMark.added(新增 / Added). Itsrole="img", accessible name (the full label, e.g. 已定制(HotCRM)) and tooltip (that label, then the sentence naming the pair) are unchanged. It carries no handler: a click on it is a click on its row.studionamespace row in en and zh:engine.customizationMark.customizedShort.CustomizationMark.tsxandRailCustomizationMarksay the mark is a word, no fill, and not a control..changeset/30070-customization-mark-words.md,@object-ui/app-shelland@object-ui/i18npatch.Branch: the harness-assigned
claude/project-thread-p3zei2, notclaude/issue-30070-*; the card is #30070.Tests
StudioDesignSurface.oneSurface-28572.test.tsx's rail-mark case (it pinnedtextContent '') now pins: the customized mark printsengine.customizationMark.customizedShort, the added mark printsengine.customizationMark.added, both keep the full label as accessible name and tooltip head, neither holds ansvg, and neither carries abg-class. Expectations are read from Studio's table, never retyped.Acceptance notes
Custom, notCustomized. The ruling names the zh words only. Measured on the example CRM's automations rail (row 223 px wide): 定制 and 新增 are 22 px each (the glyph was 18 px),Addedis 34 px,Customizedwas 61 px and cut the selected row to "Convert Lea…",Customis 40 px. The seat may prefer another word; it is one en row.InterfacesNavRail.tsxwas not edited (PR feat(app-shell): Studio opens an off-nav list view on its object's page, lists only views no dropdown reaches, and reads form views as forms #30401 holds it). ItsInterfacesNavOverrideMarkdoc comment still says "the compact customized glyph"; the comment is now stale wording only, behaviour measured below. Left for whoever next touches that file.KIND_CLASS(the filled colours) now serves the non-compact chip only;customizationOfhas no compact caller and would print its full label if one appeared.Verification
Gates and tests ran on
cabd8ba8; the head adds an evidence commit and its removal, the tree is byte-identical (git diff cabd8ba8 HEADis empty). Baseb6caa141.Live rig and screenshots (zh-CN and en-US, 1440 wide)
examples/app-crmobjectstack dev --seed-admin --freshon a private port, the console viaviteinui/apps/consolewithDEV_PROXY_TARGET, Chromium.POST /api/v1/packages/com.example.crm/ensure-customizationmadecom.example.crm.custom; through that pair, an override of flowcrm_convert_lead_wizardand of appcrm_app(navigation), and a new flowcrm_custom_follow_up_reminder, each saved as a draft and published. Before =CustomizationMark.tsxrestored to the base on the running vite, then restored toHEAD(blob equal).Measured marks (
data-testid="customization-mark"): before, every mark 18 px wide with a filled background and ansvg; after, background transparent, nosvg, widths 定制 22, 新增 22, Custom 40, Added 34. Clicking the Interfaces heading mark still opens the override popover with 恢复软件包原版; clicking the 新增 mark on a rail row selects that row (?surface=flow:crm_custom_follow_up_reminder).Before, automations, zh / en:


After, automations, zh / en:


Before / after, interfaces (navigation-override mark beside the heading), zh / en:




After, the override popover still opens from the mark:

Tests, ablation, typecheck, lint
git grepforcustomization-mark,CustomizationMark,customizationMark.,RailCustomizationMark,if-nav-override-markunderui/**/*.test.ts*: 9 files) pluspackages/i18n/src/__tests__/studio-namespace.test.tsandstudio-namespace-lazy.test.tsx: Test Files 11 passed (11), Tests 230 passed (230), lock VERDICT command-exit 0. A first run over all ofstudio-design/andmetadata-admin/(556 files) was stopped for time; CI's Test UI runs the full set.scripts/ablation-replace.mjs, anchor x1 to x0): the compact word replaced by{null}: 1 failed / 26 passed (expected '' to be 'Custom'). Restored, blob equals HEAD,git diff HEADempty.KIND_CLASSback: 1 failed / 26 passed (not to match /(^|\s)bg-/). Restored, blob equals HEAD.pnpm --filter @object-ui/i18n --filter @object-ui/app-shell type-check(bothtsc --noEmitandtsc -p tsconfig.test.json): lock VERDICT command-exit 0.pnpm --dir ui run check:spec-symbols: exit 0.pnpm check:new-line-citations(ui): 0 new citations, exit 0.Derived gates (35/35 exit 0)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 35 families atcabd8ba8; every one ran and exited 0.--ranreconciliation: 35 derived, 35 run, 0 NOT-MEASURED (a derived zero, every line carries an exit code).pnpm --dir ui exec vitest run scripts/: 170 files passed, 2 skipped; 4985 tests passed, 2 skipped. CI runs the rest.Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01L6bhgXtD8kC2LpK5YoB2sK