# Встроенная инструкция - карта, правила владельца живут рядом

Аудит 12.09 (`.scratch/work/reviews/t11-audit.md`) и T11-TRIM (коммиты `218619e7`, `1d37d232`)
собрали три факта, из которых следует решение.

**eve отдаёт модели все markdown-файлы инструкций каждый ход.** `discoverInstructionsSource`
(`node_modules/eve/dist/src/discover/grammar.js`) берёт корневой `instructions.md` первым, затем все
файлы каталога `instructions/` по имени, а `createInstructionsPromptBlocks`
(`node_modules/eve/dist/src/runtime/prompt/compose.js`) склеивает источники `role === "system"` в
один блок `Instructions (instructions)`. Файлы слота читаются с диска каждый ход и в дерево сборки
не копируются (`scripts/lib/authored-paths.ts`: `isLiveInstructionPath`).

**Version-путь копирует замену как есть.** `buildVersion` (`scripts/lib/version-update.ts:857-870`)
кладёт `data/custom/agent/instructions.md` в сборку командой `cpSync`: на Version-установке файл
владельца заменяет встроенную персону целиком и замирает на дне правки. На checkout файл сливается
трёхсторонне (`scripts/lib/custom-layer.ts:500-521`, `git merge-file -p`), при конфликте в дерево идёт
апстрим, а файл владельца уезжает в `data/update-conflicts/`
(`scripts/lib/custom-layer.ts:535-549`). Всё, что приехало релизом после дня правки, до модели не
доходит: пока замена жива, встроенная инструкция мертва (инцидент 12.09: владелец не получал ни
правил доставки, ни напоминаний).

**«Основа плюс правила» в одном файле не сливается.** Фикстуры A и C аудита: апстрим дописывает
раздел в конец встроенного файла - трёхстороннее слияние даёт конфликт (exit=1), потому что обе
стороны правят один файл; полный рерайт конфликтует всегда. Последние правки
`agent/instructions.md` в репозитории дописывались именно в конец.

## Что решено

**Встроенная `agent/instructions.md` - карта.** Роль, границы, указатели «за чем куда идти» и
короткие обязательные правила; подробности (форматы времени, поведение тулов, онбординг
подключений) живут в описаниях тулов и телах скиллов и приходят по запросу. Карта держится в
пределах 5 000 знаков (владелец, 22.09.2026; до этого 3 000): разросшаяся карта снова становится стеной, которую убирали `293a9158` и
T11-B.

**Правила владельца - отдельные живые файлы.** Markdown в
`data/custom/agent/instructions/*.md` читается с диска каждый ход рядом с встроенной персоной
(`agent/instructions/30-owner-rules.ts`, `agent/lib/owner-rules.ts`): порядок по имени, общий
предел 4 000 знаков, `iva doctor` показывает счёт и предупреждает о переборе. В чате правило
пишется моделью через `write_file` после явного подтверждения владельца: отдельного тула нет
(решение владельца 12.09, `218619e7`), `write_file` владеет слотом, и второго пути писателя,
который мог бы разойтись с первым, не появляется.

**Замена `data/custom/agent/instructions.md` устарела.** `iva doctor` называет файл,
документация ведёт с него на `rules.md`, новые правила в него не пишутся.

## Что отвергнуто

**Замена встроенной персоны целиком.** Прожила с 10.08 до 12.09: застыла на дне правки и потеряла
доставку, напоминания и политику тулов; каждый Release улучшал файл, которого модель не видела.
Отвергнуто владельцем.

**Слияние «основа плюс правила» в одном файле.** Фикстура A: конфликт на любой апстрим-правке в
конец, потому что правило владельца и абзац Release живут в одном файле.

**Правила поведения в CORE.** Память не правила: CORE держит факты и цели и делит с ними общий
предел 3 600 знаков (`agent/lib/core-cap.ts`), а правило поведения должно переживать очистку
памяти и не конкурировать с фактами за место.

**Статический слот и `/update` на каждое правило.** Регресс против пути через CORE: правило
перестаёт действовать до ближайшего обновления, а «запомни правило» требует от владельца команды.

**Отдельный тул `instructions_add_rule`.** Сначала появился (`9b7f0b7`), затем убран владельцем
12.09 (`218619e7`): один способ писать файл лучше двух, а `write_file` уже умеет прочитать,
дописать и создать файл. Модель пишет `rules.md` после подтверждения владельца.
