textmachine/docs/archive/architecture/05-decisions-D39-106-123.md

117 KiB
Raw Blame History

Архив D-лога: D39.107D39.123 (эры №1415; живое тело D39.106 «шов» осталось в живом файле)

⚠ АРХИВ (слайс D39.139, 16.08.2026): тела нот вынесены ИЗ docs/architecture/05-decisions-log.md ДОСЛОВНО. Эра №15: приёмки P1P4 платформы · S3-серия фронта · эксп-21 · фикс-пак банка · движковые блокеры контракта · нормы ревью D39.120/121 (вписаны в ORCHESTRATOR_SESSION_PROMPT) · докс-диета D39.125/126 (0709.08). Номера остаются контрактом: карта актуальности и эрраты — в живом D-логе (при конфликте он побеждает); статус любого номера одним хопом — реестр 05-decisions-index.md. Инструкции отсюда НЕ исполнять.

D39.107 — ЗАКРЫТИЕ СЕССИИ №14 И ПЕРЕДАЧА №15: P0 принят и заленден, по P1 выдан пул доработок (приёмка доработанного дерева — №15), D39.106 ратифицирован пятью верификациями (06.08).

1. Итог №14: приёмка P0 платформы — ПРИНЯТ, заленден eeeef89+954c034 (регистр PD-1..19) · направление платформы ратифицировано (PLATFORM_DIRECTION.md, 99c9cb0) · решения владельца по кредитам записаны (87be7b9, 6469479) · по P1 проведена адверсариальная проверка (43 посадки, 31 поймана; сверка с RFC 9700 · ASVS 5.0 L2 · OIDC Core) — она дала ПУЛ ДОРАБОТОК (регистр до PD-59), сессия платформы взяла его в работу, и дерево зоны с тех пор сильно изменилось (≈40 файлов, новая миграция 00008) — эта доработка НЕ принята и НЕ залендена: полная приёмка изменённого дерева = №15 · D39.106 ратифицирован (шов: журнал в каталоге книги + systemd-юнит-на-прогон, платформа не родитель) после пяти верификаций — 4 чистых панели + кросс-чек GPT; фактура и требования к постройке — research/25 · промт S3 актуализирован и готов к запуску (6ac26f3).

2. Дельта норм (уроки №14, оплачены): проверки ВНУТРИ репозитория ≠ приёмка решения — решения зон сверять с действующим первоисточником нормы (RFC/ASVS/спека) с номером раздела; слабая аргументация ≠ неверная позиция — сильные прецеденты искать САМОМУ до вердикта; свой контраргумент проверять чужими руками; допущения в ПОСТАНОВКЕ — такой же объект проверки, как ответ; изоляция панелей = запрет ФАЙЛОВЫХ тулов + аудит постфактум по journal.jsonl (сеть не запрещать — заземляет); адвокатская постановка покупает риторику за счёт строгости. Также в memory acceptance-antipatterns.

3. Очередь №15 (PROGRESS CURRENT-STATE не обновлён — занят живым полигоном; обновить при его лендинге): (1) приёмка доработанного дерева платформы после передачи: ВСЕ изменённые файлы, по ENGINEERING_STANDARDS §3, со СВОИМИ посадками (готовый тест PD-52 — в журнале зоны; батарею гонять с живым PG — рецепт стенда без root в platform/docs/STACK_DECISIONS.md), лендить pathspec-формой · (2) по освобождении PROGRESS.md: строка 103 = эмиттер журнала по research/25 §эмиттер + 4 денежные строки (реконсилятор · uncertain-эскроу · сверка с провайдером · пер-вызовный гейт) + пиннинг версии; пересчёт очереди скриптом · (3) по команде владельца: промты бэкенду (эмиттер) и платформе (реконсилятор/тейлер/юниты; пайп-supervisor.go → дев-режим) — носители: D39.106 + research/25 включая пометки (GPT) · (4) приёмки полигона: экспы 18/19/20 живые · (5) незакоммиченное Приложение А (14-api-contract/README.md) — слово владельца · (6) запуск S3 — промт готов · (7) вахта deepseek-v4-pro (триггер прошёл) · (8) мини-проба флора (строка 44) одобрена, промт не выдан. Грабли: сессии зон ЖИВЫ, пока владелец не сказал обратного — платформа и полигон работают прямо сейчас; git только pathspec-формой.

D39.108 — ПРИЁМКА ЭКСПОВ 18/19/20: приняты и залендены; закрытие D21.4/D21.10; курс на эксп-21 «топология ролей» (06.08).

1. Приёмка (7 верификаторов: слепой вердикт до чтения отчёта · ре-раны «заявление=команда» · деньги из сырья двумя путями · бэкенд-пинги исполнением боевого Go-кода · охота вне карты · свип квирк-цитат; изоляция панелей аудирована по журналам). Экспы 18 (41cde9f) · 19 (0c3b55f) · 20 (3d5d5d5) ПРИНЯТЫ; квирк-отзыв §3б заленден (bb82876, §3а в силе). Несущие вердикты чисты ре-раном: закон-блок 21/21 · неверная строка банка 6/6 (вытеснение 5/6, единогласие 6/6) · контроль без блока ломает 512/20 · гейт Q4b «диффы откладываются» · фронтир терминолога не оправдан (конвенция 古月 = 18% голда — рычаг данных) · польза второго прохода = свойство пары модель×роль (dspro отрицателен, glm-5 положителен). Поправки приёмки — в ревью-шапках отчётов; главные: §5.2 экспа 20 НЕ персистирован (статус «со слов»; направление держит персистированный судья §5.3) · offblock-числа сняты до-фризовым стемом (черновик 16/41, не 18/41) · цена раунда починки не входила в дифф (lu/ON 0.89→1.08) · «вся сессия $2.1793» включала $0.107335 сырья research/24 — фактическая цена 18+19+20 = $2.0720 · оба бэкенд-пинга: наблюдения верны, вердикты опровергнуты (микро-утечку ловит санитайзер; банкнота жива ран-локальным конфигом D39.42 п.4 — реальный дефект = декларация против shipping-конфига, строка 140). Фризы предшествуют платным вызовам (46 с · 21 с · 49 мин); amend 4d1d9e5 разобран по reflog — пре-рег-текст не трогал (девиация арма E + premise_review); процесс-нота: девиации оформлять новым коммитом, не amend'ом фриза. Эксп-20 шёл без фриза — принят exploratory по санкции.

2. Решения владельца 06.08: санкции экспов 19/20 и подъёмы потолков — CONFIRM · лендинг и актуализация доков санкционированы · направление эксп-21 подтверждено · норма «гард проклятия знанием» (онбординг-блок проблемы в каждом хендофф-промте) вписана в промт оркестратора п.1а.

3. Эксп-21 «топология ролей» — промт выдан (docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md); двойной аудит: слепая панель 3 линз без файловых тулов (изоляция чиста) + полноконтекстный анти-паттерн-агент. Добавки панели, принятые в промт: арм F do-nothing (потерянная норма exp15:486) · MQM-lite/error-span протокол + мощность/MDE и шумовой пол ДО бейк-оффа · guarded+routed арм G · обратная связка E · Палладий-линт транскрипции · мини-проба глоссарий-лока · факторная рамка на замороженных черновиках · декой D39.46(б) и запрет судьи семейства жильца · пере-проба маппинга dspro до Ф1 (вахта 108). Потолки ПРЕДВАРИТЕЛЬНЫЕ (≈$7.3 стадиями с ранним отсевом; пере-сверка сметы после предзамера мощности — обязательна); запуск = слово владельца. Два тезиса разжалованы в гипотезы бейк-оффа (анти-соглашательство): «экономическое оправдание черновика пало» и «черновик = опора верности».

4. Закрытия и диспозиции: D21.4 (арм minimal-diff с тирингом) и D21.10 (поручение спеки апплая) ЗАКРЫТЫ явно по букве гейта Q4b (exp15:147): аппликатор построен полигоном и замерен (15/15; комплаенс 0.966 на боевой единице), диффы отложены; реактивация — через строку 106/эксп-21. Строки 135144 заведены (денежный пакет шва D39.107 п.2: пер-вызовный гейт · uncertain-эскроу · сверка с провайдером · реконсилятор · пиннинг версии; находки приёмки: банкнота-декларация 140 · дыра сносок 141 · механизм починки-по-флагу 142 · норматив судейства 143 · вахта grok-биллинга 144); строки 103/106/134/65/55/12 пере-диспозиционированы. Исполненный промт пробы 18 архивирован. PROGRESS CURRENT-STATE обновлён на №15 (долг D39.107 погашен).

D39.109 — ПРИЁМКА ПЛАТФОРМЫ P1+P2: приняты и залендены одним коммитом; регистр до PD-107, одна major; два вопроса владельцу (07.08).

1. Вердикт. Дерево зоны platform/ (30 изменённых отслеживаемых файлов, 22 новых, миграции 0000400008) ПРИНЯТО и заленжено. ⚠ Факт, который доки завышали: журнал зоны объявлял «P1 ПРИНЯТ и заленден» — в git код P1 не уезжал (git ls-files platform/internal/login = 0 до этого коммита), уехали только P0 (eeeef89/954c034), направление (99c9cb0) и решения владельца (87be7b9/6469479). Формулировка исправлена на месте с пометкой оркестратора; строки регистра ошибки не несли — они честно говорят fixed(P1, дерево сессии). Живой уязвимости приёмка не нашла.

2. Метод — исполнением, второй рубеж по своей карте. Батарея пере-прогнана мной: офлайн зелёная (линтер 0 issues), с живым PostgreSQL 18.4 без root — скипов ноль (26 БД-тестов отработали), make vuln чист. Свои 45 мутаций в четыре батча по СВОЕЙ карте несущих свойств (не по таблице пинов зоны): 33 поймано поимённо, 8 выжило, 4 моих посадки оказались негодными и разобраны вслух. Мутации ставились в КОПИИ зоны вне репозитория — незакоммиченное дерево сессии не тронуто, сверено хешами диффа до и после. Живые пробы на боевом бинаре: PD-2 (10 полу-кормленных POST отпущены на 30.0 с), пять форм CSRF, ПТ-34-заголовки, RFC 9207 (Google действительно шлёт iss; сорванный → issuer_missing, чужой → issuer_mismatch, обмена кода нет). PD-71 пере-проверен своим прогоном на боевых данных: DownTo(4) падает на users_email_key SQLSTATE 23505, данные целы. Фаззеры: 3.0 и 3.35 млн исполнений, крэшеров нет. Цитаты норм сверены по первоисточникам, не по пересказу — RFC 9700 §4.4.2/§4.4.2.2, NIST SP 800-63B-4 §2.1.3, ASVS 5.0 7.1.1/7.1.2/7.1.3/7.6.1/7.6.2 дословны, номера и уровень L2 верны; это несущая проверка, на этих цитатах стоит смена боевого значения 90 → 30 суток. Плюс воркфлоу-панель: семь линз с зажатыми промтами (отчётные доки зоны запрещены) и адверсариальный опровергатель на каждую находку весом minor+ — 20 подтверждено, 2 опровергнуто.

3. Ратифицировано (6 из 6): абсолютный срок сессии 30 суток (буква NIST AAL1; у прежних 90 обоснования не было) · контрмера mix-up = iss авторизационного ответа (RFC 9207), миграция 00008, а не раздельные redirect URI (норма объявляет их фолбэком) · STACK_DECISIONS §13 как документ соответствия ASVS 7.1.1/7.1.2/7.1.3 с прямо названным рассогласованием с федеративной сессией · ломающие изменения зоны (NewServer без Timeouts — устранение класса сильнее теста · Prober.Ready · login.Fail без *http.Request; внешних потребителей нет, фронт говорит по HTTP) · MemoryMax=80% + явный OOMPolicy=continue (сверено с systemd.resource-control(5)/systemd.service(5); ⚠ под systemd не исполнялось) · PD-71 принят риском в форме зоны: правило append-only дороже доступности отката ниже версии 5, место записи — deploy/README.md у оператора.

4. Найдено приёмкой: 29 строк PD-79…PD-107, одна major. PD-80 (major): ведро лимитера одно на /auth/login и /auth/callback, а колбэк стирает login-куку ДО своей проверки лимитера ⇒ анонимный поток ~3 rps закрывает вход всем И добивает начатые входы невосстановимо (воспроизведено мной на бинаре и независимо панелью; фикс — порядок двух строк плюс раздельные ведра). Остальное minor/info, несущие: строковый "null" в committed_usd читается как НОЛЬ денег (PD-79, закрыть до воркера) · три «закрыто, но не запинено» по собственному правилу зоны — половина PD-3, лимитер PD-29, ветка обновления адреса (PD-83/84/85) · установка по наброску даёт нестартующий юнит и ProtectHome против «книги в ~/books» (PD-91) · админ-CLI, единственный писатель денег, без единого теста (PD-106) · доккоммент events.go предлагает то, что PD-59 уже отклонил (PD-95) · дрейф реализованной поверхности /auth/*+X-TM-Client против контракта 14 (PD-96/остаток) · декодер и норматив зоны расходятся на дубле seq, и после PD-12 цена — убитый платный прогон (PD-105: разрешать ратификацией вместе с промтом эмиттера, строка 103) · удаление аккаунта обходит защиту PD-25 через каскад users → reservations (PD-107, гейт перед появлением такой операции).

5. Опровергнуто приёмкой, включая свои промахи (дисциплина «заявление=команда» действует и на приёмку): версия панели «удаление аккаунта падает на композитном FK при закрытых резервациях» — мой прогон удаляет · «money читает JSON null как ноль» — голый null даёт nil, дыра в СТРОКЕ "null" · «WARN на каждый отбитый вход = неограниченная запись в лог» — AccessLog и так пишет INFO на каждый запрос · моя посадка «грант фри-тира не запинен» НЕГОДНА (грант живёт в ветке новой личности; корректная посадка ловится тестом) · моё «падение FuzzDecoder» — голод по CPU от параллельных батчей, чистый прогон зелёный · PD-20 — калибровка, а не находка: пин вероятностный по природе дефекта. Отдельно названо, что TestMigrationsRollBackAndReapply откатывает ПУСТУЮ базу и для 00005 не доказывает ничего.

6. Владельцу — два вопроса: (а) срок сессии 30 суток означает, что не заходивший месяц человек увидит экран входа — если это против замысла, это одна переменная TM_PLATFORM_SESSION_MAX_AGE плюс явная запись отклонения в §13; (б) новое (PD-104): фри-тир печатается неаутентифицированным потоком по $5 за каждую новую подтверждённую пару (provider, subject), агрегатного потолка и счётчика аномалий нет нигде — нужен ли суточный лимит грантов до открытия беты.

7. Долг лендинга, названный вслух: PROGRESS CURRENT-STATE не обновлён — файл занят живым полигоном (его пинг по эксп-21 лежит незакоммиченным, коммит d472599 его же). Тот же случай, что D39.107 п.3: обновляет тот, кто лендит полигон. docs/README.md обновлён этим же коммитом (норма D39.80), промт P0 платформы получил баннер-исход.

D39.109-эррата (07.08, по вопросу владельца — процессом НЕ поймано). Приёмка №15 при лендинге пропустила, что D39.106 п.3 снял пайп-транспорт: «PD-59 superseded; пайп-путь supervisor.go P1 = дев-режим; ответ PD-13 переезжает на cgroup юнита прогона». Зонный журнал платформы при этом длинно доказывает обратное («канал остаётся stdout», SIGPIPE-аргумент), и я принял эту секцию как живое решение — классический анти-паттерн «связность вместо истинности»: аргументация убедительна, а голова D-лога её уже перекрыла. Ошибка ушла в мою же строку PD-95, которая ссылалась на снятый PD-59 как на действующий. Исправлено: секция журнала помечена SUPERSEDED с дословным перечислением ратифицированной формы (research/25 §Форма: транзиентный systemd-юнит на прогон · платформа НЕ родитель · events.jsonl в каталоге книги как outbox-проекция коммитов SQLite · тейл платформой с курсором (engine_run_id, seq) в одной транзакции с эффектом; отвергнуты с нулём голосов: родитель+пайп 0/15, выделенный fd 3 — 0, stdout/journald как источник — 0) · PD-95 переписан на верное основание и поднят в вес (его прочтёт эмиттер-сессия как задание) · PD-92 понижен до info (дефект дев-пути: в проде родителя нет, cmd.StdoutPipe() не существует) · PD-105 повышен (при тейле журнала повторное чтение строк после краша читателя — НОРМА, значит норматив зоны «at-least-once, дубль не ошибка» буквально верен, а фатальный отказ декодера ему противоречит) · PD-60 пере-диспозиционирован (постановка про 64 КиБ пайпа устарела; переформулируется вместе со строкой 103 как «что делает движок, когда журнал не пишется»). Вердикт лендинга не меняется: код принят как дев-путь, которым его и объявил D39.107 п.3, — меняются ДОКИ зоны и вес трёх строк. Носители работы существовали и до эрраты: строка 103 несёт эмиттер уже в форме D39.106, строки 138/139 — реконсилятор и пиннинг версии, строка 126 — механизм поднятия потолка. Урок в норму: при лендинге зоны каждый вывод зонного дока, спорящий с транспортом или швом, грепается по D-логу на supersede ДО ратификации — «решение, живущее только в зонном доке при противоречащем каноне, — дефект синхронизации» (норма D39.99 п.4) действует и в обратную сторону: канон мог снять зонный вывод, а не только наоборот.

D39.110 — ПОТОЛОК ПРОГОНА УПРАВЛЯЕМЫЙ: решение владельца 07.08 ратифицировано формой; фри-тир — предложение оркестратора на confirm; строка 145 заведена (07.08).

1. Решение владельца 07.08 (дословно по смыслу): потолок управляется двумя вещами — «выключить потолок» и «выставить вручную с фронта»; форма — шкала в интерфейсе от минимума (ноль выбрать НЕЛЬЗЯ, подсвечен серым) до максимума баланса аккаунта, конкретный виджет на выбор исполнителя. Ратифицировано формой, и форма сама снимает конфликт с Р7: максимум = баланс ⇒ движок всегда получает положительное число, состояния «потолка нет» не существует, валидатор book.go:250-251 («a ledger with no ceiling is forbidden, Р7») не правится и Р7 не амендируется. Носитель — пере-поставленная строка 126.

2. Три следствия, без которых форма неполна (добор оркестратора, каждое проверено кодом). (а) Единица шкалы — НЕ доллары, а главы (либо % баланса). Тогда минимум объясняет себя сам («одна глава», ниже прогон бессмыслен — владелец сам отметил, что непонятно, какое минимальное число ставить), а D39.84 остаётся цел: читатель не видит структуру наших расходов, платформа сама переводит главы в доллары по оценке движка. Доллары на ПОЛЬЗОВАТЕЛЬСКОМ экране = осознанный амендмент D39.84, и это отдельное решение владельца, а не побочный эффект виджета (П-5 показывает процент ровно по этой причине). (б) Это потолок ПРОГОНА, значит он не пишется в book.yaml. Дизайн платформы объявлял её владельцем book.yaml и намеревался поднимать ceilings.book_usd правкой файла — тогда пользовательское число становится постоянной записью в данных движка, что смешивает зоны против D39.81/D39.85. В коде этого НЕТ (проверено: платформа только ставит cmd.Dir), значит форма выбирается бесплатно ⇒ НОВАЯ строка 145: движок принимает потолок аргументом прогона; сегодня ни флага, ни ENV не существует (tmctl таких флагов не имеет, значение идёт только через Ceilings.BookUSD, stagerun.go:480,505). Цена нулевая: Ceilings в BriefHash не входит (book.go:280-297) — ни снапшот, ни ре-билл не двигаются. (в) Максимум шкалы = доступный остаток аккаунта.ИСПРАВЛЕНО 08.08 приёмкой S3 (D39.115): первая редакция этого подпункта говорила «баланс МИНУС открытые холды» — это ОШИБКА, вычитание дважды. Hold пишет в леджер отрицательную строку и тем же знаком двигает кэш баланса (credits.go:179appendLedger :297-305), поэтому баланс УЖЕ не содержит открытых холдов; Reserved — отдельная справочная сумма. Замерено приёмкой на живом PG: грант $10, холд $1 → Balance=9.000000, Reserved=1.000000, а «баланс минус Reserved» дало бы $8. Поймала фронт-сессия S3 чтением Go-кода платформы, а не доков — и ради этого нарушила мой же запрет ходить в чужую зону. Платформа берёт холд на сумму потолка ДО спавна, поэтому ползунок в упоре запирает весь баланс на одну книгу и вторую начать нельзя; ReadAccount уже отдаёт Balance и Reserved раздельно, данных хватает.

3. Фри-тир — вопрос владельца («а как это обычно делается в бэкендах?»), ответ и ПРЕДЛОЖЕНИЕ, а не ратификация. Разделяется на две половины, и стандартный ответ есть только у одной. Где живёт начисление: учебник — промо-кредит пишется строкой леджера в ТОЙ ЖЕ транзакции, что создание аккаунта, идемпотентно по (аккаунт, source, source_id); код зоны это уже делает верно (upsertIdentityTx), менять нечего. Стреляет ли само: норма — «автоматически, но с ЯКОРЕМ, который стоит абьюзеру денег» (карта на файле — AWS/GCP; телефон — OpenAI добавил его к своим $5 после фарминга; инвайт), плюс бюджет кампании отдельной суммой и алерт при упоре. email_verified от Google якорем НЕ является — аккаунты бесплатны и создаются пачками, признак доказывает существование ящика, а не отдельного человека. У нас нет ни одного из трёх, а деньги — предоплаченные ключи владельца. Предложение: на бете дефолт в НОЛЬ и начисление руками (платёжного инструмента нет ⇒ между скриптом и ключами нет ничего; бета-тестеров столько, что одна команда в шелле на человека не работа); при появлении платежей дефолт возвращается к $5 ВМЕСТЕ с суточным агрегатным потолком — якорь и потолок приезжают по одному поводу. Ждёт слова владельца; носитель — PD-104.

4. Расхождение док↔код, чинится независимо от п.3: реестр при закрытии PD-30 утверждает «аккаунт создаётся с нулём, начисление руками из админки», а код создаёт аккаунт С $5 (config.go:73 дефолт 5 * 1_000_000main.go:99login.go:285). Один из двух текстов лжёт прямо сейчас; строка PD-104 переписана и несёт оба факта.

5. Счёт очереди пере-считан скриптом (норма D39.101): всего 120 строк · зона бэкенд 62 строго / 79 широко · «скоро» 32 (добавлены 126 и 145).

D39.111 — ПРОМТ S3 ДОПИСАН приёмкой платформы (управляемый потолок + запрет кросс-origin); фикс-пак платформы передан запиской (07.08).

1. S3 получил два новых пункта списка правок спеки (frontend/docs/S3_SESSION_PROMPT.md, шапка списка пере-атрибутирована №15; промт НЕ запущен, поэтому правка файла легальна без релея). В-трис — управляемый потолок прогона по решению владельца 07.08 (D39.110): шкала от минимума до доступного остатка, ноль недоступен, виджет на выбор сессии, и три «делай РОВНО так» — единица ГЛАВЫ (доллары = амендмент D39.84, он не выдан) · максимум = баланс МИНУС открытые холды (иначе шкала в упоре запирает весь баланс на одну книгу) · потолок принадлежит ПРОГОНУ, не книге; пересчёт «главы → деньги» наружу не выходит вовсе. В-кватер — фронт живёт на том же origin, и это факт, а не выбор: CORS-слоя в платформе нет, preflight OPTIONS с чужим Origin получает 401 от гарда сессии (замер приёмки на живом бинаре, PD-96) ⇒ в деве ходить через прокси dev-сервера, кросс-origin не проектировать; X-TM-Client обязателен и на same-origin — он не про CORS.

2. Фикс-пак платформы передан ЗАПИСКОЙ, а не отдельным промтом — по прецеденту №14 (восемь пунктов жили разделом зонного журнала и были отработаны) и по норме пропорциональности: это точечные фиксы, а не дизайн. Носитель — раздел «Ратификация приёмкой P2» зонного журнала, фикс-лист там же с порядком. Состав: PD-80 (единственная major — доступность входа: лимитер прежде очистки login-куки плюс раздельные ведра) · PD-79 (строковый "null" = ноль денег, до появления вызывающего у Settle) · PD-100 (колбэк глотает ошибки стора и discovery — класс PD-5, закрытый в auth/, но не в login/) · PD-83/84/85 (три «закрыто, но не запинено» по собственному правилу зоны) · PD-106 (админ-CLI — единственный писатель денег — без единого теста) · PD-91 (установка по наброску даёт нестартующий юнит; ProtectHome против «книги в ~/books») · PD-95 (транспортный доккоммент — ДО промта эмиттера, иначе эмиттер-сессия прочтёт его как задание). Граница пака названа явно: PD-92/93/96/99/102/105/107 НЕ трогать — они латентны за воркером и эмиттером, и правка сейчас означала бы угадывание формы, которую задаёт строка 103.

3. Условный пункт: если владелец подтверждает предложение по фри-тиру (D39.110 п.3), в тот же пак заходит дефолт SignupGrantMicroUSD в НОЛЬ; расхождение док↔код (PD-104) чинится независимо от ответа.

D39.112 — ВЕРИФИКАЦИЯ ЗАПИСЕЙ №15 НЕЗАВИСИМЫМ АГЕНТОМ: восемь фактических правок и восемь пробелов закрыты; поправка к D39.109/D39.110 (07.08).

1. Заказ владельца: один чистый агент читает промт оркестратора и доки «где мы сейчас» и проверяет записи №15 по четырём осям — факты, пробелы, понятность холодной сессии, вода. Вердикт агента: «можно доверять С ПРАВКАМИ». Он пере-считал очередь своим скриптом (120 · 62/79 · «скоро» 32 — сошлось до строки), механически сверил ВСЕ file:line новых строк реестра (все существуют и говорят заявленное), пере-проверил номера норм по первоисточникам, прогнал build/vet/test/golangci-lint в зоне (0 issues) и подтвердил существование всех пинов ратифицированных решений. Не заверено им (стенд без Postgres): 45 мутаций, 26 БД-тестов, живые пробы на бинаре, make vuln, счёт фаззеров — остаются со слов приёмки, и так и помечено.

2. Поправки к D39.109 — принять как исправление, буква нот не переписывается (D23.3). (а) п.3 пере-формулировал NIST. Сказано «30 суток — БУКВА NIST AAL1»; по первоисточнику SP 800-63B-4 §2.1.3 буква иная: SHALL — только «установить определённый reauthentication overall timeout», сами 30 суток — SHOULD, и это интервал ре-аутентификации, который успешная ре-аутентификация СБРАСЫВАЕТ, а не неснимаемый предел; термин «absolute maximum session lifetime» принадлежит ASVS, не NIST. Верная формулировка: NIST требует (SHALL) установить определённый overall-таймаут ре-аутентификации и рекомендует (SHOULD) не более 30 суток на AAL1; наш жёсткий абсолютный срок 30 суток этой планке соответствует и трактует её строже.Поправка к поправке, внесена в тот же день по перепроверке у первоисточника: первая редакция этого пункта утверждала со слов верификатора, что 30 суток — интервал, который успешная ре-аутентификация СБРАСЫВАЕТ. Проверено у NIST: документ этого НЕ говорит — про сброс там не сказано ничего, поведение оставлено открытым. Значит наше чтение «жёсткий предел, который ничем не продлевается» — НАШ выбор, и он строже нормы, а не вычитан из неё. Подтверждается только вторая половина находки верификатора: термин «absolute maximum session lifetime» в NIST действительно отсутствует, он из ASVS. Урок сессии: верификатор убедителен, и его собственные подпункты подлежат той же сверке с первоисточником, что и проверяемый текст — иначе приёмка приёмки просто переносит доверие на шаг. Зонные носителя (STACK_DECISIONS §13, config.go:62-64) цитируют верно — ошибка была только в ноте, то есть в источнике истины №1. Номера разделов всех трёх норм верны. Замечание по прицелу: 7.1.x требуют ДОКУМЕНТА, величину требуют 7.3.1/7.3.2 — если §13 будут судить как соответствие ЗНАЧЕНИЮ, ссылка нужна на 7.3.2, её нет ни в одном доке. (б) п.4 сохранил снятое основание «доккоммент предлагает то, что PD-59 уже отклонил»: PD-59 сам superseded (D39.106 п.3), эррата это признала и переписала строку реестра, но текст п.4 остался — читать через эту поправку. (в) «Живой уязвимости приёмка не нашла» — термин не определён и гасит единственную major. Верно так: уязвимости с потерей денег, данных или захватом сессии нет; отказ в обслуживании входа ЕСТЬ и воспроизведён (PD-80, класс vuln). Формулировка в зонном журнале и CURRENT-STATE исправлена.

3. Поправка к D39.110: п.1 назван «решение владельца (дословно по смыслу)» — оксюморон, запрещённый нормой «цитаты только дословные, овер-атрибуция — типовой провал»; читать как пересказ решения. Форма и три следствия не меняются.

4. Закрытые пробелы (все — в носителях, а не в нотах, потому что сессии зон читают носители). PD-100 объявлялся в составе фикс-пака, а в фикс-листе зонного журнала отсутствовал — добавлен пунктом 7 · граница пака («PD-92/93/96/99/102/105/107 не трогать») жила только в D-логе, а фикс-лист говорил обратное «остальное по весу строк» — перенесена в журнал пунктом 8, формулировка «по весу» снята · пункт 6 фикс-листа был одиннадцатью строками истории моей ошибки без задания — сжат до задания («переписать доккоммент events.go:6-12 под форму D39.106 ДО промта эмиттера») · «три строки блокируют деплой и воркер» не называли, какие — названы поимённо (PD-91 деплой · PD-79 воркер · PD-95 промт эмиттера) · счёт весов регистра отстал от эрраты — пере-считан скриптом: 37 открытых, 3 major, 14 minor, 20 info, исправлен в двух местах · PD-105 нёс minor в колонке при «повышен» в теле — колонка приведена · словарь классов в шапке реестра не знал doc/standards, введённых новыми строками — дописан · PD-60/PD-61 выпали из списка «разрулить до промта эмиттера» — возвращены · пересчёт «главы → деньги» и ручка границ шкалы не были поручены никому — носитель назван в строке 126 (считает платформа, поверхность объявляется правкой спеки; ручки в контракте сегодня нет) · «CONFIRM владельца на 30 суток» стоял в CURRENT-STATE как полученный, а в ноте и журнале — как открытый вопрос: confirm получен 07.08, тексты сведены.

5. Два пробела класса «повторил свой же урок». (а) Эррата D39.109 ввела правило «каждый вывод зонного дока, спорящий со швом, грепается на supersede ДО ратификации» — и не применила его к ПОТОЛКУ: раздел П-5 зонного журнала продолжал объявлять платформу владельцем book.yaml, хотя D39.110 п.2(б) это отменил в тот же день. Абзац помечен SUPERSEDED. (б) Голова CURRENT-STATE отставала — третий раз в истории проекта (после D39.81 и D39.83, оба названы в промте оркестратора): нота D39.111 была ратифицирована, а шапка показывала D39.110. Механический чек головы обязателен ПОСЛЕ каждого аппенда, а не после «важных».

6. Не минтить номера чужим сессиям. CURRENT-STATE ввёл «оркестратор №16» для параллельной приёмки полигона — при том что счётчик объявлен каноническим и ОДНИМ, живёт в промте оркестратора и показывает №15, а по D-логу №16 не существует. Номер снят: второй оркестратор назван ролью («параллельный, приёмка полигона»), номер выдаёт тот, кто пишет ему промт.

7. Долг, оставленный сознательно: срез хроники PROGRESS в архивный слайс (живой хвост несёт №11№13, эра D39.91105, всё закрытое) — НЕ сделан, потому что файл держит живая полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле. Режет тот, кто лендит полигон. Туда же: архивация отработанного PLATFORM_SESSION_PROMPT.md (баннер-исход на нём стоит) — после приёмки фикс-пака, чтобы не ломать ссылку живой сессии.

D39.113 — ИНЦИДЕНТ 08.08: агент панели откатил незакоммиченные правки двух параллельных сессий; один файл восстановлен, шесть потеряны; норма изоляции панелей ужесточена (08.08).

1. Что произошло. В 00:13:39 агент воркфлоу-панели, которому я дал шелл, попытался работать в песочнице; его cd молча провалился (каталог песочницы исчез между вызовами), и следующая команда той же строки — git reset -q; git checkout -q -- . — отработала в РЕАЛЬНОМ рабочем дереве. Подтверждение: git reflog — два reset: moving to HEAD с этой меткой времени. Откатились незакоммиченные правки СЕМИ отслеживаемых файлов двух чужих сессий (полигон эксп-21 и параллельный оркестратор его приёмки). Коммиты обеих сессий целы; нетрекаемые файлы (eval/role_topology/phase2b.py) уцелели — checkout -- . их не трогает.

2. Корень — МОЯ ошибка проектирования панели, не поведение агента. Две причины, обе мои: (а) трём агентам панели я выдал ОДИН путь скрэтчпада, и они затирали друг другу подкаталоги — отсюда исчезнувшая песочница; (б) агентам с шеллом не был запрещён git, меняющий состояние дерева, при том что промт панели содержал запрет «ничего не редактируй в репозитории» — запрет прозой против команды, которая правит дерево не редактором, а git-ом. Прецедент этого класса в проекте уже был (урок 09.07: перезапись истории оркестратором стёрла незакоммиченные правки полигона) и не был превращён в механизм.

3. Восстановлено одно из семи. docs/PROGRESS.md — пинг полигона (26 строк секции «Полигон») восстановлен из моего собственного бэкапа, снятого в 00:08 при тестировании хука, за пять минут до инцидента; сверено, что дельта к HEAD = ровно эти 26 строк и ни одной моей. ⚠ Правки полигона в окне 00:0800:13:39, если они были, в бэкап не попали. Потеряно безвозвратно (git-объектов нет — файлы не стейджились, git fsck и полный обход --batch-all-objects по маркерам дали пусто): незакоммиченные правки docs/experiments/21-role-topology.md · docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md · docs/architecture/14-api-contract/README.md (заполненное Приложение А от №14 — в HEAD осталась ЗАГОТОВКА с плейсхолдерами) · eval/role_topology/absjudge.py · drift.py · verify_report.py. Инвентарь и уцелевшие материалы — в скрэтчпаде сессии, записка ИНЦИДЕНТ_08-08_потери.md; текст Приложения А я держу в контексте и отдаю как РЕКОНСТРУКЦИЮ-черновик, а в дерево сознательно не писал: подменить потерянный файл правдоподобным хуже честной дыры.

3-эррата (08.08, по ответу параллельного оркестратора — моя таблица потерь ошиблась в двух местах). (а) Неверная атрибуция. Я записал незакоммиченные правки docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md как потерю ПАРАЛЛЕЛЬНОГО ОРКЕСТРАТОРА. Он это опровергает и грунтует: после лендинга 73a7e7a он не держал в этом файле ничего незакоммиченного, HEAD (21838 байт) — его финальная версия. Модифицированное состояние файла до инцидента принадлежало ПОЛИГОНУ, который аннотировал промт (требование ригов, стр. 59); суть той правки уцелела в пинге, а её ратификация — работа приёмки полигона. Атрибуция исправлена здесь; в потерях у параллельного оркестратора не осталось ничего, кроме Приложения А, унаследованного от №14. (б) Ущерб отчёта я преуменьшил. Я записал «незакоммиченные правки отчёта»; фактически на HEAD лежит ВТОРАЯ-ТРЕТЬЯ редакция (деньги стр. 49: «$4.85… третья $0.55»; слов «четвёртая/пятая» в файле нет), а пинг описывает ПЯТУЮ ($4.92166, absjudge, агенты-судьи, семейство Холма из семи). Потеряны две ЦЕЛЫЕ редакции, а не правки. (в) Восстановление полигоном оказалось неточным: параллельный оркестратор нашёл в восстановленном eval/role_topology/verify_report.py:237 затенение med = med(costs) при функции med на строке 53 — UnboundLocalError на первой итерации, секция ЭКОНОМИКА и всё после неё не исполняются. Пере-проверено мной по коду: находка верна. Чинит полигон (его зона); для приёмки это значит, что «восстановлено из контекста» ≠ «восстановлено верно», и восстановленное подлежит той же проверке исполнением, что и новое.

4. Норма (жёстче прежней, потому что прозой не сработала). Агенту панели с шеллом: свой каталог песочницы на КАЖДОГО агента (общий путь = гонка и исчезающие каталоги) · запрет на state-changing git явным перечислением (reset · checkout -- · restore · clean · stash · add · commit), а не общей фразой «не редактируй» · перед панелью, работающей в дереве с чужими незакоммиченными правками, снимать бэкап этих правок (git diff > файл вне репозитория) — сегодня спас именно случайный бэкап, а не процедура · формулировка «работай в копии» без выданного пути и без проверки, что копия существует, — приглашение к этому же инциденту. ⚠ Для читающего дальше: три доступных мне механизма изоляции (worktree на агента, запрет тулов, копия репозитория) не были применены ни один.

D39.114 — ФИКС-ПАК ПЛАТФОРМЫ (P3) ПРИНЯТ И ЗАЛЕНДЕН: девять строк регистра закрыты, 8/8 моих посадок поймано, PD-80 и PD-91 пере-проверены исполнением (08.08).

1. Вердикт: ПРИНЯТ, заленден 99f049c (18 файлов, +856/86). Отработаны все восемь пунктов фикс-листа приёмки P2; закрыты PD-79 · PD-80 · PD-83 · PD-84 · PD-85 · PD-91 · PD-95 · PD-100 · PD-106. Приёмка по весу пака — инлайн и своим исполнением, без панели (норма пропорциональности; после инцидента D39.113 панели без слова владельца я не запускаю).

2. Метод. Батарея пере-прогнана мной: офлайн и с живым PostgreSQL 18.4 под -race — все десять пакетов зелёные, включая новый cmd/tmplatformctl, линтер 0 issues, make vuln чист. Свои посадки — 8 из 8 поймано поимённо, в копии зоны вне репозитория; посадки ставились В СВОЙСТВО каждой закрытой строки, потому что предмет проверки фикс-пака — именно карта пинов зоны, а не поиск мимо неё. ⚠ Первая редакция моей посадки PD-100 была нацелена мимо (регексп снял соседний лог) и «выжила»; точная посадка ловится TestInfrastructureFailuresInTheCallbackAreLogged — записано, потому что «заявление=команда» действует и на приёмку.

3. Пере-проверено исполнением, не со слов. PD-80 на собранном бинаре: сорок запросов выжигают ведро /auth/login, после чего честный колбэк с живым state получает 400, а не 429 — бюджет завершения входа флудом начала больше не тратится (до фикса тот же сценарий давал 429 со стёртой login-кукой; воспроизводилось дважды независимо). PD-91: замер зоны воспроизведён моими руками — systemd-run --user --wait -p ProtectSystem=strict -p ReadWritePaths=<несуществующий> даёт 226/NAMESPACE, тот же путь созданным даёт 0/SUCCESS. Способ проверки БЕЗ sudo зона нашла сама, и это сильнее, чем предполагала строка PD-91: свойства песочницы теперь измерены, а не вычитаны из доки; что не проверено (юнит целиком, MemoryMax/OOMPolicy) названо на месте. PD-95: доккоммент events.go несёт ратифицированную форму D39.106 — устранён риск, что эмиттер-сессия прочтёт снятую форму как задание.

4. Ратифицировано отдельно: PD-104 оставлен открытым ПРАВИЛЬНО. Зона починила половину док↔код (ячейка PD-30 больше не обещает нулевой аккаунт при автогранте) и строку не закрыла, потому что продуктовая половина — ноль на бете, суточный агрегатный потолок, счётчик аномалий — ждёт слова владельца. Это правило PD-83 («свойство без пина закрытым не считается»), применённое зоной к себе.

5. Оговорка зоны принята как честная: адверсариального ревью вторым читателем у P3 не было — сессия без права на субагентов. Второй читатель — эта приёмка. Живой счёт регистра руками больше не переписывается (норма D39.112): python3 docs/scripts/counts.py; исторические числа в CURRENT-STATE помечены историческими, а литерал веса снят с автопроверки, потому что легитимного живого носителя в зоне docs у него нет.

D39.115 — S3 «СЛОЙ ДАННЫХ» ПРИНЯТ И ЗАЛЕНДЕН: контракт 0.2.0 в каноне, три ошибки ОРКЕСТРАТОРА поймала сама сессия, правило 0.x ратифицировано (08.08).

1. Вердикт: ПРИНЯТ, заленден 60595f6 (46 файлов). Пере-прогнано мной: npm run check — 108 тестов, prettier/eslint/stylelint/tsc чисты, spectral по спеке без замечаний; npm run check:full — сборка плюс СЕМЬ кадров с axe, включая новый маршрут /partial (отказал один рид при рабочих остальных — ветка жила незамеченной именно потому, что её нельзя было открыть по ссылке). Кадр /scale прочитан глазами: пер-главный счётчик замечаний на месте, и честно оставленный Ф-30 виден прямо на экране — глава без заголовка показана голым номером «12», а не выдуманной «Главой N».

2. Три моих ошибки, найденные сессией. Это главный результат пака. (а) «Максимум шкалы = баланс МИНУС открытые холды» (D39.110 п.2(в), строка 126, промт S3 п.17) — НЕВЕРНО, вычитание дважды. Hold пишет отрицательную строку в леджер и тем же знаком двигает кэш баланса (credits.go:179appendLedger :297-305), значит баланс УЖЕ не содержит открытых холдов, а Reserved — справочная сумма. Пере-мерено мной на живом PostgreSQL: грант $10 и холд $1 дают Balance 9.000000 при Reserved 1.000000, а моя формула дала бы 8 — шкала вдвое короче правды. Исправлено во всех трёх носителях. (б) Форма nullable: true, которую я вписал в промт для GET /usage, в OpenAPI 3.1 невалидна; сессия выразила через oneOf с type: 'null', как во всей остальной спеке. (в) Инструкция ВНУТРИ нормативного дока протухает от исполнения: я оставил в шапке спеки фразу «version всё ещё -draft — S3 бампнет первым действием», и после бампа она стала ложной; сессия заменила её на правду и назвала это отступлением вслух. Тот же класс, что рукописные производные числа (D39.112): предписание, записанное в артефакт, живёт до первого действия.

3. Норму «не ходить в чужую зону» АМЕНДИРУЮ, потому что она и была источником (а). Сессия объявила вслух, что нарушила мой запрет и читала Go платформы (только чтение, ничего не тронуто) — и ровно этим нашла ошибку в моей ратификации. Новая формулировка: в чужую зону НЕ ПИСАТЬ; ЧИТАТЬ код для сверки несущего утверждения — можно и НУЖНО, потому что доки врут, и это норма проекта («не верь заголовкам, грунтуй file:line»). Запрет читать превращал сессию в заложника моего текста. Отдельно: раскрытие нарушения вслух — правильное поведение, и его надо поощрять, а не наказывать.

4. Ратифицировано. Форма управляемого потолка — GET /books/{bookId}/run-optionsCeilingBounds отдельным ресурсом, а не полем карточки книги (максимум зависит от АККАУНТА и двигается, когда книга не менялась; карточка кэшируется библиотекой и назвала бы протухший максимум ровно в момент выбора) · три числа вместо двух, max_chapters приходит уже подрезанным и клиенту подрезать второй раз запрещено, default_chapters — продуктовая политика платформы, max_chapters: 0 легален и означает «прогон начать нельзя» · ceiling_chapters обязателен в запросе старта и на Run · 409 покрывает «потолок больше не помещается». Правило версий 0.x: минорный бамп — законная полоса ломающих правок (semver §4), клиент пинит точную 0.x-версию; с 1.0.0 действует общее правило. Сессия НЕ стала править раздел Versioning своей рукой, а назвала противоречие — это верно, правило версий принадлежит владельцу контракта; вписано мной в обе копии. Блоки компаньона 2.14 (поверхность входа) · 2.15 (потолок) · 2.16 (тот же origin — факт, CORS-слоя нет) внесены в канон; патч-файл S3_CONTRACT_HANDOFF.md применён и удалён, как он сам себя и объявил.

5. Канон и зонная копия снова байт-равны (ba7f3745…), spectral по обеим чист.

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.17D39.19D39.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 §1617 (HTTP/1.1-escape как диагностика тихого усечения · assistant-prefill continuation вместо ре-рана) · восстановление Приложения А контракта после инцидента — решение владельца. Счёт очереди пере-выставлен скриптом: 123 строки · бэкенд 64 строго / 82 широко · «скоро» 33.

6. Норма изоляции панелей перенесена из D-лога в промт оркестратора — она жила только в ноте, а читают промт. Там же пустой заголовок «Текущее состояние и очередь — НЕ здесь» получил тело: где именно они живут и что числа берутся скриптом.

7. Что НЕ сделано и почему. Срез хроники PROGRESS в архивный слайс (живой хвост несёт №11№13, эра D39.91105) — не делал: файл прямо сейчас держит полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле, то есть способ потерять чужую работу второй раз за сутки. Режет тот, кто лендит полигон. Из 78 находок закрыт первый эшелон (промты, статусы, висячие ссылки, незанесённое) — остаток воды (дубли пин-таблиц, историческое тело API_CONTRACT_DRAFT.md, §1 «как есть» в 09-target-architecture.md) в этот проход не тронут: он не вводит сессию в заблуждение, а только удлиняет чтение.

D39.117 — ЭКСП-21 ПРИНЯТ; подтверждения владельца по тратам и агент-судейству получены; строка 65 закрыта; курс — эксп-22 «панель жильцов» + Sol-арбитраж (08.08, параллельный оркестратор — приёмка полигона, мандат владельца 08.08).

1. Вердикт: ПРИНЯТ. Проверено исполнением 08.08: verify_report.py — 90 проверок, ноль провалов, код 0; itog.py пере-снимает каждое число ИТОГа из сырья, код 0. Встречные аудиты полигона (снизу вверх / сверху вниз) приняты; мой краш-репорт med = med(costs) (verify_report.py:237, неточное восстановление после инцидента D39.113) полигоном починен, линтер зоны заведён. Приёмка по норме пропорциональности — инлайн + исполнение гейтов, без панели. Механика — пинг «Полигон» и §18 отчёта, здесь не дублируется (D39.112).

2. Подтверждения владельца 08.08 (в чате этой сессии; пересказ, не цитаты): (а) траты 07.08 — устная санкция владельца по ходу сессии БЫЛА и подтверждена («я разрешал тратить»); против буквы промта пробития остаются зафиксированными в отчёте, промт эксп-22 закрывает класс механическим стопом и тестом кассы на свои теги. (б) Амендмент «судья пака не покупается за токены» (агент-судейство вместо платного) — подтверждён ⇒ числа §11§18 легитимны, платный пере-суд не нужен. (в) Правка риг-требований («оба порядка» → абсолютная шкала) — это девиация от промта ОРКЕСТРАТОРА, не решение владельца, ратифицирую сам: требование зеркальности писалось под платного ПАР-судью; в абсолютном протоколе позиции пары не существует, а позиционный сдвиг замерен и вычтен (+0.147/шаг метки); все четыре агента независимо свернули парные пакеты в абсолютные оценки — инструмент сам отверг форму. Для ПАРНЫХ предъявлений (Sol-пакеты) оба порядка остаются обязательными.

3. Диспозиции гейт-строк (гейт «эксп-21» исполнен). 142 — точечная починка ОТКЛОНЕНА как замена редактора (C2/A_law 3.75 Holm 0.0006; при реальной детекции не лучше черновика, C2/F3 0.94; гипотеза эксп-20 «$0.0002 чинит всё» мерилась при идеальных флагах и пала) и ПРИНЯТА формой «механический пре-гейт ПЕРЕД редактором» (брак 5 клеток против 10/23 при половинной цене $0.00298/$0.00602; ремонт ТОЛЬКО с банком — без банка ломает канон 0.917→0.895); стройка — бэкенд-промтом по команде владельца. 65 — ЗАКРЫТА: движки dspro/glm-5 неразличимы (A/B +0.06 p=0.95; A_law/B 0.69 порога не проходит) ⇒ жилец редактора — вопрос ЦЕНЫ, то есть конфиг; остаток строки (слепое чтение инструментарием D39.8(3)) переезжает в Sol-протокол, строка 150. 106НЕ закрывается: эксп-21 дал довод против диффов (полный regen выигрывает у ремонта), но с оговоркой полигона — чинил дешёвый фиксер по предложению, а не сильный редактор узким мандатом; гейт «перепроверить до стройки» в силе, приоритет понижен. 55 — частично закрыта (направление главного вывода воспроизведено на чистом en-материале, узнавание 1/5); остаток «неконтаминированный zh-срез» — заказ ПОВТОРЁН эксп-22 Ф0 жёстко: эксп-21 его не исполнил (главный zh-замер на книге 4/5, без пинга).

4. Опровергнута продуктовая строка D39.108 «второй проход на dspro отрицателен по слепому суду» — она стояла на непersisted замере §5.2 эксп-20 и была помечена «со слов»; эксп-21 честным ригом дал обратное (A/F3 +2.50 Holm 0.0004 · A_law/F3 +2.81 Holm 0.0098 · нога 2×2: работает топология, не жилец). Стек-баннер CURRENT-STATE поправлен, supersede-указатель добавлен в карту. Пометка «со слов» отработала как задумано — величина не успела стать основанием стройки.

5. Курс владельца 08.08: (а) эксп-22 «панель жильцов» — промт выдан (docs/POLYGON_TENANT_PANEL_SESSION_PROMPT.md): профиль-скрин с pass/fail порогами, записанными ДО замера → панель черновиков (слот несёт ~70% эффекта финала — §16.2; за всю историю проекта черновиком была одна модель) → панель редакторов поверх замороженных черновиков (обязательный кандидат gemini-3.1-pro — аутлаер-гипотеза эксп-04, современным ригом не мерена) + шумовой пол (§8 п.1) + прямой D_/A (§8 п.2) довесками. (б) Слепое чтение владельца ЗАМЕНЕНО Sol-арбитражем (владелец черновики читать не хочет; ChatGPT Sol high-reasoning руками владельца через подписку = внешний контур третьего семейства): пере-суживаются расходящиеся контрасты эксп-21 (A/F: luna +0.84 против gemini +3.03 — расхождение 2.19 балла = 14 стандартных отклонений шума судьи-замены, собственным шумом не объясняется) и слепые пары эксп-22. Правило ничьей эксп-22 ратифицировано: при перевесе ниже порога различимости рекомендация отчёта — самый дешёвый жилец. Оговорка записана честно: Sol — LLM, «издательское качество для человека» им не доказывается; человеческий контур остаётся за пилотом Ф2.5. (в) Агент-судейство — под явным капом (агенты не бесплатны — слово владельца 08.08; кап ≤60 запусков в промте эксп-22).

6. Хвосты в трекер: строки 149153 заведены (эксп-22 · Sol-арбитраж · отказной режим связки · слипание абзацев · чистый контраст мандата); строки 12 и 82 получили $0-прототипы эксп-21 (battery.check_numbers — синтетика 16/16 · battery.check_gender по карточкам сида, 86112 сверок/арм) — указатели внесены в их тела, сами строки живы (движковые гейты не построены); кредиты xAI — в лист владельца; три провод-факта эксп-21 §8 внесены в quirks 00 (Gemini fail-closed приходит БЕЗ объекта message · gpt-5.6-luna без ручки эффорта — пустой оплаченный выход · glm-5 гасится extra_body).

7. Поправка к D39.113: строка таблицы потерь «незакоммиченные правки промта — параллельный оркестратор» — ошибочная атрибуция: HEAD 73a7e7a и был финальной версией промта параллельного оркестратора, его правки не терялись. Чьи модификации были в дереве — достоверно неизвестно; вероятно, полигона (его пинг предлагает правку требования стр.59 того же файла), и тогда их суть уцелела в пинге. Буква D39.113 не переписывается (D23.3) — читать через эту поправку.

D39.118 — ФИКС-ПАК БАНКА (строки 128+129+130-минимум) ПРИНЯТ И ЗАЛЕНДЕН: семьи термов со-батчатся юнитами, наблюдаемость подписи построена, дофикс-раунд закрыл major приёмки (08.08).

1. Вердикт: ПРИНЯТ, код заленден bccf2d8 (27 файлов, +2935/201; деньги пака $0). Метод — четырёхконтурный воркфлоу приёмки: слепой дифф-ревьюер с мнением ДО чтения отчёта · пере-ран всех заявлений исполнением · 8 своих посадок в копии зоны вне репозитория (6 CAUGHT сразу, 2 выжившие) · охота вне карты отчёта; затем дофикс-раунд сессии и ре-чек (battery целиком EXIT=0 · -race EXIT=0 · счёт тестов 685→717 подтверждён независимо · пере-посадки 3/3 CAUGHT, выживших 0). Механика и полный фикс-лист — ревью-шапка archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md и пинг «Бэкенд» PROGRESS; здесь не дублируются (D39.112).

2. Находки приёмки, закрытые дофиксом: клейм «батарея зелёная» первой редакции был ложным — lint не гонялся и был красным (3× errcheck), исправлено с честным признанием в отчёте · MAJOR вне карты: WARN строки 130 структурно мёртв в проде — ownerHandled на сыром seed само-исключал строки движка со второго прогона; закрыт unsignedEngineSurfaces(seed) + e2e-тест двумя реальными прогонами через стор · две дыры пинов на space-run-форме (conf-хвост и ре-джойн банкноты отключались незаметно) · bankParseVersion не потреблялся ничем — теперь логируется на стопе, v2.1/v2.2-артефакты различимы · три тихих отказа канала семей: script-колонка валидируется по реестру диапазонов, пол-таблица отвергается, словарь типов синхронизирован (CandidateTypes с nickname + правило пары + пин покрытия каждого типа).

3. Ратифицировано: сдвиг edit-волны bank-only ПРИНЯТ (слово владельца 08.08 «не против реснапшота»; сдвиг громкий --resnapshot, moveBankOnly даёт $0-репин юнитам без терма; уточнение приёмки: двигается и при выключенном гейте терминолога, classify-чекпойнты перекупаются тем же центовым разом) · bankdata-плоскость — отдельный //go:embed вне волнового фолда со своей BankDataVersion (вместо колонки script-series.txt — та фолдится в EmbeddedVersion и перекупила бы драфт-волну без права $0-репина; девиация ратифицирована как правильный шов) · инверсия ранжирования семей (размер прежде длины якоря; спековый порядок ломал критерий линейки 转) — принята, девиация дописана в §4 отчёта по требованию приёмки · имена эвиктнутых — лог, миграция НЕ заводится (гейт: доказанная потребность; строка 159, вместе с 49а) · «двойной пробел» закрыт замером: 0 внутренних прогонов на 585 строк эталона (пере-ран приёмкой; наивный grep без rstrip даёт 55 хвостовых — парсер их триммит).

4. Строки трекера: 128 и 129 ЗАКРЫТЫ · 130 пере-скоуплена (минимум исполнен; остаток = накопительный мердж/слоты — СТОП-решение владельца, материал даст WARN со второго прогона) · заведены 154159 (одноруновая голова семьи · скрипт-слепой резолв к ja→ru · banknote_truncated-пол за гейтом канала · пере-подтверждение family_max_members=24 · conf без гейта данных пары · durable-имена эвиктнутых) · дописаны 37 (вынос Aho-Corasick = рефакторинг слоя, «чисто не ложится») · 38 (ординальная механика подтверждена кодом: G1 двигает состав юнитов — на первом прогоне после пака перекупаются все бэнк-батчи, центы) · 57 (ссылка на фикс-пак закрыта). Остаточный принятый риск: пин покрытия типов работает по зеркальной фикстуре zhFamily — рассинхрон зеркала со shipped-строками пином не ловится.

5. Верификация эффекта — §6 отчёта (10 конкретных проверок по артефактам, $0); гейт — первый холодный прогон: families=/families_held= · химера 古月/转 в стоп-таблице · self_conflicts= · колонка confidence при не выросшем bad_lines · WARN диффа авто-банка со второго прогона. Активного промта бэкенда после этого лендинга НЕТ — следующий (эмиттер строки 103 + денежные строки шва) по слову владельца (D39.107 п.3). (⚠ поправка курса тем же днём: следующим выдан пак «блокеры контракта», эмиттер — за ним; слово владельца — D39.119 п.1.)

D39.119 — КУРС ВЛАДЕЛЬЦА 08.08: эмиттер отложен, выданы ДВА промта (бэкенд «блокеры контракта» · платформа «раннер»); S4 гейчен качеством оболочки; PD-105 ратифицирован (08.08).

1. Слово владельца 08.08 (пересказ): с эмиттером jsonl подождать — вокруг него техдолг бэклога; но платформу и фронт пора разблокировать. Разбор оркестратора, подтверждённый владельцем формой «пиши»: настоящие разблокираторы фронта/платформы — движковые строки контракта 99/100/101/125/145 (строка 49 annot-v1 — следующим паком) и платформенный раннер с ручками; эмиттер нужен СВЕЖЕСТИ статуса и деньгам шва, не первым экранам — резерв на это время = периодический status --json-резюнк (построен в P1). Поправка к D39.118 п.5: эмиттер идёт бэкенд-промтом ПОСЛЕ пака блокеров.

2. Выданы два промта (оба аудированы перед выдачей: два холодных читателя + фактчекер, 35 опор подтверждено, поправки внесены): бэкендdocs/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT.md (строки 99+100+101+125+145; $0; сетевых поверхностей в движке не появляется — D39.81) · платформаplatform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md (транзиентные юниты D39.106 · River+воркер+холд-до-спавна · реконсилятор 138 · тейлер наготове · первые ручки /v0 по контракту 0.2.0 (П-1/П-5) · PD-99; координация с бэкенд-паком — узкие интерфейсы с дев-стабами, форма только из HEAD). Запуск сессий — владелец.

3. Ратификация PD-105: доставка событий шва = at-least-once; ДУБЛЬ seq — норма повторного чтения, декодер обязан принимать идемпотентно без фатала; тот же seq с ДРУГИМ payload = карантин прогона (research/25). Девиация от буквы реестра («ратифицировать вместе с промтом эмиттера») осознанная — тейлер-сторона строится сейчас; строку реестра обновляет платформа-сессия паком.

4. Слово владельца о КАЧЕСТВЕ ФРОНТА — гейт на S4. Владельцу не нравится «логика спама вкладками»: вкладки обязаны работать как в VS Code (preview-вкладка от одиночного клика, замещение её следующим, пин по двойному клику/взаимодействию). Полный список претензий владелец сформулирует отдельным входом. Диспозиция: S4 не стартует до списка; форма — «S3.5 фикс-пак оболочки» (VS Code-вкладки + Ф-19 + список владельца) → S4 на починенной оболочке. Носитель — запись оркестратора в frontend/docs/frontend-PROGRESS.md 08.08; ПТ-строка в продуктовый реестр — при полном списке. Бэкенд/платформа фронт не ждут.

D39.120 — КРОСС-МОДЕЛЬНЫЕ КОНТУРЫ РЕВЬЮ И ПРЕДМЕТНЫЕ ОСИ САМОПРОВЕРКИ — нормой-направлением (владелец 08.08).

1. Ратифицировано словом владельца 08.08 (пересказ; финал — «да, нормально» с оговоркой свободы): (а) в приёмочных панелях ≥1 опровергатель ДРУГОЙ моделью семейства на текстовых/оценочных линзах (глушит контекстное закрепление и self-preference; механические линзы от смены модели не выигрывают); (б) тяжёлые ратификации класса D39.106 и периодический аудит записей оркестратора — параллельная сессия-ревьюер другой моделью с СОБСТВЕННЫМ онбордингом (снимает фрейминг оркестратора; промт — оркестратор, старт — владелец, мнение — владельцу ДО ратификации; прецеденты D39.106/D39.112); (в) семейный слепой участок кросс-моделью внутри Anthropic не снимается — оценочные вердикты по-прежнему калибруются внешним семейством, первичны пере-ран и исполнение; (г) каждый кодовый промт несёт 13 ПРЕДМЕТНЫЕ оси самопроверки по характеру работы (бэкенд — общность §0.1; платформа — индустриальный первоисточник/stdlib прежде велосипеда; фронт — контракт/доступность), дисциплина ревьюера (шесть антипаттернов) в сессионные промты не грузится.

2. Оговорка владельца — часть нормы: всё выше — НАПРАВЛЕНИЕ, не буква; сессиям и оркестратору оставлена свобода суждения, разумное отступление с аргументом легитимно и приветствуется; упарывание в букву стандарта и соглашательство с нормой ради нормы — сами по себе антипаттерн. Носитель — промт оркестратора (два новых буллета «Методологии»).

D39.121 — ЗАПИСКА-ПЛАН ПОСЛЕ ТЯЖЁЛОГО РЕВЬЮ + ОФИЦИАЛЬНЫЕ ПРАКТИКИ ANTHROPIC абсорбированы нормой-направлением (владелец 09.08).

1. Слово владельца 09.08 (пересказ): сессии должны решать свои проблемы максимально самостоятельно — после сложного ревью с верифицированными находками сессия составляет МИНИ-ПРОМТ САМОЙ СЕБЕ (записанный план) и движется по нему, а не по памяти; плюс заказ: разобрать официальные гайды Anthropic и перетянуть применимое. Исполнено веб-ресёрчем (3 агента, 86 рекомендаций с URL-грунтовкой) — выжимка и карта применимости: docs/research/26-anthropic-guidance-digest.md.

2. Ратифицировано (направление, не буква — оговорка D39.120 п.2 действует): (а) записка-план: после тяжёлого ревью — структурированный файл «ID находки → статус → улика» (не проза: инцидент диспозиций 08.08 случился в прозе, и Anthropic это же говорит о Markdown против JSON), движение по записке, сдача гейтится сверкой «все ID имеют диспозицию»; (б) «заявление=команда» распространяется на клеймы ревью о себе; (в) комплектность против заказа — механически (пункт промта → исполнено/отказ), для паков среднего+ веса; (г) числовой гейт сторожит присутствие, не истинность — сравнительные/пороговые утверждения приёмка читает списком; (д) стандартный блок будущих кодовых хендоффов из официальных сниппетов (ground-progress-claims · «проверь последний абзац» · запрет подгонки тестов · интервальная самоверификация против явных критериев); (е) панелям — obstacle reporting обязательным полем схемы и анти-оверфлаг-рамки ревьюеру. Носители: промт оркестратора (два буллета) + CLAUDE.md (компакция-инструкция и запрет подгонки тестов — механизм-уровень, читается каждой сессией).

3. Конвергенция зафиксирована (research/26 §2): половина канона проекта совпала с официальными рекомендациями независимо («заявление=команда» = show-evidence · author≠reviewer = fresh-context verifiers · execute-first приёмка = grade-final-state · онбординг-диета = lean CLAUDE.md · «один носитель на факт» = JIT-указатели). Не перенимается: promptfoo · lock-файлы (нужны только при двух сессиях в одной зоне) · метапромпт как прод-механизм (§5 research/26). Вопрос владельца о «сайте prompts md» закрыт указателем — research/26 §4.

D39.122 — ПАК «ДВИЖКОВЫЕ БЛОКЕРЫ КОНТРАКТА» ПРИНЯТ И ЗАЛЕНДЕН; ратификации приёмки; строки 99·100·101·125·145 закрыты; research/27 (главы) принят фактурой (09.08).

1. Приёмка (оркестратор №15, полный аппарат + новые нормы). Три раунда: (а) 7-агентный воркфлоу — слепой дифф-ревьюер · кросс-модельный опровергатель отчёта на Opus (первое применение D39.120) · пере-ран заявлений (battery целиком, 717→738, формы артефактов на стенде, cmp проекций) · 7/7 посадок CAUGHT в копии зоны · два охотника вне карты · перф-замер на независимом стенде с бинарём «до» из 06f0342 (status 1.401.46→0.050.07 c — таблица §2.4 воспроизведена); (б) фикс-лист F1F6 (несущее: F1 MAJOR от опровергателя — unit.id первого юнита главы переживал любой разрез, «граница инвалидации» отчёта была ложной; закрыт ТЕГОМ РАЗРЕЗА в id) + ре-чек с пере-мутациями (поймано: V2-1 не исполнен и не задекларирован · клейм покрытия F6 ложен · зазор МОЕЙ спеки cutTag без langpack/embedded/norm · manifestVersion не бампнут); (в) микро-раунд V2-1..4 исполнен, и сессия СВЕРХ заказа провела третий слепой аудит своих клеймов — нашла 4 непокрытых тестами оси (худшая: быстрый путь манифеста удалялся при зелёной батарее — тест сравнения проекций вырождался в «медленный против медленного»; проводка --ceiling-usd в CLI не пинилась) и запинила; призналась в холостых прогонах двух мутаций (go test -run без совпадений = ok) и добавила сторож. Итог: тестов 717→749 (+32/0), battery EXIT=0 целиком, голден/снапшот/подпись банка нетронуты. (г) Финальный ре-чек V2+аудита (по слову владельца) — ВСЁ CONFIRMED исполнением: состав V2-диффа точен (5 файлов, ничего сверх), каждая V2-ось и все три §11б-теста перебиты мутациями заново (слепое пятно «ServesTheReadModelsIdentically зелёный при мёртвом быстром пути» воспроизведено буквально), счёт 749 поимённо, стенд tm-manifest-v2 2283/4276/5071 c единым cutTag, cmp-проекции IDENTICAL (0.080.16 c против 1.421.43 c). Одна MINOR-находка ре-чека принята БЕЗ дофикса: тест границы manifestMaxChunks пинит механизм, но не значение константы (absurd выводится из неё же — поднятие до 1<<62 тест переживает); диспозиция — значение константы сторожится ревью, NOTE в ревью-шапке отчёта.

2. Ратификации приёмки. (а) Граница report/export --pairs/ре-билла на пере-нарезке — ГРАНИЦА, не долг: QualityReport по построению требует исходный текст юнита (residual-скан), манифест текст не несёт намеренно. (б) done пофазных счётчиков = «разрешено волной» (ok/flagged/skipped); следствие edit.done ≥ done — честное, с оговоркой draft-only в доккоменте. (в) --ceiling-usd = КНИЖНЫЙ потолок в силе, не бюджет прогона: леджер сравнивает с накопленным committed+reserved книги; пересчёт «пользовательский прирост → абсолют» — обязанность ПЛАТФОРМЫ, данные уже отдаются (committed_usd/reserved_usd в status --json); вторая денежная ось НЕ заводится. (г) Все 8 девиаций §8 отчёта приняты (tmctl manifest · --ceiling-usd в redrive · счётчики на главу · draftOnly · ленивый провайдер · BankStopVariant · асимметрия таблиц · length-prefix ключа id). (д) heading манифеста = ВРЕМЕННЫЙ рендер движка (решение владельца 09.08): противоречие с закрытым К-3 признано, настоящие заголовки — строка 160 (titleRaw, Этап 0 структуры глав). (е) Форма артефактов для потребителей: unit.id = <chapterID>:<cutTag>:<firstChunkIdx>, манифест tm-manifest-v2 — платформе читать как новую форму (пинг в зонный журнал). (ж) .gitignore дополнен паттернами сайдкаров.

3. Бэклог. Строки 99·100·101·125·145 ЗАКРЫТЫ (удалены из таблицы). Новые: 163 — версии модулей x/text|x/net меняют нарезку, не двигая ни ключ/снапшот/чекпойнты (класс всей чекпойнт-плоскости, унаследован манифестом); 164 — rebill-проекция status с nil baseMemory может завышать RebillUSD против translate (преexisting, консервативная сторона). NOTE без строк: провести --ceiling-usd в status — по желанию платформы (в пинге зоны); fsync каталога; U+001F закрыт V2-1. Строки 160162 (структура глав по research/27) заведены до лендинга тем же днём.

4. research/27 «Определение глав» принят ФАКТУРОЙ (веб-ресёрч · панель двух моделей · карта по коду · жизненный цикл дерева §3а · развилка парсинг-стадии закрыта словом владельца: оригинальные названия, платный перевод со старта прогона; мини-сессия названий §5а — редакторский слот · инъекция банка · двухфазность вокруг подписи). Дизайн стройки НЕ ратифицирован — отдельное решение при постановке строк 160162 в очередь.

5. Очередь дальше: приёмка платформы-раннера (сессия жива) · лендинг эксп-22 (8 CONFIRM/DENY владельца) · промт эмиттера (103 + деньги шва) — эмиттер-сессии ПЕРЕД стартом прочесть PD-95/105/79/99/107/60/61 и D39.106 (09.08.2026, оркестратор №15).

D39.123 — ПАК ПЛАТФОРМЫ P4 «РАННЕР» ПРИНЯТ И ЗАЛЕНДЕН (d29e30c); ратификации приёмки вкл. поправку формулы потолка (PD-158); строки 138·139 закрыты (09.08).

1. Приёмка (оркестратор №15, три раунда, 13 агентов). (а) 7-агентный воркфлоу: слепой дифф · опровергатель-Opus (D39.120) · пере-ран батареи · 10 посадок (8 CAUGHT) · контракт-сверка 47 wire-проверок · охотник-деньги · охотник-systemd с РЕАЛЬНЫМ tmctl из HEAD (argv/поля status/exit-контракт/маркер — совпали; четыре systemd-клейма пере-мерены). Пять MAJOR: F1 — аргумент --ceiling-usd = чистый прирост против кумулятивной семантики движка (двустороннее исполнение; сквозная проба сессии прошла на фейке без кумулятива — сессия строила параллельно лендингу 145 и честно это записала) · F2 — PD-129 закрыт ложным клеймом, дедлок books↔run_attempts 258/300 через реальные API + транзиентный 40P01 карантинил проекцию навсегда · F3/F4 — два незапиненных денежных свойства (мутации пережили полную батарею) · F5 — settle по устаревшему снапшоту свипа возвращал холд целиком потратившему прогону (исполнением). (б) Дофикс F1F8 + селф-ревью сессии нашло PD-159 (отложенный расчёт прогона N оплачивал работу N+1, и N+1 платил снова — $2.10 за прогон ценой $0.10; закрыт SpendBound = min базовых линий последующих попыток; воспроизведён приёмкой на до-фиксном дереве, 4 края границы точны). Ре-чек дельты нашёл V2-1 (классификация транзиентности неполна: 57P0x/08/net reset карантинили навсегда) и V2-2 (ретрай спавна передавал потолок от сдвинутого счётчика — PD-161 наполовину). (в) V2 исполнен; финальный ре-чек: 5/5 пере-мутаций убиты поимённо, правка комментов миграций 00009/00011 правомерна (тела SQL байт-равны, обе рождены паком, причина в шапке sha256). Итог: тестов 105→261 (+156/0), батарея EXIT=0 с живым PG 18.4 под -race, скипов 0, регистр 171 строка (открыт 1 major — PD-113). Сессия поймала и мою ошибку: PD-167 = коммент 00009, не 00011.

2. Ратификации приёмки. (а) Privilege-модель: linger-пользователь, не polkit — по свойству (polkit авторизует глагол; транзиентный системный юнит без User= идёт от root; до v257 в запросе нет имени юнита), разбор — STACK_DECISIONS §15; уточнение верификатора (шаблонный системный юнит с фикс-User= не рассматривался) приложено, выбора не меняет. (б) ПОПРАВКА к D39.122(в)/пингу: формула аргумента потолка = committed + прирост×ставка, БЕЗ reserved (PD-158)store.Open движка зануляет утёкший reserved до первой судимой резервации, read-only status этого не делает ⇒ reserved из status всегда leftover; исполнение обеих формул против гейта: ратифицированная переплачивала запасом ровно на leftover сверх холда, консервативная точна и не недодаёт (flock исключает второго писателя). Формула моего пинга в зонном журнале была неверна в этом нюансе — прав оказался «громкий» отказ зоны исполнять её молча. (в) PD-105-реализация: карантин ПРОЕКЦИИ (попытки), не прогона — уточнение D39.119; деньги прогона сеттлятся ремонт-каналом. (г) Ставка $0.03/глава конфиг-константой платформы (провенанс exp08 v2 $0.0219 → D30.4 +1525% → вверх; сверен). (д) Формы: MaxAttempts:1 · холд+прогон+попытка+очередь в одной транзакции · ExecStopPost-маркер вместо D-Bus · ceiling-шаблон из конфига. (е) Решения по вопросам зоны (владелец делегировал 09.08): default_chapters = верх шкалы ОСТАЁТСЯ (дробный дефолт непонятен; компромисс «весь баланс под одну книгу» принят осознанно) · 503 внесён в контракт (0.2.0→0.2.1, зеркало фронта синхронно; PD-112 закрыт ратификацией) · PD-114: env-only остаётся, строка переформулирована в «печать эффективной конфигурации на старте» · PD-115: направление «внешний версионированный эталон на каждую ось» ратифицировано. (ж) PD-113 остаётся ЕДИНСТВЕННЫМ открытым major до эмиттера; после PD-158 его цена выросла — консервативный потолок останавливает ровно на исчерпании холда, и «деньги кончились» неотличимо от «инфраструктура упала».

3. Бэклог. Строки 138·139 ЗАКРЫТЫ (реконсилятор со свипом+бутом построен; пиннинг бинаря исполняется и резюмом — PD-143/134 закрыты с пинами). Новые строки движку: 165 — различимые exit-коды tmctl для потолочной остановки и graceful-stop (сегодня оба = 1: платформа отдаёт «failed» на штатный стоп и на исчерпание потолка; вскрыто реальным tmctl — фейк пробы умирал ОТ сигнала; приоритет поднят PD-158) · 166 — движковая поверхность оценки $/глава (П-10 зоны; ставка-константа — временная мера беты). .gitignore += .check.log; counts.py научен статусу open (…) (аннотированные строки регистра считались «иное»).

4. Очередь дальше: лендинг эксп-22 (8 CONFIRM/DENY владельца; у полигона в дереве уже виден незаявленный эксп-23 editor_tier — при лендинге спросить) · промт эмиттера (103 + деньги шва; читать PD-95/105/79/99/107/60/61 + D39.106 + новые 165) · следующий платформенный промт по слову владельца (кандидаты: стоп/резюм-ручки + эскроу 136) (09.08.2026, оркестратор №15).