diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index 58083592..7126ce94 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -1,5 +1,81 @@ # Журнал зоны «Платформа» +## ⚠ ПИНГ ОРКЕСТРАТОРА №22 (04.09, вечер) — РЕВИЗИЯ ДОКУМЕНТАЦИИ ЗОНЫ ЦЕЛИКОМ + +Внешний ревизор прочитал документацию зоны от первой строки до последней (README · BACKLOG · +deploy/README 561 стр. · юнит · STACK_DECISIONS 650 · этот журнал 2775 · регистр 615). Линтер якорей +при этом ноль: **всё найденное — ложь в ПРОЗЕ, которую гейт не видит по построению.** Правит ЗОНА, +не оркестратор. Порядок — по цене ошибки. + +**1. ⛔ РАНТБУК ДЕПЛОЯ, ИСПОЛНЕННЫЙ ДОСЛОВНО, ДАЁТ ИНСТАНС, КОТОРЫЙ ОТКАЗЫВАЕТ КАЖДОМУ ПРОГОНУ.** +Проверено оркестратором лично: `deploy/README.md:58` ставит бинарь в `/usr/local/bin/tmplatformctl`, +а `deploy/README.md:88` велит `TM_PLATFORM_CTL_BIN=/opt/textmachine/bin/tmplatformctl`. Путь не +существует ⇒ `cmd/tmplatformd/runner.go:87` WARN «the exit-marker command is not usable; starting a +run will be refused» ⇒ прогоны отказаны. ⚠ **БЕЗ переменной вовсе всё работало бы** — сиблинг-дефолт +`markerArgv` (`runner.go:468-476`). И там же: `deploy/README.md:101-102` объясняет отсутствие +`CTL_BIN` СОВСЕМ ДРУГИМ симптомом («прогон завершается, а платформа не узнаёт»), которого в коде нет. +Первый боевой выкат встаёт ровно здесь. + +**2. Инвентарь каналов лжёт трижды об одном.** `docs/STACK_DECISIONS.md:391-392` про +`mined_delta`/`mined_rejects`: «путь из `book.yaml`», «писателя в движке НЕТ», «разрыв, ждёт +ратификации». Факт: путь ВЫВОДИТСЯ (`backend/internal/config/book.go`, `yaml:"-"`, «DERIVED, never +read from the file»), ключи в `book.yaml` RETIRED и ВАЛЯТ загрузку конфига, писатель есть с обеих +сторон — и это говорит СОСЕДНЯЯ строка той же таблицы (`:393`). Цена: оператор впишет ключ в шаблон, +и ни одна новая книга не загрузится. + +**3. §23 объявляет карантин необратимым — ручка построена.** `docs/STACK_DECISIONS.md:233` «снятия +карантина в дереве нет, ошибочный карантин необратим»; в дереве `cmd/tmplatformctl/main.go:124` +`case "unquarantine"` с пинами, и сами `README.md:31` и `deploy/README.md:400` про неё знают. +Оператор с замершим ПЛАТНЫМ прогоном по этому доку не пойдёт её искать. + +**4. Пол отката назван «5», а реальный — «15».** `deploy/README.md:24-30` и `STACK_DECISIONS.md:64-71` +против открытого `PD-218` (`DEFECT_REGISTER.md:128`): down-путь `00015` падает. План отката пишется +под ложную границу и узнаётся в момент аварии. + +**5. Кластер ложных посылок про песочницу и грацию.** `deploy/README.md:103-105` «дефолт `STATE_DIR` +вне `ReadWritePaths`, запись маркера запрещена ФС» — ложно по двум осям (дефолт под +`StateDirectory=`, а маркер пишет `ExecStopPost` транзиентного юнита БЕЗ песочницы) · +`deploy/tmplatformd.service:41-43` обосновывает `TimeoutStopSec=90` «грацией движка 30 с» при +`internal/runner/runner.go:59` `stopGrace = 10 * time.Minute` и при том, что прогон юниту не ребёнок · +`:93-95` и `:104-106` ОДНОГО файла спорят, лежат ли прогоны в cgroup демона (а `PD-136` числится +`fixed(P4)` с формулировкой «снятые абзацы удалены» — абзац на месте). + +**6. «БЕЗ ЭТИХ ЧЕТЫРЁХ ИНСТАНС НЕ ЗАПУСТИТ НИ ОДНОГО ПЕРЕВОДА»** (`deploy/README.md:85-86`) — +сверх-утверждение: у `CTL_BIN` и `STATE_DIR` рабочие дефолты, `ENGINE_KEYS_PATH` даёт WARN. Реально +гейтит прогоны только `ENGINE_BIN`. Там же **«без `enable-linger` не стартует НИ ОДИН прогон»** — +опровергнуто собственным замером зоны (H2: `Linger=no`, стартовали все шесть), доки не поправлены. + +**7. Закрытое числится открытым, открытое — закрытым.** `BACKLOG.md:36` (П-21) держит `PD-369` +развилкой, а код её закрыл (`internal/pgstore/idempotency.go:80-106`, «That is the whole of PD-369»), +и регистр это знает (`fixed(пак P12)`) · `BACKLOG.md:32`/`platform-PROGRESS.md:314,455` говорят, что +канон не даёт `operationId` третьему адресу — даёт с `58bca19` (`downloadExport`) · +`DEFECT_REGISTER.md:32,36` держит `PD-447` со статусом `fixed(adf5e53)` в секции «Открытые — minor». + +**8. Ловушка онбординга, дороже прочих для НОВОЙ сессии зоны.** `README.md:4` и `:48` посылают за +состоянием в шапку «Текущее состояние» этого журнала — а она стоит на строке ~2511 из 2775 и +начинается с 23–24.08: паков P9–P13 и «закрыть цикл» под этим заголовком НЕТ. Сессия, послушавшая +README, получает состояние двухнедельной давности. + +**9. Мелочи с адресом:** `README.md:98` «Idempotency-Key на ДВУХ создающих вызовах» — их три (дверь +выдачи) · `README.md:129` карта `internal/httpapi` не называет `exports.go` · `STACK_DECISIONS.md:469` +«18 пакетов» → 19 · `:25` «40 запросов» → 50 · `:581-584` перечень админ-команд неполон на шесть · +`PLATFORM_DIRECTION.md:110` «20 операций, построено 14» → 21/18 · `DEFECT_REGISTER.md:136` `PD-439` +«семь строк вне словаря» → две · `STACK_DECISIONS.md:16` «Postgres floor 16» — гейта в коде нет · +якоря без токена, уехавшие: `PD-410` `readmodel.go:460`→:545, `PD-157` `book.go:321`→:332, +`STACK_DECISIONS.md:223` `store.go:88`→:274, ряд Д3 на снесённый `LiftBankStop`. + +**10. НЕ ОПИСАНО, А НАДО:** `TM_PLATFORM_EXPORTS_DIR` обязан быть записываем ВНУТРИ песочницы юнита — +`tmctl build --out` прямой ребёнок демона под `ProtectSystem=strict`, каталог вне +`StateDirectory`/`ReadWritePaths` даст каждому экспорту `deployment_error`; для `BOOKS_DIR` та же +оговорка написана, для экспорта нет · у `STATE_DIR` ДВА писателя (демон и `ExecStopPost` без +песочницы) — не сказано нигде, сказано обратное · «демон на SIGTERM прогоны не трогает по замыслу» +живёт только в шапке юнита, а рантбук останова говорит обратное. + +⚠ **И одно, что оставил оркестратор:** в этом журнале `:37` говорит «оркестратор погасил чужой стенд +по PID», а `:77` — «чужой стенд не тронут (pid 1090739)». Верно первое. Правка `6e31e29` закрыла +обоснование запрета, а этот абзац остался — тот же класс «поправка доехала до одного носителя из +двух», за который зона поймала оркестратора днём. + > Весь прогресс платформы — ЗДЕСЬ (решение владельца 04.08): пинги, итоги сессий, открытые > вопросы, предложения на ратификацию. В `docs/PROGRESS.md` платформа не пишет; оркестратор > читает этот журнал при каждом лендинге зоны (свип «решений владельца» — норма D39.99 п.4).