用途
unhappy 是一个“状态优先”的 UI 设计子技能,属于更广泛的 ui-craft 技能体系。它的核心主张是:在实现正常流程(快乐路径)之前,先盘点并实现所有非正常状态(加载、空、错误、部分、冲突、离线),以保证界面对异常情况的覆盖。
主要能力
该技能针对指定的 UI 目标($ARGUMENTS)执行一套状态设计流程:
- 盘点:列出目标中每个数据源与交互界面,逐一枚举其状态(idle、loading、empty、error、partial、conflict、offline),并标记为已设计、缺失或不适用。
- 补齐缺失状态:对每个缺失状态进行内联占位或添加后续任务注释,参考 state-design.md 中关于骨架尺寸、空状态文案、错误状态契约和离线处理的约定。
- 审计快乐路径:标记快乐路径中假设资源存在而未做检查的地方,用提前返回、状态守卫或判别联合状态处理修复;将允许不可能状态的布尔组合(如 isLoading && !error && data)视为问题,重构为状态机或 reducer。
- 乐观 UI 与对账:对可能离线的操作(保存、发送、编辑、切换)实现乐观 UI,在重连时对账,本地排队写入,暴露被拒绝的写入,绝不吞掉。
使用方式
先加载 ui-craft 技能并读取 references/state-design.md,然后按上述步骤对 $ARGUMENTS 指定的目标执行。技能通过 CRAFT_LEVEL 控制需要实现的状态数量:≤4 需实现 idle、loading、error;5-7 需实现 idle、loading、empty、error、success;8+ 需实现全部六种(含 partial、conflict、offline)。CRAFT_LEVEL 未知时默认按 7 处理。
若需要迭代直到所有必需状态齐备,可加载 skills/ui-craft/references/loops.md 并运行 preset state-coverage(预算使用 loops.md 中定义的默认循环预算):在补齐优先级最高的缺失必需状态后,重新盘点,直到所有开关要求的状态齐备或预算耗尽。第 1 次迭代前需输出预检成本通知。
完成后直接编辑代码,并在每个文件之后打印 SKILL.md 中的 Review Format 表格(Before / After / Why),每个新增状态一行,不输出完整 diff。
适用场景
适用于需要系统性地处理 UI 各种非正常状态的界面设计与前端实现工作,尤其是涉及数据加载、表单提交、离线操作等场景。
限制
该技能的介绍依赖 ui-craft 主技能及其 references 文件(state-design.md、loops.md),这些内容未在本资料中提供。CRAFT_LEVEL 的具体取值方式、loops.md 中的默认循环预算数值、预检成本通知的具体内容,以及 Review Format 表格之外的输出细节,资料中暂未提供。