textmachine/docs/orchestrator-norms-scratchpad.md

19 KiB
Raw Blame History

Скратчпад оркестратора №23 — контроль исполнения лупа

Здесь НЕТ копий норм. Нормы живут в docs/ORCHESTRATOR_SESSION_PROMPT.md, копия факта стареет молча (D39.112). Здесь только (а) указатели-чек-лист, по которому я прохожу ПЕРЕД выдачей и ПЕРЕД лендингом, (б) стоячие правила владельца на этот луп, (в) живая раскладка слотов и журнал выдач. Файл рабочий и умирает вместе с очередью №23.

Стоячие правила владельца на этот луп (слово 11.09)

  1. Выполнить ВСЕ промты, задуманные в docs/NEAR_TERM_PLAN.md.
  2. Советоваться со старшим коллегой (Fable 5, постоянный контекст) — при выдаче промта, при ратификации, при лендинге и при ЛЮБОМ сомнении.
  3. Каждый выдаваемый промт писан по ролевой ноте; сверяться с ролевым промтом всегда.
  4. Сессия обязана эхом вернуть промт (блок 9 — своими словами, не пересказом).
  5. Приёмка и лендинг — строго по нормам ролевого промта.
  6. Сессия доводит свой пак до конца САМА и не беспокоит владельца до готовности; финальное исполнение контролирую я.
  7. Большинство паков идёт бэкенд-сессиям — следить за КАЧЕСТВОМ КОДА: никаких лишних велосипедов, воркэраундов и хаков ВОКРУГ проблемы. Нужно логически правильное работающее решение задачи, а не обход проблемы. Это отдельная ось приёмки, а не общее пожелание.
  8. Один промт на зону. Одновременно живут бэкенд · платформа · полигон · фронт; двух промтов одной зоны быть не может. Слот освобождается закрытием пака АКТОМ, а не сдачей работы.
  9. Пустые сессии владелец наспамил — роли назначаю сам, запускаю по одной и довожу до логического завершения.
  10. АВТОНОМИЯ (слово 11.09, 03:00): владелец отошёл и вернётся, когда весь ближайший план ИСПОЛНЕН. Вопросы решаю сам, совещаясь со старшим коллегой; владельца не жду.
  11. Мерило любого решения — в этом порядке: (а) главные ценности продукта — КАЧЕСТВЕННЫЙ КОНСИСТЕНТНЫЙ ИИ-перевод длинных книг/ранобэ; (б) архитектура и чистый код; (в) рефакторинг только действительно необходимый; (г) никакого велосипедостроения. Решение, выигрывающее у (б)(г), но не служащее (а), — неверное решение.

Перед выдачей промта — механическая сверка (перечтение автором рубежом НЕ считается)

  • 13 обязательных блоков — таблицей/грепом против §«Пишешь промт сессии?» (счёт равен нумерации).
  • Опровергатель-субагент к самому промту («найди отсутствующее и противоречащее»).
  • Блок 5 называет 24 уязвимых места ИМЕННО ЭТОГО пака — «сделай самопроверку» дефектна.
  • Разметка свободы у каждого пункта: «ровно так» либо «реши сам и аргументируй».
  • «Инструмент задан» — только после (а) что канон зовёт штатным, (б) не построено ли уже.
  • Фантом-гард: каждая D-ссылка грепается до НОМЕРА ПУНКТА, не до тела ноты.
  • Построчная сверка чужих путей/каналов против зонной таблицы CLAUDE.md.
  • Полигон-пак — дополнительный абзац норм замеров (арм без фактора · дедуп+декой · критик полноты на каждую фазу · пре-рег фриз ДО платных вызовов · активная проверка живости прогона).
  • Кодовый пак — свой абзац (вакуумный пин · клейм = команда · дифф ^func Test исполнением).
  • Пропорциональность: тяжесть аппарата соразмерна весу пака.

Перед лендингом

  • Контроль завершённости ДО приёмки, механически (блок 13).
  • Приёмка адверсариальная; дерево на время прохода заморожено ИЛИ верификатору выдан ГОТОВЫЙ путь.
  • Скипы печатаются рядом с числом ok.
  • Деньги — из сырого леджера двумя независимыми путями.
  • docs/scripts/counts.py --check и --lint перед ратификационным коммитом.
  • git diff -- <файл> по каждому файлу класса «пишет зона, коммитит оркестратор».
  • Коммит pathspec-формой; финал git status --short.
  • Акт закрывает носители ТЕМ ЖЕ движением (ряды бэклога, реестр дефектов, таблица активных промтов).

Раскладка слотов (живая)

Зона Промт Сессия Состояние
бэкенд BACKEND_CONSISTENCY_YOU_CAN_SHOW_SESSION_PROMPT.md textmachine-c9 приёмка, круг 2: шесть посадок выжили → дофикс сдан, жду финальную батарею. F6 мною ОТМЕНЁН после пере-замера
платформа 🟢 СЛОТ СВОБОДЕН (пак «правда у двери» закрыт актом D39.246)
полигон POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md готов, адресата НЕТ — все семь живых сессий отработали, свежую поднимает владелец
фронт заморожен разморозка по критерию NEAR_TERM_PLAN.md

В очереди, написано и ждёт слота: BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md (падение, которое видно) — выдаётся СВЕЖЕЙ бэкенд-сессии сразу, как c9 закроется актом. Опровергатель по нему запущен.

Журнал выдач очереди №23

# зона предмет сессия эхо исход
1 бэкенд структура глав, ДИЗАЙН textmachine-50 своими словами, с возражением закрыт актом D39.245 (без сходимости)
2 платформа правда у двери textmachine-8e своими словами, с контрактным пингом закрыт актом D39.246 (с дофиксом)
3 полигон холодный прогон A (платный) textmachine-23 закрыт актом D39.247; строка 16 закрыта замером
4 ревью МОИХ записей (не пак зоны) textmachine-9a отчёт сдан; часть находок заландена 11.09
5 бэкенд консистентность, которую можно предъявить textmachine-c9 дофикс после шести выживших посадок
6 полигон ремонт прибора готов, выдать некому; предлагался ed и 5c, обе отказались ПО НОРМЕ и обе правы

БЛОКЕР ОЧЕРЕДИ (11.09): свежих сессий не осталось. Прочитано ЦЕЛИКОМ /tmp/textmachine-channel (13 блоков, 95 строк): ed · 5c · 50 · 8e · 23 · c9 · 9aу каждой блок и отработанный пак; d8 мертва. Поднимает сессии ВЛАДЕЛЕЦ. Первый вопрос ему при возвращении. ⚠ Мой промах, из которого это вылезло: читал канал tail -60 над 95 строками и выбирал адресата по остатку ListAgents — норма ушла в ролевой промт и в CLAUDE.md.

Что я должен помнить, пока паки идут

  • Ключи прогона A: путь выдан (backend/.env), файл НЕ читать; живость ключей проверяется ПЕРВЫМ платным вызовом. Отказ по авторизации — стоп сессии и мой поход к владельцу.
  • Пре-рег-таблица прогона A приходит мне ДО фриза — читаю её прежде, чем потратится первый цент.
  • Релей: улика прогона A про многоединичную главу идёт движковой сессии ОТ МЕНЯ отдельным сообщением с её эхо-подтверждением, не напрямую.
  • Кросс-зонная цена перекроя (unit_resolutions платформы, экспортные id термов) придёт от движковой сессии пунктом отчёта — отнести её платформе должен я.

К приёмке прогона A — проверить лично

  • Фриз-коммит и девиация разошлись, и это ЗАКОННО, но должно быть названо. Бинари собраны из клона на b0f5d89; драйвер eval/door_to_file/drive.sh правлен ПОСЛЕ фриза отдельным коммитом 44b33d9 («адрес локального провайдера значит противоположное в двух фазах: обязателен в дыме, запрещён при деньгах на проводе»). Норма пака: девиация — НОВЫМ коммитом и ЯВНО в отчёте. ⇒ при приёмке сверить, что отчёт её называет, и что расхождение «бинари b0f5d89 / драйвер 44b33d9» объявлено, а не замолчано.

Чему меня научили опровергатели 11.09 (не повторять)

  1. Санкция владельца, известная «со слов», носителем НЕ является. Оба пака ссылались на разрешение платного прогона как на факт, а в дереве его не было ни строкой. Завёл носитель — NEAR_TERM_PLAN.md §«Решения владельца».
  2. Пак не заглянул в СВОЮ зону записи. Дизайн-пак заказывал то, что уже лежит в backend/docs/ дизайном-оф-рекорд и рабочим прибором. Теперь у каждого пака первым делом — «что уже лежит у тебя».
  3. Трудность, которой нет. Я написал платформенной сессии, что валидация каталога обязана отличать первый прогон, — каталог создаётся на интейке ДО строки в БД, и различать нечего. Пин на недостижимую ветвь толкает сессию строить exemption, чтобы было что пинить.
  4. «Одно определение на две площадки» бывает недостижимо по построению — опросный путь замка не берёт, и контракт эту асимметрию ратифицировал. Мерило — число ОПРЕДЕЛЕНИЙ, а не площадок.
  5. МОЙ КОММИТ УНЁС ЧУЖУЮ СЕКЦИЮ — 54f8f6c, 11.09. Я правил ОДНУ строку головы в docs/PROGRESS.md и взял файл pathspec-формой целиком, не сделав git diff -- docs/PROGRESS.md; в тот же момент движковая сессия положила туда свою записку-план, и 32 вставки из 33 оказались её. История НЕ переписана (переписывание стёрло бы незакоммиченные правки параллельных сессий), содержимое цело, атрибуция восстановлена сообщением зоне. ⚠ Норма стояла в моём ролевом промте и не сработала, потому что я читал её как «про чужое в ИНДЕКСЕ». Ловится дёшево и постфактум: объём коммита против объёма своей правки — одна строка против тридцати трёх.
  6. «ЭТИ ДВА МЕХАНИЗМА НЕСОВМЕСТИМЫ» — УТВЕРЖДЕНИЕ О КОДЕ, И ЕГО НАДО СПРАШИВАТЬ У КОДА. Я написал в платный пак, что портированная заглушка и провайдер local несовместимы («разные адаптеры»), и запретил бы сессии единственный штатный $0-стенд. Поймала зона: заглушка лежит В РЕПО с комментарием «the P9 live-probe's $0 stand-in, ported», а рядом zeroCostPipeline выбирает модель по Kind == "local". ⚠ Класс ошибки тот же, что «заказал уже построенное», только вывернутый: я объявил НЕВОЗМОЖНЫМ то, что построено и запинено. ⇒ прежде чем писать «несовместимо/невозможно/нечем», грепни предмет — отрицательное утверждение о дереве стоит команды ровно так же, как положительное.
  7. Я ПОСТАВИЛ ПИН, УТВЕРЖДАЮЩИЙ МОЛЧАНИЕ, НА САМЫЙ ДОРОГОЙ ГЕЙТ ПЛАТНОГО ПАКА. «Драйвер отказывает при vcs.modified=true» на бинаре из линкованного воркри выполняется всегда: строк vcs.* там НЕТ вовсе. Поймала зона на первом же замере, я пере-проверил чтением готовых бинарей. Норма ушла в ролевой промт (фриз-дерево — КЛОН, третье условие отказа — отсутствие штампа). ⚠ Класс знал я сам: он записан в CLAUDE.md отдельной строкой про вакуумные пины — и всё равно воспроизвёл его там, где он стоит денег.
  8. Атрибуция нормы к ноте проверяется телом ноты. Ссылка на D39.108 п.1 в моём ролевом промте фантомна: норма верна, нота о другом. Эррата внесена.

Долг, замеченный попутно (не терять)

  • Якоря розданы не все. Платформе — 3 (её пак §4.5), движку — 3 (backend/docs/DISCLOSURE_LAW_DESIGN.md, дизайн-пак §4.9). Полигонные 5 (docs/experiments/) НЕ вошли в пак прогона A сознательно: он платный и идёт по жёсткому порядку фаз, а док-гигиена потребовала бы релея посреди прогона. Отдать их с пере-выдачей «РЕМОНТА ПРИБОРА». Фронтовые 3 — зона заморожена, отдать первым касанием при разморозке.
  • Числа следующего бэкенд-пака пере-сняты МНОЮ, а не взяты из отчёта воркфлоу (11.09): Spread и в mining.go:383, и в bankexport.go:135 описан дословно как «how many DISTINCT renderings the DRAFTS produced» — счёта по ОТГРУЖЕННОМУ тексту нет (контроль: 144 файла в internal/pipeline); порог короткого ключа minKeyLenHan = 2 с пер-записным allow_short; точность глоссарного класса k6 = 0.0667 в books/gu-zhenren/labels/metrics.json (контроль: у соседних классов 1.0, 0.8333, 0.1667, 0.0 — прибор спрошен у существующего предмета и различает).
  • 11 уехавших якорей в ЧУЖИХ зонах (counts.py --lint, 11.09): полигон 5 (docs/experiments/) · бэкенд 3 (backend/docs/DISCLOSURE_LAW_DESIGN.md) · фронт 3 · платформа 3 — платформенные уже врезаны в её пак §4.5. Свои пять я починил (f9216cd). Остальные раздать ПАКАМИ их зон, не чинить самому.
  • Воркфлоу про банк памяти (wm0j2l4kz) умер, отдав пустой файл — вопрос владельца «что банку памяти нужно для качества перевода» носителя не получил; пере-задать при паке «выдача, которую видит читатель».