2.0 KiB
2.0 KiB
Agent Note: 多选题自定义答案组合
Status: implemented
English | 中文
问题
用户交互结果的词汇分别通过不同字段携带选中的选项标签和可选的自定义文本,但最初的语义要求每个问题的这两个字段互斥。对于多选题,打开自定义答案或输入文本会丢弃用户已选中的标签。TUI 只返回自定义文本,而 Web 宿主会拒绝同时保留两个字段的客户端响应。
决策
对于 multiSelect: true 的问题,一个回答项可以同时包含非空 selected 数组与非空 custom 文本。无论用户先选择选项还是先输入自定义文本,Web 草稿都会保留两个值;提交自定义文本时,TUI 会投影其已勾选的选项集合;Web 宿主则在应用现有的 id、标签、唯一性、批次和非空文本校验后接受组合响应。
单选题和无选项问题仍保持互斥语义:自定义文本会覆盖任何已选中的选项。结果形状仍为 { id, selected, custom? },因此协议或工具输出 schema 均无需变更。
考虑过的替代方案
把自定义文本编码为另一个 selected 标签。 不予采纳,因为这样会抹去调用方提供的选项标签与用户填写文本之间的区别,削弱校验,并迫使消费方推断哪个值属于自定义内容。
允许所有问题同时使用 selected 与 custom。 不予采纳,因为单选题只表示一个回答;允许选中选项与自定义文本并存会使其基数含义模糊。组合形式仅适用于显式选择多项回答的问题。
后果
多选 UI 可以完整表达用户的回答,不会丢弃任一来源。提供方和消费方继续使用现有 DTO,而请求感知的校验器会根据 multiSelect 判断是否允许组合。Web、TUI、宿主响应、工具投影和组装后的无密钥 TUI 覆盖会固定组合结果;单选题的宿主覆盖则固定其余的互斥规则。