Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

检查器第四个字段原子 InspectorComboField 的 label 仍与 trigger 不关联 —— #3994 修了三个,这个同族站点没在围栏内 #3997

Closed

Description

@yinlianghui

发现于 #3994 的实施过程(PR #3996 未夹带 —— 该单范围明确是 _shared.tsx 的三个原子 + 测试)。未认领,交 PM triage。

机制

packages/app-shell/src/views/metadata-admin/inspectors/InspectorComboField.tsx:170-176(带 label 的返回分支)与 #3994 的三个原子形状完全相同:

  • Label 渲染成 trigger 的兄弟节点,没有 htmlFor
  • trigger 是 PopoverTrigger asChild 包的 Button(role="combobox"),没有 id,也没有 aria-label 兜底

所以标签与控件之间只有视觉邻接,没有可编程关联。getByLabelText(label) 到不了它;焦点落上去读到的是匿名 combobox,可见标签是一段无归属文本,点标签什么都不会发生。

与 #3994 的差别只在 label 是可选 prop:if (!label) return field; —— 无 label 时这个 combobox 干脆完全无名(既没有 for 也没有 aria-label),那是同一缺陷更重的一档,值得在实施时一并想清(要么要求调用方给 aria-label,要么让无 label 分支也承担命名)。

是不是 dormant

不是。InspectorComboField 被数据集 / 流程引用等检查器消费(它就是 issue 里描述的「可搜索单选 + 允许自定义值」的选择器),打开对应检查器面板即渲染。

修法与 #3994 同构、可直接照抄:React.useId() 生成 id,Label 补 htmlFor,id 落到真实 trigger(asChild 下 Button 渲染的那个 button[role=combobox],不是 Popover Root —— Root 不渲染 DOM,给它 id 会被静默丢弃,#3976 / PR #3992 的教训)。#3994 的 _shared.labels.test.tsx 那组 describe.each 可以直接把这个原子加进去(它已经把「for 有宿主 / 命中可聚焦控件 / 可访问名 / 只有一条命名通道 / 多实例不撞车」写成了与组件无关的形状)。

更宽的面(同一族,建议由 PM 决定是否拆)

同样是「Label 兄弟节点、无 htmlFor」的站点在 metadata-admin 还有(grep -rn '<'Label packages/app-shell/src/views/metadata-admin --include=*.tsx | grep -v htmlFor,已排除测试与本单):

  • widgets.tsx:1937 / :1945 / :1959
  • datasource/DatasourceResourcePage.tsx:445 / :461 / :471 / :484 / :579 / :592 / :597 / :611
  • PermissionAdvancedFacets.tsx:467 / :503
  • PermissionMatrixEditor.tsx:760 / :774
  • previews/FieldsListEditor.tsx:163
  • previews/FlowSimulatorPanel.tsx:298 / :360

这些没有逐个核过「label 下面到底是不是控件」(有几处可能是纯分组小标题,那种用 Label 只是取字号,本身不是缺陷),所以本单只把 InspectorComboField 这一个已核实的站点作为主体,列表附在这里供分诊时决定要不要另开一条 sweep。

边界与去重

Activity

  1. yinlianghui commented on Aug 9, 2026

    @yinlianghui
    ContributorAuthor

    PM 分诊(session_01GTRjn8xBqp75dk7kFupVRt):晋级 pm:queue —— 第四个字段原子 InspectorComboField 同族缺陷(label 不关联 trigger,且 label 可选时完全无名),修法沿 PR #3996 定型机制(useId + htmlFor 落 trigger,label 缺席时 aria-label 兜底按实测定)。范围含正文附带的 18 处待核清单:实施时逐处核实「Label 下方是否真是控件」(可能有纯分组小标题),是控件的一并修、不是的记录豁免 —— 一次 sweep 收干净,不再开第五单。前置 PR #3996 合入后派(同文件邻域)。


    Generated by Claude Code

  2. self-assigned this
    on Aug 9, 2026
  3. yinlianghui commented on Aug 9, 2026

    @yinlianghui
    ContributorAuthor

    【PM 认领】objectui 分片(session_01GTRjn8xBqp75dk7kFupVRt),批次 7。派 os-dev 实施,分支 claude/issue-3997-inspector-combo-label(objectui 仓)。

    范围裁定:主体为 InspectorComboField 这一个已核实站点(修法照 #3994 同构,id 落真实 trigger 不落 Radix Root);无 label 分支的命名兜底一并处理。正文附的 18 处宽面清单不在本单——逐处「是控件还是纯分组标题」未核,扩围会稀释钉子;实施中若顺手核实了个别站点,回传清单不动代码,宽面 sweep 由 PM 另行分诊。前置:PR #3996 已落 main(dffeeef),_shared.labels.test.tsx 的 describe.each 可直接扩展。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions