diff --git a/docs/ORCHESTRATOR_SESSION_PROMPT.md b/docs/ORCHESTRATOR_SESSION_PROMPT.md index edc9ca2a..1945c3da 100644 --- a/docs/ORCHESTRATOR_SESSION_PROMPT.md +++ b/docs/ORCHESTRATOR_SESSION_PROMPT.md @@ -32,6 +32,7 @@ ## Текущее состояние и очередь — НЕ здесь +Они живут в `docs/PROGRESS.md`: CURRENT-STATE (шапка) и ЕДИНЫЙ БЭКЛОГ (единственный трекер). Производные числа — `python3 docs/scripts/counts.py`, руками не переписывать. ## Онбординг (порядок чтения, ~20 мин после диеты 25.07) @@ -48,6 +49,18 @@ - **Анти-паттерны приёмки:** приёмка проверяет НАПРАВЛЕНИЕ и решения пака, не только клеймы отчёта. Шесть ловушек: след отчёта (проверяешь лишь названные автором места) · связность вместо истинности (форма отчёта убеждает сама) · соглашательство с чёткой позицией (распространенная ошибка ллм моделей склонных соглашаться с человеком) · рационализация задним числом · слепой участок общих моделей обученных на одинх и тех же данных (выводы одной модели усиливают уверенность в правильности другой) · экономия усилия на неудобном. Механика-минимум: ≥1 верификатор выносит мнение по промту+диффу ДО чтения отчёта · ≥1 ищет дефекты ВНЕ карты отчёта · экспериментальный клейм без ре-рана (хотя бы редуцированного) в D-ноте помечается «со слов сессии», не «исполнением» · «решение владельца», известное только со слов сессии, НЕ ратифицируется — список confirm/deny владельцу ДО лендинга, если решение несущее · к утверждениям самой приёмки та же дисциплина «заявление=команда» (догадку фактом не подавать) · оценочные эпитеты в ноты не писать. - **Пре-рег дисциплина полигона:** фриз коммитом ДО платных вызовов (единственный коммит сессии); изменения после = новый experiment-ID; девиации — явно в отчёте; стоп-гейты по бюджету легитимны; «если не влезает — стоп и пинг, не резать молча». - **Лендинг:** микро-дефекты доков чинишь сам с пометкой «испр. оркестратором»; отчёты получают ревью-шапку; код не правишь — находки в фикс-лист; коммиты скоуп-раздельные, стейджинг пофайловый; `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б): одна и та же ошибка у независимых сессий на одном поле — свойство поля. **Производные числа (счёт очереди, зоны, вес открытых строк реестра) руками больше не переписывать** — носитель несёт команду, литерал сверяется этой же командой в том же касании. +- **ИЗОЛЯЦИЯ ПАНЕЛЕЙ — жёстко, куплено инцидентом D39.113** (агент панели выполнил `git checkout -- .` + в реальном дереве вместо песочницы и уничтожил незакоммиченные правки СЕМИ файлов двух чужих + сессий; одно восстановлено из случайного бэкапа, две редакции отчёта потеряны). Норма жила только + в D-логе — вписана сюда, потому что читают промт. **(1) Свой каталог песочницы КАЖДОМУ агенту** — + общий путь даёт гонку и исчезающие каталоги, и именно так исчезла та песочница. **(2) Запрет + state-changing git ПЕРЕЧИСЛЕНИЕМ** (`reset` · `checkout` · `restore` · `clean` · `stash` · `add` · + `commit` · `rebase` · `push`), а не фразой «не редактируй»: git правит дерево не редактором. + В `.claude/settings.local.json` эти команды теперь в `deny` — проверено, безвредный `git stash list` + отбивается; но настройки не коммитятся, на свежем клоне защиты нет. **(3) Бэкап чужого + незакоммиченного ДО запуска панели** — `git diff > файл` вне репозитория плюс копии нетрекаемых. + **(4) Мандат чисто читающий**, и «работай в копии» без выданного пути — приглашение к тому же + инциденту. - **ОДИН НОСИТЕЛЬ НА ФАКТ, остальные — указатель (норма D39.112, куплена дорого).** Один лендинг зоны законно рождает пять записей: раздел зонного журнала · D-нота · строка CURRENT-STATE · строка реестра дефектов · строка бэклога. Это не дублирование — у них разные читатели и разные срезы: diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index fac30683..3089205b 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,12 +1,12 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-08, голова D39.115; хендофф №14→№15 — D39.107). ⚠⚠ **ИНЦИДЕНТ 08.08 00:13 (D39.113): агент моей панели откатил незакоммиченные правки СЕМИ файлов чужих сессий** — `git checkout -- .` в реальном дереве вместо песочницы. Пинг полигона в этом файле ВОССТАНОВЛЕН из бэкапа 00:08; безвозвратно потеряны правки отчёта эксп-21, промта полигона, Приложения А контракта и трёх скриптов `eval/role_topology/`. Коммиты целы. Инвентарь и норма изоляции панелей — D39.113. ⚠ **Оркестраторов сейчас ДВА, зоны разведены явно (решение владельца 07.08):** №15 — приёмка ПЛАТФОРМЫ (исполнена, D39.109–D39.114: P1+P2 приняты, фикс-пак P3 принят и заленден `99f049c` — девять строк регистра закрыты, 8/8 моих посадок поймано, PD-80 и PD-91 пере-проверены исполнением; записи верифицированы независимым агентом, поправки — D39.112) · ВТОРОЙ, параллельный — приёмка ПОЛИГОНА (эксп-21, ждёт результатов; его пинг лежит в секции «Полигон» незакоммиченным). **Номер второму НЕ выдан намеренно:** канонический счётчик один и живёт в `ORCHESTRATOR_SESSION_PROMPT.md`, а выдавать номер сессии, которой я не писал промт, — второй носитель состояния. Одновременно не запускаются; CURRENT-STATE ведут оба, каждый пишет про свою зону и чужую строку не трогает. -> - **Сессия №15 (07.08, ИСПОЛНЕНА):** **приёмка платформы P1+P2 — ПРИНЯТО и ЗАЛЕНДЕНО `fcdab81`** (62 файла, +7066/−252; D39.109). Адверсариально: своя батарея с живым PostgreSQL 18.4 (скипов ноль) · 45 СВОИХ мутаций (33 поймано, 8 выжило, 4 моих посадки негодны и разобраны) · живые пробы на боевом бинаре (PD-2 отпускает на 30.0 с; RFC 9207 сверен у Google) · панель 7 линз с опровергателем на каждую находку. Ратифицировано 6 решений (срок сессии 30 суток — **CONFIRM владельца 07.08 получен** · `iss` авторизационного ответа + миграция 00008 · §13 политики сессий · ломающие изменения зоны · `MemoryMax=80%`+`OOMPolicy=continue` · PD-71 риском). Регистр зоны доведён до **PD-107**. На момент приёмки открытыми были тридцать семь строк, весом major — три: PD-80 (вход выключается ~3 rps, и 429 колбэка добивает начатые входы) плюс PD-95 и PD-105, поднятые эрратой как задание эмиттеру. ⚠ **Числа здесь ИСТОРИЧЕСКИЕ — это то, что нашла приёмка;** живой счёт регистра меняется с каждым фиксом зоны и берётся командой `python3 docs/scripts/counts.py`, а не из этой строки (норма D39.112: один носитель на факт). **Живой уязвимости нет.** ⚠ **ЭРРАТА 07.08 (поймано вопросом владельца, не процессом):** приёмка пропустила, что **D39.106 п.3 снял пайп-транспорт** («PD-59 superseded; пайп-путь `supervisor.go` P1 = дев-режим»), и приняла зонную секцию «канал остаётся stdout» как живое решение. Ратифицированная форма — транзиентный systemd-юнит на прогон, платформа НЕ родитель, события = `events.jsonl` каталога книги, платформа ТЕЙЛИТ с курсором (`research/25` §Форма; родитель+пайп 0/15 голосов). Исправлено: секция журнала помечена superseded, PD-95 переписан и поднят в вес, PD-92 понижен до info, PD-105 повышен, PD-60 пере-диспозиционирован; вердикт лендинга не меняется (код и был дев-путём по D39.107 п.3). ⚠ Пять строк реестра — движковые по существу и должны быть разрулены ДО промта эмиттера (строка 103): PD-95 (транспортная история зоны устарела против D39.106 в двух местах — эмиттер-сессия прочтёт её как задание) · PD-105 (дубль `seq` = убитый платный прогон против норматива «дубль не ошибка»; при тейле файла повторная доставка — норма) · PD-79 (строковый `"null"` в цене = ноль денег) · PD-99 (argv на INFO — деньги/book-id при воркере) · PD-107 (удаление аккаунта обходит гарантию PD-25) · **PD-60 и PD-61** (обратное давление и сброс буфера — свойства эмиттера, задаются дешевле ДО постройки, чем миграцией после; PD-60 переформулируется под файл-транспорт). **Потолок прогона РЕШЁН владельцем 07.08 и ратифицирован формой (D39.110):** шкала в интерфейсе от минимума (ноль нельзя) до баланса аккаунта ⇒ Р7 не амендируется, «выключено» не существует как состояние. Добор: единица шкалы — ГЛАВЫ, не доллары (иначе амендмент D39.84) · потолок в `book.yaml` НЕ пишется, движку нужен приём на прогон — НОВАЯ строка **145** · максимум шкалы = баланс минус открытые холды. **Фри-тир:** ответ дан нормой (автогрант без якоря — не стандарт; `email_verified` Google якорем не является), предложение оркестратора — на бете дефолт в НОЛЬ и начисление руками, при платежах $5 вместе с суточным потолком; **ждёт слова владельца** (PD-104, там же расхождение док↔код: реестр обещает ноль, код начисляет $5) · **приёмка экспов 18/19/20 ИСПОЛНЕНА и залендена** (D39.108: приняты с ревью-шапками; §5.2 экспа 20 — «со слов»; деньги сессии полигона $2.0720; квирк §3б отозван, §3а в силе; D21.4/D21.10 закрыты) · **эксп-21 «топология ролей» — промт выдан** (`POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md`: скрин моделей по 7 ключам → бейк-офф топологий на невиданном срезе; потолки ПРЕДВАРИТЕЛЬНЫЕ ≈$7.3 стадиями; **ЗАПУСК = слово владельца**) · строки 135–144 заведены, 103/106/134/65/55/12 пере-диспозиционированы · дальше по D39.107 п.3: промты эмиттера (бэкенд) и денег шва (платформа) — по команде · **S3 «слой данных» ПРИНЯТ и заленден `60595f6` (D39.115): контракт 0.2.0 в каноне, копии байт-равны, блоки компаньона 2.14–2.16 внесены; сессия нашла ТРИ ошибки оркестратора — «баланс минус холды» (вычитание дважды, пере-мерено), `nullable: true` невалиден в 3.1, инструкция внутри нормативного дока протухла от исполнения; норма «не ходить в чужую зону» амендирована: не ПИСАТЬ, а читать код для сверки — можно и нужно** · вахта deepseek-v4-pro — пере-проба маппинга вшита в Ф1 эксп-21 · мини-проба флора 44 — одобрена, промт не выдан. **Открыто на владельце:** запуск эксп-21 (потолки + готовность слепого чтения ~50 пар) · передача платформы · Приложение А `14-api-contract` (незакоммичено) · запуск S3 · 116 (порог подан) · мини-проба 44 · подпись денежного шага 46 · лист В-3+К-6 · вопрос платформы (авто-резюме `paused`). +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-08, голова D39.116; хендофф №14→№15 — D39.107). ⚠⚠ **ИНЦИДЕНТ 08.08 00:13 (D39.113): агент моей панели откатил незакоммиченные правки СЕМИ файлов чужих сессий** — `git checkout -- .` в реальном дереве вместо песочницы. Пинг полигона в этом файле ВОССТАНОВЛЕН из бэкапа 00:08; безвозвратно потеряны правки отчёта эксп-21, промта полигона, Приложения А контракта и трёх скриптов `eval/role_topology/`. Коммиты целы. Инвентарь и норма изоляции панелей — D39.113. ⚠ **Оркестраторов сейчас ДВА, зоны разведены явно (решение владельца 07.08):** №15 — приёмка ПЛАТФОРМЫ (исполнена, D39.109–D39.114: P1+P2 приняты, фикс-пак P3 принят и заленден `99f049c` — девять строк регистра закрыты, 8/8 моих посадок поймано, PD-80 и PD-91 пере-проверены исполнением; записи верифицированы независимым агентом, поправки — D39.112) · ВТОРОЙ, параллельный — приёмка ПОЛИГОНА (эксп-21, ждёт результатов; его пинг лежит в секции «Полигон» незакоммиченным). **Номер второму НЕ выдан намеренно:** канонический счётчик один и живёт в `ORCHESTRATOR_SESSION_PROMPT.md`, а выдавать номер сессии, которой я не писал промт, — второй носитель состояния. Одновременно не запускаются; CURRENT-STATE ведут оба, каждый пишет про свою зону и чужую строку не трогает. +> - **Сессия №15 (07.08, ИСПОЛНЕНА):** **приёмка платформы P1+P2 — ПРИНЯТО и ЗАЛЕНДЕНО `fcdab81`** (62 файла, +7066/−252; D39.109). Адверсариально: своя батарея с живым PostgreSQL 18.4 (скипов ноль) · 45 СВОИХ мутаций (33 поймано, 8 выжило, 4 моих посадки негодны и разобраны) · живые пробы на боевом бинаре (PD-2 отпускает на 30.0 с; RFC 9207 сверен у Google) · панель 7 линз с опровергателем на каждую находку. Ратифицировано 6 решений (срок сессии 30 суток — **CONFIRM владельца 07.08 получен** · `iss` авторизационного ответа + миграция 00008 · §13 политики сессий · ломающие изменения зоны · `MemoryMax=80%`+`OOMPolicy=continue` · PD-71 риском). Регистр зоны доведён до **PD-107**. На момент приёмки открытыми были тридцать семь строк, весом major — три: PD-80 (вход выключается ~3 rps, и 429 колбэка добивает начатые входы) плюс PD-95 и PD-105, поднятые эрратой как задание эмиттеру. ⚠ **Числа здесь ИСТОРИЧЕСКИЕ — это то, что нашла приёмка;** живой счёт регистра меняется с каждым фиксом зоны и берётся командой `python3 docs/scripts/counts.py`, а не из этой строки (норма D39.112: один носитель на факт). **Живой уязвимости нет.** ⚠ **ЭРРАТА 07.08 (поймано вопросом владельца, не процессом):** приёмка пропустила, что **D39.106 п.3 снял пайп-транспорт** («PD-59 superseded; пайп-путь `supervisor.go` P1 = дев-режим»), и приняла зонную секцию «канал остаётся stdout» как живое решение. Ратифицированная форма — транзиентный systemd-юнит на прогон, платформа НЕ родитель, события = `events.jsonl` каталога книги, платформа ТЕЙЛИТ с курсором (`research/25` §Форма; родитель+пайп 0/15 голосов). Исправлено: секция журнала помечена superseded, PD-95 переписан и поднят в вес, PD-92 понижен до info, PD-105 повышен, PD-60 пере-диспозиционирован; вердикт лендинга не меняется (код и был дев-путём по D39.107 п.3). ⚠ Пять строк реестра — движковые по существу и должны быть разрулены ДО промта эмиттера (строка 103): PD-95 (транспортная история зоны устарела против D39.106 в двух местах — эмиттер-сессия прочтёт её как задание) · PD-105 (дубль `seq` = убитый платный прогон против норматива «дубль не ошибка»; при тейле файла повторная доставка — норма) · PD-79 (строковый `"null"` в цене = ноль денег) · PD-99 (argv на INFO — деньги/book-id при воркере) · PD-107 (удаление аккаунта обходит гарантию PD-25) · **PD-60 и PD-61** (обратное давление и сброс буфера — свойства эмиттера, задаются дешевле ДО постройки, чем миграцией после; PD-60 переформулируется под файл-транспорт). **Потолок прогона РЕШЁН владельцем 07.08 и ратифицирован формой (D39.110):** шкала в интерфейсе от минимума (ноль нельзя) до баланса аккаунта ⇒ Р7 не амендируется, «выключено» не существует как состояние. Добор: единица шкалы — ГЛАВЫ, не доллары (иначе амендмент D39.84) · потолок в `book.yaml` НЕ пишется, движку нужен приём на прогон — НОВАЯ строка **145** · максимум шкалы = баланс минус открытые холды. **Фри-тир:** ответ дан нормой (автогрант без якоря — не стандарт; `email_verified` Google якорем не является), предложение оркестратора — на бете дефолт в НОЛЬ и начисление руками, при платежах $5 вместе с суточным потолком; **ждёт слова владельца** (PD-104, там же расхождение док↔код: реестр обещает ноль, код начисляет $5) · **приёмка экспов 18/19/20 ИСПОЛНЕНА и залендена** (D39.108: приняты с ревью-шапками; §5.2 экспа 20 — «со слов»; деньги сессии полигона $2.0720; квирк §3б отозван, §3а в силе; D21.4/D21.10 закрыты) · **эксп-21 «топология ролей» — промт выдан** (`POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md`: скрин моделей по 7 ключам → бейк-офф топологий на невиданном срезе; потолки ПРЕДВАРИТЕЛЬНЫЕ ≈$7.3 стадиями; **ЗАПУСК = слово владельца**) · строки 135–144 заведены, 103/106/134/65/55/12 пере-диспозиционированы · дальше по D39.107 п.3: промты эмиттера (бэкенд) и денег шва (платформа) — по команде · **S3 «слой данных» ПРИНЯТ и заленден `60595f6` (D39.115): контракт 0.2.0 в каноне, копии байт-равны, блоки компаньона 2.14–2.16 внесены; сессия нашла ТРИ ошибки оркестратора — «баланс минус холды» (вычитание дважды, пере-мерено), `nullable: true` невалиден в 3.1, инструкция внутри нормативного дока протухла от исполнения; норма «не ходить в чужую зону» амендирована: не ПИСАТЬ, а читать код для сверки — можно и нужно** · вахта deepseek-v4-pro — пере-проба маппинга вшита в Ф1 эксп-21 · мини-проба флора 44 — одобрена, промт не выдан. **Открыто на владельце:** запуск эксп-21 (потолки + готовность слепого чтения ~50 пар) · передача платформы · Приложение А `14-api-contract` (незакоммичено) · **НОВОЕ 08.08 (D39.115, фронт):** продуктовое слово «остановлена: лимиты» (сжатие вашей фразы сделала сессия, В-3) · **К-13/Ф-31:** упереться в СВОЙ потолок прогона и остаться без кредита сегодня неразличимо — `paused_reason` имеет одно значение, и первому фраза врёт · **В-4/Ф-30:** глава без заголовка показана голым номером, синтез «Глава N» запрещён К-3 · **фри-тир (PD-104):** дефолт в ноль и начисление руками против автогранта $5 с суточным потолком · **Приложение А (строка 148):** брать реконструкцию с баннером или заполнять заново · 116 (порог подан) · мини-проба 44 · подпись денежного шага 46 · лист В-3+К-6 · вопрос платформы (авто-резюме `paused`). > - **Сделано (сводно; детали — D-лог и архив-слайсы):** Ф0 ✅ · Ф1-инфра ✅ · арх-ресет D39 (7 слоёв, паки 11–16) ✅ · паки 17 «канал B» · 18 «долги» · 19 «голос/состояние» · 20 «банк+терминолог» ✅ (D39.26–28/31/41–56) · мини-прогон (D39.37) и ХОЛОДНЫЙ прогон (D39.58: recall банка 0.918/0.980, банк приходит переведённым) приняты · полигон-пакеты 5–8, ToS-речек (D39.57), Р6+P4 (D39.61) закрыты · **карта языковой привязки движка (D39.60): 149 сайтов/45 файлов, книго-ось чиста (4), ja→ru безопасно без правки Go, en→ru — нет** · Р1–Р4 закрыты целиком (D39.63: Р2 = ЗНАЧЕНИЕ, Р4 = норма потолка recall) · **ФАЗА 2 ОБЩНОСТИ ✅ (D39.64: П0 эмбед-хеш · П1 цель-шов · П2 скрипт-шов, ko-баг закрыт · П3 нарезка · П4 манифест-по-каналам; голден вердикт-нейтрален 0/172, майнер-парити EXACT)** · жанровый словарь отменён как класс (D39.47) · петля ремонта построена и НЕ включена (D39.38). > - **Курс:** ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.59–78) → **ФРОНТ-ЭРА открыта** (D39.81–100: зоны `frontend/`+`platform/` живые, контракт API ратифицирован). Развилка блокера 0731 решена вариантом (б) и ИСПОЛНЕНА (D39.87/91: `reasoning_effort:"low"` черновику + ручка эффорта бэнк-ролям, код `553f1a3`); отладочный прогон C не стартовал ⇒ **строка 16 жива и оси голоса 13б без данных**; пак экрана 46 — дизайн заморожен (D39.92 п.1 + D39.93), промт ждёт выдачи; coldrun-b фаза C заморожена чекпойнтом — легитимный исход (D39.86); эталон денег/поведения — coldrun-a (read-only). Числа и хроника закрытых паков — D-лог D39.79–97, сюда НЕ дублируются. > - **Горизонт (D39.62/67, освежён D39.95):** ре-проба flash ИСПОЛНЕНА и строка 74 закрыта (D39.86/91; порог 6/6 → пере-ратификация выборочным, строка 116; проба Q2 ИСПОЛНЕНА — research/24, D39.102: семейства не окупаются, остаток = рецензент спорных кластеров при ре-пробе 74; эмиссия Q7 — по слову) → **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · итерация №2 редакторов 65 · цена 16 · веса K1–K12 13а · вне-претрейн чекпоинт 55) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text-таблицы Unicode 17 тем же тулчейном — строка 119/реестр 108) · проба провода исполнена и 117 закрыта (D39.97), конфиги 112 залендены — платные прогоны разблокированы. > - **Стек:** draft deepseek-v4-flash thinking-ON (банкнота: ⚠ канал в shipping-c1 НЕ включён — жив ран-локальным конфигом книги, строка 140) **⚠0731** → терминолог (та же модель, батчи, экран `target_script`) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (⚠ exp20/D39.108: второй проход на dspro отрицателен по слепому суду — судьба роли = эксп-21; ⚠ вендор АНОНСИРОВАЛ смену маппинга эффорта pro «early August 2026» — вахта в реестре 108; glm-5 резерв) → судья gemini (Ф2, полигон); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — 112 залендена (D39.97), пере-калибровка цены при следующем платном прогоне. -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 07.08 (D39.110, скриптом по таблице; обновлять при каждом лендинге):** всего **120** строк · зона бэкенд **63** строго (ячейка ровно «бэкенд») / **80** широко ⚠ (испр. 08.08: было 62/79 — мой счётчик читал колонки СЛЕВА и на строке 127 с `seed|ruby|auto` внутри ячейки принимал за зону слово «ruby»; теперь колонки читаются с конца, а битая форма строки — расхождение, а не тишина) (ячейка содержит «бэкенд») · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **32** (2·4·18·46·49·55·99·100·101·103·108·109·113·114·116·118·119·120·121·125·**126**·128·129·130·134·**135·136·138·139·140·143·145**) · гейт-строки эксп-21: 65·106·142; строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ **Счёт — НИЖНЯЯ граница долга, а не потолок:** трекер содержит только замеченное, и 02.08 дважды за $0 свежие глаза вытащили из кода дефекты, которых в нём не было (релей фронта → строки 99/100/102; приёмочное ревью → третий шов `repair.go:384` в 104 и честность `quality.go:436` в 105). Лента ✅ выше — про ЗАКРЫТЫЕ паки, читать её как «долга нет» неверно (разбор — вопрос владельца 02.08, D39.89). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 08.08 (D39.116, скриптом по таблице; обновлять при каждом лендинге):** всего **123** строк · зона бэкенд **64** строго (ячейка ровно «бэкенд») / **82** широко ⚠ (испр. 08.08: было 62/79 — мой счётчик читал колонки СЛЕВА и на строке 127 с `seed|ruby|auto` внутри ячейки принимал за зону слово «ruby»; теперь колонки читаются с конца, а битая форма строки — расхождение, а не тишина) (ячейка содержит «бэкенд») · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **33** (2·4·18·46·49·55·99·100·101·103·108·109·113·114·116·118·119·120·121·125·**126**·128·129·130·134·**135·136·138·139·140·143·145**) · гейт-строки эксп-21: 65·106·142; строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ **Счёт — НИЖНЯЯ граница долга, а не потолок:** трекер содержит только замеченное, и 02.08 дважды за $0 свежие глаза вытащили из кода дефекты, которых в нём не было (релей фронта → строки 99/100/102; приёмочное ревью → третий шов `repair.go:384` в 104 и честность `quality.go:436` в 105). Лента ✅ выше — про ЗАКРЫТЫЕ паки, читать её как «долга нет» неверно (разбор — вопрос владельца 02.08, D39.89). > - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 11–16, rerun2) · **`-25-31` (паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105)**. Записи ниже — живой хвост (№11+, эра D39.91+). ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -93,6 +93,9 @@ | 143 | **Абсорбция норматива судейства в `09-pilot-protocol.md`**: разброс инструмента ДО замера · объявленный порог различимости · MQM-lite/error-span первичен, pairwise только для стиля · декой обязателен · запрет судьи семейства жильца арма | полигон/оркестратор | скоро ($0) | правка дока | D39.108, exp20 §7 | | 144 | **Вахта: grok `reasoning_tokens` ВНЕ `completion_tokens`** — формула цены харнессов может недосчитывать (до $0.0325 на exp20); вендор-сверка биллинга xAI при следующем прогоне с grok | полигон | когда-нибудь (следующий xAI-прогон) | вендор-чек | D39.108 (приёмка) | | 145 | **Движок обязан принимать потолок НА ПРОГОН, а не только из `book.yaml`** — сегодня флага/ENV нет вовсе (проверено: `tmctl` таких флагов не имеет, значение приходит только через `Ceilings.BookUSD`, `stagerun.go:480,505`). Пока так, платформа для управляемого потолка (строка 126) вынуждена ПРАВИТЬ конфиг книги — то есть пользовательское число становится постоянной записью в данных движка, что смешивает зоны против D39.81/D39.85. Форма: аргумент прогона (флаг или ENV), потолок остаётся состоянием ПРОГОНА. Смежное: `Ceilings` в `BriefHash` не входит (`book.go:280-297`) ⇒ ни снапшот, ни ре-билл не двигаются — цена правки нулевая | бэкенд | скоро (денежным промтом, со строками 135–139) | малое касание CLI + проводка | D39.110, приёмка платформы D39.109 | +| 146 | **Два техдолга движка без строки трекера** (свип 08.08): `prices_checked` (120 д) гейтит read-only `report` и $0-resume — свежесть цен проверять только на ПЛАТНОМ пути (`03-implementation-notes:244`) · `cache_ttl` ↔ `cache_write_per_m`: цена записи в кэш задана под ОДИН TTL (5 м), при другом TTL расчёт врёт (`:246`). Оба жили только в справочнике якорей, то есть вне единственного трекера | бэкенд | когда-нибудь | малое касание | свип доков 08.08 | +| 147 | **Транспортные частичные из research/21 без носителя** (свип 08.08): п.16 HTTP/1.1-escape на последней попытке как ДИАГНОСТИКА тихого усечения 2–8k [PARTIAL, GATED] · п.17 assistant-prefill continuation на `finish=length` вместо ре-рана всего вызова [PARTIAL, DEFER]. Оба помечены в ресёрче как отложенные и ни в одной строке трекера не появились | бэкенд/полигон | когда-нибудь | замер → решение | свип доков 08.08, research/21 §16–17 | +| 148 | **Приложение А контракта потеряно инцидентом 08.08 и подлежит восстановлению** (D39.113): карта «вердикт движка → продуктовая фраза → ступень» была заполнена №14, откатилась к ЗАГОТОВКЕ с плейсхолдерами. Текст реконструкции держит оркестратор №15; решение владельца — брать реконструкцию черновиком С БАННЕРОМ «требует сверки» либо оставить заготовку и заполнять заново. Карта нужна фронту для замечаний (Ф-14) | владелец → оркестратор | скоро | решение владельца | D39.113, свип доков 08.08 | | 49 | **Этапы Б+В спеки D15.2** (content-addressed resume / `guard_hash` — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (`repin.go`/`rebill.go`, D39.42 п.5/D39.45) | бэкенд | скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) | отдельное решение (annot-половина — по контракту 14, D39.99) | D39.34(4), D33 п.5, D39.81 | | 49а | **ALTER-шаги миграций v8–v14 не идемпотентны вопреки шапке `migrate.go:9-11`** (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 | бэкенд | когда-нибудь | отдельное решение | D39.56, PACK19_BUILD §6.9 | | 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 758e90df..14b57f39 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.115 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) +# Журнал решений оркестратора — контракт D1–D39.116 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: > ⚠ **Навигация (актуализация 07.08, эра D39.1xx):** append-only-дисциплина (D23.3) означает, что @@ -1637,3 +1637,19 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу **6. На владельце — три вопроса, сессия их назвала сама.** (а) Метка «остановлена: лимиты» в дереве — сжатие ратифицированной фразы «перевод остановлен: лимиты исчерпаны», сделанное сессией; продуктовые слова по В-3/Ф-21 не её. (б) **К-13 (Ф-31): упереться в СВОЙ потолок прогона и остаться без кредита сегодня неразличимо** — `paused_reason` имеет одно значение `credit_exhausted`, и первому из двух фраза врёт, а следующее действие у него другое. (в) Ф-30: глава без заголовка показана голым порядковым номером, потому что синтез «Глава N» запрещён К-3; это вопрос В-4, уже стоящий владельцу. Плюс три поля, придуманные сессией по её собственному признанию и ратифицированные мной выше: `default_chapters`, `maxLength: 200` у заголовка, `paused_reason` в кадре статуса. **7. Открытые хвосты зоны, заведённые честно:** Ф-29 (мок едет в прод-бандл — цена того, что скриншот-цикл гоняет прод-сборку; папка удаляется в день живой платформы) · Ф-32 (замечания читаются пер-книжно, показываются пер-главно: экран починен, память нет — на книге с тысячами замечаний клиент тянет весь список ради трёх строк) · `ceiling_chapters` обязателен сегодня бесплатно, после первого реального прогона это станет ломающей правкой. + +## D39.116 — АКТУАЛИЗАЦИЯ ДОКОВ: 78 находок свипа, отработанные промты в архив, живая ошибка счёта исправлена, три строки заведены (08.08). ✅ + +**1. Заказ владельца:** полная актуализация — занести незанесённое, перенести в архив сделанное, убрать воду, снять stale. Метод — read-only фан-аут по четырём осям (активные промты · stale-факты · вода и дубли · незанесённые обязательства) по ВСЕМ 107 живым докам (~25 тыс. строк), правки делал я. **Изоляция панели по норме D39.113:** свой каталог каждому агенту, запрет state-changing git перечислением (плюс тот же запрет теперь в `deny` настроек — проверено, `git stash list` отбивается), бэкап всего чужого незакоммиченного снят ДО запуска. Итог свипа: **78 находок** — 14 по промтам, 29 stale, 19 воды, 16 незанесённых. + +**2. Живая ошибка в МОИХ числах, найденная и исправленная.** Счётчик `docs/scripts/counts.py` читал колонки таблицы СЛЕВА, а строка бэклога 127 законно несёт `seed|ruby|auto` внутри ячейки — разбор принимал за зону слово «ruby». В CURRENT-STATE стояло «зона бэкенд 62 строго / 79 широко» при истине 63/80. Исправлено: колонки читаются С КОНЦА (хвостовые короткие и `|` в них не бывает), **битая форма строки теперь расхождение, а не тихий `IndexError`**, голова берётся по МАКСИМАЛЬНОМУ номеру, а не по последней строке файла (в D-логе уже есть внеочередные аппенды `D39.17`→`D39.19`→`D39.18`), регекспы больше не прибиты к эре `D39`. Все четыре дефекта назвала панель ревью, ни один не был моей находкой. + +**3. Отработанные промты — в архив с баннером-исходом.** `frontend/docs/S3_SESSION_PROMPT.md` (исполнен двумя сессиями, принят D39.115) и `platform/docs/PLATFORM_SESSION_PROMPT.md` (ЧЕТЫРЕ сессии, P3 принят D39.114) → копии в `docs/archive/prompts/`, указатели `docs/README.md` переписаны. Цена отсутствия баннера была названа прямо: следующая фронт-сессия открыла бы S3-промт с императивом «первый шаг — правки спеки» и **откатила бы ратифицированный контракт 0.2.0**. Из платформенного баннера убран рукописный перечень живых PD-строк — он разошёлся с реестром на первом же фиксе, то есть я сам нарушил свою же норму D39.112 «один носитель на факт»; заменён указателем на скрипт и реестр. + +**4. Снятые stale, которые сработали бы на холодной сессии.** Живой бэкенд-промт нёс «в дереве живёт ЧУЖОЕ `platform/*`, ждёт приёмки P0» — платформа принята и залендена, а РЕАЛЬНО живая параллельная работа (полигон) в промте не названа вовсе; заменено на «сверь `git status` в начале сессии» с указанием живой зоны. Тот же промт велел писать пинг в `docs/PROGRESS.md` без протокола — файл держат три сессии, и его секция уже терялась (D39.113); дописан протокол «только append своей секции, CURRENT-STATE не касаться». `POLYGON_PACKAGE4` §1 требовал исполнить сид-обогащение, исполненное D32, указывая на МЁРТВЫЙ `guzhenren-seed.yaml` v1 при живом v2 — помечено исполненным. Компаньон КАНОНА контракта четверо суток называл себя «черновиком фронт-сессии S3 на ратификацию» — тот же класс, что шапка `info` спеки, исправлено. Зонный журнал фронта в «Текущем состоянии» говорил «S3 НЕ сделана, контракта нет» против собственной хроники; журнал платформы — «дерево НЕ закоммичено, ждёт приёмки» после лендинга. Висячие ссылки на удалённый патч `S3_CONTRACT_HANDOFF.md` починены в трёх живых доках (в D-логе оставлены как история — append-only). + +**5. Заведены строки 146 · 147 · 148** (обязательства без носителя): два техдолга движка, жившие только в справочнике якорей (`prices_checked` гейтит $0-путь · `cache_write_per_m` под один TTL) · транспортные частичные research/21 §16–17 (HTTP/1.1-escape как диагностика тихого усечения · assistant-prefill continuation вместо ре-рана) · **восстановление Приложения А контракта после инцидента** — решение владельца. Счёт очереди пере-выставлен скриптом: **123** строки · бэкенд 64 строго / 82 широко · «скоро» 33. + +**6. Норма изоляции панелей перенесена из D-лога в промт оркестратора** — она жила только в ноте, а читают промт. Там же пустой заголовок «Текущее состояние и очередь — НЕ здесь» получил тело: где именно они живут и что числа берутся скриптом. + +**7. Что НЕ сделано и почему.** Срез хроники PROGRESS в архивный слайс (живой хвост несёт №11–№13, эра D39.91–105) — не делал: файл прямо сейчас держит полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле, то есть способ потерять чужую работу второй раз за сутки. Режет тот, кто лендит полигон. Из 78 находок закрыт первый эшелон (промты, статусы, висячие ссылки, незанесённое) — остаток воды (дубли пин-таблиц, историческое тело `API_CONTRACT_DRAFT.md`, §1 «как есть» в `09-target-architecture.md`) в этот проход не тронут: он не вводит сессию в заблуждение, а только удлиняет чтение.