principle-type-system-discipline — скилл для Claude Code
Задаёт правила строгой типизации: брендирование примитивов, парсинг данных на границах и генерация типов из схем.
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a claude-codeЧто делает principle-type-system-discipline
Скилл учит агента отсекать невозможные состояния на этапе компиляции, а не плодить проверки в глубине кода. Он требует разделять одинаковые по структуре данные через брендирование (например, UserId и OrderId как брендированные типы или newtype), валидируя значения один раз при создании.
Любые входящие данные — JSON или строки баз данных — считаются нетипизированными, пока не пройдут функцию парсинга на границе системы. Параллельные типы вручную не пишутся: структуры выводятся напрямую из спецификаций OpenAPI или GraphQL.
В метаданных скилла включён флаг disable-model-invocation: true, поэтому агент не вызывает его самостоятельно в фоне. Правила нужно подключать к контексту вручную или через связанные скиллы. Для синтаксиса TypeScript автор отсылает к отдельному скиллу typescript-best-practices.
Какие задачи решает
- запретить смешивание одинаковых базовых типов вроде идентификаторов заказа и пользователя
- настроить обязательный парсинг входящего JSON на границах системы
- связать типы в коде со спецификациями OpenAPI или GraphQL без ручного дублирования
- исключить невозможные состояния моделей данных ещё на уровне компилятора
Примеры запросов агенту
- Проверь сигнатуры функций в модуле заказов по правилам principle-type-system-discipline
- Спроектируй брендированные типы для идентификаторов пользователей и сессий
- Напиши парсер для входящего JSON с валидацией на границе контроллера
Как установить principle-type-system-discipline
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a claude-code2Вручную: положить файлы
~/.claude/skills/principle-type-system-discipline/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/principle-type-system-discipline/
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a codex2Вручную: положить файлы
.agents/skills/principle-type-system-discipline/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a cursor2Вручную: положить файлы
.cursor/skills/principle-type-system-discipline/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install backnotprop/pstack principle-type-system-discipline2Вручную: положить файлы
.github/skills/principle-type-system-discipline/SKILL.md1Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a gemini-cli2Командой платформы
gemini skills install https://github.com/backnotprop/pstack --path skills/principle-type-system-disciplineВручную: положить файлы
.devin/skills/principle-type-system-discipline/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill principle-type-system-discipline -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора44
Похожие
Рядом в теме «Код-ревью и рефакторинг»
Всё по теме «Код-ревью и рефакторинг» →Вопросы о principle-type-system-discipline
Как установить principle-type-system-discipline в Claude Code?
Выполните команду npx skills add backnotprop/pstack --skill principle-type-system-discipline -a claude-code.
Зачем нужно брендирование примитивов в этом скилле?
Оно защищает от случайной подмены аргументов с одинаковым базовым типом вроде строк. Вы валидируете идентификатор один раз при создании и дальше опираетесь на проверку компилятора.
Откуда брать типы данных согласно правилам скилла?
Их нужно генерировать из первоисточников: спецификаций OpenAPI, Protobuf, GraphQL или файлов миграций базы данных. Ручное дублирование таких структур запрещено.
Исходный текст
SKILL.md · MIT
--- name: principle-type-system-discipline description: "Apply when designing types, reviewing a function signature, or writing code in any statically-typed language. Make illegal states unrepresentable, brand semantic primitives, parse external data at boundaries, exhaust variants, derive from authoritative schemas." disable-model-invocation: true --- # Type System Discipline Make the compiler reject impossible states, mismatched primitives, and unhandled variants. Prefer defining errors and special cases out of existence over proliferating handlers. For TypeScript syntax, see the `typescript-best-practices` skill. - **Brand semantic primitives.** `UserId` and `OrderId` are strings underneath but should not be interchangeable. Give each its own type, such as a branded intersection in TypeScript or a newtype elsewhere. Validate once at creation, trust the type downstream. If two arguments share a primitive type but mean different things, brand them. - **External data is untyped until parsed.** RPC payloads, JSON, IPC messages, CLI args, config files, environment variables, database rows. Have a parse function at every boundary that turns unstructured input into the typed model. The **boundary-discipline** principle skill says where to put validation. - **Derive types from authoritative schemas.** When a protocol buffer, OpenAPI spec, GraphQL schema, database migration, design-token file, or another file owns a shape, derive from it instead of hand-rolling a parallel type. See the **encode-lessons-in-structure** principle skill.
© backnotprop · MIT · backnotprop/pstack