Встроенная инструкция - карта, правила владельца живут рядом
Аудит 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 после подтверждения владельца.