[CL-RADAR] Preserve owner attribution on manual futures closes #539

Merged
andrei merged 1 commit from feature/claude-manual-close-owner-attribution into master 2026-07-23 14:33:10 +00:00
Owner

Что сделано

  • Сохраняется исходный владелец futures-позиции при ручном закрытии: для Radar остаётся strategy_name=radar_live, а ручное действие записывается в metadata как источник выхода.
  • Добавлена hedge-aware синхронизация tracked positions после полного и частичного закрытия.
  • Закрывающий объём берётся из нормализованного exchange response для Bybit/CCXT.
  • Authoritative closed PnL сопоставляется с конкретным close order по order id либо по side/qty/fresh timestamp с коротким retry, вместо слепого выбора последней записи.
  • Добавлены регрессионные тесты для owner isolation, Radar metadata, partial/full qty, CCXT/Bybit parity и risk-router sync.

Зачем

Production evidence: ручное API-закрытие Radar-owned WLFIUSDT создало close trade с strategy_name=manual_close, из-за чего экономический результат потерял владельца radar_live. Это искажает strategy attribution и PnL cohorts.

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

  • Targeted: 52 теста — green.
  • Полный backend pytest — должен быть green в CI; локальный exact-artifact прогон приложен к delivery gate.
  • py_compile изменённых runtime-модулей.
  • git diff --check.
  • gitleaks по commit range: leaks не найдены.
  • Независимый adversarial review exact artifact: VERDICT: GREEN.
  • После merge: canonical deploy, exact SHA/API/PM2/validator и event-level production verification следующего ручного Radar close.

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

  • История closed PnL у биржи может появляться с задержкой больше короткого retry; в этом случае остаётся текущий optimistic PnL fallback, но чужая history row больше не подставляется.
  • Production event-level подтверждение owner metadata возможно только на следующем реальном ручном закрытии Radar-owned позиции; synthetic live order не создавался.
## Что сделано - Сохраняется исходный владелец futures-позиции при ручном закрытии: для Radar остаётся `strategy_name=radar_live`, а ручное действие записывается в metadata как источник выхода. - Добавлена hedge-aware синхронизация tracked positions после полного и частичного закрытия. - Закрывающий объём берётся из нормализованного exchange response для Bybit/CCXT. - Authoritative closed PnL сопоставляется с конкретным close order по order id либо по side/qty/fresh timestamp с коротким retry, вместо слепого выбора последней записи. - Добавлены регрессионные тесты для owner isolation, Radar metadata, partial/full qty, CCXT/Bybit parity и risk-router sync. ## Зачем Production evidence: ручное API-закрытие Radar-owned `WLFIUSDT` создало close trade с `strategy_name=manual_close`, из-за чего экономический результат потерял владельца `radar_live`. Это искажает strategy attribution и PnL cohorts. ## План тестирования - Targeted: 52 теста — green. - Полный backend pytest — должен быть green в CI; локальный exact-artifact прогон приложен к delivery gate. - `py_compile` изменённых runtime-модулей. - `git diff --check`. - `gitleaks` по commit range: leaks не найдены. - Независимый adversarial review exact artifact: `VERDICT: GREEN`. - После merge: canonical deploy, exact SHA/API/PM2/validator и event-level production verification следующего ручного Radar close. ## Где могу ошибаться - История closed PnL у биржи может появляться с задержкой больше короткого retry; в этом случае остаётся текущий optimistic PnL fallback, но чужая history row больше не подставляется. - Production event-level подтверждение owner metadata возможно только на следующем реальном ручном закрытии Radar-owned позиции; synthetic live order не создавался.
[CL-RADAR] Preserve strategy owner on manual futures closes
All checks were successful
Arnold Forgejo CI / backend-tests (pull_request) Successful in 12m7s
Arnold Forgejo CI / frontend-audit (pull_request) Successful in 16s
Arnold Forgejo CI / secret-scan (pull_request) Successful in 3s
Forgejo Smoke Test / Smoke (pull_request) Successful in 1s
fa5d0f7ecf
andrei merged commit e06f3fbe65 into master 2026-07-23 14:33:10 +00:00
Sign in to join this conversation.
No reviewers
No labels
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/arnold-trader-app!539
No description provided.