# keeping-one-source-of-truth

Скилл для агентов, который держит каждый факт в одном месте и мешает копиям расходиться. Пригодится, когда значение так и просится во второй файл.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 17700 установок · ★ 6
- Автор: riekelt
- Лицензия: не указана · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/riekelt/principal-engineer/tree/HEAD/plugins/principal-engineer/skills/keeping-one-source-of-truth/SKILL.md
- Обновлён: 2026-09-11
- HTML: https://affpapa.org/nevibecode/skills/keeping-one-source-of-truth

## Что делает

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

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

Скилл требует предварительного знакомства с `principal-engineering`. Кеши и read-модели он допускает, если копия обновляется автоматически, а её устаревание ограничено и заметно; фикстуры могут намеренно замораживать копию реальности. Границы с TypeError: без базового `principal-engineering` часть ссылок в тексте повиснет.

## Установка

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

1. **Через Skills CLI (Vercel)**
```bash
npx skills add riekelt/principal-engineer --skill keeping-one-source-of-truth -a claude-code
```

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

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add riekelt/principal-engineer --skill keeping-one-source-of-truth -a codex
```

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

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add riekelt/principal-engineer --skill keeping-one-source-of-truth -a cursor
```

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

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install riekelt/principal-engineer keeping-one-source-of-truth
```

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

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add riekelt/principal-engineer --skill keeping-one-source-of-truth -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/riekelt/principal-engineer --path plugins/principal-engineer/skills/keeping-one-source-of-truth
```

### Windsurf (Devin Desktop)

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

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add riekelt/principal-engineer --skill keeping-one-source-of-truth -a opencode
```

### Claude.ai

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

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/riekelt/principal-engineer/tree/HEAD/plugins/principal-engineer/skills/keeping-one-source-of-truth/SKILL.md

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

## Примеры запросов агенту
- Собираюсь добавить лимит в конфиг — проверь, кто уже владеет этим значением, и не заводи вторую копию
- В `settings.py` и `service.yaml` разные пороги таймаута: разберись, какое значение живое, оставь один источник
- Замени строки статусов в двух сервисах на общий перечислимый тип

## Похожие
- [setup-matt-pocock-skills](https://affpapa.org/nevibecode/skills/setup-matt-pocock-skills.md) — скилл · 1052851 установка
- [ask-matt](https://affpapa.org/nevibecode/skills/ask-matt.md) — скилл · 766587 установок
- [to-tickets](https://affpapa.org/nevibecode/skills/to-tickets.md) — скилл · 711230 установок
- [writing-plans](https://affpapa.org/nevibecode/skills/writing-plans.md) — скилл · 282859 установок

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

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