30 秒看懂
一款健身记录应用的休息和导航行为令人困惑,逐个修复又可能相互冲突。Google 的 Devin Chasanoff 将改动整理为组件、页面及运动状态、显示规则和用户操作的规格,并覆盖最后一组训练等特殊情况。他使用 Gemini 生成测试,把规格和测试交给已有的 Antigravity 会话,最后亲自检查修改后的流程。
- 1孤立修复可能相互冲突,让旧问题再次出现Chasanoff 用明确的界面模型取代了问题清单。
- 2区分页面级状态和单项运动状态当前组数和休息模式影响整个页面,而完成状态属于单独一组训练。
- 3最后一组需要单独的状态转换最后一组结束后,应用仍需让用户完成并保存训练。
- 4为完整用户流程生成测试Gemini 生成连接操作、状态变化和显示结果的测试用例。
- 5计划依赖上下文时,让智能体留在原有会话Chasanoff 希望智能体结合现有实现理解规格,再继续执行计划。
- 6在应用中验证修改后的交互他检查了休息模式、未完成组的导航和最终完成状态。
要点建议
- 将相关界面改动描述为一个完整系统,而不是孤立修复的清单。
- 明确状态、状态的作用范围,以及用户操作如何改变状态。
- 说明最后一个项目完成后的转换等边界情况。
- 既测试单独的显示条件,也测试完整用户流程。
- 智能体报告测试通过后,仍需检查实际应用。
按章节阅读整理后的全文
健身界面的交互相互冲突
Chasanoff 演示令人困惑的休息与导航行为。
Devin Chasanoff 正在按照详细实施计划构建一款私人教练应用。训练中的界面本应方便用户在运动时使用,但目前的行为令人困惑。

完成一组训练后,应用会打开休息计时器,却没有清楚推进训练进度。两个控件可以导航到同一位置,额外的未来组信息让页面拥挤,而超级组还需要在不同运动之间交替。他希望这些交互作为一个整体协调工作。
定义组件、状态和转换
他把问题清单改写成覆盖普通和最后一组行为的规格。
逐个修复孤立问题可能产生互相冲突的行为,让旧问题再次出现。因此,他把抱怨清单改写成系统规格,描述展示、组件、状态、显示条件和用户操作。

首先,他列出标签、布局等视觉改动,再确定组成页面的各个部分。这些名称有助于描述界面,也能帮助智能体定位改动;它们不一定都需要成为独立代码组件。

接下来,他区分页面级和运动级状态。页面记录当前组和是否处于休息模式,并可推导后续组、当前组是否为第一组或最后一组;单项运动则记录某一组是否完成。
他定义了休息模式和训练期间各应显示哪些元素。最后一组需要特殊状态:完成后已经没有当前组,但训练尚未记录。列出这些情况可以明确预期的状态转换。

对于当前组卡片,未完成时数值应当可以编辑,完成后则显示为文本。按钮应根据状态从完成组变为编辑组。他也为后续组预览和导航控件指定了规则。
操作规则将用户点击与结果状态连接起来。完成普通组时,应用标记其完成并进入休息模式,但不会立即改变当前组;休息结束或被跳过后才前进。最后一组则走不同路径。

生成测试并结合上下文实现
他让 Gemini 生成测试,并将测试与规格交给已有智能体会话。
为了防止后续改动破坏这些行为,Chasanoff 将规格贴进 Gemini,要求生成测试用例。他既希望检查显示与状态,也希望测试从操作到界面结果的小型用户流程。
他决定留在已有的 Google Antigravity 会话,而不是开始新会话。这样智能体能利用之前的实现上下文,将他提出的变量与实际代码对应起来,然后继续整体实施计划。
他要求智能体暂停计划,实现规格并覆盖生成的测试。他说 Gemini 工作了约七分钟,生成的测试全部通过;随后他亲自检查应用。

验证训练流程
演示检查修改后的休息、导航和完成过程。
修改后的休息界面显示计时器和接下来的训练。已完成的组可以提供此前重量和次数的参考。如果用户尚未完成当前组就按下一组,菜单会提供标记完成、跳过、预览下一组或返回等选择。

他逐步检查最后几组:随着剩余组数减少,后续预览也会缩短;完成最后一组后会出现完成卡片。他确认并保存训练,并认为先定义系统有助于一起解决相互关联的行为。

同频道的其他文章
11:59EN → 简体中文
11:16EN → 简体中文
12:26EN → 简体中文