Closed
Conversation
Добавлен новый калькулятор PositionAware, который гарантирует, что обменник займёт позицию внутри целевого диапазона, а не перепрыгнет выше. Реализованные use cases: - UC-1..UC-4: Базовая логика без перепрыгивания позиций выше - UC-6: Адаптивный GAP для плотных рейтингов - UC-8: Исключение своего обменника из расчёта (Gera.our_exchanger_id) - UC-9: Защита от манипуляторов с аномальными курсами Архитектура: - Паттерн Strategy: Legacy (старое поведение) и PositionAware (новое) - Выбор калькулятора через поле calculator_type в ExchangeRate - Обратная совместимость: по умолчанию используется Legacy Конфигурация: - Gera.our_exchanger_id - ID обменника для исключения из расчёта - Gera.anomaly_threshold_percent - порог аномалий (по умолчанию 50%) Closes #69 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… README - В autorate_calculator_class бросаем ArgumentError для неизвестных типов - Добавлена документация по конфигурации автокурса в README 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…нии диапазонов) Покрытые сценарии: - Курсы конкурентов выше допустимого диапазона - Курсы конкурентов ниже допустимого диапазона - Нет курсов на целевых позициях (список короче) - Частичное совпадение: часть позиций вне диапазона Связано с: #69 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Исправлена проблема с плавающей точкой при расчёте комиссии. После вычитания GAP получались числа вида -2.8346999999999998. - Добавлена константа COMMISSION_PRECISION = 4 - Добавлен метод round_commission() в Base - Применено округление в PositionAware калькуляторе - Добавлены тесты на округление - Версия: 0.3.3 → 0.4.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…#77) При position_from=1 если курс первой позиции совпадает с курсом второй позиции — не вычитаем GAP. Позволяем BestChange определить позицию по резервам/времени обновления. - Добавлен метод should_skip_gap? - Добавлена проверка в метод call - Добавлены тесты для UC-12 и UC-11 - Версия: 0.4.0 → 0.4.1 Closes #77 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Добавлено debug-логирование для отладки UC-11 на stage: - Логирование входных параметров и промежуточных значений в call() - Логирование в calculate_adaptive_gap() с выводом diff и выбранного GAP - Логирование в adjust_for_position_above() с сравнением комиссий - Логирование в find_non_anomalous_rate_above() с deviation для каждого курса Конфигурация: Gera.autorate_debug_enabled = true (по умолчанию) Логи помечены тегом [PositionAware] для удобного поиска. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Исправлена логика UC-12: теперь работает для position_from > 1 - При одинаковых курсах на позициях position_from и position_from-1 GAP не вычитается (BestChange определит позицию по резервам) - Добавлены тесты UC-12 для position_from=1,2,3,5 в isolated_spec.rb - Исправлены тесты: GAP = 0.0001 (не 0.001) - Добавлен stub для PaymentServices::Base::Client (issue #78) - Документация по запуску изолированных тестов в CLAUDE.md - Bump version to 0.4.3 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Тесты использовали неправильное значение GAP (0.001) вместо фактического AUTO_COMISSION_GAP = 0.0001 из base.rb. Изменения: - position_aware_spec.rb: 0.001 → 0.0001 (9 мест) - legacy_spec.rb: 0.001 → 0.0001 (2 места) - standalone_spec.rb: 0.001 → 0.0001 (5 мест) Обновлены комментарии для соответствия реальной логике. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Защита от деления на ноль при median=0 в find_non_anomalous_rate_above - Обработка nil calculator_type как 'legacy' для обратной совместимости - Добавлены тесты для edge cases 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Resolved conflicts: - .ruby-version: updated to Ruby 3.4.7 from master - mise.toml: updated to Ruby 3.4.7 - lib/gera/version.rb: bumped to 0.5.0 - CLAUDE.md: kept legacy documentation additions - app/workers/gera/directions_rates_worker.rb: kept legacy optimizations - spec/lib/money_support_spec.rb: kept 40 currencies from legacy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add observer, mutex_m, ostruct gems (removed from Ruby 3.4 stdlib) - Update load_defaults to 8.0 for Rails 8 compatibility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use Gemfile.lock from master (database_rewinder 1.1.0) - Fix rate_comission_calculator to use find_by instead of detect - Restore directions_rates_worker from master (auto_rate_settings not available) - Update AUTO_COMISSION_GAP test expectation to 0.0001 Remaining issues: - VCR cassettes need updating for new currencies (CNY, INR) - position_aware_spec UC-6 needs investigation Tests: 471 passing, 1 failing (excluding VCR-dependent tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Убрано allow_nil: true из валидации calculator_type - теперь соответствует миграции (null: false, default: 'legacy') 2. Исправлен метод autorate_calculator_class - убрана обработка nil (невозможна при null: false) 3. Обновлен тест: вместо ожидания Legacy для nil теперь проверяется невалидность nil и default value 4. Исправлено значение AUTO_COMISSION_GAP в документации с 0.01 на 0.0001 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. BybitFetcher (6 тестов): Добавлены методы http_request и safely_parse в PaymentServices::Base::Client stub 2. position_aware UC-6: Исправлено ожидание теста с 2.49995 на 2.5 (2.49995.round(4) = 2.5 из-за COMMISSION_PRECISION = 4) 3. CbrRatesWorker: Добавлены отсутствующие валюты CNY и INR в mock Все 484 теста теперь проходят. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Изменен autorate_debug_enabled default на false для production - Добавлено логирование в пустой rescue блок DirectionsRatesWorker - Добавлено логирование в build_currency_rate (CurrencyRateModeBuilderSupport) - Централизована константа AUTO_COMISSION_GAP через ссылку на Base - Добавлен интеграционный тест для делегирования калькуляторов - Обновлен тест логгера для поддержки warn/error 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
legacybranch intomasterKey changes from legacy:
Conflicts resolved:
.ruby-versionmise.tomllib/gera/version.rbCLAUDE.mddirections_rates_worker.rbmoney_support_spec.rbRuby 3.4 compatibility fixes:
observergem (removed from stdlib)mutex_mgem (removed from stdlib)ostructgem (will be removed in Ruby 3.5)load_defaultsto 8.0Test plan
Known issues requiring attention
silencemethod, needs update or replacement🤖 Generated with Claude Code