Repository navigation
fix(ui): Setup metadata lists take their title from the sidebar and lead with the label - #28197
Conversation
…s with the label Claude-Session: https://claude.ai/code/session_01L9qibwpXbWKjEuA5DF45BL Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibwpXbWKjEuA5DF45BL Co-authored-by: Claude <noreply@anthropic.com>
|
domain:ui#3 · os-tesla · session_01L9qibwpXbWKjEuA5DF45BL
Generated by Claude Code |
…-pz9hl0 Claude-Session: https://claude.ai/code/session_01L9qibwpXbWKjEuA5DF45BL Co-authored-by: Claude <noreply@anthropic.com>
|
domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o 维护者速读
席位意见:只动 Setup 下的列表外观,标题复用侧栏的同一套匹配与取名函数,不新增复数表、不碰 spec,两处消融都有测试接住,可直接落地。 席位核对ACCEPT · seat
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 41095303977 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Tesla · project thread
维护者速读
ResourceListPage.tsx里setupTitle/labelColumn(objectstack#27356注释处)与新文件navEntryTitle.ts。pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/ResourceListPage.setupLabelFirst-27356.test.tsx,应见 5 passed。Part of #27356 (row 5, hotcrm#2320 Setup S4: Setup metadata lists read as admin lists)
Clause-②: no
Metadata-protocol: none
What changes
ResourceListPage's header now takes the label of the app's own navigation entry that opens exactly this page, through the newnavEntryTitle(metadata-admin/navEntryTitle.ts). The entry is elected by@object-ui/layout'sresolveActiveNavItem, the one "which menu am I in" matcher, and counts only when its own address (resolveHref) is this page's path; its text goes throughresolveNavItemLabel, as the sidebar's does. Setup's Access Control entries aretype: 'url'entries (nav_positionslabelled "Positions",nav_permission_sets"Permission Sets"), served in the reader's language, so the page reads as the row that opened it in every locale the app's bundle carries. With no such entry, the title falls back to the type's label, as before. No plural table is added to the ui registry and nothing changes inpackages/spec.label, the two fold into one cell: the label is the row's link, the API name sits under it in small monospace type (metadata-row-api-name), and the separate Label column goes. The folded column's header is the Label column's. An item with no label keeps its API name as the monospace link, as before.line-clamp-2) with the whole text in itstitle, so a long description no longer stretches a row at phone width.Tests
ResourceListPage.setupLabelFirst-27356.test.tsx(5 tests), on the real page with the metadata client doubled asResourceListPage.setupPosture-12606does and the served Setup app's navigation handed in through the expression context:nav_positionsentry;sales_directorsits beneath, the header has one "Label" column first and no "Name" column; an unlabelled item keeps its monospace API-name link;line-clamp-2and its whole text astitle;studiokeeps the monospace API-name link, the Name and Label columns and no clamp.ResourceListPage.setupPosture-12606: its Setup case found the row by the link nameeveryone; under Setup that link is now the label, so it findsEveryone. Its outside-Setup control is unchanged.Readings (head 464325f, base origin/main 9f13ee8; app-shell closure built with declarations)
ResourceListPage,MetadataResourceListPageornavEntryTitle(24 files, the AppContent route suites included): 24 passed, 294/294 tests.pnpm --filter @object-ui/app-shell run type-check(both programs): lock VERDICT command-exit 0.scripts/ablation-replace.mjs:const labelColumn = inSetup && columns[0]toconst labelColumn = false && columns[0]: 4 failed / 1 passed (the control stays green); restored blob = HEAD blob1abb07375086,git diff HEADempty.(inSetup && navEntryTitle(to(false && navEntryTitle(: 1 failed / 4 passed (the nav-entry title case); restored blob = HEAD,git diff HEADempty.@object-ui/*to source, so neither ablation needed a rebuild leg.Acceptance notes
Per-row status of Setup and Studio: suggestions from a full HotCRM browser pass on 18.2.0: user onboarding, packaged automation state, run-now for scheduled flows, admin lists, and Studio entry, field table, flow inspector wording and one designer per item #27356's Setup rows (re-measured on
main9f13ee8; the Studio rows 12–22 are settled, handoff 6524323618):domain:server: Create User's params are server metadata (create_useronsys_user, platform-objects;permissionSetis an inlinetype: 'text'param) and the create-user door accepts no position.domain:server:POST /automation/:name/triggerrefuses arunAs: 'system'schedule flow for anyone but the system principal (flowStartRefusal); all of HotCRM's schedule flows run as system.domain:server: the Users row menu issys_user's server actions; there is no deactivate verb, only Ban.domain:server: "Record ID" issys_approval_request's own field label (plugin-approvals).domain:server: plugin-approvals knows a request opened on its fallback approvers but persists no marker a reader can show.The seat files the
domain:servercards; this PR isPart of, and the row 11 PR closes the card once every row is landed or answered.The title follows the navigation, not a registry plural. A list reached by a URL no Setup entry carries (a typed address, another app's link) still reads the type's singular label. That is the honest fallback: the type registry carries no plural label, and adding one is a spec change this card does not take.
The folded column applies only where the type lists
labelwith the primary key first; a type with its own columns (for example the field list, which leads with name then object) keeps its layout.Measured in happy-dom, not in a browser at 390 px: the row height on a phone was not re-measured.
Verification
On head 464325f:
dispatch-gates --commandsderived 34 families for this diff; all 34 were run locally with stdin closed, each exit 0, and--ranreconciled 34 run, 0 NOT-MEASURED, 0 UNRUN.check:new-line-citations: 0 new (report-only gate).dispatch-gates --tier: no path-derived mandate; 259 changed lines. CI check-runs were in progress when this was opened.The harness's after-PR assign and review-request step is skipped on the order's word (the seat lands).
Generated by Claude Code