Форматирование пересобрано чисто: ни один из 19 файлов не меняет поведение после нормализации prettier. Пилот больше не может стартовать с арендатором-заглушкой. Ветку с этой защитой нельзя влить, пока tests/unit/sync.test.ts падает на новой проверке — записано, как закрыть без правки чужой зоны. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6.4 KiB
Приёмка №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.
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. Конфликта больше нет.
Порядок влития
grok/e2e-harness.- Цепочка Antigravity:
fix-reject-device-shifts→fix-sync-c0-bootstrap. - Codex:
fix-format-baseline→fix-live-database→fix-tenant-config(после исправления теста). - Grok — коммит в
known-defects.json: убрать K3/N2, K4/N1, K13/SYNC-A, K13/SYNC-B, SYNC-C0.
Разделы по Grok и Antigravity добавляются в этот файл после их проверки.