From bf80b5040e0befc3adfc4531ef0b838dba983997 Mon Sep 17 00:00:00 2001 From: grok Date: Sat, 26 Sep 2026 17:20:23 +0700 Subject: [PATCH] =?UTF-8?q?docs(e2e):=20REPORT/NOTES=20=E2=80=94=20d52ecf3?= =?UTF-8?q?,=20b022885=20=D0=B8=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Почему: таблица приёмки и разбор C6 должны соответствовать текущим SHA веток Codex, а владелец должен видеть, какие расхождения с C6 остались после d52ecf3 и какая часть красного была ошибкой сценария (типы счётчиков, d477dde), а не продукта. - REPORT: таблица по повторному прогону (b022885, d52ecf3), разбор d52ecf3. - NOTES C6: что закрыл d52ecf3; открыто — многострочный JSON, сумма журнала в dry-run, dry-run по умолчанию и обязательные --apply/--actor/--backup-evidence. - NOTES разд. 8: K18 на b022885 — ротация на ПК есть, на сервере нет, личные пути в новых файлах. --- tests/e2e/NOTES-FOR-EXECUTORS.md | 17 +++++++++++++---- tests/e2e/REPORT.md | 25 ++++++++++++++++++------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/tests/e2e/NOTES-FOR-EXECUTORS.md b/tests/e2e/NOTES-FOR-EXECUTORS.md index 3419dc1..8c0e59b 100644 --- a/tests/e2e/NOTES-FOR-EXECUTORS.md +++ b/tests/e2e/NOTES-FOR-EXECUTORS.md @@ -93,7 +93,8 @@ ID в названиях тестов — двойные «владелец/мо - Запуск: `DATABASE_ADMIN_URL=<админ БД> node scripts/rehome-tenant.mjs --from 01J00000000000000000000000 --to 01M2R6AC5652NPT3MG34DKN4ZP [--dry-run] [--json]`. Стенд передаёт `DATABASE_ADMIN_URL` суперпользователя в БД стенда (`E2E_DB_ADMIN_URL` или `E2E_PG_ADMIN_URL` с именем БД). -- `--json`: последней строкой stdout — `{"tables":{"<таблица>":<строк у --from>},"ledger_amount_minor_sum":<число или строка>}`. +- `--json`: последней строкой stdout — `{"tables":{"<таблица>":<строк у --from>},"ledger_amount_minor_sum":<число или строка>}` + (счётчики — число или строка с числом). Таблицы с нулём можно не печатать. - `--dry-run`: exit 0, те же числа, в БД ничего не меняется. - Перенос: exit 0; под `--from` 0 строк во **всех** таблицах с `tenant_id` (список из @@ -131,6 +132,12 @@ ID в названиях тестов — двойные «владелец/мо | `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) | не проверяется | +**d52ecf3 (17:02)** закрыл строки 1, 4, 5 таблицы: `--from/--to`, `--json`, `DATABASE_ADMIN_URL` принимаются. Без +флага теперь **dry-run** (по C6 — перенос), так что запуск сценария без `--apply` не переносит данные. Открытыми +остаются многострочный JSON (сценарий: `dry-run без JSON-отчёта`), сумма журнала в dry-run и обязательные +`--apply --actor --backup-evidence` (разд. 6.3 в `report-evidence/round3-k18-and-rehome.md`). Типы счётчиков +расходились из-за ошибки сценария; она исправлена в d477dde, сравнение идёт через `Number()`. + Какой интерфейс оставить, решает владелец. Варианты: (а) Codex добавляет в скрипт C6-совместимые `--from/--to/--json`, `DATABASE_ADMIN_URL`, сумму журнала в dry-run, а `--actor`/`--backup-evidence` берёт из переменных окружения (например, `REHOME_ACTOR_ID`, `REHOME_BACKUP_EVIDENCE`); (б) владелец утверждает @@ -283,13 +290,13 @@ does not exist` в `beforeAll` (`Tests 2 skipped`). На `6c5bf36`/`b283736` и `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)**: по существу перенос верный (копия после восстановления: счётчики, +- **codex/fix-tenant-rehome (c73bb3b → d52ecf3)**: по существу перенос верный (копия после восстановления: счётчики, 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` проходят (моки), но в +- **codex/fix-pilot-backups (a005c5e → b022885, 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) в копии нет. В кластере без ролей @@ -300,7 +307,9 @@ does not exist` в `beforeAll` (`Tests 2 skipped`). На `6c5bf36`/`b283736` и после переноса «source/target» поменяются местами — стоит параметризовать (`psql -v`). - В `docs/BACKUP-RESTORE.md` личный путь `C:/Users/trush/Documents/KronaStaffBackups/` — в репозитории лучше указать роль или место без имени пользователя. - - Ротации копий нет (сказано в документе); отказ таймера/pull должен кто-то мониторить — это пока только текст. + - b022885: ротация копий на ПК есть (`BACKUP_LOCAL_RETENTION_DAYS`, 90 дней; в `test-backup-pull.sh` есть проверка), + ротации на сервере нет. В новых `scripts/run-pilot-backup-pull.ps1` и `deploy/pilot/backup.home-server.example` + тоже зашиты личные пути. Контроль отказов таймера и задачи pull пока описан только в документе. - Предложение (моя зона, после слияния): добавить в CI `bash scripts/test-backup.sh`, `bash scripts/test-backup-pull.sh` и запуск `rehome-tenant.test.ts` / `live-postgres-remediation.test.ts` на одноразовых БД — так же, как это делает `accept-branch`. diff --git a/tests/e2e/REPORT.md b/tests/e2e/REPORT.md index 77f8627..01f4f83 100644 --- a/tests/e2e/REPORT.md +++ b/tests/e2e/REPORT.md @@ -132,15 +132,18 @@ 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 +### Круг 3б: основа `f7d3c73` (ACCEPTANCE-3), 16:59 и 17:14 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). +Команда: `node scripts/test/accept-branch.mjs <7 веток, не являющихся предками основы>`. Первый прогон (16:59, стенд +`18f944e`) — [`round3-accept-f7d3c73.md`](report-evidence/round3-accept-f7d3c73.md). Пока шёл разбор, Codex +запушил `fix-tenant-rehome` d52ecf3 (17:02) и `fix-pilot-backups` b022885 (17:07), поэтому все 7 веток прогнаны +повторно (17:14, стенд `a6a1b5e`) — [`round3-accept-f7d3c73-rerun.md`](report-evidence/round3-accept-f7d3c73-rerun.md). +В таблице — повторный прогон; на первом прогоне по c73bb3b и a005c5e результаты те же. | Ветка | SHA | check | integration | e2e red/green | Стало зелёным | Стало красным | | ------------------------------------ | ------- | ------------------------------------------------------------------------ | ----------------------------------------------------- | ------------- | ------------------------------- | ------------- | @@ -149,9 +152,9 @@ fix-tenant-rehome, fix-pilot-backups. | 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-pilot-backups | b022885 | 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 | — | — | +| codex/fix-tenant-rehome | d52ecf3 | OK | 4/5 (rehome-tenant.test.ts OK), FAIL tenant-isolation | 46/5 | — | — | - `git merge-tree`: 28 пар (7 с основой + 21 между собой) — **все чисто**. - «Форматирование без поведения» `a05777c`: `изменено файлов: 19 — ТОЛЬКО ФОРМАТИРОВАНИЕ`. @@ -180,10 +183,18 @@ placeholder, which is allowed only in development on loopback`, `❯ tests/unit/ вариант 1 (только перевод флагов и формата) — `expected 'undefined' to be '328228'`: **в dry-run нет суммы журнала**; вариант 2 (сумму досчитывает адаптер) — `✓ [PILOT-REHOME]`. Других расхождений сценарий не нашёл. -Ошибок в самом сценарии не нашёл, поэтому он не менялся. +На **d52ecf3** (17:02) Codex добавил синонимы `--from/--to`, `--json`, `DATABASE_ADMIN_URL` и сделал dry-run режимом +по умолчанию. `[PILOT-REHOME]` всё равно красный: `dry-run без JSON-отчёта: { "mode": "dry-run", … } : expected null +not to be null` — JSON печатается на нескольких строках, а C6 требует его последней строкой. Если снимать +расхождения по одному в копии сценария (не в коммите, [`round3-k18-and-rehome.md`](report-evidence/round3-k18-and-rehome.md), разд. 6.3), дальше +падают: счётчики-строки (`'2'` vs `2`) → **это ошибка сценария**, исправлена в `d477dde` (сравнение через `Number()`); +`expected 'undefined' to be '375888'` — в dry-run нет суммы журнала; `под заглушкой остались строки` — вызов без +флага теперь dry-run, а по C6 это перенос, для которого продукт требует `--apply --actor --backup-evidence`. +Других изменений в сценарии нет. **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 они не входят. Учебное восстановление без +оба `passed`, exit 0 (моки docker/ssh/scp) и на a005c5e, и на b022885 (b022885 добавил ротацию копий на ПК, 90 дней, +и пользовательский systemd-сервис; ротации на сервере нет). В `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: