Ping the platform zone with a full read of its documentation: the deploy runbook as written builds an instance that refuses every run, and the channel inventory names a writer that exists

This commit is contained in:
heaven 2026-09-04 22:51:59 +03:00
parent 55d61e69b3
commit 7db84219b6

View file

@ -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 и
начинается с 2324.08: паков P9P13 и «закрыть цикл» под этим заголовком НЕТ. Сессия, послушавшая
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).