[CL-AI-PAPER-GATE-SCHEMA] Починить персистентность AI paper-gate (SQL - схема) #319

Merged
andrei merged 1 commit from feature/claude-ai-paper-gate-columns into master 2026-06-10 22:47:39 +00:00
Owner

Что сделано

  • bot/db_helpers/ai.py: INSERT/UPDATE переведены на реальные колонки total_trades/wins (убран несуществующий updated_at).
  • app/strategies/ai_paper_gate.py _load_from_db: читает total_trades/wins.
  • Новый контрактный тест test_ai_paper_gate_db_schema_contract.py: SQL хелперов и ключи ридера обязаны существовать в DDL миграции 0006 (TDD: 2 красных → зелёные).

Зачем

Прод-лог: Failed to start AI paper gate in DB ... column "trades_count" of relation "ai_paper_gate" does not exist. Хелперы писали в колонки, которых нет в таблице (проверено \d ai_paper_gate в прод-Postgres) — каждый INSERT/UPDATE падал fail-soft, 30-дневный paper-gate жил только в памяти и обнулялся при каждом рестарте демонов. Гейт защищает выход AI-стратегии в live — его таймер фактически никогда не истекал честно.

Миграция НЕ нужна: router ai_signals.py уже читает схемные имена; меньший blast — выровнять два писателя/ридера.

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

  • Контракт + смежные gate-тесты: 42 passed.
  • Полный backend: 5938 passed / 0 failed / 8 skipped.
  • После деплоя: warning исчезает из логов, в ai_paper_gate появляется строка пользователя.

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

  • Существующие строки таблицы: их нет (INSERT всегда падал) — гейт стартует заново, это корректно.
  • updated_at-аудит потерян: колонки и не было; при необходимости добавится отдельной миграцией.
## Что сделано - `bot/db_helpers/ai.py`: INSERT/UPDATE переведены на реальные колонки `total_trades`/`wins` (убран несуществующий `updated_at`). - `app/strategies/ai_paper_gate.py` `_load_from_db`: читает `total_trades`/`wins`. - Новый контрактный тест `test_ai_paper_gate_db_schema_contract.py`: SQL хелперов и ключи ридера обязаны существовать в DDL миграции 0006 (TDD: 2 красных → зелёные). ## Зачем Прод-лог: `Failed to start AI paper gate in DB ... column "trades_count" of relation "ai_paper_gate" does not exist`. Хелперы писали в колонки, которых нет в таблице (проверено \d ai_paper_gate в прод-Postgres) — каждый INSERT/UPDATE падал fail-soft, 30-дневный paper-gate жил только в памяти и обнулялся при каждом рестарте демонов. Гейт защищает выход AI-стратегии в live — его таймер фактически никогда не истекал честно. Миграция НЕ нужна: router `ai_signals.py` уже читает схемные имена; меньший blast — выровнять два писателя/ридера. ## План тестирования - Контракт + смежные gate-тесты: 42 passed. - Полный backend: 5938 passed / 0 failed / 8 skipped. - После деплоя: warning исчезает из логов, в `ai_paper_gate` появляется строка пользователя. ## Где могу ошибаться - Существующие строки таблицы: их нет (INSERT всегда падал) — гейт стартует заново, это корректно. - `updated_at`-аудит потерян: колонки и не было; при необходимости добавится отдельной миграцией.
[CL-AI-PAPER-GATE-SCHEMA] Выровнять SQL paper-gate под реальную схему ai_paper_gate
All checks were successful
Arnold Forgejo CI / secret-scan (pull_request) Successful in 3s
Forgejo Smoke Test / Smoke (pull_request) Successful in 1s
Arnold Forgejo CI / frontend-audit (pull_request) Successful in 10s
Arnold Forgejo CI / backend-tests (pull_request) Successful in 3m43s
d65d5e8e40
db_helpers/ai.py писал в несуществующие колонки trades_count/wins_count/
updated_at (таблица из миграции 0006 имеет total_trades/wins, updated_at
нет) — каждый INSERT/UPDATE падал fail-soft, 30-дневный paper-gate не
персистился и его таймер обнулялся при каждом рестарте демонов.
Код выровнен под схему (router ai_signals.py уже читает схемные имена),
добавлен контрактный тест SQL↔DDL.
andrei changed title from t to [CL-AI-PAPER-GATE-SCHEMA] Починить персистентность AI paper-gate (SQL - схема) 2026-06-10 22:43:15 +00:00
andrei merged commit d4be6e283e into master 2026-06-10 22:47:39 +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!319
No description provided.