exness-data-preprocess 0.7.1__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.cz.toml +1 -1
  2. exness_data_preprocess-0.8.0/.lint-relative-paths-results.txt +62 -0
  3. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CHANGELOG.md +38 -0
  4. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CLAUDE.md +5 -5
  5. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/PKG-INFO +6 -8
  6. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/README.md +3 -3
  7. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/MODULE_ARCHITECTURE.md +1 -1
  8. exness_data_preprocess-0.8.0/docs/PRIORITY3_CLEANUP_PLAN.yaml +386 -0
  9. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/README.md +4 -13
  10. exness_data_preprocess-0.8.0/docs/REPOSITORY_REFACTORING_PLAN.yaml +375 -0
  11. exness_data_preprocess-0.8.0/docs/adr/2025-12-09-exness-clickhouse-migration.md +196 -0
  12. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/UNIFIED_DUCKDB_PLAN_v1.0.0_LEGACY.md +3 -3
  13. exness_data_preprocess-0.8.0/docs/design/2025-12-09-exness-clickhouse-migration/spec.md +310 -0
  14. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/RESEARCH_PATTERNS_CANONICALIZATION_2025-10-17.md +2 -2
  15. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/HYBRID_SESSION_DETECTION_ANALYSIS.md +5 -5
  16. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/02-mode-truncated-analysis.md +1 -13
  17. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/03-hurdle-model-analysis.md +1 -5
  18. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/README.md +3 -3
  19. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/02-baseline-sep2024.md +5 -15
  20. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/03-multiperiod-validation.md +7 -11
  21. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/04-discoveries-and-plan-evolution.md +1 -2
  22. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/README.md +1 -1
  23. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/pyproject.toml +6 -7
  24. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/__init__.py +27 -5
  25. exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_client.py +170 -0
  26. exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_gap_detector.py +245 -0
  27. exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_manager.py +384 -0
  28. exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_ohlc_generator.py +362 -0
  29. exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_query_engine.py +376 -0
  30. exness_data_preprocess-0.7.1/.lychee-results.json +0 -425
  31. exness_data_preprocess-0.7.1/.lychee-results.txt +0 -144
  32. exness_data_preprocess-0.7.1/AUTHORS.md +0 -25
  33. exness_data_preprocess-0.7.1/DOCUMENTATION.md +0 -296
  34. exness_data_preprocess-0.7.1/docs/planning-index.yaml +0 -32
  35. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/ci.yml +0 -0
  36. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
  37. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/publish.yml +0 -0
  38. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.gitignore +0 -0
  39. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.lycheecache +0 -0
  40. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.pre-commit-config.yaml +0 -0
  41. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CONTRIBUTING.md +0 -0
  42. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/LICENSE +0 -0
  43. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/Makefile +0 -0
  44. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/cliff-release-notes.toml +0 -0
  45. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/cliff.toml +0 -0
  46. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/DATABASE_SCHEMA.md +0 -0
  47. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/EXNESS_DATA_SOURCES.md +0 -0
  48. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/RESEARCH_PATTERNS.md +0 -0
  49. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/TRADING_HOURS_RESEARCH.md +0 -0
  50. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/UNIFIED_DUCKDB_PLAN_v2.md +0 -0
  51. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/PYDANTIC_REFACTORING_PLAN_v0.2.0_COMPLETE.md +0 -0
  52. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/PYDANTIC_REFACTORING_STATUS_v0.2.0_COMPLETE.md +0 -0
  53. /exness_data_preprocess-0.7.1/docs/implementation-plan.yaml → /exness_data_preprocess-0.8.0/docs/archive/implementation-plan-2024-11-24.yaml +0 -0
  54. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/optimization/OPTIMIZATION_OPPORTUNITIES_2025-10-18.md +0 -0
  55. {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE2_SESSION_VECTORIZATION_PLAN.yaml +0 -0
  56. {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE3_SQL_GAP_DETECTION_PLAN.yaml +0 -0
  57. {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE4_DRY_RUN_CONFIG_PLAN.yaml +0 -0
  58. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_AUDIT_2025-10-16_PASS2.md +0 -0
  59. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_VERIFICATION_CHECKLIST_2025-10-16.md +0 -0
  60. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_VERIFICATION_FINDINGS_2025-10-16.md +0 -0
  61. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_AUDIT_2025-10-15.md +0 -0
  62. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_AUDIT_PASS2_2025-10-15.md +0 -0
  63. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_BEST_PRACTICES_LINE_COUNTS.md +0 -0
  64. {exness_data_preprocess-0.7.1/tests/archive → exness_data_preprocess-0.8.0/docs/plans}/E2E_TESTING_PLAN_v1.0.0.md +0 -0
  65. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/EXCHANGE_SESSION_AUDIT_2025-10-17.md +0 -0
  66. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/FUNCTIONALITY_VALIDATION_REPORT_2025-10-15.md +0 -0
  67. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/FUNCTIONALITY_VALIDATION_REPORT_2025-10-16.md +0 -0
  68. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/PHASE7_v1.5.0_REFACTORING_PLAN.md +0 -0
  69. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/PHASE7_v1.6.0_REFACTORING_PROGRESS.md +0 -0
  70. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/REFACTORING_CHECKLIST.md +0 -0
  71. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SCHEMA_v1.6.0_AUDIT_FINDINGS.md +0 -0
  72. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SCHEMA_v1.6.0_MIGRATION_GUIDE.md +0 -0
  73. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SESSION_2025-10-15_SUMMARY.md +0 -0
  74. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/releases}/RELEASE_NOTES.md +0 -0
  75. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/releases}/RELEASE_NOTES_SHORT.md +0 -0
  76. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/GAP_DETECTION_COMPARISON.md +0 -0
  77. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/GAP_DETECTION_SQL_APPROACH.md +0 -0
  78. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/README.md +0 -0
  79. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_all_compression_methods.py +0 -0
  80. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_delta_encoding_properly.py +0 -0
  81. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_parquet_compression_methods.py +0 -0
  82. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/01-methodology.md +0 -0
  83. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/04-temporal-patterns.md +0 -0
  84. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/05-final-recommendations.md +0 -0
  85. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/scripts/reproduction_guide.md +0 -0
  86. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/hurdle-model/hurdle_decomposition.png +0 -0
  87. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/cv_mode_comparison.png +0 -0
  88. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/distribution_overlay.png +0 -0
  89. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/signal_quality_comparison.png +0 -0
  90. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/variance_decomposition.png +0 -0
  91. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/concentration_curve.png +0 -0
  92. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/percentile_analysis.png +0 -0
  93. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/01-methodology.md +0 -0
  94. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/findings/baseline-sep2024-comprehensive-summary.md +0 -0
  95. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/findings/phase2-mean-reversion-report.md +0 -0
  96. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/findings/phase3-volatility-model-report.md +0 -0
  97. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/findings/phase4-5-statistical-tests-survivorship-report.md +0 -0
  98. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/01_mean_reversion_analysis.py +0 -0
  99. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/02_volatility_model_simple.py +0 -0
  100. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/03_liquidity_crisis_detection.py +0 -0
  101. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/04_regime_detection_analysis.py +0 -0
  102. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase1_data_validation.py +0 -0
  103. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase2_mean_reversion.py +0 -0
  104. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase3_volatility_model.py +0 -0
  105. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase4_statistical_tests.py +0 -0
  106. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias.py +0 -0
  107. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias_v1.0.1.py +0 -0
  108. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6a_interval_analysis.py +0 -0
  109. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6b_price_clustering.py +0 -0
  110. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6c_combined_pattern.py +0 -0
  111. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/reproduction_guide.md +0 -0
  112. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/diagnostic_burst_decay.py +0 -0
  113. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_interactive_dashboard.py +0 -0
  114. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_lightweight_dashboard.py +0 -0
  115. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/prepare_visualization_data.py +0 -0
  116. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/gap_detection_implementation_example.py +0 -0
  117. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/setup}/GITHUB_PYPI_SETUP.md +0 -0
  118. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/ARCHITECTURE_AUDIT_2025-10-17.md +0 -0
  119. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/ARCHITECTURE_EFFICIENCY_AUDIT_2025-10-18.md +0 -0
  120. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/DOCUMENTATION_SURVEY_v1.7.0.md +0 -0
  121. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/E2E_VALIDATION_RESULTS_v1.6.0.md +0 -0
  122. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md +0 -0
  123. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md +0 -0
  124. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/WEEKEND_GAP_VALIDATION_SUMMARY.md +0 -0
  125. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/WORKSPACE_SURVEY_2025-10-17.md +0 -0
  126. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/examples/basic_usage.py +0 -0
  127. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/examples/batch_processing.py +0 -0
  128. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/api.py +0 -0
  129. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/cli.py +0 -0
  130. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/config.py +0 -0
  131. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/database_manager.py +0 -0
  132. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/downloader.py +0 -0
  133. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/exchanges.py +0 -0
  134. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/gap_detector.py +0 -0
  135. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/models.py +0 -0
  136. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/ohlc_generator.py +0 -0
  137. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/processor.py +0 -0
  138. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/query_engine.py +0 -0
  139. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/schema.py +0 -0
  140. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/session_detector.py +0 -0
  141. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/tick_loader.py +0 -0
  142. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/README.md +0 -0
  143. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/__init__.py +0 -0
  144. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/conftest.py +0 -0
  145. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_basic.py +0 -0
  146. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_functional_regression.py +0 -0
  147. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_models.py +0 -0
  148. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_processor_pydantic.py +0 -0
  149. {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  [tool.commitizen]
2
2
  name = "cz_conventional_commits"
3
- version = "0.7.1"
3
+ version = "0.7.2"
4
4
  tag_format = "v$major.$minor.$patch"
5
5
  update_changelog_on_bump = true
6
6
  version_files = [
@@ -0,0 +1,62 @@
1
+ 🔍 Scanning for non-repo-relative paths in: /Users/terryli/eon/exness-data-preprocess
2
+ Violations: paths not starting with / or http(s)
3
+
4
+ ❌ Found 141 violation(s):
5
+
6
+ /Users/terryli/eon/exness-data-preprocess/README.md:112:- **Column Definitions**: See [`schema.py`](src/exness_data_preprocess/schema.py) - Single source of truth
7
+ /Users/terryli/eon/exness-data-preprocess/README.md:113:- **Comprehensive Reference**: See [`DATABASE_SCHEMA.md`](docs/DATABASE_SCHEMA.md) - Query examples and usage patterns
8
+ /Users/terryli/eon/exness-data-preprocess/README.md:401:- Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md)
9
+ /Users/terryli/eon/exness-data-preprocess/README.md:409:- SSoT: [`docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
10
+ /Users/terryli/eon/exness-data-preprocess/README.md:410:- Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)
11
+ /Users/terryli/eon/exness-data-preprocess/README.md:417:- SSoT: [`docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
12
+ /Users/terryli/eon/exness-data-preprocess/README.md:419:**Release Notes**: See [`CHANGELOG.md`](CHANGELOG.md) for complete v0.5.0 details
13
+ /Users/terryli/eon/exness-data-preprocess/README.md:485:**[📚 Complete Documentation Hub](docs/README.md)** - Organized guide from beginner to advanced (72+ documents)
14
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:7:**Full Documentation**: [`README.md`](README.md) - Installation, usage, API reference
15
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:15:- **[README.md](README.md)** - Installation, API reference, usage examples
16
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:16:- **[examples/basic_usage.py](examples/basic_usage.py)** - Download, query, coverage operations
17
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:17:- **[examples/batch_processing.py](examples/batch_processing.py)** - Multi-instrument parallel processing
18
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:21:- **[docs/README.md](docs/README.md)** - Architecture, planning, research findings
19
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:22:- **[docs/MODULE_ARCHITECTURE.md](docs/MODULE_ARCHITECTURE.md)** - Complete module documentation with SLOs (v1.7.0)
20
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:23:- **[docs/DATABASE_SCHEMA.md](docs/DATABASE_SCHEMA.md)** - Complete database schema with self-documentation
21
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:24:- **[docs/RESEARCH_PATTERNS.md](docs/RESEARCH_PATTERNS.md)** - Research lifecycle and tool selection (v1.0.0)
22
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:25:- **[docs/UNIFIED_DUCKDB_PLAN_v2.md](docs/UNIFIED_DUCKDB_PLAN_v2.md)** - v2.0.0 architecture specification
23
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:26:- **[docs/EXNESS_DATA_SOURCES.md](docs/EXNESS_DATA_SOURCES.md)** - Data source variants and URLs
24
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:27:- **[Makefile](Makefile)** - Module introspection commands (module-stats, module-complexity, module-deps)
25
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:31:- **[docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)** - SSoT plan v2.0.0 (2.2x speedup)
26
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:32:- **[docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)** - SSoT plan v2.0.0 (complete coverage)
27
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:33:- **[docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md](docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md)** - Phase 1 validation
28
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:34:- **[docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)** - Phase 2 validation
29
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:40:- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines
30
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:55:**Complete Specification**: [`docs/UNIFIED_DUCKDB_PLAN_v2.md`](docs/UNIFIED_DUCKDB_PLAN_v2.md)
31
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:76:**Complete Details**: [`docs/MODULE_ARCHITECTURE.md`](docs/MODULE_ARCHITECTURE.md)
32
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:83: - SSoT: [`docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md)
33
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:89: - SSoT: [`docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
34
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:90: - Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)
35
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:96: - SSoT: [`docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
36
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:109:**Complete Schema**: [`docs/DATABASE_SCHEMA.md`](docs/DATABASE_SCHEMA.md)
37
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:118:**Complete Guide**: [`docs/EXNESS_DATA_SOURCES.md`](docs/EXNESS_DATA_SOURCES.md)
38
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:128:**Complete Specification**: [`docs/RESEARCH_PATTERNS.md`](docs/RESEARCH_PATTERNS.md)
39
+ /Users/terryli/eon/exness-data-preprocess/CLAUDE.md:196:**Complete Development Guide**: [`README.md`](README.md) (Installation section)
40
+ /Users/terryli/eon/exness-data-preprocess/tests/README.md:30:- **New**: Phase7 13-column (v1.2.0) OHLC - See [`../src/exness_data_preprocess/schema.py`](../src/exness_data_preprocess/schema.py)
41
+ /Users/terryli/eon/exness-data-preprocess/docs/EXNESS_DATA_SOURCES.md:310:**Full Specification**: [`docs/research/eurusd-zero-spread-deviations/data/plan/phase7_bid_ohlc_construction_v1.1.0.md`](research/eurusd-zero-spread-deviations/data/plan/phase7_bid_ohlc_construction_v1.1.0.md)
42
+ /Users/terryli/eon/exness-data-preprocess/docs/EXNESS_DATA_SOURCES.md:386:- **Phase7 Methodology**: [`docs/research/eurusd-zero-spread-deviations/01-methodology.md`](research/eurusd-zero-spread-deviations/01-methodology.md)
43
+ /Users/terryli/eon/exness-data-preprocess/docs/EXNESS_DATA_SOURCES.md:387:- **Zero-Spread Research**: [`docs/research/eurusd-zero-spread-deviations/README.md`](research/eurusd-zero-spread-deviations/README.md)
44
+ /Users/terryli/eon/exness-data-preprocess/docs/EXNESS_DATA_SOURCES.md:391:- **Current Processor**: [`src/exness_data_preprocess/processor.py`](../src/exness_data_preprocess/processor.py) (needs refactoring)
45
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:5:**Related**: [`README.md`](../README.md) - Architecture overview
46
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:43:- See [`docs/validation/ARCHITECTURE_AUDIT_2025-10-17.md`](validation/ARCHITECTURE_AUDIT_2025-10-17.md) for complete audit findings
47
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:964:See [`Makefile`](../Makefile) for implementation.
48
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1076:- **[README.md](../README.md)** - User-facing API reference
49
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1077:- **[docs/README.md](README.md)** - Documentation hub
50
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1078:- **[docs/DATABASE_SCHEMA.md](DATABASE_SCHEMA.md)** - Complete database schema
51
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1079:- **[docs/UNIFIED_DUCKDB_PLAN_v2.md](UNIFIED_DUCKDB_PLAN_v2.md)** - v2.0.0 architecture specification
52
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1080:- **[Makefile](../Makefile)** - Module introspection commands
53
+ /Users/terryli/eon/exness-data-preprocess/docs/MODULE_ARCHITECTURE.md:1082:- **[docs/validation/ARCHITECTURE_AUDIT_2025-10-17.md](validation/ARCHITECTURE_AUDIT_2025-10-17.md)** - Complete audit findings and corrections
54
+ /Users/terryli/eon/exness-data-preprocess/docs/DATABASE_SCHEMA.md:244:**Column Definitions**: See [`../src/exness_data_preprocess/schema.py`](../src/exness_data_preprocess/schema.py) for complete column definitions with types and descriptions.
55
+ /Users/terryli/eon/exness-data-preprocess/docs/DATABASE_SCHEMA.md:258:**Architecture**: Exchange Registry Pattern (v1.6.0) - Session columns dynamically generated from centralized EXCHANGES dict in [`exchanges.py`](../src/exness_data_preprocess/exchanges.py)
56
+
57
+ ... and 91 more (showing first 50)
58
+
59
+ 📝 Fix: Convert relative paths to repo-relative paths starting with /
60
+ WRONG: [Link](../docs/foo.md)
61
+ WRONG: [Link](docs/foo.md)
62
+ RIGHT: [Link](/docs/foo.md)
@@ -1,3 +1,10 @@
1
+ # [0.8.0](https://github.com/terrylica/exness-data-preprocess/compare/v0.7.2...v0.8.0) (2025-12-10)
2
+
3
+
4
+ ### Features
5
+
6
+ * add ClickHouse backend for cloud deployment ([c9b51a3](https://github.com/terrylica/exness-data-preprocess/commit/c9b51a3b374eea74375cc86afdd8cb9391fe73e8))
7
+
1
8
  # Changelog
2
9
 
3
10
  All notable changes to exness-data-preprocess will be documented in this file.
@@ -5,6 +12,37 @@ All notable changes to exness-data-preprocess will be documented in this file.
5
12
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
13
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
14
 
15
+ ### 💅 Code Style
16
+
17
+ - Format markdown files with prettier Standardized formatting for CHANGELOG.md.
18
+
19
+ ### 📚 Documentation
20
+
21
+ - Move test plan to docs/plans/ - Move tests/archive/E2E_TESTING_PLAN_v1.0.0.md -> docs/plans/ - Remove empty tests/archive/ directory - Consistent with docs/ organization strategy Impact: Planning docs consolidated in docs/plans/ Risk: Low (internal doc, no external references)
22
+
23
+ - Archive release notes to docs/releases/ - Move RELEASE_NOTES.md, RELEASE_NOTES_SHORT.md -> docs/releases/ - No references in README.md, CONTRIBUTING.md, or CLAUDE.md - GitHub Releases is SSoT for release information Impact: -2 root files, cleaner project root Risk: Low (generated files, no external references)
24
+
25
+ - Remove redundant DOCUMENTATION.md - Remove DOCUMENTATION.md (content duplicates docs/README.md) - Update README.md link to point to docs/README.md - Both files serve as navigation hubs with identical purpose Impact: -1 root file, single documentation entry point Risk: Low (historical CHANGELOG references preserved, README updated)
26
+
27
+ - Organize phase plans into docs/phases/ - Move PHASE2*.yaml, PHASE3*.yaml, PHASE4\*.yaml -> docs/phases/ - Update 4 references in CLAUDE.md - Consolidate SSoT planning files in dedicated subdirectory Impact: -3 docs/ root files, improved organization Risk: Low (all references updated, git mv preserves history)
28
+
29
+ - Move GitHub/PyPI setup to docs/setup/ - Move GITHUB_PYPI_SETUP.md -> docs/setup/ - No active references in README.md or CONTRIBUTING.md - Historical CHANGELOG references preserved Impact: -1 root file, infrastructure docs consolidated Risk: Low (no external links, CHANGELOG preserved)
30
+
31
+ - Update repository refactoring SSoT to v2.0.0 - Mark plan as Completed - Record 3 implementation discoveries - Document actual execution metrics (6 commits, ~25 minutes) - Track impact: 50% clutter reduction (30 -> 15 items) Findings: - README.md had active reference to DOCUMENTATION.md (updated) - Phase YAML files referenced in 7 locations (all updated) - GITHUB_PYPI_SETUP.md only in historical CHANGELOG (safe move) Zero regressions: All references updated, git history preserved
32
+
33
+ - Archive obsolete implementation-plan.yaml (2024-11-24) - Move implementation-plan.yaml -> archive/implementation-plan-2024-11-24.yaml - Remove references from docs/README.md - File showed 24 tests (obsolete, current: 48 tests) - Status: completed (no longer active planning doc) Impact: Cleaner docs/ root (-1 file) Risk: Low (archived with timestamp for historical reference)
34
+
35
+ - Remove outdated planning-index.yaml - Remove planning-index.yaml (last updated 2024-11-24) - Remove entire 'Implementation Plans' section from docs/README.md - Index referenced archived implementation-plan.yaml - Research plans have own README files (no central index needed) Impact: -1 docs/ root file, -1 obsolete section in docs/README.md Risk: None (outdated index with no active purpose)
36
+
37
+ - Update refactoring SSoT plans to completion status - REPOSITORY_REFACTORING_PLAN.yaml: v2.0.0 -> v3.0.0 - PRIORITY3_CLEANUP_PLAN.yaml: v1.0.0 -> v2.0.0 (Completed) Combined Priority 1-3 Impact: - Root MD files: 10 -> 4 (-60%) - docs/ root files: 12 -> 8 (-33%) - Total clutter: 30 -> 12 items (-60%) Total: 11 commits, ~40 minutes, zero regressions
38
+
39
+ ### 🧰 Maintenance
40
+
41
+ - Untrack lychee cache files - Remove .lychee-results.json, .lychee-results.txt, .lycheecache from tracking - Files remain gitignored via .gitignore rules - Add REPOSITORY_REFACTORING_PLAN.yaml SSoT (v1.0.0) Impact: Cleaner git status, prevent cache pollution Risk: None (cache files, no external references)
42
+
43
+ - Remove redundant AGENTS.md developer guidelines - Content duplicates CONTRIBUTING.md - Misleading name (not AI agent configuration) - No active references found Impact: -1 root file, cleaner project root Risk: None (zero references, content preserved in CONTRIBUTING.md)
44
+
45
+ - Remove redundant AUTHORS.md - Git log is SSoT for contributor history - pyproject.toml defines author (Eon Labs) and maintainer (Terry Li) - No active references found Impact: -1 root file Risk: None (contributor info preserved in pyproject.toml and git log)
8
46
 
9
47
  ### 💅 Code Style
10
48
 
@@ -28,8 +28,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
28
28
 
29
29
  ### Optimization Plans (v1.7.0)
30
30
 
31
- - **[docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml](docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)** - SSoT plan v2.0.0 (2.2x speedup)
32
- - **[docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml](docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)** - SSoT plan v2.0.0 (complete coverage)
31
+ - **[docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)** - SSoT plan v2.0.0 (2.2x speedup)
32
+ - **[docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)** - SSoT plan v2.0.0 (complete coverage)
33
33
  - **[docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md](docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md)** - Phase 1 validation
34
34
  - **[docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)** - Phase 2 validation
35
35
 
@@ -56,7 +56,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
56
56
 
57
57
  ### Module Pattern (v1.7.0)
58
58
 
59
- - **Facade orchestrator** (processor.py) coordinating 7 specialized modules
59
+ - **Facade orchestrator** (processor.py) coordinating 6 module instances + 1 static utility
60
60
  - **Separation of concerns** with single-responsibility modules
61
61
  - **SLO-based design** (Availability, Correctness, Observability, Maintainability)
62
62
  - **Off-the-shelf libraries** (httpx, pandas, DuckDB, exchange_calendars)
@@ -86,14 +86,14 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
86
86
  - Pre-compute trading minutes, vectorized .isin() lookup
87
87
  - Measured: 5.99s → 2.69s for 302K bars across 10 exchanges
88
88
  - Combined Phase 1+2: **~16x total speedup** (8.05s → 0.50s)
89
- - SSoT: [`docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
89
+ - SSoT: [`docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
90
90
  - Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)
91
91
 
92
92
  - **SQL Gap Detection** (Phase 3): Complete coverage + 46% LOC reduction
93
93
  - SQL EXCEPT query detects ALL gaps (internal + edges)
94
94
  - Bug fix: Now detects internal gaps missed by Python MIN/MAX
95
95
  - Measured: 41 → 42 gaps detected (spike test validation)
96
- - SSoT: [`docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
96
+ - SSoT: [`docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
97
97
 
98
98
  **Pattern**: Spike test first (validate theory) → Implement → Iterative SSoT plan updates
99
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exness-data-preprocess
3
- Version: 0.7.1
3
+ Version: 0.8.0
4
4
  Summary: Professional Exness forex tick data preprocessing with optimal compression (Parquet Zstd-22) and DuckDB OHLC generation. Provides efficient storage (9% smaller than ZIP) with lossless precision and direct queryability.
5
5
  Project-URL: Homepage, https://github.com/terrylica/exness-data-preprocess
6
6
  Project-URL: Documentation, https://github.com/terrylica/exness-data-preprocess#readme
@@ -11,7 +11,6 @@ Project-URL: Changelog, https://github.com/terrylica/exness-data-preprocess/blob
11
11
  Author-email: Eon Labs <terry@eonlabs.com>
12
12
  Maintainer-email: Terry Li <terry@eonlabs.com>
13
13
  License: MIT
14
- License-File: AUTHORS.md
15
14
  License-File: LICENSE
16
15
  Keywords: backtesting,compression,data-engineering,duckdb,efficient-storage,eurusd,exness,financial-data,forex,forex-data,lossless,microstructure,ohlc,pandas,parquet,preprocessing,pyarrow,quantitative-finance,queryable,tick-data,time-series,zstd
17
16
  Classifier: Development Status :: 3 - Alpha
@@ -20,15 +19,14 @@ Classifier: Intended Audience :: Financial and Insurance Industry
20
19
  Classifier: License :: OSI Approved :: MIT License
21
20
  Classifier: Operating System :: OS Independent
22
21
  Classifier: Programming Language :: Python :: 3
23
- Classifier: Programming Language :: Python :: 3.9
24
- Classifier: Programming Language :: Python :: 3.10
25
22
  Classifier: Programming Language :: Python :: 3.11
26
23
  Classifier: Programming Language :: Python :: 3.12
27
24
  Classifier: Programming Language :: Python :: 3.13
28
25
  Classifier: Topic :: Office/Business :: Financial :: Investment
29
26
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
30
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
- Requires-Python: >=3.9
28
+ Requires-Python: >=3.11
29
+ Requires-Dist: clickhouse-connect>=0.7.0
32
30
  Requires-Dist: duckdb>=0.9.0
33
31
  Requires-Dist: exchange-calendars>=4.5.6
34
32
  Requires-Dist: httpx>=0.25.0
@@ -456,7 +454,7 @@ Data is sourced from Exness's public tick data repository:
456
454
  - Vectorized approach: 2.69s (302K bars, 10 exchanges)
457
455
  - Combined Phase 1+2: ~16x total speedup (8.05s → 0.50s)
458
456
  - Implementation: Pre-compute trading minutes, vectorized `.isin()` lookup
459
- - SSoT: [`docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
457
+ - SSoT: [`docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
460
458
  - Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)
461
459
 
462
460
  **SQL Gap Detection** - Complete coverage with 46% code reduction:
@@ -464,7 +462,7 @@ Data is sourced from Exness's public tick data repository:
464
462
  - Bug fix: Python approach missed internal gaps (41 detected vs 42 actual)
465
463
  - SQL EXCEPT operator detects ALL gaps (before + within + after existing data)
466
464
  - Code reduced from 62 lines to 34 lines (46% reduction)
467
- - SSoT: [`docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
465
+ - SSoT: [`docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
468
466
 
469
467
  **Release Notes**: See [`CHANGELOG.md`](CHANGELOG.md) for complete v0.5.0 details
470
468
 
@@ -532,7 +530,7 @@ Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
532
530
 
533
531
  ## Additional Documentation
534
532
 
535
- **[📚 Complete Documentation Hub](DOCUMENTATION.md)** - Organized guide from beginner to advanced (72+ documents)
533
+ **[📚 Complete Documentation Hub](docs/README.md)** - Organized guide from beginner to advanced (72+ documents)
536
534
 
537
535
  - **Basic Usage Examples**: See `examples/basic_usage.py`
538
536
  - **Batch Processing**: See `examples/batch_processing.py`
@@ -406,7 +406,7 @@ Data is sourced from Exness's public tick data repository:
406
406
  - Vectorized approach: 2.69s (302K bars, 10 exchanges)
407
407
  - Combined Phase 1+2: ~16x total speedup (8.05s → 0.50s)
408
408
  - Implementation: Pre-compute trading minutes, vectorized `.isin()` lookup
409
- - SSoT: [`docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
409
+ - SSoT: [`docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml`](docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml)
410
410
  - Validation: [`docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md`](docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md)
411
411
 
412
412
  **SQL Gap Detection** - Complete coverage with 46% code reduction:
@@ -414,7 +414,7 @@ Data is sourced from Exness's public tick data repository:
414
414
  - Bug fix: Python approach missed internal gaps (41 detected vs 42 actual)
415
415
  - SQL EXCEPT operator detects ALL gaps (before + within + after existing data)
416
416
  - Code reduced from 62 lines to 34 lines (46% reduction)
417
- - SSoT: [`docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
417
+ - SSoT: [`docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml`](docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml)
418
418
 
419
419
  **Release Notes**: See [`CHANGELOG.md`](CHANGELOG.md) for complete v0.5.0 details
420
420
 
@@ -482,7 +482,7 @@ Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
482
482
 
483
483
  ## Additional Documentation
484
484
 
485
- **[📚 Complete Documentation Hub](DOCUMENTATION.md)** - Organized guide from beginner to advanced (72+ documents)
485
+ **[📚 Complete Documentation Hub](docs/README.md)** - Organized guide from beginner to advanced (72+ documents)
486
486
 
487
487
  - **Basic Usage Examples**: See `examples/basic_usage.py`
488
488
  - **Batch Processing**: See `examples/batch_processing.py`
@@ -26,7 +26,7 @@
26
26
  - Bug fix: Now detects internal gaps missed by Python MIN/MAX
27
27
  - All optimizations: Backward compatible (no API changes)
28
28
  - Validation: All 48 tests pass, spike tests validate measured results
29
- - SSoT Plans: PHASE2_SESSION_VECTORIZATION_PLAN.yaml, PHASE3_SQL_GAP_DETECTION_PLAN.yaml
29
+ - SSoT Plans: phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml, phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml
30
30
 
31
31
  ### v1.3.1 (2025-10-17) - Documentation Accuracy Update
32
32
 
@@ -0,0 +1,386 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Priority 3 Repository Cleanup Plan
4
+ version: 2.0.0
5
+ description: |
6
+ Single Source of Truth for Priority 3 optional cleanup (deeper file review).
7
+
8
+ Intent: Remove obsolete and redundant files after thorough audit.
9
+ Constraint: Must verify no active references before removal.
10
+
11
+ Scope:
12
+ - Remove developer guideline duplicates (AGENTS.md)
13
+ - Remove redundant contributor tracking (AUTHORS.md)
14
+ - Archive or remove obsolete planning files (implementation-plan.yaml, planning-index.yaml)
15
+ - Preserve cliff configs (serve different audiences)
16
+
17
+ Status: Completed
18
+
19
+ contact:
20
+ name: exness-data-preprocess
21
+ url: https://github.com/terrylica/exness-data-preprocess
22
+
23
+ paths:
24
+ /audit:
25
+ summary: File audit findings
26
+
27
+ components:
28
+ schemas:
29
+ SLOs:
30
+ type: object
31
+ required:
32
+ - availability
33
+ - correctness
34
+ - observability
35
+ - maintainability
36
+ properties:
37
+ availability:
38
+ type: string
39
+ description: |
40
+ No active functionality depends on removed files.
41
+ Documentation references updated before removal.
42
+ Git history preserved for removed files.
43
+ example: "100% - Only remove files with zero active dependencies"
44
+
45
+ correctness:
46
+ type: string
47
+ description: |
48
+ Verify no references via grep before removal.
49
+ Update docs/README.md links atomically.
50
+ Preserve git history with git rm (not system rm).
51
+ Raise on unexpected references.
52
+ example: "Atomic reference updates, git rm for history"
53
+
54
+ observability:
55
+ type: string
56
+ description: |
57
+ Document rationale for each removal decision.
58
+ Track removed files in SSoT plan.
59
+ Conventional commit messages.
60
+ example: "Documented rationale, conventional commits"
61
+
62
+ maintainability:
63
+ type: string
64
+ description: |
65
+ Use git rm (native operation, not custom scripts).
66
+ SSoT plan tracks all decisions.
67
+ No promotional language in documentation.
68
+ example: "Git native operations, factual documentation"
69
+
70
+ AuditFindings:
71
+ type: object
72
+ description: File-by-file audit results
73
+ properties:
74
+ agents_md:
75
+ type: object
76
+ properties:
77
+ file:
78
+ type: string
79
+ example: "AGENTS.md"
80
+ size:
81
+ type: string
82
+ example: "25 lines"
83
+ content:
84
+ type: string
85
+ example: "Developer guidelines (build, test, coding style, commits, data handling)"
86
+ redundancy:
87
+ type: string
88
+ example: "Duplicates CONTRIBUTING.md content"
89
+ references:
90
+ type: integer
91
+ example: 0
92
+ description: "No active references found via grep"
93
+ decision:
94
+ type: string
95
+ enum: [remove, keep, archive]
96
+ example: "remove"
97
+ rationale:
98
+ type: string
99
+ example: "Content duplicates CONTRIBUTING.md, no references, misleading name (not AI agent config)"
100
+
101
+ authors_md:
102
+ type: object
103
+ properties:
104
+ file:
105
+ type: string
106
+ example: "AUTHORS.md"
107
+ size:
108
+ type: string
109
+ example: "25 lines"
110
+ content:
111
+ type: string
112
+ example: "Terry Li (author), Eon Labs (organization), acknowledgments"
113
+ redundancy:
114
+ type: string
115
+ example: "Duplicates pyproject.toml author/maintainer fields and git log"
116
+ git_contributors:
117
+ type: array
118
+ items:
119
+ type: string
120
+ example: ["terrylica <terry@eonlabs.com>"]
121
+ pyproject_info:
122
+ type: object
123
+ properties:
124
+ authors:
125
+ type: array
126
+ items:
127
+ type: string
128
+ example: ["Eon Labs <terry@eonlabs.com>"]
129
+ maintainers:
130
+ type: array
131
+ items:
132
+ type: string
133
+ example: ["Terry Li <terry@eonlabs.com>"]
134
+ references:
135
+ type: integer
136
+ example: 0
137
+ decision:
138
+ type: string
139
+ enum: [remove, keep, archive]
140
+ example: "remove"
141
+ rationale:
142
+ type: string
143
+ example: "Git log and pyproject.toml are SSoT for contributor info, no references"
144
+
145
+ cliff_release_notes_toml:
146
+ type: object
147
+ properties:
148
+ file:
149
+ type: string
150
+ example: "cliff-release-notes.toml"
151
+ size:
152
+ type: string
153
+ example: "132 lines"
154
+ purpose:
155
+ type: string
156
+ example: "GitHub release notes generation (user-friendly, skips docs/chore/test)"
157
+ comparison:
158
+ type: object
159
+ properties:
160
+ cliff_toml:
161
+ type: string
162
+ example: "145 lines - CHANGELOG.md generation (detailed, includes all commits)"
163
+ difference:
164
+ type: string
165
+ example: "Different audiences: releases (users) vs changelog (developers)"
166
+ decision:
167
+ type: string
168
+ enum: [remove, keep, merge]
169
+ example: "keep"
170
+ rationale:
171
+ type: string
172
+ example: "Serves different audience (GitHub release users vs CHANGELOG.md readers)"
173
+
174
+ implementation_plan_yaml:
175
+ type: object
176
+ properties:
177
+ file:
178
+ type: string
179
+ example: "docs/implementation-plan.yaml"
180
+ size:
181
+ type: string
182
+ example: "37 lines"
183
+ content:
184
+ type: string
185
+ example: "Pytest execution plan from 2024-11-24"
186
+ status:
187
+ type: string
188
+ example: "completed (shows 24 tests passed, current: 48 tests)"
189
+ references:
190
+ type: array
191
+ items:
192
+ type: string
193
+ example:
194
+ - "docs/README.md (1 reference)"
195
+ - "docs/planning-index.yaml (1 reference)"
196
+ - "docs/plans/DOCUMENTATION_AUDIT_2025-10-15.md (2 references)"
197
+ decision:
198
+ type: string
199
+ enum: [remove, keep, archive]
200
+ example: "archive"
201
+ rationale:
202
+ type: string
203
+ example: "Obsolete (6 months old, 24 vs 48 tests). Archive to docs/archive/ and update references."
204
+
205
+ planning_index_yaml:
206
+ type: object
207
+ properties:
208
+ file:
209
+ type: string
210
+ example: "docs/planning-index.yaml"
211
+ size:
212
+ type: string
213
+ example: "33 lines"
214
+ content:
215
+ type: string
216
+ example: "Index of planning documents (last updated 2024-11-24)"
217
+ status:
218
+ type: string
219
+ example: "Points to research plans and implementation-plan.yaml"
220
+ references:
221
+ type: array
222
+ items:
223
+ type: string
224
+ example:
225
+ - "docs/README.md (1 reference)"
226
+ - "docs/plans/DOCUMENTATION_AUDIT_2025-10-15.md (2 references)"
227
+ decision:
228
+ type: string
229
+ enum: [remove, keep, update]
230
+ example: "remove"
231
+ rationale:
232
+ type: string
233
+ example: "Outdated index (6 months), references obsolete implementation-plan.yaml. Research plans have own README files."
234
+
235
+ RemovalActions:
236
+ type: object
237
+ description: Concrete removal steps
238
+ properties:
239
+ action_remove_agents_md:
240
+ type: object
241
+ properties:
242
+ file:
243
+ type: string
244
+ example: "AGENTS.md"
245
+ command:
246
+ type: string
247
+ example: "git rm AGENTS.md"
248
+ references_to_update:
249
+ type: array
250
+ items:
251
+ type: string
252
+ example: []
253
+ commit_message:
254
+ type: string
255
+ example: "chore: remove redundant AGENTS.md developer guidelines"
256
+ risk:
257
+ type: string
258
+ example: "None - no references, content duplicates CONTRIBUTING.md"
259
+
260
+ action_remove_authors_md:
261
+ type: object
262
+ properties:
263
+ file:
264
+ type: string
265
+ example: "AUTHORS.md"
266
+ command:
267
+ type: string
268
+ example: "git rm AUTHORS.md"
269
+ references_to_update:
270
+ type: array
271
+ items:
272
+ type: string
273
+ example: []
274
+ commit_message:
275
+ type: string
276
+ example: "chore: remove redundant AUTHORS.md"
277
+ risk:
278
+ type: string
279
+ example: "None - pyproject.toml and git log are SSoT"
280
+
281
+ action_archive_implementation_plan:
282
+ type: object
283
+ properties:
284
+ source:
285
+ type: string
286
+ example: "docs/implementation-plan.yaml"
287
+ destination:
288
+ type: string
289
+ example: "docs/archive/implementation-plan-2024-11-24.yaml"
290
+ commands:
291
+ type: array
292
+ items:
293
+ type: string
294
+ example:
295
+ - "git mv docs/implementation-plan.yaml docs/archive/implementation-plan-2024-11-24.yaml"
296
+ references_to_update:
297
+ type: array
298
+ items:
299
+ type: string
300
+ example:
301
+ - "docs/README.md (remove reference or update to archive location)"
302
+ - "docs/planning-index.yaml (remove if deleting this file)"
303
+ commit_message:
304
+ type: string
305
+ example: "docs: archive obsolete implementation-plan.yaml (2024-11-24)"
306
+ risk:
307
+ type: string
308
+ example: "Low - referenced in docs/README.md, must update"
309
+
310
+ action_remove_planning_index:
311
+ type: object
312
+ properties:
313
+ file:
314
+ type: string
315
+ example: "docs/planning-index.yaml"
316
+ command:
317
+ type: string
318
+ example: "git rm docs/planning-index.yaml"
319
+ references_to_update:
320
+ type: array
321
+ items:
322
+ type: string
323
+ example:
324
+ - "docs/README.md (remove reference)"
325
+ commit_message:
326
+ type: string
327
+ example: "docs: remove outdated planning-index.yaml"
328
+ risk:
329
+ type: string
330
+ example: "Medium - referenced in docs/README.md, must update"
331
+
332
+ DiscoveredNuances:
333
+ type: object
334
+ description: Implementation learnings
335
+ properties:
336
+ version:
337
+ type: string
338
+ example: "1.0.0"
339
+ discoveries:
340
+ type: array
341
+ items:
342
+ type: object
343
+ properties:
344
+ timestamp:
345
+ type: string
346
+ format: date-time
347
+ finding:
348
+ type: string
349
+ impact:
350
+ type: string
351
+ example: []
352
+
353
+ x-implementation-findings:
354
+ version: "2.0.0"
355
+ status: "Completed"
356
+ notes: |
357
+ Implementation: 2025-10-28
358
+ Estimated time: ~15 minutes
359
+ Actual time: ~15 minutes
360
+
361
+ Files audited: 5
362
+ - AGENTS.md -> removed (369bea2)
363
+ - AUTHORS.md -> removed (3f23eaa)
364
+ - cliff-release-notes.toml -> kept (serves different audience than cliff.toml)
365
+ - docs/implementation-plan.yaml -> archived (4b3219b)
366
+ - docs/planning-index.yaml -> removed (bddfb98)
367
+
368
+ Actions executed: 4 commits
369
+ - Remove AGENTS.md (25 lines, duplicated CONTRIBUTING.md)
370
+ - Remove AUTHORS.md (25 lines, duplicated pyproject.toml + git log)
371
+ - Archive implementation-plan.yaml to archive/implementation-plan-2024-11-24.yaml
372
+ - Remove planning-index.yaml and entire section from docs/README.md
373
+
374
+ References updated:
375
+ - docs/README.md (removed "Implementation Plans" section with 2 references)
376
+
377
+ Impact:
378
+ - Root directory: 6 -> 4 MD files (-33%)
379
+ - docs/ root: 10 -> 8 files (-20%)
380
+ - Combined with Priority 1-2: 60% total clutter reduction
381
+
382
+ Validation:
383
+ - Zero references to removed files
384
+ - Git history preserved with git rm
385
+ - Conventional commit messages
386
+ - All 48 tests still passing