diff --git a/docs/audit/2026-09-26/ACCEPTANCE-3.md b/docs/audit/2026-09-26/ACCEPTANCE-3.md new file mode 100644 index 0000000..e7409fe --- /dev/null +++ b/docs/audit/2026-09-26/ACCEPTANCE-3.md @@ -0,0 +1,70 @@ +# Приёмка №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 добавляются в этот файл после их проверки. diff --git a/docs/audit/2026-09-26/README.md b/docs/audit/2026-09-26/README.md index 7aece58..eefc018 100644 --- a/docs/audit/2026-09-26/README.md +++ b/docs/audit/2026-09-26/README.md @@ -8,6 +8,7 @@ | [ACCEPTANCE-1.md](ACCEPTANCE-1.md) | Приёмка первого круга работ Grok и Antigravity | | [TASK-CODEX.md](TASK-CODEX.md) | Codex: сервер, расчёт, база, пилот, терминал, роли, подтверждение и согласие — этапы 0–6 | | [ACCEPTANCE-2.md](ACCEPTANCE-2.md) | Приёмка второго круга: Grok принят, Codex и Antigravity — что доделать, порядок влития | +| [ACCEPTANCE-3.md](ACCEPTANCE-3.md) | Приёмка третьего круга: Codex принят кроме одного красного теста, порядок влития | | [TASK-CODEX-2.md](TASK-CODEX-2.md) | Codex, **текущий круг**: форматирование без синхронизации, пилот на настоящего арендатора, сопоставление с платформой | | [TASK-ANTIGRAVITY-3.md](TASK-ANTIGRAVITY-3.md) | Antigravity, **текущий круг**: починить тесты, цепочка веток, дальше S2–S9 и push | | [TASK-GROK-3.md](TASK-GROK-3.md) | Grok, **текущий круг**: приёмка с интеграционными тестами и конфликтами, перенос арендатора |