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.
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.cz.toml +1 -1
- exness_data_preprocess-0.8.0/.lint-relative-paths-results.txt +62 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CHANGELOG.md +38 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CLAUDE.md +5 -5
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/PKG-INFO +6 -8
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/README.md +3 -3
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/MODULE_ARCHITECTURE.md +1 -1
- exness_data_preprocess-0.8.0/docs/PRIORITY3_CLEANUP_PLAN.yaml +386 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/README.md +4 -13
- exness_data_preprocess-0.8.0/docs/REPOSITORY_REFACTORING_PLAN.yaml +375 -0
- exness_data_preprocess-0.8.0/docs/adr/2025-12-09-exness-clickhouse-migration.md +196 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/UNIFIED_DUCKDB_PLAN_v1.0.0_LEGACY.md +3 -3
- exness_data_preprocess-0.8.0/docs/design/2025-12-09-exness-clickhouse-migration/spec.md +310 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/RESEARCH_PATTERNS_CANONICALIZATION_2025-10-17.md +2 -2
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/HYBRID_SESSION_DETECTION_ANALYSIS.md +5 -5
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/02-mode-truncated-analysis.md +1 -13
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/03-hurdle-model-analysis.md +1 -5
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/README.md +3 -3
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/02-baseline-sep2024.md +5 -15
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/03-multiperiod-validation.md +7 -11
- {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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/README.md +1 -1
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/pyproject.toml +6 -7
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/__init__.py +27 -5
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_client.py +170 -0
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_gap_detector.py +245 -0
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_manager.py +384 -0
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_ohlc_generator.py +362 -0
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/clickhouse_query_engine.py +376 -0
- exness_data_preprocess-0.7.1/.lychee-results.json +0 -425
- exness_data_preprocess-0.7.1/.lychee-results.txt +0 -144
- exness_data_preprocess-0.7.1/AUTHORS.md +0 -25
- exness_data_preprocess-0.7.1/DOCUMENTATION.md +0 -296
- exness_data_preprocess-0.7.1/docs/planning-index.yaml +0 -32
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/ci.yml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.github/workflows/publish.yml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.gitignore +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.lycheecache +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/.pre-commit-config.yaml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/CONTRIBUTING.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/LICENSE +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/Makefile +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/cliff-release-notes.toml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/cliff.toml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/DATABASE_SCHEMA.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/EXNESS_DATA_SOURCES.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/RESEARCH_PATTERNS.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/TRADING_HOURS_RESEARCH.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/UNIFIED_DUCKDB_PLAN_v2.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/PYDANTIC_REFACTORING_PLAN_v0.2.0_COMPLETE.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/archive/PYDANTIC_REFACTORING_STATUS_v0.2.0_COMPLETE.md +0 -0
- /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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/optimization/OPTIMIZATION_OPPORTUNITIES_2025-10-18.md +0 -0
- {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE2_SESSION_VECTORIZATION_PLAN.yaml +0 -0
- {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE3_SQL_GAP_DETECTION_PLAN.yaml +0 -0
- {exness_data_preprocess-0.7.1/docs → exness_data_preprocess-0.8.0/docs/phases}/PHASE4_DRY_RUN_CONFIG_PLAN.yaml +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_AUDIT_2025-10-16_PASS2.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_VERIFICATION_CHECKLIST_2025-10-16.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/CLAUDE_MD_VERIFICATION_FINDINGS_2025-10-16.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_AUDIT_2025-10-15.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_AUDIT_PASS2_2025-10-15.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/DOCUMENTATION_BEST_PRACTICES_LINE_COUNTS.md +0 -0
- {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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/EXCHANGE_SESSION_AUDIT_2025-10-17.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/FUNCTIONALITY_VALIDATION_REPORT_2025-10-15.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/FUNCTIONALITY_VALIDATION_REPORT_2025-10-16.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/PHASE7_v1.5.0_REFACTORING_PLAN.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/PHASE7_v1.6.0_REFACTORING_PROGRESS.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/REFACTORING_CHECKLIST.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SCHEMA_v1.6.0_AUDIT_FINDINGS.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SCHEMA_v1.6.0_MIGRATION_GUIDE.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/plans/SESSION_2025-10-15_SUMMARY.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/releases}/RELEASE_NOTES.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/releases}/RELEASE_NOTES_SHORT.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/GAP_DETECTION_COMPARISON.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/GAP_DETECTION_SQL_APPROACH.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/README.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_all_compression_methods.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_delta_encoding_properly.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/compression-benchmarks/test_parquet_compression_methods.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/01-methodology.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/04-temporal-patterns.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/05-final-recommendations.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/scripts/reproduction_guide.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/concentration_curve.png +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/percentile_analysis.png +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/01-methodology.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/eurusd-zero-spread-deviations/scripts/reproduction_guide.md +0 -0
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/research/gap_detection_implementation_example.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0/docs/setup}/GITHUB_PYPI_SETUP.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/ARCHITECTURE_AUDIT_2025-10-17.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/ARCHITECTURE_EFFICIENCY_AUDIT_2025-10-18.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/DOCUMENTATION_SURVEY_v1.7.0.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/E2E_VALIDATION_RESULTS_v1.6.0.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/WEEKEND_GAP_VALIDATION_SUMMARY.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/docs/validation/WORKSPACE_SURVEY_2025-10-17.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/examples/basic_usage.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/examples/batch_processing.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/api.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/cli.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/config.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/database_manager.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/downloader.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/exchanges.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/gap_detector.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/models.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/ohlc_generator.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/processor.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/query_engine.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/schema.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/session_detector.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/src/exness_data_preprocess/tick_loader.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/README.md +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/__init__.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/conftest.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_basic.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_functional_regression.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_models.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_processor_pydantic.py +0 -0
- {exness_data_preprocess-0.7.1 → exness_data_preprocess-0.8.0}/tests/test_types.py +0 -0
|
@@ -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
|
|
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.
|
|
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.
|
|
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](
|
|
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](
|
|
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
|