# design

Помогает продумать интерфейс вместе с его отказами: что принимает каждый параметр, что вернётся вызывающему коду при сбое и где ставить проверки.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 24
- Автор: rainmanjam
- Лицензия: MIT · policy=mirror · лицензия открытая, файл — в исходнике
- Исходник: https://github.com/rainmanjam/poka-yoke/tree/HEAD/benchmarks/controls/defensive/skills/design/SKILL.md
- Обновлён: 2026-10-14
- HTML: https://affpapa.org/nevibecode/skills/design-3

## Что делает

Скилл включается, когда вы проектируете новый интерфейс, модуль, схему или тип. Аннотация типа ничего не гарантирует: `amount: float` спокойно пропустит отрицательное число, бесконечность и субкопейки. Скилл требует расписать для каждого параметра допустимый диапазон и поставить проверки в начале функции, причём каждая проверка называет значение, которое её не прошло.

Дальше нужно выбрать контракт отказа и держаться его во всём модуле: где бросать исключение, где возвращать результат-исход, а где подставлять значение по умолчанию. Смешаете все три в одном файле, и вызывающему коду придётся помнить, какая функция как себя ведёт. Отдельно разбираются границы: внешняя проверка даёт понятную ошибку отправителю запроса, внутренняя страхует от нового пути вызова, который кто-то добавит позже.

Для схем и хранимых данных скилл просит сделать обязательные поля non-nullable, продублировать ограничения на уровне хранилища и решить судьбу строк, которые появились до текущей валидации. Всё, что ходит наружу, получает предел: таймаут на сетевой вызов, потолок размера входа, лимит повторов с шапкой. Единицу измерения при этом называют в имени параметра — `timeout_seconds`, `max_rows`, `retry_limit`. Без таймаута вызов просто зависнет, и вы увидите не ошибку, а тишину.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add rainmanjam/poka-yoke --skill design -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/design/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/design/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add rainmanjam/poka-yoke --skill design -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/design/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add rainmanjam/poka-yoke --skill design -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/design/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install rainmanjam/poka-yoke design
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/design/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add rainmanjam/poka-yoke --skill design -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/rainmanjam/poka-yoke --path benchmarks/controls/defensive/skills/design
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/design/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add rainmanjam/poka-yoke --skill design -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/rainmanjam/poka-yoke/tree/HEAD/benchmarks/controls/defensive/skills/design/SKILL.md

## Когда брать
- расписать допустимые значения каждого параметра до того, как появились вызывающие
- выбрать между исключением, результатом-исходом и значением по умолчанию для каждого вида отказа
- поставить проверки на входе и повторить их на глубине модуля
- сделать обязательные поля схемы non-nullable и продублировать ограничения в хранилище
- задать таймауты, лимиты размера и потолок повторов для внешних вызовов

## Примеры запросов агенту
- Спроектируй функцию `charge` так, чтобы было ясно, какие значения `amount`, `currency` и `customer_id` проходят, а какие отбиваются
- Опиши контракт отказа для нового модуля заказов: где бросаем исключение, где возвращаем исход
- Продумай валидацию схемы для таблицы платежей и что делать со старыми строками без проверки

## Похожие
- [principle-boundary-discipline](https://affpapa.org/nevibecode/skills/principle-boundary-discipline.md) — скилл · 5100 установок
- [public-api-design-review](https://affpapa.org/nevibecode/skills/public-api-design-review.md) — скилл · 7800 установок
- [api-design](https://affpapa.org/nevibecode/skills/api-design.md) — скилл · 5500 установок
- [postgresql-table-design](https://affpapa.org/nevibecode/skills/postgresql-table-design.md) — скилл · 27780 установок
- [python-error-handling](https://affpapa.org/nevibecode/skills/python-error-handling.md) — скилл · 14116 установок
- [GraphQL API taste](https://affpapa.org/nevibecode/prompts/graphql-api-taste.md) — промпт · ★ 174676

## Другие версии с тем же именем

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
