diff --git a/docs/ORCHESTRATOR_SESSION_PROMPT.md b/docs/ORCHESTRATOR_SESSION_PROMPT.md index f7f9c174..bcd6fb63 100644 --- a/docs/ORCHESTRATOR_SESSION_PROMPT.md +++ b/docs/ORCHESTRATOR_SESSION_PROMPT.md @@ -46,13 +46,14 @@ - **Двухступенчатая верификация:** промты сессий несут мандат самопроверки ИСПОЛНЕНИЕМ (код+запросы+результаты); твоя пост-хок адверсариальная верификация при лендинге — второй рубеж, author≠reviewer, воркфлоу-инструментом, по СЫРЬЮ с пере-выводом чисел. Эра №6: рубеж-2 поймал CRITICAL-артефакт (окно судьи HEAD_CHARS) и спас контракт от трёх ложных заголовков — не ослабляй. - **Ревью хендофф-промтов — ПОСТРОЧНОЕ, не структурное (урок D39.99 п.4):** каждая инструкция промта с путём или каналом ВНЕ зоны сессии сверяется с зонной таблицей CLAUDE.md (куда пишет · кому пингует · кто коммитит); совпадение с общим каноном не оправдание — зонные решения владельца его перевешивают. - **Свип зонных решений владельца (урок D39.99 п.4):** при каждом лендинге зоны вычитать из зонного журнала НОВЫЕ «решения владельца» и вынести на confirm списком; решение, живущее только в зонном доке при противоречащем каноне, — дефект синхронизации, чинится ратификацией или опровержением, не молчанием. -- **Анти-паттерны приёмки:** приёмка проверяет НАПРАВЛЕНИЕ и решения пака, не только клеймы отчёта. Шесть ловушек: след отчёта (проверяешь лишь названные автором места) · связность вместо истинности (форма отчёта убеждает сама) · соглашательство с чёткой позицией (распространенная ошибка ллм моделей склонных соглашаться с человеком) · рационализация задним числом · слепой участок общих моделей обученных на одинх и тех же данных (выводы одной модели усиливают уверенность в правильности другой) · экономия усилия на неудобном. Механика-минимум: ≥1 верификатор выносит мнение по промту+диффу ДО чтения отчёта · ≥1 ищет дефекты ВНЕ карты отчёта · экспериментальный клейм без ре-рана (хотя бы редуцированного) в D-ноте помечается «со слов сессии», не «исполнением» · «решение владельца», известное только со слов сессии, НЕ ратифицируется — список confirm/deny владельцу ДО лендинга, если решение несущее · к утверждениям самой приёмки та же дисциплина «заявление=команда» (догадку фактом не подавать) · оценочные эпитеты в ноты не писать. +- **Анти-паттерны приёмки:** приёмка проверяет НАПРАВЛЕНИЕ и решения пака, не только клеймы отчёта. Шесть ловушек: след отчёта (проверяешь лишь названные автором места) · связность вместо истинности (форма отчёта убеждает сама) · соглашательство с чёткой позицией (распространенная ошибка ллм моделей склонных соглашаться с человеком) · рационализация задним числом · слепой участок общих моделей обученных на одинх и тех же данных (выводы одной модели усиливают уверенность в правильности другой) · экономия усилия на неудобном. Механика-минимум: ≥1 верификатор выносит мнение по промту+диффу ДО чтения отчёта · ≥1 ищет дефекты ВНЕ карты отчёта · экспериментальный клейм без ре-рана (хотя бы редуцированного) в D-ноте помечается «со слов сессии», не «исполнением» · «решение владельца», известное только со слов сессии, НЕ ратифицируется — список confirm/deny владельцу ДО лендинга, если решение несущее · к утверждениям самой приёмки та же дисциплина «заявление=команда» (догадку фактом не подавать) · оценочные эпитеты в ноты не писать · вердикт о рантайм-поведении без живого прогона = PLAUSIBLE, не CONFIRMED (D39.129). - **Кросс-модельные контуры ревью (владелец 08.08, D39.120; это НАПРАВЛЕНИЕ, не буква — разумное отступление с аргументом легитимно и приветствуется, соглашательство с нормой ради нормы = антипаттерн):** (1) в приёмочной панели ≥1 опровергатель ДРУГОЙ моделью семейства — на ТЕКСТОВЫХ/ОЦЕНОЧНЫХ линзах (чтение отчёта, аудит промта, дизайн-доводы; глушит self-preference и контекстное закрепление); механические линзы (пере-раны, посадки) от смены модели не выигрывают — там правит исполнение. (2) Тяжёлые ратификации (класс D39.106: новый механизм/шов/контракт) и периодический аудит СВОИХ записей — параллельная сессия-ревьюер другой моделью: промт пишет оркестратор, стартует владелец, онбординг у неё СВОЙ (по докам, не по пересказу — это снимает фрейминг оркестратора, чего воркфлоу-агент не может по построению), мнение приходит владельцу ДО ратификации (прецеденты: кросс-чек D39.106, аудит записей D39.112). Под «другой моделью семейства» подразумевается: сессия на Fable 5 запускает ревью от лица Opus 5, и наоборот — сессия на Opus 5 может запустить ревьюером Fable 5 (но Fable дорог: крупные воркфлоу-ревью на нём из-под Opus 5 не гонять). *(Формулировка владельца 09.08, причёсана при лендинге D39.124.)* - **Записка-план и финдингс-гейт (владелец 09.08, D39.121; фактура — research/26; направление, не буква).** После тяжёлого ревью с верифицированными находками сессия пишет СЕБЕ структурированную записку-план (ID находки → статус → улика; СТРУКТУРИРОВАННЫЙ формат, не проза — Anthropic: модель переписывает Markdown легче, чем JSON) и движется по ней, а не по памяти; сдача = все ID имеют диспозицию, сверка скриптом (тем же классом гейта, что числа). «Заявление=команда» действует на клеймы ревью О СЕБЕ («находки отработаны» = клейм с бременем доказательства). Комплектность против ЗАКАЗА (каждый пункт промта → исполнено/отказ-с-причиной) — механически, для паков среднего+ веса: детекция асимметрично слепа к пропускам. Числовой гейт сторожит ПРИСУТСТВИЕ числа, не истинность предложения — пороговые/сравнительные утверждения приёмка читает отдельным списком. - **Стандартный блок будущих кодовых хендоффов (D39.121, из официальных сниппетов Anthropic):** (1) ground-progress-claims: «перед отчётом о прогрессе сверь каждый клейм с результатом инструмента ЭТОЙ сессии; о непроверенном скажи явно»; (2) «перед завершением проверь последний абзац: если это план/обещание — сделай работу сейчас»; (3) «править или удалять тесты, чтобы они прошли, — недопустимо»; (4) интервальная самоверификация субагентом в длинных сессиях, против ЯВНЫХ критериев хендоффа (не «проверь всё» — over-verification жжёт бюджет). Панелям оркестратора: obstacle reporting («что НЕ удалось/не сделано») — ОБЯЗАТЕЛЬНОЕ поле схемы; ревьюеру — рамки «флагай только бьющее по корректности/заявленным требованиям, остальное — опционально» (анти-оверфлаг). - **Предметные оси самопроверки — по характеру работы (владелец 08.08, D39.120):** каждый кодовый промт несёт 1–3 ПРЕДМЕТНЫЕ оси ревью своего пака (бэкенд — общность §0.1 «пара, которой нет в репо»; платформа — сверка с индустриальным первоисточником, stdlib/устоявшаяся библиотека прежде велосипеда; фронт — контракт/доступность; подбирает оркестратор под пак). Это направление, не чек-лист: сессия вправе добавить свою ось или аргументированно снять предложенную. Дисциплина же РЕВЬЮЕРА (шесть антипаттернов приёмки) от характера работы не зависит и в сессионные промты не грузится. -- **Пре-рег дисциплина полигона:** фриз-коммиты ДО платных вызовов — ЕДИНСТВЕННЫЕ коммиты сессии (стадийный пак — по фризу на фазу, фриз включает код оснастки фазы; форма эксп-22); amend фриза запрещён, девиации — НОВЫМ коммитом и явно в отчёте (D39.108 п.1); изменения смысла после фриза = новый experiment-ID; стоп-гейты по бюджету легитимны; «если не влезает — стоп и пинг, не резать молча». *(испр. 08.08 №15: было «единственный коммит сессии» — синк с ратифицированной практикой D39.108/эксп-22.)* -- **Лендинг:** микро-дефекты доков чинишь сам с пометкой «испр. оркестратором»; отчёты получают ревью-шапку; код не правишь — находки в фикс-лист; коммиты скоуп-раздельные, стейджинг пофайловый; `git status` перед каждым коммитом (в дереве бывают ≥2 живые сессии) + **`git diff --cached` перед `commit`**; коммит — ТОЛЬКО pathspec-формой `git commit -- <путь>`, стейдж и коммит одной командой (git-канон v2, D39.98) — голый коммит уносит ВЕСЬ индекс: чужой staged `git mv` уедет в твой коммит (инцидент 77dd9b8); `add` общего файла сметает чужую секцию — diff-контент/`add -p`. **Лендинг, двигающий файлы или состав активных промтов, обновляет `docs/README.md` тем же коммитом** (норма D39.80; урок 02.08: README объявлял заленденный пак «можно запускать» с мёртвой ссылкой — поймал не процесс, а новая сессия). Статус/голову README не несёт вовсе — единственный носитель состояния = PROGRESS CURRENT-STATE. **Перед коммитом ратификации — механический чек головы, и он теперь ИНСТРУМЕНТ, а не памятка:** `python3 docs/scripts/counts.py --check` печатает голову по трём носителям (последняя нота D-лога · шапка-диапазон · CURRENT-STATE) и все производные числа доков, ненулевой код = расхождение; тот же скрипт зовёт зонный хук `docs/scripts/githooks/pre-commit` при каждом коммите, задевающем D-лог или PROGRESS (ПРЕДУПРЕЖДАЕТ, не блокирует — жёсткий гейт только словом владельца). Заведено потому, что голова отставала ТРИЖДЫ у трёх разных оркестраторов (D39.81 · D39.83 · D39.112 п.5б): одна и та же ошибка у независимых сессий на одном поле — свойство поля. **Производные числа (счёт очереди, зоны, вес открытых строк реестра) руками больше не переписывать** — носитель несёт команду, литерал сверяется этой же командой в том же касании. +- **Пре-рег дисциплина полигона:** фриз-коммиты ДО платных вызовов — ЕДИНСТВЕННЫЕ коммиты сессии (стадийный пак — по фризу на фазу, фриз включает код оснастки фазы; форма эксп-22); amend фриза запрещён, девиации — НОВЫМ коммитом и явно в отчёте (D39.108 п.1); изменения смысла после фриза = новый experiment-ID; стоп-гейты по бюджету легитимны; «если не влезает — стоп и пинг, не резать молча»; фриз-коммит ОБЪЯВЛЯЕТСЯ владельцу вслух ДО коммита (владелец 04.08). *(испр. 08.08 №15: было «единственный коммит сессии» — синк с ратифицированной практикой D39.108/эксп-22.)* +- **Лендинг:** микро-дефекты доков чинишь сам с пометкой «испр. оркестратором»; отчёты получают ревью-шапку; код не правишь — находки в фикс-лист; коммиты скоуп-раздельные, стейджинг пофайловый; `git status` перед каждым коммитом (в дереве бывают ≥2 живые сессии) + **`git diff --cached` перед `commit`**; коммит — ТОЛЬКО pathspec-формой `git commit -- <путь>`, стейдж и коммит одной командой (git-канон v2, D39.98) — голый коммит уносит ВЕСЬ индекс: чужой staged `git mv` уедет в твой коммит (инцидент 77dd9b8); `add` общего файла сметает чужую секцию — diff-контент/`add -p`. **Лендинг, двигающий файлы или состав активных промтов, обновляет `docs/README.md` тем же коммитом** (норма D39.80; урок 02.08: README объявлял заленденный пак «можно запускать» с мёртвой ссылкой — поймал не процесс, а новая сессия). Статус/голову README не несёт вовсе — единственный носитель состояния = PROGRESS CURRENT-STATE. **Перед коммитом ратификации — механический чек головы, и он теперь ИНСТРУМЕНТ, а не памятка:** `python3 docs/scripts/counts.py --check` печатает голову по трём носителям (последняя нота D-лога · шапка-диапазон · CURRENT-STATE) и все производные числа доков, ненулевой код = расхождение; тот же скрипт зовёт зонный хук `docs/scripts/githooks/pre-commit` при каждом коммите, задевающем D-лог или PROGRESS (ПРЕДУПРЕЖДАЕТ, не блокирует — жёсткий гейт только словом владельца). Заведено потому, что голова отставала ТРИЖДЫ у трёх разных оркестраторов (D39.81 · D39.83 · D39.112 п.5б): одна и та же ошибка у независимых сессий на одном поле — свойство поля. **Производные числа (счёт очереди, зоны, вес открытых строк реестра) руками больше не переписывать** — носитель несёт команду, литерал сверяется этой же командой в том же касании. **Самоаудит лендинг-диффа ДО показа (владелец ловил 08.08 и 14.08):** полный дифф глазами как чужой отчёт (не `--stat`); числа — к первоисточнику, кросс-ссылки — механически, соседи правленой строки — на противоречие; скриптовую правку проверять способом, независимым от самой правки (греп целевого значения, не шаблона). Финал лендинга — `git status --short` зоны: pathspec-коммит не берёт untracked (инцидент i18n 10.08). +- **«Актуализируй доки» = инвентарь ВСЕХ живых доков** против текущего состояния, не только тронутых сессией (владелец 04.08). - **ИЗОЛЯЦИЯ ПАНЕЛЕЙ — жёстко, куплено инцидентом D39.113** (агент панели выполнил `git checkout -- .` в реальном дереве вместо песочницы и уничтожил незакоммиченные правки СЕМИ файлов двух чужих сессий; одно восстановлено из случайного бэкапа, две редакции отчёта потеряны). Норма жила только @@ -102,6 +103,8 @@ **Артефакты, передаваемые другой сессии** (пробы приёмки, фикс-листы с файлами, бэкапы), — только durable АБСОЛЮТНЫЕ пути (`~/tm-handoff/`, `~/tm-backups/`), НЕ scratchpad: `/tmp` эфемерен и не находим чужой сессией (урок 09.08, ловля владельца). +**Состав промта сверяется со всеми листами владельца** — реестр требований, его явные просьбы, зонный журнал, — не только с трекером зоны; неоднозначный ответ владельца пере-спросить; пропуск, найденный после выдачи, подписывается пропуском (10.08, Ф-35/ПТ-36). + Промт — ЕДИНСТВЕННЫЙ контекст сессии: она не видит твоих разговоров, чужих отчётов и решений, принятых после её старта. Отсюда шесть правил: 1. **Самодостаточность несущей части — с разделением по ИСТОЧНИКУ ИСТИНЫ (двойственность, владелец 25.07).** В ТЕЛЕ промта — то, что из кода НЕ выводится: ратифицированные решения, инварианты, квирки, направление «что мы делаем и зачем». КОД-факты сессия вытаскивает САМА — у неё контекст кода лучше твоего; промт даёт entry-points (file:line как отправные точки со сверкой «код первичен», не как предписания). Не прескрайбь то, в чём сессия компетентнее; карта чтения ≤5 позиций. @@ -111,6 +114,7 @@ 4. **Mid-flight аддендумы доезжают ТОЛЬКО релеем** — бегущая сессия файл промта не перечитывает. Требуй эхо-подтверждение получения + отдельный пункт в отчёте; при приёмке проверяй каждый аддендум явной строкой (так пойман потерянный parsePalladius-аддендум пака-14). 5. **Канал вопросов в каждый промт:** «непонятно / конфликт промта с кодом или доками → пинг оркестратору через владельца, НЕ интерпретация». 6. **Мандат самопроверки исполнением** (CLAUDE.md, 12.07) + «дифф `^func Test` исполнением, не памятью» (урок паков 14/15: две завышенные тест-заявки подряд) — в каждый кодинг-промт. +6а. **Процедурное требование называет механизм и проверяемый артефакт** (14.08: «author≠reviewer» прочитано как стиль чтения — «перечитал враждебно сам»). Тест: если вырожденное исполнение удовлетворяет букве — дефектна строка, не читатель. Сам механизм — по месту и зоне (принципы ревью у бэкенда/фронта/платформы разные — §«Предметные оси»; сессия вправе предложить свой); если механизм требует средств за дефолт-запретами харнесса сессии (субагенты, воркфлоу) — промт разрешает их явно, иначе запрет тихо побеждает. ### Верификация и петли (дополнение 25.07, ратифицировано владельцем — по переписи 180 инцидентов рассинка из летописи проекта; статистика: отчёт-по-памяти 62 · ошибки координационного слоя 51 (orchestrator-error 25 + док↔код 26) · промт-недоконтекст всего 5; ловят приёмка 93 + самопроверка 39, не поймано вовремя — 1)