unhappy について
unhappy は ui-craft のデザイン向けサブスキルで、UIの例外状態を整備する開発者を対象としています。画面の状態を洗い出して不足を補い、楽観的更新、オフライン処理、エラーからの復旧を検討します。
主な機能
- 01データソースと画面状態の洗い出し
- 02ローディング、空、エラーなどの不足状態の追加
- 03リソース欠落時のガードと状態処理の確認
- 04オフライン操作の楽観的更新と再同期の設計
- 05状態カバレッジ要件まで反復し変更を報告
活用シーン
- 01画面にローディングやエラー表示があるか確認
- 02データが空の場合の説明と次の操作を追加
- 03オフライン中の編集や保存と再接続後の同期に対応
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ educlopez/ ui-craft --skill unhappyインストール後、Claude Code で/unhappyを入力して読み込まれたか確認します。
詳細
コンテキスト: このサブスキルは、より広範な ui-craft スキルを別の視点から捉えるものです。ui-craft スキルもインストールされている場合は、まずその SKILL.md を読み、Discovery + Anti-Slop + Craft Test を確認してから、以下の特定の視点を適用してください。
$ARGUMENTS の UI について、正常系以外のすべての状態を設計してください。ui-craft スキルを読み込み、references/state-design.md を読んでください。
ステップ 1 — 棚卸し。 対象のすべてのデータソースとインタラクティブな画面要素を列挙します。それぞれについて、各状態を列挙してください。
| 画面要素 | idle | loading | empty | error | partial | conflict | offline |
|---|
各セルに 設計済み(コードに実装済み)、不足(追加が必要)、該当なし(該当しない。例:読み取り専用ビューに競合状態はない)を記入してください。
ステップ 2 — 不足状態を補う。 不足している状態ごとに、その場で仮実装するか、後続タスクのコメントを追加してください。以下については references/state-design.md を参照してください。
- スケルトンのサイズ(最終レイアウトに合わせる。遅延は 200ms、上限は 5s)
- 空状態の文言(空である理由 + 次のアクション + ビジュアル)
- エラー状態の契約(具体的な原因 + ワンクリックでの復旧 + サポート ID)
- オフライン対応(書き込みをキューに登録し、再接続時に整合させる)
ステップ 3 — 正常系を監査する。 リソースの存在を確認せずに正常系が進む箇所をすべて指摘してください。早期リターン、状態ガード、または判別可能なユニオンによる状態処理で修正します。isLoading && !error && data のように、あり得ない状態を許容するブール値の組み合わせは問題として扱い、適切なステートマシンまたは reducer にリファクタリングしてください。
ステップ 4 — 楽観的 UI + 整合。 オフラインになりやすいアクション(保存、送信、編集、切り替え)には、再接続時の整合処理を伴う楽観的 UI を実装してください。書き込みはローカルにキューイングします。拒否された書き込みは必ず表示してください。決して握りつぶしてはいけません。
ノブによる段階設定(CRAFT_LEVEL):
| CRAFT_LEVEL | 仮実装が必要な状態 |
|---|---|
| ≤ 4 | idle、loading、error |
| 5-7 | idle、loading、empty、error、success |
| 8+ | 6 つすべて — partial、conflict、offline を追加 |
CRAFT_LEVEL が不明な場合は、7 を既定値とします。
収束に関する注記: 必須状態がすべて揃うまで反復するには、skills/ui-craft/references/loops.md を読み込み、プリセット state-coverage を実行してください(budget = loops.md で定義されている既定のループ予算)。最優先の不足必須状態を仮実装した後、ノブで必要な状態がすべて揃うか、予算を使い切るまで再度棚卸しします。反復 1 の前に、事前コスト通知を出してください。
出力: コードを直接編集してください。ファイルごとに、SKILL.md の Review Format テーブルを出力してください。
| 変更前 | 変更後 | 理由 |
|---|---|---|
<ProjectList> にローディング状態がない | 最終レイアウトに合わせたスケルトン行、遅延 200ms | 「壊れているのでは?」という印象を防ぎ、CLS を回避する |
| 汎用的な「Error」トースト | 具体的な原因 + 再試行 + サポート ID を含むインラインエラー | 復旧可能性(ヒューリスティック 9) |
追加した状態ごとに 1 行記載してください。差分全体は出力しないでください。
次のステップ: /harden — 直前に設計した状態を実装します(段階 1)。