diff --git a/tests/e2e/REPORT.md b/tests/e2e/REPORT.md index 7e3a8dd..77f8627 100644 --- a/tests/e2e/REPORT.md +++ b/tests/e2e/REPORT.md @@ -132,6 +132,64 @@ merge `grok/e2e-harness`. Вывод — [`round3-combined-merge.md`](report-evi ([`report-evidence/round3-pilot-rehome.txt`](report-evidence/round3-pilot-rehome.txt)). - Контракт, который проверяет сценарий, — `NOTES-FOR-EXECUTORS.md`, C6. +### Круг 3б: основа `f7d3c73` (ACCEPTANCE-3), 16:59 NOVT + +Храповик **не тронут**: после `git fetch` `git merge-base --is-ancestor origin/<ветка> +origin/codex/bootstrap-platform-foundation` — `not merged` для grok/e2e-harness, fix-live-database, +fix-format-baseline, fix-reject-device-shifts, fix-sync-c0-bootstrap, fix-tenant-config, +fix-tenant-rehome, fix-pilot-backups. + +Команда: `node scripts/test/accept-branch.mjs <7 веток, не являющихся предками основы>`, стенд `18f944e`. +Полный вывод — [`report-evidence/round3-accept-f7d3c73.md`](report-evidence/round3-accept-f7d3c73.md). + +| Ветка | SHA | check | integration | e2e red/green | Стало зелёным | Стало красным | +| ------------------------------------ | ------- | ------------------------------------------------------------------------ | ----------------------------------------------------- | ------------- | ------------------------------- | ------------- | +| основа | f7d3c73 | OK (195 passed, 1 skipped) | 3/4, FAIL tenant-isolation | 46/5 | n/a | n/a | +| antigravity/fix-reject-device-shifts | b283736 | OK | 4/5, FAIL tenant-isolation | 44/7 | K13/SYNC-A, K13/SYNC-B | — | +| antigravity/fix-sync-c0-bootstrap | 24cc18d | OK | 5/6, FAIL tenant-isolation | 43/8 | K13/SYNC-A, K13/SYNC-B, SYNC-C0 | — | +| codex/fix-format-baseline | a05777c | OK | 3/4, FAIL tenant-isolation | 46/5 | — | — | +| codex/fix-live-database | 1573860 | OK | 4/5, FAIL tenant-isolation | 44/7 | K3/N2, K4/N1 | — | +| codex/fix-pilot-backups | a005c5e | OK | 3/4, FAIL tenant-isolation | 46/5 | — | — | +| codex/fix-tenant-config | 535052e | **FAIL** `Error: STANDALONE_TENANT_ID uses the development placeholder…` | 3/4, FAIL tenant-isolation | 46/5 | — | — | +| codex/fix-tenant-rehome | c73bb3b | OK | 4/5 (rehome-tenant.test.ts OK), FAIL tenant-isolation | 46/5 | — | — | + +- `git merge-tree`: 28 пар (7 с основой + 21 между собой) — **все чисто**. +- «Форматирование без поведения» `a05777c`: `изменено файлов: 19 — ТОЛЬКО ФОРМАТИРОВАНИЕ`. +- `tenant-isolation.test.ts` — N5 (`permission denied for table staff_employees`), исправление в grok/e2e-harness. +- accept-branch дополнен (`18f944e`): для `rehome-tenant.test.ts` создаётся пустая `krona_acc_rehome_test` + (суперпользователь, `DATABASE_REHOME_TEST_CONFIRM` из `docs/TENANT-REHOME.md`) — иначе файл пропускается. + +**codex/fix-tenant-config — вывод владельца подтверждён.** Лог `npm run check`: +`FAIL tests/unit/sync.test.ts [ 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:556:18`, +`Test Files 1 failed | 18 passed | 1 skipped (20)`. В ветке: строка 553 `const tenantId = '01J00000000000000000000000'`, +556 `loadConfig({`, 563 `NODE_ENV: 'test'`. (У владельца `1 failed | 17 passed`; у меня на один файл больше +из-за оверлея стенда — `tests/e2e/harness/node-commands.test.ts`.) + +**codex/fix-tenant-rehome — `[PILOT-REHOME]` красный.** Вывод на ветке: +`dry-run exit: Tenant rehome stopped. Unknown option --from. … expected 1 to be +0`. Скрипт есть, но интерфейс +не совпадает с C6 (разница — NOTES, C6). По существу скрипт проверен двумя способами +([`round3-k18-and-rehome.md`](report-evidence/round3-k18-and-rehome.md)): + +1. На восстановленной копии (после учебного восстановления K18), интерфейсом продукта: dry-run exit 0 и БД не изменилась; + apply без `--backup-evidence` → отказ; apply → exit 0, под заглушкой 0 строк, счётчики совпали, audit 2 → 3 + (`tenant.rehomed tenant_rehome`), прочие арендаторы не изменились, ledger `RUB 263568` до и после, FK до и после + совпали (md5), `krona_staff_app`: 0 под заглушкой / 3 под новым tenant, `UPDATE staff_payroll_ledger` → + `permission denied`, повтор → `Target tenant already contains staff data; refusing merge`, exit 1. +2. Сценарий `[PILOT-REHOME]` через диагностический адаптер C6 → c73bb3b (не в продукте и не в сценарии): + вариант 1 (только перевод флагов и формата) — `expected 'undefined' to be '328228'`: **в dry-run нет суммы + журнала**; вариант 2 (сумму досчитывает адаптер) — `✓ [PILOT-REHOME]`. Других расхождений сценарий не нашёл. + +Ошибок в самом сценарии не нашёл, поэтому он не менялся. + +**codex/fix-pilot-backups (K18).** `bash scripts/test-backup.sh` и `bash scripts/test-backup-pull.sh` — +оба `passed`, exit 0 (моки docker/ssh/scp). В `npm run check` и CI они не входят. Учебное восстановление без +Docker (шим `docker compose exec` → локальный `pg_dump` PG17): `backup.sh` exit 0, на сервере 0 незашифрованных +файлов, `sha256sum -c` OK, расшифровка ключом вне сервера, `pg_restore --exit-on-error` exit 0, +`restore-drill-report.sql` на источнике и копии — `идентичны` (79 строк, `RLS|27|t`), isolation: +`source-employee-count|3`, `target-employee-count|0`. Восстановление в кластер без ролей: `pg_restore` exit 1, +61 ошибка `role "krona_migrator" does not exist` — в копии нет ролей (globals). + ## Как запустить ```sh @@ -365,7 +423,11 @@ $ git status --porcelain `codex/fix-live-database`. - S9 проверен удалением SQL-запросом мигратора (публичного API удаления точки нет). - Причина невоспроизводимости N13 — гипотеза по коду. -- Круг 3: `scripts/rehome-tenant.mjs` не существует — `[PILOT-REHOME]` проверен только временным - эталоном; контракт C6 — предположение. `accept-branch` в CI не запускается (разовый инструмент +- Круг 3: в основе `scripts/rehome-tenant.mjs` нет; на `codex/fix-tenant-rehome` скрипт проверен на копии + и через диагностический адаптер (интерфейс не совпадает с C6). `accept-branch` в CI не запускается (разовый инструмент владельца/приёмщика). Режим `E2E_MIGRATOR_URL/E2E_APP_URL` проверен на том же локальном кластере (роли созданы заранее `provision-pg`), на чужом кластере — не проверено. +- Круг 3б (K18) без Docker не проверено: настоящий `docker compose exec` в пилотном контейнере, systemd + timer/service, `pull-pilot-backups.sh` с реальным ssh/scp (только моки из тестов Codex), восстановление + в контейнер `postgres` с `init-app-role.sh`, хранение ключа и политика хранения. Учебное восстановление Codex + на пилоте (sha256 `2fc680ae…`, 51 сотрудник) не перепроверялось — данных пилота у меня нет.