# Приёмка №3 — 2026-09-26 Проверка независимая, на живой PostgreSQL 17.10, в отдельной рабочей копии. Ветки исполнителей не менялись. Основная ветка — `b0243d5`. ## Codex | Ветка | Коммит | Вердикт | | --------------------------- | --------- | --------------------------------------------------------------------------------------- | | `codex/fix-format-baseline` | `a05777c` | **Принято.** Пункт 1 TASK-CODEX-2 выполнен | | `codex/fix-live-database` | `1573860` | **Принято.** K3/N2 и K4/N1 по-прежнему зелёные | | `codex/fix-tenant-config` | `535052e` | **Почти:** пункт 2.1 сделан правильно, но `npm run check` на ветке красный. Одна строка | ### Форматирование — пункт 1 закрыт Перепроверил тем же способом, что и в прошлый раз: взял каждый из 19 изменённых файлов в версии из основы, прогнал prettier и сравнил с версией из ветки. **Ни один файл не отличается после нормализации** — в коммите только стиль. Синхронизация из него убрана. `codex/fix-live-database` перебазирован на новое форматирование. Стенд Grok поверх ветки: K3/N2 и K4/N1 зелёные, стенд падает только сообщением «дефект исправлен, обновите known-defects.json» — это правильное поведение храповика, а не ошибка ветки. ### Пункт 2.1 — заглушка больше не вернётся Сделано по всем четырём местам: | Где | Как | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | `deploy/pilot/setup.sh` | `validate_tenant()`: требует переменную, проверяет ULID, отдельно отказывает заглушке. Вызывается и при создании `.env`, и после его чтения | | `compose.yaml` | `${STANDALONE_TENANT_ID:?…}` | | `.env.example` | пусто, с комментарием откуда брать | | `src/config.ts` | заглушка отклоняется, кроме `development` на loopback | ### Что мешает влить `codex/fix-tenant-config` `npm run check` на ветке: **`Test Files 1 failed | 17 passed`**. ```text FAIL tests/unit/sync.test.ts Error: STANDALONE_TENANT_ID uses the development placeholder, which is allowed only in development on loopback ``` `tests/unit/sync.test.ts:553` берёт `STANDALONE_TENANT_ID = '01J00000000000000000000000'` с `NODE_ENV: 'test'`. Новая проверка это запрещает. Четыре теста под заглушку ты поправил, а этот — в зоне Antigravity, поэтому и не поправил. Правильно, что не полез. **Как закрыть, не трогая чужую зону:** разрешить заглушку и при `NODE_ENV === 'test'`. Инвариант защищает развёртывание, а `NODE_ENV=test` пилот никогда не обслуживает — на пилоте стоит `production`, в `compose.yaml` заглушка уже невозможна. Тест в `tests/unit/config.test.ts`, который сейчас требует отказа в test-режиме, соответственно поменять: пусть проверяет отказ в `production` и в `development` на не-loopback. **Готово, когда** `npm run check` на ветке даёт `Test Files 19 passed` (или 18 passed | 1 skipped, как на основе). ### Осталось по TASK-CODEX-2 - Пункт 2.2 — `scripts/rehome-tenant.mjs` нет. Grok уже подготовил сценарии `PILOT-REHOME` и `PILOT-REHOME-SEED` и описал ожидаемый интерфейс в `tests/e2e/NOTES-FOR-EXECUTORS.md`: `DATABASE_ADMIN_URL=… node scripts/rehome-tenant.mjs --from … --to … [--dry-run] [--json]`. Держись этого интерфейса — тогда сценарий позеленеет сам. - Пункт 2.3 — скрипта сопоставления `core_user_id` нет. - Перед пунктом 2.2 — резервная копия K18 и проверка восстановления. ## Слияния — всё чисто | Пара | Результат | | ----------------------------------------- | --------- | | Codex format + AG c0 | чисто | | Codex live-database + AG c0 | чисто | | Codex tenant-config + Codex live-database | чисто | | Codex tenant-config + Grok | чисто | | Grok + Codex live-database | чисто | Antigravity выстроил свои ветки в цепочку: `fix-reject-device-shifts` → `fix-sync-c0-bootstrap`. Конфликта больше нет. ## Порядок влития 1. `grok/e2e-harness`. 2. Цепочка Antigravity: `fix-reject-device-shifts` → `fix-sync-c0-bootstrap`. 3. Codex: `fix-format-baseline` → `fix-live-database` → `fix-tenant-config` (после исправления теста). 4. Grok — коммит в `known-defects.json`: убрать K3/N2, K4/N1, K13/SYNC-A, K13/SYNC-B, SYNC-C0. Разделы по Grok и Antigravity добавляются в этот файл после их проверки.