[CL-1176] E2E cancel/expire: возврат залоченных ресурсов на реальной БД (пятый проход) #1188

Merged
andrei merged 1 commit from feature/claude-cl1176-cancel-expire-e2e into master 2026-07-22 17:42:17 +00:00
Owner

Что сделано

Пятый адверсариальный проход: 6 opt-in интеграционных сценариев для cancel-order и expire-orders путей на эфемерной копии prod-схемы (гейт E2E_DATABASE_URL, в CI skip):

  • F: SELL cancel — доли+basis возвращаются полностью, ордер CANCELLED, locked-поля обнулены.
  • G: BUY cancel — полный возврат дебета 1000 на balance + ledger-запись «funds unlocked».
  • H: partial fill (4/10) затем SELL cancel — возврат ТОЛЬКО остатка (6 долей / basis 420), деньги матча и нога покупателя не тронуты.
  • I: EURT BUY cancel — возврат по coinBalance, EUR не тронут, валюта в ledger-записи EURT.
  • J: expireStaleOrders — SELL и BUY с истёкшим expiresAt: ресурсы возвращены, статусы EXPIRED, expiry-транзакция на 500.
  • K: BUY partial fill затем expire — возврат только остатка lockedBalance 600 (2000−1000+600=1600, 4 доли за 400 сохранены).

Зачем

Закрывает последние непокрытые «выходные» money-пути P2P жизненного цикла (после матч/refund/unwind в #1186/#1187). Живой прогон также подтвердил вердикт свипа: сырой increment: lockedShares в expire SELL-ветке безопасен (Prisma increment выполняется в Postgres NUMERIC-арифметикой).

План тестирования

6/6 passed с первого прогона на эфемерной БД из чистого prisma migrate deploy; повторный прогон 6/6 (перезапускаемость); tsc чист; eslint файла 0 warnings.

Где могу ошибаться

  • Сценарии полагаются на дефолтную цепочку createOrder (KYC VERIFIED, riskAcknowledgedAt) — как в уже смерженных E2E; изменения onboarding-требований потребуют правки seed.
  • J использует p2POrder.updateMany для установки expiresAt в прошлое — обход create-валидации осознанный (cron судит только по полю expiresAt).
## Что сделано Пятый адверсариальный проход: 6 opt-in интеграционных сценариев для cancel-order и expire-orders путей на эфемерной копии prod-схемы (гейт `E2E_DATABASE_URL`, в CI skip): - F: SELL cancel — доли+basis возвращаются полностью, ордер CANCELLED, locked-поля обнулены. - G: BUY cancel — полный возврат дебета 1000 на balance + ledger-запись «funds unlocked». - H: partial fill (4/10) затем SELL cancel — возврат ТОЛЬКО остатка (6 долей / basis 420), деньги матча и нога покупателя не тронуты. - I: EURT BUY cancel — возврат по coinBalance, EUR не тронут, валюта в ledger-записи EURT. - J: expireStaleOrders — SELL и BUY с истёкшим expiresAt: ресурсы возвращены, статусы EXPIRED, expiry-транзакция на 500. - K: BUY partial fill затем expire — возврат только остатка lockedBalance 600 (2000−1000+600=1600, 4 доли за 400 сохранены). ## Зачем Закрывает последние непокрытые «выходные» money-пути P2P жизненного цикла (после матч/refund/unwind в #1186/#1187). Живой прогон также подтвердил вердикт свипа: сырой `increment: lockedShares` в expire SELL-ветке безопасен (Prisma increment выполняется в Postgres NUMERIC-арифметикой). ## План тестирования 6/6 passed с первого прогона на эфемерной БД из чистого `prisma migrate deploy`; повторный прогон 6/6 (перезапускаемость); tsc чист; eslint файла 0 warnings. ## Где могу ошибаться - Сценарии полагаются на дефолтную цепочку createOrder (KYC VERIFIED, riskAcknowledgedAt) — как в уже смерженных E2E; изменения onboarding-требований потребуют правки seed. - J использует p2POrder.updateMany для установки expiresAt в прошлое — обход create-валидации осознанный (cron судит только по полю expiresAt).
[CL-1176] E2E-сценарии cancel/expire: возврат залоченных ресурсов на реальной БД
All checks were successful
CI / Contracts (pull_request) Successful in 2m28s
CI / Telegram Mini App (pull_request) Successful in 1m31s
CI / Python SDK (pull_request) Successful in 33s
CI / Secrets Scan (pull_request) Successful in 14s
CI / Prisma Migrate Gate (pull_request) Successful in 1m56s
CI / API (pull_request) Successful in 17m48s
CI / App (pull_request) Successful in 19m18s
ec7f31956e
Шесть opt-in интеграционных сценариев (гейт E2E_DATABASE_URL): SELL cancel
возвращает доли+basis полностью; BUY cancel возвращает дебет с ledger-записью;
partial fill + cancel возвращает только остаток (6 долей / basis 420), ноги
контрагента не тронуты; EURT BUY cancel ходит по coinBalance; expireStaleOrders
возвращает ресурсы обоих типов ордеров со статусом EXPIRED и expiry-транзакцией;
BUY partial fill + expire возвращает только остаток lockedBalance (600).
Все прогоны зелёные с первого раза на эфемерной БД из чистого migrate deploy;
повторный прогон подтверждает перезапускаемость.
andrei scheduled this pull request to auto merge when all checks succeed 2026-07-22 17:39:43 +00:00
andrei merged commit e92c517037 into master 2026-07-22 17:42:17 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!1188
No description provided.