diff --git a/.gitignore b/.gitignore index dc478472..8b06d81a 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,4 @@ backend/dist/ # exp16 versioned contrast corpus (jieba 0.42.1 dict.txt, 5MB) — SHA pinned in the report, reproducible eval/exp16/data/ -frontend/references/ \ No newline at end of file +frontend/references/.check.log diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 4cd2384b..893153d6 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,16 +1,17 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-09, голова D39.122; хендофф №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 ПРИНЯТ — D39.117; промт эксп-22 выдан). **Номер второму НЕ выдан намеренно:** канонический счётчик один и живёт в `ORCHESTRATOR_SESSION_PROMPT.md`, а выдавать номер сессии, которой я не писал промт, — второй носитель состояния. Одновременно не запускаются; CURRENT-STATE ведут оба, каждый пишет про свою зону и чужую строку не трогает. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-09, голова D39.123; хендофф №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 ПРИНЯТ — D39.117; промт эксп-22 выдан). **Номер второму НЕ выдан намеренно:** канонический счётчик один и живёт в `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 — одобрена, промт не выдан. **Открыто на владельце:** прогон Sol-пакетов руками (строка 150) · кредиты xAI (арбитр grok + судья 18+) · запуск эксп-22 (промт выдан, D39.117) · передача платформы · Приложение А `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`). > - **Сессия №15 (08.08, приёмка бэкенда): фикс-пак банка (128+129+130-минимум) ПРИНЯТ и ЗАЛЕНДЕН `bccf2d8` (D39.118).** Приёмка четырёхконтурным воркфлоу (слепой дифф · пере-ран заявлений · 8 посадок в копии зоны · охота вне карты) + дофикс-раунд: блокер lint (клейм «батарея зелёная» был ложным — признано) · мёртвый WARN 130 (само-исключение сырого seed) · 2 дыры пинов space-run · инертный `bankParseVersion` · 3 тихих отказа канала семей — ВСЕ закрыты; ре-чек: battery EXIT=0 целиком, 685→717 тестов, пере-посадки 3/3 CAUGHT. Ратифицировано D39.118: сдвиг edit-волны bank-only принят (слово владельца) · bankdata-плоскость вне волнового фолда · лог вместо миграции для эвиктнутых. Строки 128/129 закрыты, 130 пере-скоуплена, заведены 154–159. Верификация эффекта — §6 отчёта, гейт: первый холодный прогон. **АКТИВНОГО промта бэкенда нет** — следующий (эмиттер 103 + деньги шва 135/145) по слову владельца (D39.107 п.3). > - **Сессия №15 (08.08, курс D39.119): эмиттер ОТЛОЖЕН словом владельца — выданы ДВА промта:** бэкенд «блокеры контракта» (`BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT.md`: строки 99+100+101+125+145 — движковые поверхности для платформы/фронта; 49 — следующим) · платформа «раннер» (`platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md`: юниты D39.106 · River+воркер+холд-до-спавна · реконсилятор · тейлер наготове · ручки /v0 П-1/П-5; **PD-105 ратифицирован**: at-least-once, дубль seq = норма). Запуск обоих = владелец. **Фронт: S4 ГЕЙЧЕН** — слово владельца о качестве оболочки (вкладки = логика VS Code; полный список претензий следует); форма: «S3.5 фикс-пак оболочки» → S4 (D39.119 п.4, запись в зонном журнале). Эмиттер (103) — бэкенд-промтом после блокеров. **+ D39.120:** кросс-модельные контуры ревью (опровергатель другой моделью в панелях · параллельная сессия-ревьюер на тяжёлых ратификациях) и предметные оси самопроверки в кодовых промтах — нормой-НАПРАВЛЕНИЕМ с явной оговоркой свободы сессий. **+ D39.121 (09.08):** записка-план после тяжёлого ревью (структурированный файл ID→статус→улика, сдача = все диспозиции) + официальные практики Anthropic абсорбированы (research/26: сниппеты хендоффов · компакция-инструкция и запрет подгонки тестов в CLAUDE.md · obstacle reporting и анти-оверфлаг в панелях). > - **Сессия №15 (09.08, D39.122): пак «блокеры контракта» ПРИНЯТ и заленден `0e69bc1`** — приёмка тремя раундами (7-агентный воркфлоу с кросс-модельным опровергателем-Opus по D39.120 · фикс-лист F1–F6 с MAJOR «unit.id переживал разрез» · V2-раунд · сессия сверх заказа провела третий слепой аудит своих клеймов и запинила 4 непокрытые оси; тестов 717→749); ратификации и формы — D39.122, ревью-шапка отчёта первична; строки 99·100·101·125·145 закрыты, заведены 163·164. **Формы артефактов платформе (финальные): `unit.id = ::` · `tm-manifest-v2` · id банка длино-префиксированы** — пинг в зонном журнале платформы. **+ research/27 «Определение глав» (D39.122 п.4, фактурой):** веб-ресёрч + панель двух моделей + карта по коду; жизненный цикл дерева (§3а, решение владельца) · мини-сессия названий (§5а) · этапность со строками 160–162; дизайн стройки НЕ ратифицирован. Следующее: приёмка платформы-раннера (сессия жива) · лендинг эксп-22 (CONFIRM/DENY владельца) · промт эмиттера. +> - **Сессия №15 (09.08, D39.123): пак платформы P4 «раннер» ПРИНЯТ и ЗАЛЕНДЕН `d29e30c`** (53 файла, +9867/−170) — приёмка тремя раундами, 13 агентов: 7-агентный воркфлоу (в т.ч. охотник со сверкой РЕАЛЬНОГО tmctl из HEAD — обе жёсткие находки прошли бы фейком) · фикс-лист F1–F8 с пятью MAJOR (аргумент потолка против кумулятивной семантики · дедлок 258/300 с вечным карантином · два незапиненных денежных свойства · settle по устаревшему снапшоту) · селф-ревью сессии нашло PD-159 (двойная оплата при отложенном расчёте) · V2 · финальный ре-чек 5/5 пере-мутаций. Тестов зоны 105→261, регистр 171 строка (открыт 1 major — PD-113). **Ратификации D39.123**: linger-privilege · **ПОПРАВКА формулы потолка `committed + прирост` (PD-158)** — формула моего пинга переплачивала, прав «громкий» отказ зоны · карантин проекции · $0.03/глава · default_chapters=верх шкалы · **контракт 0.2.1: `503` на старте прогона** (зеркало фронта синхронно, пинг в их журнале). Строки 138·139 закрыты, заведены 165·166 (движку: различимые exit-коды потолка/стопа · оценка $/глава). Следующее: лендинг эксп-22 · промт эмиттера (перед стартом: PD-95/105/79/99/107/60/61 + D39.106 + строка 165). > - **Сессия параллельного оркестратора (приёмка полигона, 08.08, D39.117):** **эксп-21 ПРИНЯТ** — гейты пере-гнаны исполнением (`verify_report.py` 90/90 код 0 · `itog.py` код 0); подтверждения владельца по тратам и агент-судейству получены, риг-девиация ратифицирована (девиация от промта оркестратора, не решение владельца). Несущее (числа — ИТОГ отчёта 21 и D39.117, здесь не дублируются): **работает ТОПОЛОГИЯ, а не жилец** (нога 2×2) · **черновик — главный рычаг качества финала**, самая недоинвестированная роль · закон-блок ОБЯЗАТЕЛЕН (двойное подтверждение) · роутинг/обратная связка/ремонт-как-замена — отклонены. Диспозиции: 65 ЗАКРЫТА (жилец = цена) · 142 принята формой «пре-гейт перед редактором» · 106 не закрыта (довод, не опровержение) · 55 частично (остаток = чистый zh-срез, заказ повторён). **Промт эксп-22 «панель жильцов» выдан** (149) · Sol-арбитраж вместо слепого чтения (150) · строки 151–153 заведены · три провод-факта в quirks 00. ⚠ Величины эксп-21 предварительны до чистого zh-среза. > - **Сделано (сводно; детали — 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 · авто-режим · цена 16; жильцы ролей решаются ДО прогона отдельным эксп-22 — строка 149 · веса 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 БИЛИНГВ ИНТЕРИМ (⚠ эксп-21/D39.117: топология ПОДТВЕРЖДЕНА — второй проход покупает +2.5 ошибки/ед. при неразличимости жильцов dspro/glm-5, прежний вывод exp20 «на dspro отрицателен» опровергнут; закон-блок ОБЯЗАТЕЛЕН — строка 134; величины предварительны до чистого zh-среза; ⚠ вендор АНОНСИРОВАЛ смену маппинга эффорта pro «early August 2026» — вахта в реестре 108; glm-5 резерв) → судья gemini (Ф2, полигон); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — 112 залендена (D39.97), пере-калибровка цены при следующем платном прогоне. -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 09.08 (D39.122: строки 99·100·101·125·145 закрыты лендингом пака блокеров; 160–162 заведены по research/27, 163–164 — приёмкой; скриптом по таблице; обновлять при каждом лендинге):** всего **131** строка · зона бэкенд **65** строго (ячейка ровно «бэкенд») / **88** широко (ячейка содержит «бэкенд»; ⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **32** (2·4·18·46·49·55·103·108·109·113·114·116·118·119·120·121·126·134·135·136·138·139·140·**142**·143·148·**149·150**·154·157·**160·161**) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ **Счёт — НИЖНЯЯ граница долга, а не потолок:** трекер содержит только замеченное, и 02.08 дважды за $0 свежие глаза вытащили из кода дефекты, которых в нём не было (релей фронта → строки 99/100/102; приёмочное ревью → третий шов `repair.go:384` в 104 и честность `quality.go:436` в 105). Лента ✅ выше — про ЗАКРЫТЫЕ паки, читать её как «долга нет» неверно (разбор — вопрос владельца 02.08, D39.89). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 09.08 (D39.123: строки 138·139 закрыты лендингом раннера, заведены 165·166; ранее D39.122: 99·100·101·125·145 закрыты, 160–164 заведены; скриптом по таблице; обновлять при каждом лендинге):** всего **131** строка · зона бэкенд **67** строго (ячейка ровно «бэкенд») / **89** широко (ячейка содержит «бэкенд»; ⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **31** (2·4·18·46·49·55·103·108·109·113·114·116·118·119·120·121·126·134·135·136·140·**142**·143·148·**149·150**·154·157·**160·161**·165) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 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; правки — только через оркестратора) @@ -86,8 +87,6 @@ | 135 | **Гейт потолка на КАЖДЫЙ платный вызов** (сейчас — граница юнита работы; research/25 «Деньги») | бэкенд | скоро (промтом эмиттера) | правка по дизайну research/25 | D39.106 | | 136 | **Write-ahead intent + состояние `uncertain`-эскроу + `closing`**: холд НЕ освобождается по выходу юнита (сигнал обгоняет денежные события); spend не постится без свидетельства провайдера; расход сверх холда — полной суммой, превышение явной строкой убытка | платформа/бэкенд | скоро (промты по команде владельца) | стройка по research/25 | D39.106 | | 137 | **Ночная сверка расходов с данными провайдера** (в движок цены входят float64 по ручной таблице `ledger/pricing.go` — систематика процентная; сверка приоритетнее споров об округлении) | платформа | когда-нибудь (до первого платного пользователя) | стройка по research/25 | D39.106 | -| 138 | **Реконсилятор: на каждый выход юнита + на буте ПЕРЕЗАПУСК прерванных прогонов** (транзиентные systemd-юниты не переживают ребут VM) | платформа | скоро | стройка по research/25 | D39.106 | -| 139 | **Пиннинг прогона к версионированному пути бинаря движка**; резюм другой версией — только явным флагом (движок выкатывается чаще, чем идёт прогон) | платформа/бэкенд | скоро | стройка по research/25 | D39.106 | | **— НАХОДКИ ПРИЁМКИ ЭКСПОВ 18–20 (D39.108) —** | | | | | | | 140 | **Банкнота: shipping-конфиг c1 канал НЕ несёт при декларации «+банкнота» в CURRENT-STATE** — канал жив только ран-локальным конфигом книги (ратифицированный путь D39.42 п.4; coldrun 56/128); решить: включить в c1 (двигает промпт драфта → RequestHash — цену назвать) либо поправить декларацию; родня 36г | владелец → бэкенд | скоро | СТОП-решение | D39.108, exp20 §6 | | 141 | **Дыра детектора примечаний: сноска «[1] …» без слова-заголовка проходит мимо** (`sanitizer.go:273-278` требует «Примечание:/прим. перев.») — после StripCosmetic уезжает в экспорт с дырой на месте вырезанного ханьцзы | бэкенд | когда-нибудь | малое касание + тест | D39.108 (приёмка 20) | @@ -114,6 +113,8 @@ | 162 | **Структура глав, Этап 2**: in-band метки глав в потоке перевода (третий эшелон детекта + коррекция структуры по ходу черновой волны, §3а п.3) + канон-гейт названий ($0) + миграционные карты якорей (same/moved/split/merged/gone/new) + калибровочный корпус детекта в CI | бэкенд + полигон | когда-нибудь (после Этапа 1) | пак + корпус | research/27 §5/§6 Этап 2 | | 163 | **Версии модулей x/text|x/net двигают нарезку МИМО всех ключей** (NFC в NormalizeSource — таблицы модуля, не тулчейна; epub-токенайзер): бамп `go get -u` тихо меняет нарезку при свежих на вид манифесте/чекпойнтах/снапшоте — класс всей чекпойнт-плоскости, унаследован манифестом; вплести версии модулей (debug.ReadBuildInfo) в NormVersion/chunkerVersion либо явный запрет бампа без `--resnapshot` | бэкенд | когда-нибудь (до второго прогона книги) | малое касание | **D39.122**, приёмка (охотник №1) | | 164 | **Rebill-проекция `status` с nil baseMemory завышает RebillUSD**: read-путь не материализует base-банк → renderedContentHashes даёт пустую инъекцию → repin недоопознан, строка считается re-pay (консервативная сторона, но противоречит комменту «status can never quote a different number than translate»); материализовать base-банк на read-пути либо смягчить клейм | бэкенд | когда-нибудь | малое касание | **D39.122**, приёмка (охотник №1); preexisting | +| 165 | **Различимые exit-коды tmctl: потолочная остановка и graceful-stop** (сегодня оба = exit 1 ⇒ платформа отдаёт `failed` и на штатный стоп, и на исчерпание потолка — PD-113 платформы; после поправки формулы потолка (D39.123, PD-158) стоп по потолку = ровно исчерпание холда, цена неразличимости выросла; вскрыто приёмкой раннера на РЕАЛЬНОМ tmctl — фейк пробы умирал от сигнала) | бэкенд | скоро (вместе с эмиттером 103) | бэкенд-пак эмиттера | D39.123 | +| 166 | **Движковая поверхность оценки $/глава** (ставка-константа платформы $0.03 из exp08 v2 — временная мера беты, П-10 зоны платформы; честная оценка по книге/паре — движковая) | бэкенд | когда-нибудь | отдельный пак | D39.123 | | 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/README.md b/docs/README.md index bdcd7aff..6f9f6da7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,7 +16,7 @@ - `research/` — фактура ресёрчей 01–26; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа (транспорт superseded D39.106) · 25 холодное ревью шва — форма D39.106, отвергнутые альтернативы, требования к эмиттеру (читать перед любым кодом стыка) · 24 арбитраж банка (ПРИНЯТ D39.102: консилиум закрыт классом, вход фикс-пака банка — §G) · 26 официальные практики Anthropic (D39.121: записка-план, сниппеты хендоффов, карта «уже делаем/перенять»). - [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений. - `scripts/counts.py` — **производные числа доков считаются им, а не руками** (голова по трём носителям · счёт очереди и зон · вес открытых строк регистра платформы); `--check` даёт ненулевой код на расхождении. Его же зовёт зонный хук `scripts/githooks/pre-commit` при коммите, задевающем D-лог или PROGRESS — предупреждает, не блокирует. Заведено по D39.112 п.5б: голова отставала трижды у трёх разных оркестраторов. -- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен) · **платформа: ОТРАБОТАН ЦЕЛИКОМ** — четыре сессии (P0 D39.107 · P1+P2 D39.109 · фикс-пак P3 D39.114); текст в архиве, [`archive/prompts/PLATFORM_P0_SESSION_PROMPT_2026-08-04.md`](archive/prompts/PLATFORM_P0_SESSION_PROMPT_2026-08-04.md), копия с баннером ещё лежит в зоне. **Платформа: [`../platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md`](../platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md)** (раннер: юниты/River/реконсилятор/тейлер + первые ручки /v0; D39.119, запуск = владелец) · **фронт: S3 ОТРАБОТАН и ПРИНЯТ D39.115** (контракт 0.2.0 в каноне, копии байт-равны, слой данных построен); текст в архиве, [`archive/prompts/FRONTEND_S3_SESSION_PROMPT_2026-08-04.md`](archive/prompts/FRONTEND_S3_SESSION_PROMPT_2026-08-04.md). **S4 ГЕЙЧЕН словом владельца о качестве оболочки (D39.119 п.4):** сначала список претензий → «S3.5 фикс-пак оболочки» (VS Code-вкладки + Ф-19) → S4. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (решение владельца 04.08: прогресс зон только там). **бэкенд: фикс-пак банка ОТРАБОТАН и ПРИНЯТ D39.118** (код `bccf2d8`; отчёт с ревью-шапкой — [`archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md`](archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md); текст промта в архиве — [`archive/prompts/BACKEND_BANK_CLUSTER_FIXPACK_SESSION_PROMPT_2026-08-04.md`](archive/prompts/BACKEND_BANK_CLUSTER_FIXPACK_SESSION_PROMPT_2026-08-04.md)); **бэкенд: пак «блокеры контракта» ОТРАБОТАН и ПРИНЯТ D39.122** (код `0e69bc1`; отчёт с ревью-шапкой — [`archive/reports/CONTRACT_BLOCKERS_2026-08-08.md`](archive/reports/CONTRACT_BLOCKERS_2026-08-08.md); промт в архиве — [`archive/prompts/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT_2026-08-08.md`](archive/prompts/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT_2026-08-08.md); следующий бэкенд-промт — эмиттер 103, не выдан) · **Полигон: [POLYGON_TENANT_PANEL_SESSION_PROMPT.md](POLYGON_TENANT_PANEL_SESSION_PROMPT.md)** (эксп-22 «панель жильцов»; санкция D39.117, ЗАПУЩЕН 08.08 — сессия живая) · **эксп-21 ОТРАБОТАН и ПРИНЯТ** (D39.117; отчёт `experiments/21-role-topology.md`), текст промта в архиве — [`archive/prompts/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT_2026-08-06.md`](archive/prompts/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT_2026-08-06.md). Очередь и состояние — только CURRENT-STATE. +- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен) · **платформа: ОТРАБОТАН ЦЕЛИКОМ** — четыре сессии (P0 D39.107 · P1+P2 D39.109 · фикс-пак P3 D39.114); текст в архиве, [`archive/prompts/PLATFORM_P0_SESSION_PROMPT_2026-08-04.md`](archive/prompts/PLATFORM_P0_SESSION_PROMPT_2026-08-04.md), копия с баннером ещё лежит в зоне. **Платформа: раннер P4 ОТРАБОТАН и ПРИНЯТ D39.123** (код `d29e30c`; ревью-шапка — в зонном журнале; промт в архиве, [`archive/prompts/PLATFORM_RUNNER_SESSION_PROMPT_2026-08-08.md`](archive/prompts/PLATFORM_RUNNER_SESSION_PROMPT_2026-08-08.md); следующий платформенный промт — по слову владельца) · **фронт: S3 ОТРАБОТАН и ПРИНЯТ D39.115** (контракт 0.2.0 в каноне, копии байт-равны, слой данных построен); текст в архиве, [`archive/prompts/FRONTEND_S3_SESSION_PROMPT_2026-08-04.md`](archive/prompts/FRONTEND_S3_SESSION_PROMPT_2026-08-04.md). **S4 ГЕЙЧЕН словом владельца о качестве оболочки (D39.119 п.4):** сначала список претензий → «S3.5 фикс-пак оболочки» (VS Code-вкладки + Ф-19) → S4. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (решение владельца 04.08: прогресс зон только там). **бэкенд: фикс-пак банка ОТРАБОТАН и ПРИНЯТ D39.118** (код `bccf2d8`; отчёт с ревью-шапкой — [`archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md`](archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md); текст промта в архиве — [`archive/prompts/BACKEND_BANK_CLUSTER_FIXPACK_SESSION_PROMPT_2026-08-04.md`](archive/prompts/BACKEND_BANK_CLUSTER_FIXPACK_SESSION_PROMPT_2026-08-04.md)); **бэкенд: пак «блокеры контракта» ОТРАБОТАН и ПРИНЯТ D39.122** (код `0e69bc1`; отчёт с ревью-шапкой — [`archive/reports/CONTRACT_BLOCKERS_2026-08-08.md`](archive/reports/CONTRACT_BLOCKERS_2026-08-08.md); промт в архиве — [`archive/prompts/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT_2026-08-08.md`](archive/prompts/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT_2026-08-08.md); следующий бэкенд-промт — эмиттер 103, не выдан) · **Полигон: [POLYGON_TENANT_PANEL_SESSION_PROMPT.md](POLYGON_TENANT_PANEL_SESSION_PROMPT.md)** (эксп-22 «панель жильцов»; санкция D39.117, ЗАПУЩЕН 08.08 — сессия живая) · **эксп-21 ОТРАБОТАН и ПРИНЯТ** (D39.117; отчёт `experiments/21-role-topology.md`), текст промта в архиве — [`archive/prompts/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT_2026-08-06.md`](archive/prompts/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT_2026-08-06.md). Очередь и состояние — только CURRENT-STATE. - Зоны фронта (чужие, читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: промт фронт-сессий S0–S7 + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки, сверены с вебом 02.08) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README + [BACKLOG.md](../platform/BACKLOG.md) (П-1..П-5) + `docs/` (промт P0 · зонный журнал `platform-PROGRESS.md`). - `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять. - Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code). diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 7483fd96..66841252 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.122 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) +# Журнал решений оркестратора — контракт D1–D39.123 (развязки 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) означает, что @@ -1722,3 +1722,13 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу **4. research/27 «Определение глав» принят ФАКТУРОЙ** (веб-ресёрч · панель двух моделей · карта по коду · жизненный цикл дерева §3а · развилка парсинг-стадии закрыта словом владельца: оригинальные названия, платный перевод со старта прогона; мини-сессия названий §5а — редакторский слот · инъекция банка · двухфазность вокруг подписи). **Дизайн стройки НЕ ратифицирован** — отдельное решение при постановке строк 160–162 в очередь. **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 по устаревшему снапшоту свипа возвращал холд целиком потратившему прогону** (исполнением). (б) Дофикс F1–F8 + селф-ревью сессии нашло **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 +15–25% → вверх; сверен). (д) Формы: 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). ✅ diff --git a/docs/architecture/14-api-contract/README.md b/docs/architecture/14-api-contract/README.md index 425f4619..75ad7e74 100644 --- a/docs/architecture/14-api-contract/README.md +++ b/docs/architecture/14-api-contract/README.md @@ -38,7 +38,7 @@ openapi.yaml РЯДОМ (байт-копия зонной frontend/docs/api-cont > каждое решение, чем оно обосновано, что осталось открытым. При расхождении по ФОРМЕ > побеждает YAML; при вопросе «почему так» — этот файл. > -> **Статус: РАТИФИЦИРОВАН — D39.99 (04.08), контракт 0.2.0 (D39.115, 08.08).** Дом канона — этот каталог; `frontend/docs/api-contract/openapi.yaml` — байт-зеркало. ⚠ Испр. оркестратором №15 08.08: файл называл себя черновиком на ратификацию четверо суток ПОСЛЕ ратификации — тот же класс, что шапка `info` спеки. +> **Статус: РАТИФИЦИРОВАН — D39.99 (04.08), контракт 0.2.0 (D39.115, 08.08); 0.2.1 (D39.123, 09.08): += `503` на `POST /books/{bookId}/runs` — старт прогона на неукомплектованном деплое (шов движка не сконфигурирован) не выражается ни одним прежним кодом; закрывает PD-112 платформы.** Дом канона — этот каталог; `frontend/docs/api-contract/openapi.yaml` — байт-зеркало. ⚠ Испр. оркестратором №15 08.08: файл называл себя черновиком на ратификацию четверо суток ПОСЛЕ ратификации — тот же класс, что шапка `info` спеки. > `docs/architecture/14-api-contract/`, зона оркестратора; перенос делает он, генерация типов > после ратификации идёт из перенесённой копии — контракт первичен, код вторичен. > diff --git a/docs/architecture/14-api-contract/openapi.yaml b/docs/architecture/14-api-contract/openapi.yaml index 77a0d53a..35cfea16 100644 --- a/docs/architecture/14-api-contract/openapi.yaml +++ b/docs/architecture/14-api-contract/openapi.yaml @@ -2,7 +2,7 @@ openapi: 3.1.0 info: title: TextMachine API - version: 0.2.0 + version: 0.2.1 summary: Ratified contract between the frontend and the TextMachine platform (D39.99). description: | **RATIFIED contract (D39.99, 04.08.2026).** The canonical copy lives in @@ -344,6 +344,7 @@ paths: '401': { $ref: '#/components/responses/Unauthorized' } '404': { $ref: '#/components/responses/NotFound' } '409': { $ref: '#/components/responses/Conflict' } + '503': { $ref: '#/components/responses/ServiceUnavailable' } /runs/{runId}/events: parameters: @@ -605,6 +606,14 @@ components: content: application/problem+json: schema: { $ref: '#/components/schemas/Problem' } + ServiceUnavailable: + description: | + The deployment cannot perform this action right now (added in 0.2.1, D39.123): starting a + run requires the engine seam to be fully configured, and answering with any other code + would misname the state. Temporary by nature — retry later; no Retry-After is promised. + content: + application/problem+json: + schema: { $ref: '#/components/schemas/Problem' } schemas: Id: diff --git a/platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md b/docs/archive/prompts/PLATFORM_RUNNER_SESSION_PROMPT_2026-08-08.md similarity index 96% rename from platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md rename to docs/archive/prompts/PLATFORM_RUNNER_SESSION_PROMPT_2026-08-08.md index bdb8908c..b1c09c0b 100644 --- a/platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md +++ b/docs/archive/prompts/PLATFORM_RUNNER_SESSION_PROMPT_2026-08-08.md @@ -1,3 +1,5 @@ +> **⚠ АРХИВ — ИСПОЛНЕН ЦЕЛИКОМ (P4, 08–09.08.2026). Принят и заленден приёмкой №15 — D39.123, код `d29e30c`.** Три раунда приёмки (фикс-лист F1–F8 с пятью MAJOR · V2 · финальный ре-чек); отчёты сессии и ревью-шапка — `platform/docs/platform-PROGRESS.md`. Инструкции отсюда НЕ исполнять. + # Промт платформа-сессии: РАННЕР — транзиентные юниты · реконсилятор · очередь · первые ручки /v0 **Выдан 08.08.2026, оркестратор №15, по слову владельца 08.08 (D39.119; санкция направления — D39.107 п.3(3)).** Ты — платформа-сессия. Зона записи: `platform/` + зонный журнал `platform/docs/platform-PROGRESS.md` (итоги/пинги ТОЛЬКО туда, в `docs/PROGRESS.md` не пишешь — D39.100). **НЕ коммитишь** — дерево готовишь, лендит оркестратор; своё в git-индексе не держи (стейдж = риск чужого коммита). **Деньги: $0** — LLM-вызовов нет; PostgreSQL стенда — рецепт без root в `platform/docs/STACK_DECISIONS.md`. ⚠ Живые соседи по дереву: полигон эксп-22 (`eval/`, `docs/experiments/22-*`) и, возможно, бэкенд-пак «блокеры контракта» (см. §Координация) — чужого не трогать и не «прибирать» (инцидент D39.113: откачено семь файлов, шесть потеряны). **Пространства имён:** «строка N» = ЕДИНЫЙ БЭКЛОГ `docs/PROGRESS.md` (таблица «Бэклог») · «PD-N» = `platform/docs/DEFECT_REGISTER.md` · «П-N» = `platform/BACKLOG.md`. diff --git a/docs/scripts/counts.py b/docs/scripts/counts.py index 8f857383..e345c80d 100644 --- a/docs/scripts/counts.py +++ b/docs/scripts/counts.py @@ -104,7 +104,7 @@ def register(text: str) -> dict: weight, status, open_ids = Counter(), Counter(), [] for l in rows: st, sev = col(l, 3), col(l, 6).replace("*", "") - if st == "open": + if st.startswith("open"): status["open"] += 1 open_ids.append(cells(l)[1]) weight["major" if "major" in sev else "minor" if "minor" in sev else "info" if "info" in sev else sev] += 1 diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index b0e2ff0b..faec699a 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -6,11 +6,11 @@ ## Текущее состояние -- **Дофикс приёмки P4 (09.08) отработан ЦЕЛИКОМ — F1…F8 плюс четыре новых строки N1…N4, и следом - ре-чек V2 (V2-1…V2-4)** (раздел - «Дофикс P4» ниже). Все пять MAJOR закрыты: аргумент потолка по ратифицированной формуле D39.122 · +- **P4 + дофикс + V2 ПРИНЯТЫ и ЗАЛЕНДЕНЫ приёмкой №15 — D39.123, `d29e30c`** (раздел «Ратификация + приёмкой P4» ниже; было: «дерево НЕ закоммичено — ждёт приёмки»). Все пять MAJOR приёмки закрыты: + аргумент потолка (формула ратифицирована ПОПРАВКОЙ — `committed + прирост`, PD-158) · живая инверсия блокировок и карантин на транзиентном сбое · два незапиненных свойства · расчёт по - устаревшему снапшоту. **Дерево НЕ закоммичено — ждёт приёмки.** + устаревшему снапшоту; плюс PD-159 селф-ревью. - **P4 (08–09.08) построила РАННЕР целиком** (раздел «Сессия P4» ниже): транзиентный systemd-юнит на прогон · очередь River + воркер · реконсилятор (свип + бут) · тейлер `events.jsonl` с курсором · первые пять ручек `/v0` по контракту 0.2.0 · дев-интейк книг. Батарея зелёная целиком с живым @@ -82,6 +82,42 @@ - Дизайн-ответы К-4 · К-7 · К-12 · форма П-5 — ниже, ПРЕДЛОЖЕНИЯМИ на ратификацию. - Контрактных ручек нет намеренно: они ждут ратификации К-4/К-7 (форма ответов) — это П-1. +## Ратификация приёмкой P4 (оркестратор №15, 09.08) + +**Вердикт: P4 + дофикс + V2 ПРИНЯТЫ и ЗАЛЕНДЕНЫ — D39.123, код `d29e30c` (53 файла, +9867/−170, +только `platform/`).** Три раунда, 13 агентов приёмки; каждое заявление пере-ранено исполнением. + +**Метод и что подтвердилось.** 7-агентный воркфлоу (слепой дифф · опровергатель-Opus D39.120 · +пере-ран батареи · 10 моих посадок · 47 wire-проверок контракта · охотник-деньги · +охотник-systemd с РЕАЛЬНЫМ tmctl из HEAD) → фикс-лист F1–F8 → ре-чек 4 контурами (обе пробы +приёмки, пере-мутации, PD-158/159 адверсариально на Opus, охота по дельте) → V2 → финальный +ре-чек (5/5 пере-мутаций убиты поимённо). Реальный движок принял платформенный argv целиком, +имена полей `status --json` совпали с парсером побайтно, exit-контракт и маркер сошлись; четыре +systemd-клейма пере-мерены; батарея EXIT=0 с живым PG 18.4 под `-race`, скипов 0; тестов +105→261 (+156/−0); дерево на лендинге байт-равно проверенному. + +**Пять MAJOR приёмки и PD-159 селф-ревью — все закрыты с пинами**; разборы в разделах «Дофикс +P4» и «Ре-чек V2» ниже. Несущие: аргумент потолка против кумулятивной семантики движка (F1; +вскрыт тем, что сквозная проба шла на фейке без кумулятива) · дедлок books↔run_attempts 258/300 +с вечным карантином проекции на транзиентном 40P01 (F2; ложно закрытая PD-129 пере-открыта и +закрыта честно) · settle по устаревшему снапшоту (F5) · двойная оплата при отложенном расчёте +(PD-159, найдена селф-ревью сессии — воспроизведена приёмкой на до-фиксном дереве). + +**Ратифицировано (D39.123 п.2):** linger-privilege-модель · **ПОПРАВКА формулы потолка: +`committed + прирост`, БЕЗ reserved (PD-158)** — сессия была права, отказавшись молча исполнять +формулу моего пинга: исполнение обеих против гейта движка показало, что пинг переплачивал +запасом ровно на leftover-reserved · карантин ПРОЕКЦИИ (PD-105-уточнение) · ставка $0.03 · +`default_chapters` = верх шкалы · 503 в контракт (0.2.1; PD-112 закрыт) · PD-114 → задача +«печать эффективной конфигурации» · PD-115 — направление принято. PD-113 — единственный +открытый major, до эмиттера; его цена после PD-158 выросла (стоп по потолку = ровно исчерпание +холда). Движку заведены строки 165 (различимые exit-коды потолка/стопа) и 166 (оценка $/глава). + +**Урок приёмки в обе стороны:** (а) фейк шва обязан моделировать СЕМАНТИКУ чужой стороны, не +только форму — обе жёсткие находки (F1, N1-stop→failed) прошли бы фейком; класс закрыт +кумулятивным ceilingJudge в пинах; (б) моя ошибка нумерации (PD-167 = коммент 00009, не 00011) +поймана сессией — исправлена в строке; (в) две посадки сессии, пережившие первую редакцию пина, +задекларированы, не подчищены — норма «заявление=команда» работает в обе стороны. + ## Дофикс P4 (09.08): фикс-лист приёмки — F1…F8, N1…N4 Пак принят УСЛОВНО с пятью MAJOR. Ниже — что сделано по каждому пункту, чем это проверено и что