UI实验室:UX建议
一个UX建议经历三个阶段:
- 原型制作——仅修改实验室代码,基于项目实验室说明指定的平台。所有者可以点击浏览各个选项。
- 关闭迭代——为本次迭代打标签,并将内容写入
docs/ux-history/,同时删除其实验室文件。 - 方案提升——所有者选择了一个选项并批准计划后,该选项成为真正的屏幕,附带其共享逻辑,如果应用有多个平台,还需处理其他平台。
项目实验室说明
本技能定义流程;每个项目的具体细节存储在其 .claude/ui-lab.md 文件中。在处理任何其他内容之前先阅读该文件。它提供:
- 平台:本机上使用哪个实验室应用(
uname -s)、其ID、实验室代码存放位置以及打开屏幕的命令; - 选项文件夹:每个平台的文件夹和包,以及字符串存放位置;
- 文件:选项屏幕使用的主题或颜色,以及提升后状态移动的位置;
- 示例数据:选项构建其数据所基于的来源;
- 模拟数据和边缘案例:此应用中无法通过虚构数据展示的内容,以及需要检查的案例;
- 截图:每个平台如何截图;
- 提升:目标路径,其他平台的处理方式,需要更新的文档以及发布构建命令;
- 实验室本身如何工作(文档链接)。
当说明与本技能存在差异时,以说明为准。如果项目没有 .claude/ui-lab.md 文件,或者缺少以下所需内容,请询问所有者而不是猜测,并将答案添加到说明中。
阶段1:原型制作
从当前分支创建一个 ux/<screen> 分支进行工作,以便其他机器可以拉取本次迭代。如果工作区中有非您所做的未提交更改,请先询问再切换分支。
每个选项一个文件夹
每个选项存放在其自己的文件夹中(说明中指定位置),以便可以单独删除、恢复或提升。该文件夹位于屏幕包内,因此提升时只需移动文件。
| 文件 | 内容 | 提升时 |
|---|---|---|
<Screen>Option<B> | 屏幕本身,<Screen>Screen<B>(state, actions):生产质量(使用应用的字符串和主题,按照说明)且不含实验室类型 | 移动到应用中 |
<Screen>Option<B>State | 应用逻辑尚未产生的状态,按照应用最终会产出的形式进行设计 | 移动到说明指定的位置 |
<Screen>Option<B>Lab | 其示例数据、模拟行为、无操作动作,以及带有其上方模拟内容的 LabOption 值 | 删除 |
| 选项的字符串(当应用使用字符串资源时,名称和位置按照说明) | 选项的新文本 | 移动到应用的字符串中 |
- 除了文件夹(以及无法将资源放在文件夹中的字符串文件)外,每个选项还需要添加一行:在其屏幕的
LabScreens列表中添加一项(<screen>OptionB,)。 - 文件夹中的所有内容均为
private,但屏幕、其状态和LabOption值除外,这些内容的名称携带选项信息,因此选项之间不会冲突。 - 如果一个选项需要使用现有应用组件的修改版本,则在其文件夹中使用自己的副本。
- 示例数据来自说明中指定的来源,保持原样,再加上选项在其
Lab文件中添加的内容。如果说明指出数据是真实的,请不要虚构文本。
步骤
- 在实验室中打开屏幕,查看
current,即应用当前拥有的屏幕。 - 编写2-3个不同的方向作为选项
a、b、c(跟在current之后),每个选项附带一行说明其更改内容。 - 在每个
LabOption值上方,列出选项模拟的内容:应用逻辑缺乏的数据、尚未实现的行为,以及无法通过虚构数据展示的内容(说明列出此应用常见的类型)。 - 检查说明中列出的边缘案例,以及屏幕特有的异常情况。如果一个案例改变了设计,则将其作为单独的选项(如
a-rtl、a-dark)。 - 构建项目,打开每个选项并查看截图(命令在说明中;android-emulator技能涵盖Android设备)。手机上显示全黑截图表示手机已锁定:请询问所有者解锁。
- 在分支上提交更改,并告知所有者选项ID(
<screen> <option>)、每个选项模拟的内容以及设备信息。
当所有者要求更改某个选项时,更改将作为新选项存放在其自己的文件夹中(例如,在 b 旁边创建 b2)。所有者排除的选项会保留到迭代关闭,以便迭代的标签包含所有选项。
阶段2:关闭迭代
当所有者选定了一个选项或拒绝所有选项时:
- 为迭代的最后一次提交打标签(此时所有选项仍在其中),并推送标签:
git tag ux/<screen>/<yyyy-mm-dd> && git push origin ux/<screen>/<yyyy-mm-dd>。该标签确保在分支被删除后代码仍然可访问;同一天第二次迭代使用-2。 - 按照以下格式编写
docs/ux-history/<screen>/<yyyy-mm-dd>-<topic>.md,并按照说明的要求链接到该文件(例如,屏幕文档)。 - 删除其他选项的文件夹、字符串文件和
LabScreens行;选定的选项保留到阶段3。 - 提交更改。如果所有选项都被拒绝,迭代在此结束:合并分支(历史文件是其唯一的持久更改)或按照所有者的偏好删除分支。
# <Screen> — <topic> (<yyyy-mm-dd>, <platform>)
标签:`ux/<screen>/<yyyy-mm-dd>`
## 选项
- **a — <name>**:<更改内容>。*已选定*,在 <commit> 中提升。
- **b — <name>**:<更改内容>。*已拒绝*:<所有者给出的原因,如果有>。
## 模拟的内容
- b:<原型展示但应用尚不支持的内容>。
## 恢复选项
git checkout ux/<screen>/<yyyy-mm-dd> -- <option folder> <strings files>
然后将 `<screen>Option<B>,` 添加到 `LabScreens`。
构建时基于标签时的 <components and sample data it used>。恢复后出现编译错误,请修复选项的副本和示例数据中的问题。
恢复
当所有者要求恢复之前的选项时,按照其历史文件操作:从标签中检出路径到 ux/<screen> 分支,添加 LabScreens 行,修复选项文件夹内不再编译的部分,然后打开它。它将作为新迭代的一个活跃选项。
阶段3:提升
当迭代在选定的选项上关闭后,进入计划模式(EnterPlanMode)并通过 ExitPlanMode 提交计划;所有者通过按钮批准计划。计划涵盖:
- 需要移动的文件以及它们替换的屏幕;
- 每个模拟项背后的逻辑工作:建议的状态、视图模型或控制器更改及其测试;
- 如果应用有多个平台,则按说明处理其他平台;
- 说明中指定需要更新的文档。
批准后,在同一分支上:
- 使用
git mv将选项的屏幕文件移动到应用中(目标路径按说明),替换旧屏幕,并将函数或视图命名为屏幕的名称。 - 将选项的字符串移动到应用的字符串中,移除选项的前缀或表格。
- 将状态移动到说明指定的位置,让应用的逻辑通过测试产生状态,并连接操作。
- 将选项复制的组件合并回原始组件,删除其文件夹的其余部分和
LabScreens行;将LabScreens中屏幕的current指向提升后的屏幕。 - 使用说明中的命令进行发布构建,任何对实验室代码的引用都会编译失败。
- 完成计划中的其他平台和文档部分,并将提升提交添加到迭代的历史文件中。
合并分支由所有者决定。