test(e2e): перепроверка приёмки на обновлённых ветках исполнителей

Зачем: во время приёмки обе ветки обновили force-push
(codex/fix-live-database ea68e12 → b289dd6, antigravity/fix-reject-device-shifts
795bba0 → 1df2019, теперь на f5ac179). Вердикт по старому SHA не должен
выдаваться за вердикт по новому — «на слово ничего не принимать».

Что: повторный прогон стенда на новых HEAD, результат дописан в
report-evidence/acceptance-*.txt, REPORT.md и NOTES. Итог тот же:
fix-live-database 41 red / 13 green (K3, K4, K13 зелёные),
fix-reject-device-shifts 43 red / 11 green (K13 зелёный).
This commit is contained in:
grok 2026-09-26 15:30:40 +07:00
parent 33daae3593
commit ba59a48ffd
4 changed files with 43 additions and 6 deletions

View file

@ -174,7 +174,7 @@ CONFLICT DO NOTHING` со своим `runId` → строки/UPDATE по нес
Подробно — `tests/e2e/REPORT.md` и `tests/e2e/report-evidence/acceptance-*.txt`. Подробно — `tests/e2e/REPORT.md` и `tests/e2e/report-evidence/acceptance-*.txt`.
- `codex/fix-live-database` (ea68e12): K3/N2 и K4/N1 зелёные на живой PostgreSQL 17. - `codex/fix-live-database` (ea68e12, перепроверено на b289dd6): K3/N2 и K4/N1 зелёные на живой PostgreSQL 17.
Дальше по цепочке открылись K5/N4 (196800 вместо 98400 — двойное начисление) и Дальше по цепочке открылись K5/N4 (196800 вместо 98400 — двойное начисление) и
K6/D5 (отклонение оплаченной смены: 200, начисление осталось). A4 частично: `POST /employees` K6/D5 (отклонение оплаченной смены: 200, начисление осталось). A4 частично: `POST /employees`
больше не 500, но `month=2026-13` по-прежнему отдаёт `code=22008` с текстом. больше не 500, но `month=2026-13` по-прежнему отдаёт `code=22008` с текстом.
@ -184,8 +184,8 @@ CONFLICT DO NOTHING` со своим `runId` → строки/UPDATE по нес
`antigravity/fix-reject-device-shifts` (0 строк diff) и отличаются от 331e490 на 255/139 `antigravity/fix-reject-device-shifts` (0 строк diff) и отличаются от 331e490 на 255/139
строк. Изменение поведения стоит вынести в отдельный коммит с объяснением или влить строк. Изменение поведения стоит вынести в отдельный коммит с объяснением или влить
ветку Antigravity отдельно, иначе история смешивает темы (AGENTS.md). ветку Antigravity отдельно, иначе история смешивает темы (AGENTS.md).
- `antigravity/fix-reject-device-shifts` (795bba0): K13/SYNC-A и K13/SYNC-B зелёные, - `antigravity/fix-reject-device-shifts` (795bba0, перепроверено на 1df2019 — уже на f5ac179):
остальное без изменений. Ветка основана на 778ba2d, а не на 331e490. K13/SYNC-A и K13/SYNC-B зелёные, остальное без изменений.
- Ни одна ветка не влита в основную (f5ac179), поэтому ID из `known-defects.json` не удалены. - Ни одна ветка не влита в основную (f5ac179), поэтому ID из `known-defects.json` не удалены.
- Суммы в тестах кратны рублю: расчёт округляет строку до `rounding_unit_minor` - Суммы в тестах кратны рублю: расчёт округляет строку до `rounding_unit_minor`
(по умолчанию 100 коп.). Если округление должно быть другим — это решение продукта, не теста. (по умолчанию 100 коп.). Если округление должно быть другим — это решение продукта, не теста.

View file

@ -109,7 +109,7 @@ node scripts/test/run-e2e.mjs --no-known-defects # строго: люб
`tests/e2e/report-evidence/acceptance-*.txt`. Ни одна ветка не влита в основную `tests/e2e/report-evidence/acceptance-*.txt`. Ни одна ветка не влита в основную
(`git merge-base --is-ancestor` → нет), поэтому `known-defects.json` не сокращён. (`git merge-base --is-ancestor` → нет), поэтому `known-defects.json` не сокращён.
### `codex/fix-live-database` @ ea68e12 ### `codex/fix-live-database` @ ea68e12, перепроверено на b289dd6
```text ```text
== roundtrip OK: rolledBack=11 reapplied=11 == roundtrip OK: rolledBack=11 reapplied=11
@ -132,6 +132,10 @@ node scripts/test/run-e2e.mjs --no-known-defects # строго: люб
| A4 | RED | RED | было: 2 утечки; стало: 1 — `POST /payroll/calculate month=2026-13` → `code=22008` | | A4 | RED | RED | было: 2 утечки; стало: 1 — `POST /payroll/calculate month=2026-13` → `code=22008` |
| F14 | RED | GREEN | `prettier --check .` → `All matched files use Prettier code style!` (без оверлея evidence) | | F14 | RED | GREEN | `prettier --check .` → `All matched files use Prettier code style!` (без оверлея evidence) |
Ветку обновили force-push во время приёмки (`ea68e12` → `b289dd6`, изменён только
`tests/integration/live-postgres-remediation.test.ts`); повторный прогон на `b289dd6` дал те же
41 red / 13 green и ту же таблицу.
Вердикт: K3 и K4 исправлены (подтверждено на живой PostgreSQL 17, миграции roundtrip). После влития Вердикт: K3 и K4 исправлены (подтверждено на живой PostgreSQL 17, миграции roundtrip). После влития
убрать `K3/N2`, `K4/N1` из `known-defects.json`. Цепочка расчёта теперь доходит до денежных дефектов: убрать `K3/N2`, `K4/N1` из `known-defects.json`. Цепочка расчёта теперь доходит до денежных дефектов:
K5 и K6 подтверждены по существу. K5 и K6 подтверждены по существу.
@ -158,7 +162,7 @@ All matched files use Prettier code style!
и совпадает с `antigravity/fix-reject-device-shifts` (0 строк); `tests/unit/sync.test.ts` — 139 и 0. и совпадает с `antigravity/fix-reject-device-shifts` (0 строк); `tests/unit/sync.test.ts` — 139 и 0.
Изменение поведения скрыто в коммите форматирования — смешение тем (AGENTS.md). Изменение поведения скрыто в коммите форматирования — смешение тем (AGENTS.md).
### `antigravity/fix-reject-device-shifts` @ 795bba0 ### `antigravity/fix-reject-device-shifts` @ 795bba0, перепроверено на 1df2019
```text ```text
Tests 43 failed | 11 passed (54) Tests 43 failed | 11 passed (54)
@ -172,7 +176,10 @@ All matched files use Prettier code style!
| K13/SYNC-B | RED | GREEN | было: `upsert_timesheet_entry → applied`; стало: passed | | K13/SYNC-B | RED | GREEN | было: `upsert_timesheet_entry → applied`; стало: passed |
| остальные | — | — | других отличий нет | | остальные | — | — | других отличий нет |
Вердикт: K13 исправлен. Ветка основана на `778ba2d`, не на `331e490`. Убрать `K13/SYNC-A`, Ветку перебазировали на `f5ac179` во время приёмки (`795bba0` → `1df2019`); повторный прогон
на `1df2019`: те же 43 red / 11 green, отличия только K13/SYNC-A/B.
Вердикт: K13 исправлен. Убрать `K13/SYNC-A`,
`K13/SYNC-B` отдельным коммитом после влития (и после исправления очистки в `K13/SYNC-B` отдельным коммитом после влития (и после исправления очистки в
`sync-rejection.test.ts`, TASK-GROK-2 §4.1). `sync-rejection.test.ts`, TASK-GROK-2 §4.1).

View file

@ -14,3 +14,14 @@ exit=1
| ID | было | стало | фактический вывод | | ID | было | стало | фактический вывод |
| K13/SYNC-A | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_work_session","status":"applied","result":{"id":"<ulid>","revision":1,"status" / стало: passed | | K13/SYNC-A | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_work_session","status":"applied","result":{"id":"<ulid>","revision":1,"status" / стало: passed |
| K13/SYNC-B | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"<ulid>","revision":1,"stat / стало: passed | | K13/SYNC-B | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"<ulid>","revision":1,"stat / стало: passed |
# Перепроверка: ветку обновили force-push во время приёмки; новый HEAD 1df2019cb89cad69e2c86608dd3b43e18275e97c (2026-09-26 ~15:40 UTC+7)
$ cd <worktree @ 1df2019> && E2E_MIGRATIONS=roundtrip E2E_DATABASE_NAME=krona_staff_acc node scripts/test/run-e2e.mjs
== roundtrip OK: rolledBack=11 reapplied=11
Tests 43 failed | 11 passed (54)
| K13/SYNC-A | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
| K13/SYNC-B | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
exit=1
| ID | было | стало | фактический вывод |
| K13/SYNC-A | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_work_session","status":"applied","result":{"id":"<ulid>","revision":1,"status" / стало: passed |
| K13/SYNC-B | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"<ulid>","revision":1,"stat / стало: passed |

View file

@ -28,3 +28,22 @@ $ node node_modules/prettier/bin/prettier.cjs --check .
Checking formatting... Checking formatting...
All matched files use Prettier code style! All matched files use Prettier code style!
# Было (основная ветка f5ac179): [warn] Code style issues found in 23 files. # Было (основная ветка f5ac179): [warn] Code style issues found in 23 files.
# Перепроверка: ветку обновили force-push во время приёмки; новый HEAD b289dd6d63b8f5bcd7c03a88c07200e2e4a704bc (2026-09-26 ~15:40 UTC+7)
$ cd <worktree @ b289dd6> && E2E_MIGRATIONS=roundtrip E2E_DATABASE_NAME=krona_staff_acc node scripts/test/run-e2e.mjs
== roundtrip OK: rolledBack=11 reapplied=11
Tests 41 failed | 13 passed (54)
| K13/SYNC-A | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
| K13/SYNC-B | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
| K3/N2 | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
| K4/N1 | GREEN | 1/1 | зелёный — ИСПРАВЛЕН, уберите из known-defects.json |
exit=1
| ID | было | стало | фактический вывод |
| A4 | RED | RED | было: AssertionError: тела 500 с деталями PostgreSQL: expected [ …(2) ] to deeply equal [] / стало: AssertionError: тела 500 с деталями PostgreSQL: expected [ { …(2) } ] to deeply equal [] |
| K13/SYNC-A | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_work_session","status":"applied","result":{"id":"<ulid>","revision":1,"status" / стало: passed |
| K13/SYNC-B | RED | GREEN | было: AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-<ulid>","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"<ulid>","revision":1,"stat / стало: passed |
| K3/N2 | RED | GREEN | было: AssertionError: подтверждение смены: HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occurred_at\" of relation / стало: passed |
| K4/N1 | RED | GREEN | было: AssertionError: HTTP 500 {"statusCode":500,"code":"42P08","error":"Internal Server Error","message":"inconsistent types deduced for parameter $2"}: expected 500 to be 201 / стало: passed |
| K5/N4 | RED | RED | было: AssertionError: подтверждение смены (предусловие, см. N2): HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occ / стало: AssertionError: смена должна быть начислена ровно один раз: expected 196800n to be 98400n // Object.is equality |
| K6/D5 | RED | RED | было: AssertionError: подтверждение смены (предусловие; падает, пока открыт K3): HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value / стало: AssertionError: после отклонения оплаченной смены должно быть сторно: итог начислений 0: expected 98400n to be 0n // Object.is equality |
| K8/D1 | RED | RED | было: AssertionError: подтверждение смены (предусловие; падает, пока открыт K3): HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value / стало: AssertionError: C4 verify: HTTP 404 {"message":"Route GET:/api/v1/staff/payroll/runs/<ulid>/verify not found","error":"Not Found","statusCode":404}: expected 404 to be 20 |