diff --git a/tests/e2e/NOTES-FOR-EXECUTORS.md b/tests/e2e/NOTES-FOR-EXECUTORS.md index 5823ed3..3419dc1 100644 --- a/tests/e2e/NOTES-FOR-EXECUTORS.md +++ b/tests/e2e/NOTES-FOR-EXECUTORS.md @@ -116,6 +116,29 @@ ID в названиях тестов — двойные «владелец/мо `staff_timesheet_entries` требуют `actor_id/created_by/updated_by = current_setting('app.user_id')` — для записи аудита без обхода RLS выставить `app.user_id`. +**Расхождение с `codex/fix-tenant-rehome` (c73bb3b, 16:48 NOVT; ACCEPTANCE-3 с просьбой держаться C6 — 16:35).** +Сценарий на ветке: `dry-run exit: Tenant rehome stopped. Unknown option --from.` По существу скрипт делает +всё, что проверяет сценарий (см. REPORT «Круг 3б»); не совпадает только интерфейс: + +| C6 (сценарий) | c73bb3b | Итог в сценарии | +| ------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------- | +| `--from`, `--to` | `--source`, `--target` | `Unknown option --from`, exit 1 | +| без флага — перенос | нужен `--apply`, без режима — `Specify --dry-run or --apply.` | — | +| — | `--apply` требует `--actor ` и `--backup-evidence ` | у сценария нет ни того, ни другого | +| `--json` | неизвестный флаг → exit 1; JSON печатается всегда | — | +| `DATABASE_ADMIN_URL` | `DATABASE_REHOME_URL` (запасной вариант `DATABASE_MIGRATION_URL`) | — | +| одна строка JSON, числа | многострочный JSON (`JSON.stringify(…, null, 2)`), счётчики — строки | парсер сценария ищет JSON в последней строке | +| `ledger_amount_minor_sum` в dry-run и apply | в dry-run суммы нет; в apply `payrollLedger: [{currency, amountMinor}]` | с адаптером: `expected 'undefined' to be '328228'` | +| `tables` — строки у `--from` | в apply `tables` — у `--to` после переноса (`staff_audit_log` +1) | не проверяется | + +Какой интерфейс оставить, решает владелец. Варианты: (а) Codex добавляет в скрипт C6-совместимые +`--from/--to/--json`, `DATABASE_ADMIN_URL`, сумму журнала в dry-run, а `--actor`/`--backup-evidence` +берёт из переменных окружения (например, `REHOME_ACTOR_ID`, `REHOME_BACKUP_EVIDENCE`); (б) владелец утверждает +интерфейс c73bb3b — тогда я меняю сценарий под него отдельным коммитом, а сумму журнала в dry-run +оставляю требованием (TASK-GROK-3 §4 п.3: «`--dry-run` — ничего не меняет, печатает те же числа», то есть числа п.2, включая `SUM(amount_minor)`). В TASK-CODEX-2 §2.2 п.4 dry-run +описан как «только отчёт о количестве строк по таблицам», то есть по этому пункту c73bb3b задание +выполняет, а расходится только с C6. + ## 2. Дефекты продукта, найденные сценариями (все красные сейчас) Команда и фактический вывод — `tests/e2e/evidence/e2e-run.txt`; таблица — `tests/e2e/REPORT.md`. @@ -251,3 +274,33 @@ does not exist` в `beforeAll` (`Tests 2 skipped`). На `6c5bf36`/`b283736` и ссылаться на событие outbox другого арендатора (RLS фильтрует чтение, но не ссылку). Предложение: `UNIQUE (tenant_id, id)` на `staff_outbox` и FK `(tenant_id, outbox_id)`. - **PILOT-REHOME**: скрипта нет → `[PILOT-REHOME]` красный; контракт — C6. + +## 8. Круг 3б (основа f7d3c73, 2026-09-26 ~17:00 NOVT) + +Вывод — `tests/e2e/report-evidence/round3-accept-f7d3c73.md`, `round3-k18-and-rehome.md`. + +- **codex/fix-tenant-config (535052e)**: `npm run check` красный — + `tests/unit/sync.test.ts:556:18` → `STANDALONE_TENANT_ID uses the development placeholder…` + (строка 553 — заглушка, 563 — `NODE_ENV: 'test'`). Вывод владельца подтверждён; как исправить — + ACCEPTANCE-3 (разрешить заглушку при `NODE_ENV === 'test'`). +- **codex/fix-tenant-rehome (c73bb3b)**: по существу перенос верный (копия после восстановления: счётчики, + ledger, FK, аудит `tenant.rehomed`, изоляция, отказ повтора). `[PILOT-REHOME]` красный из-за интерфейса — + таблица различий в C6. Интеграционный тест `rehome-tenant.test.ts` зелёный только с + `DATABASE_REHOME_TEST_URL`/`DATABASE_REHOME_TEST_CONFIRM` — в `npm run check` и CI он всегда `skipped`. + Тест требует подключения суперпользователя (`rehome-tenant.test.ts:92-93`) и содержит один `it` — + запуск скрипта от не-суперпользователя (как `krona_migrator` в пилоте) не покрыт. +- **codex/fix-pilot-backups (a005c5e, K18)**: `test-backup.sh`/`test-backup-pull.sh` проходят (моки), но в + `npm run check` и CI не входят. Учебное восстановление без Docker прошло (шим docker → pg_dump PG17, + CMS, sha256, pg_restore, `restore-drill-report.sql` совпал). Замечания: + - `backup.sh` снимает только `pg_dump -Fc` одной БД: ролей (globals) в копии нет. В кластере без ролей + `pg_restore` → exit 1, 61 ошибка `role "krona_migrator" does not exist`. Шаг 4 runbook («Restore required + roles and grants») нужно сделать исполнимым: скрипт создания ролей для восстановления или + `pg_dumpall --globals-only --no-role-passwords` рядом с копией. + - `restore-drill-isolation.sql` жёстко зашит на `01J00000000000000000000000` → `01M2R6AC5652NPT3MG34DKN4ZP`; + после переноса «source/target» поменяются местами — стоит параметризовать (`psql -v`). + - В `docs/BACKUP-RESTORE.md` личный путь `C:/Users/trush/Documents/KronaStaffBackups/` — в репозитории + лучше указать роль или место без имени пользователя. + - Ротации копий нет (сказано в документе); отказ таймера/pull должен кто-то мониторить — это пока только текст. +- Предложение (моя зона, после слияния): добавить в CI `bash scripts/test-backup.sh`, + `bash scripts/test-backup-pull.sh` и запуск `rehome-tenant.test.ts` / `live-postgres-remediation.test.ts` + на одноразовых БД — так же, как это делает `accept-branch`.