Почему: таблица приёмки и разбор 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— ротация на ПК есть, на сервере нет, личные пути в новых файлах.
This commit is contained in:
parent
75f76430d4
commit
bf80b5040e
2 changed files with 31 additions and 11 deletions
|
|
@ -93,7 +93,8 @@ ID в названиях тестов — двойные «владелец/мо
|
||||||
- Запуск: `DATABASE_ADMIN_URL=<админ БД> node scripts/rehome-tenant.mjs --from 01J00000000000000000000000 --to 01M2R6AC5652NPT3MG34DKN4ZP [--dry-run] [--json]`.
|
- Запуск: `DATABASE_ADMIN_URL=<админ БД> node scripts/rehome-tenant.mjs --from 01J00000000000000000000000 --to 01M2R6AC5652NPT3MG34DKN4ZP [--dry-run] [--json]`.
|
||||||
Стенд передаёт `DATABASE_ADMIN_URL` суперпользователя в БД стенда (`E2E_DB_ADMIN_URL` или
|
Стенд передаёт `DATABASE_ADMIN_URL` суперпользователя в БД стенда (`E2E_DB_ADMIN_URL` или
|
||||||
`E2E_PG_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, те же числа, в БД ничего не меняется.
|
- `--dry-run`: exit 0, те же числа, в БД ничего не меняется.
|
||||||
- Перенос: exit 0; под `--from` 0 строк во **всех** таблицах с `tenant_id` (список из
|
- Перенос: 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'` |
|
| `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) | не проверяется |
|
| `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-совместимые
|
Какой интерфейс оставить, решает владелец. Варианты: (а) Codex добавляет в скрипт C6-совместимые
|
||||||
`--from/--to/--json`, `DATABASE_ADMIN_URL`, сумму журнала в dry-run, а `--actor`/`--backup-evidence`
|
`--from/--to/--json`, `DATABASE_ADMIN_URL`, сумму журнала в dry-run, а `--actor`/`--backup-evidence`
|
||||||
берёт из переменных окружения (например, `REHOME_ACTOR_ID`, `REHOME_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…`
|
`tests/unit/sync.test.ts:556:18` → `STANDALONE_TENANT_ID uses the development placeholder…`
|
||||||
(строка 553 — заглушка, 563 — `NODE_ENV: 'test'`). Вывод владельца подтверждён; как исправить —
|
(строка 553 — заглушка, 563 — `NODE_ENV: 'test'`). Вывод владельца подтверждён; как исправить —
|
||||||
ACCEPTANCE-3 (разрешить заглушку при `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]` красный из-за интерфейса —
|
ledger, FK, аудит `tenant.rehomed`, изоляция, отказ повтора). `[PILOT-REHOME]` красный из-за интерфейса —
|
||||||
таблица различий в C6. Интеграционный тест `rehome-tenant.test.ts` зелёный только с
|
таблица различий в C6. Интеграционный тест `rehome-tenant.test.ts` зелёный только с
|
||||||
`DATABASE_REHOME_TEST_URL`/`DATABASE_REHOME_TEST_CONFIRM` — в `npm run check` и CI он всегда `skipped`.
|
`DATABASE_REHOME_TEST_URL`/`DATABASE_REHOME_TEST_CONFIRM` — в `npm run check` и CI он всегда `skipped`.
|
||||||
Тест требует подключения суперпользователя (`rehome-tenant.test.ts:92-93`) и содержит один `it` —
|
Тест требует подключения суперпользователя (`rehome-tenant.test.ts:92-93`) и содержит один `it` —
|
||||||
запуск скрипта от не-суперпользователя (как `krona_migrator` в пилоте) не покрыт.
|
запуск скрипта от не-суперпользователя (как `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,
|
`npm run check` и CI не входят. Учебное восстановление без Docker прошло (шим docker → pg_dump PG17,
|
||||||
CMS, sha256, pg_restore, `restore-drill-report.sql` совпал). Замечания:
|
CMS, sha256, pg_restore, `restore-drill-report.sql` совпал). Замечания:
|
||||||
- `backup.sh` снимает только `pg_dump -Fc` одной БД: ролей (globals) в копии нет. В кластере без ролей
|
- `backup.sh` снимает только `pg_dump -Fc` одной БД: ролей (globals) в копии нет. В кластере без ролей
|
||||||
|
|
@ -300,7 +307,9 @@ does not exist` в `beforeAll` (`Tests 2 skipped`). На `6c5bf36`/`b283736` и
|
||||||
после переноса «source/target» поменяются местами — стоит параметризовать (`psql -v`).
|
после переноса «source/target» поменяются местами — стоит параметризовать (`psql -v`).
|
||||||
- В `docs/BACKUP-RESTORE.md` личный путь `C:/Users/trush/Documents/KronaStaffBackups/` — в репозитории
|
- В `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`,
|
- Предложение (моя зона, после слияния): добавить в CI `bash scripts/test-backup.sh`,
|
||||||
`bash scripts/test-backup-pull.sh` и запуск `rehome-tenant.test.ts` / `live-postgres-remediation.test.ts`
|
`bash scripts/test-backup-pull.sh` и запуск `rehome-tenant.test.ts` / `live-postgres-remediation.test.ts`
|
||||||
на одноразовых БД — так же, как это делает `accept-branch`.
|
на одноразовых БД — так же, как это делает `accept-branch`.
|
||||||
|
|
|
||||||
|
|
@ -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)).
|
([`report-evidence/round3-pilot-rehome.txt`](report-evidence/round3-pilot-rehome.txt)).
|
||||||
- Контракт, который проверяет сценарий, — `NOTES-FOR-EXECUTORS.md`, C6.
|
- Контракт, который проверяет сценарий, — `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/<ветка>
|
Храповик **не тронут**: после `git fetch` `git merge-base --is-ancestor origin/<ветка>
|
||||||
origin/codex/bootstrap-platform-foundation` — `not merged` для grok/e2e-harness, fix-live-database,
|
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-format-baseline, fix-reject-device-shifts, fix-sync-c0-bootstrap, fix-tenant-config,
|
||||||
fix-tenant-rehome, fix-pilot-backups.
|
fix-tenant-rehome, fix-pilot-backups.
|
||||||
|
|
||||||
Команда: `node scripts/test/accept-branch.mjs <7 веток, не являющихся предками основы>`, стенд `18f944e`.
|
Команда: `node scripts/test/accept-branch.mjs <7 веток, не являющихся предками основы>`. Первый прогон (16:59, стенд
|
||||||
Полный вывод — [`report-evidence/round3-accept-f7d3c73.md`](report-evidence/round3-accept-f7d3c73.md).
|
`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 | Стало зелёным | Стало красным |
|
| Ветка | 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 | — |
|
| 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-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-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-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 между собой) — **все чисто**.
|
- `git merge-tree`: 28 пар (7 с основой + 21 между собой) — **все чисто**.
|
||||||
- «Форматирование без поведения» `a05777c`: `изменено файлов: 19 — ТОЛЬКО ФОРМАТИРОВАНИЕ`.
|
- «Форматирование без поведения» `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 нет суммы
|
вариант 1 (только перевод флагов и формата) — `expected 'undefined' to be '328228'`: **в dry-run нет суммы
|
||||||
журнала**; вариант 2 (сумму досчитывает адаптер) — `✓ [PILOT-REHOME]`. Других расхождений сценарий не нашёл.
|
журнала**; вариант 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` —
|
**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 незашифрованных
|
Docker (шим `docker compose exec` → локальный `pg_dump` PG17): `backup.sh` exit 0, на сервере 0 незашифрованных
|
||||||
файлов, `sha256sum -c` OK, расшифровка ключом вне сервера, `pg_restore --exit-on-error` exit 0,
|
файлов, `sha256sum -c` OK, расшифровка ключом вне сервера, `pg_restore --exit-on-error` exit 0,
|
||||||
`restore-drill-report.sql` на источнике и копии — `идентичны` (79 строк, `RLS|27|t`), isolation:
|
`restore-drill-report.sql` на источнике и копии — `идентичны` (79 строк, `RLS|27|t`), isolation:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue