mcpField
E
edge-hunt

edge-hunt

github.com/hanumatoriテスト・品質5168 回インストール1 日前に更新
リポジトリ

edge-hunt について

edge-huntは、ソフトウェア変更のエッジケースを体系的に洗い出すスキルです。状態、操作順、障害のタイミング、ライフサイクルを組み合わせてリスクを優先し、検証方法を定めます。

主な機能

  1. 01既存と新規の動作契約を記録
  2. 02タスクに関係する観点を選定
  3. 03条件を組み合わせ操作順を変更
  4. 04障害のタイミングとライフサイクルを分析
  5. 05リスク事例に状態と検証方法を割り当て

活用シーン

  1. 01機能変更のエッジケーステストを追加
  2. 02データ損失や権限のリスクを確認
  3. 03再起動、再試行、キャンセルを検証
  4. 04再現した不具合と仮説を区別

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hanumatori/nodumbmode --skill edge-hunt

インストール後、Claude Code で/edge-huntを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamlreferences/generation-methods.md

詳細

Edge Hunt

Корнер редко выглядит необычно по частям. Обычно ломается пересечение обычного состояния, обычного действия и неучтённого порядка событий. Не пытаться просто «подумать внимательнее»: построить пространство задачи и системно столкнуть его измерения.

Сначала убедиться, что задача и масштаб уже выбраны. Этот скилл укрепляет края решения, но не доказывает, что выбрано правильное решение. Если направление ещё обсуждается, вернуться к nodumb или ask-nodumb.

1. Зафиксировать нормальный контракт

Одной короткой цепочкой записать:

исходное состояние → действие → видимый результат → что обязано сохраниться

Последний элемент обязателен. Неявные гарантии вроде «закрыл временную панель — вернулся к прежней работе» чаще выпадают из постановки, чем основной результат.

Не изобретать контракт только по тикету. Проверить релевантные код, тесты, документацию, историю решений и соседние сценарии. Разделить:

  • подтверждённое текущее поведение;
  • выбранное новое поведение;
  • предположение без источника;
  • вопрос, требующий продуктового решения.

2. Выделить измерения именно этой задачи

Выбрать только те оси, которые физически участвуют в изменении:

  • состояние до действия;
  • способ входа и вариант действия;
  • порядок, повтор, отмена и прерывание;
  • форма, объём и свежесть данных;
  • роль, права и смена доступа;
  • этап жизненного цикла: первый случай, следующий, спустя время, после restart, update, миграции или отзыва доступа;
  • время ответа, retry и поздний результат;
  • устройство, вкладка, процесс или внешняя интеграция;
  • параллельное действие другого участника или воркера.

Для каждой выбранной оси назвать 2–5 различающихся классов, а не перечислять все возможные значения. Отметить невозможные сочетания и основание, которое их исключает.

3. Породить корнеры

Применить к выбранным осям пять операций:

  1. Пересечение. Скрестить пары условий. Для потери данных, прав, платежей, синхронизации и необратимых действий проверить также тройки.
  2. Перестановка. Поменять порядок связанных действий; повторить действие; вставить отмену, возврат, перезапуск или продолжение после паузы.
  3. Нарушение инварианта. Попытаться потерять то, что должно сохраняться: основную работу, идентичность, выбор, данные, права или возможность вернуться.
  4. Разрез сбоя. Поместить ошибку до эффекта, во время частичного эффекта и после эффекта, но до подтверждения пользователю.
  5. Сдвиг по жизненному циклу. Повторить сценарий не только сразу, но для второго и последующего объекта, после истечения времени, перезапуска, обновления, миграции или отзыва внешнего права.

Не останавливаться на названиях вроде «ошибка сети». Описывать полную ситуацию: что уже произошло, что не произошло, что видит человек и что случится при повторе.

Подробный механизм и примеры — references/generation-methods.md.

4. Отобрать важное

Оставить обычно 5–10 сценариев. Поднимать выше случаи, где:

  • несколько обычных условий создают неожиданный результат;
  • возможны тихая потеря данных, нарушение прав или необратимое действие;
  • граница проходит между двумя компонентами, устройствами или моментами времени;
  • поведение существует в продукте, но не записано в постановке;
  • проверка способна опровергнуть решение, а не только подтвердить реализацию.

Не добавлять корнер только потому, что он теоретически возможен. Назвать связь с реальным состоянием, веткой кода, контрактом, прошлым багом или внешней гарантией. Невозможные, уже закрытые нижним слоем и не относящиеся к изменению случаи отбросить.

5. 見つかった問題を対応方針に変える

残ったコーナーケースごとに、次のいずれかのステータスを付けます。

  • 今すぐ対応する — 対応しなければ、タスクの契約を満たせません。
  • 従来の動作を維持する — 新しい対応によって既存のシナリオを変えてはいけません。
  • 対象外とする — 実際に起こり得ますが、その対応コストはこのタスクの範囲外です。
  • 新しい事実が必要 — まず観察、ログ、人による判断、または実環境での確認が必要です。

取り消し可能なローカルの判断をユーザーに委ねないでください。既存の契約に沿った動作を推奨し、選択によってプロダクト、データ、権限、またはスコープが変わる場合にのみ質問します。

6. 列挙するだけでなく、検証する

コードまたは実際のプロダクトを利用できる場合は、実装前にリスクの高いシナリオを1〜3件安全に検証するか、検証計画に含めます。仮説を否定できる試験を優先します。再現テスト、ステートマシンテスト、プロパティベーステスト、フォールトインジェクション、または最小限のイベント列などです。

壊れたレイヤーを実際に観測できるシグナルを選びます。視覚的な動作は実際のインターフェースで、データの保持はストレージからの再読み込みで、権限は該当するロールでのリクエストで、復旧は実際の再起動で確認します。不具合を検出できない検証が成功しても、確認済みとはみなしません。

想定したシナリオを、実際に見つかった不具合として提示しないでください。それぞれを「コードで確認済み」「再現済み」「契約から導かれる」「仮説のまま」に分けて明記します。

結果

最も危険な見落としから始めます。各コーナーケースについて、次の表に簡潔にまとめます。

状況期待される動作見落としやすい理由ステータス検証

最後に、どの側面を検証し、どの側面を意図的に対象外としたか、そして確信度を最も大きく制限する未知の要素を1つ挙げます。形式だけのチェックリストにせず、黙ってタスクの範囲を広げないでください。

コメント