gapless-crypto-data 4.0.0__tar.gz → 4.0.2__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.
- gapless_crypto_data-4.0.2/.github/workflows/publish.yml +83 -0
- gapless_crypto_data-4.0.2/.github/workflows/release.yml +130 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.gitignore +14 -3
- gapless_crypto_data-4.0.2/.releaserc.json +73 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/CHANGELOG.md +17 -50
- gapless_crypto_data-4.0.2/CLAUDE.md +70 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/DOCUMENTATION.md +10 -109
- gapless_crypto_data-4.0.2/Earthfile +130 -0
- gapless_crypto_data-4.0.2/PKG-INFO +217 -0
- gapless_crypto_data-4.0.2/README.md +180 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/cliff-release-notes.toml +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/cliff.toml +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +55 -132
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/README.md +0 -10
- gapless_crypto_data-4.0.0/docs/sdk-quality-standards.yaml → gapless_crypto_data-4.0.2/docs/SDK_QUALITY_STANDARDS.yaml +8 -6
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/SSOT_DOCUMENTATION_ARCHITECTURE.yaml +2 -2
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/architecture/DATA_FORMAT.md +5 -5
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/architecture/OVERVIEW.md +11 -11
- gapless_crypto_data-4.0.2/docs/architecture/decisions/0001-repository-split-clickhouse.md +102 -0
- gapless_crypto_data-4.0.2/docs/architecture/decisions/0002-lychee-link-validation.md +200 -0
- gapless_crypto_data-4.0.2/docs/architecture/decisions/0003-repository-housekeeping.md +117 -0
- gapless_crypto_data-4.0.2/docs/architecture/decisions/0004-yaml-audit-redundancy-removal.md +114 -0
- gapless_crypto_data-4.0.2/docs/architecture/decisions/0005-earthly-release-pipeline.md +101 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/development/CLI_MIGRATION_GUIDE.md +7 -7
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/development/COMMANDS.md +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/development/SETUP.md +4 -4
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/guides/DATA_COLLECTION.md +5 -5
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/guides/python-api.md +6 -6
- gapless_crypto_data-4.0.2/docs/plan/0001-v4.0.1-release/plan.md +199 -0
- gapless_crypto_data-4.0.2/docs/plan/0002-lychee-link-validation/plan.md +427 -0
- gapless_crypto_data-4.0.2/docs/plan/0003-repository-housekeeping/plan.md +384 -0
- gapless_crypto_data-4.0.2/docs/plan/0004-yaml-audit-redundancy-removal/plan.md +277 -0
- gapless_crypto_data-4.0.2/docs/plan/0005-earthly-release-pipeline/plan.md +269 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/validation/OVERVIEW.md +6 -6
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/validation/QUERY_PATTERNS.md +2 -2
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/validation/STORAGE.md +2 -2
- gapless_crypto_data-4.0.2/lychee.toml +17 -0
- gapless_crypto_data-4.0.2/package.json +27 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/pyproject.toml +17 -16
- gapless_crypto_data-4.0.2/scripts/publish-to-pypi.sh +152 -0
- gapless_crypto_data-4.0.2/scripts/test-pushover.sh +59 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/__init__.py +8 -7
- gapless_crypto_data-4.0.2/src/gapless_crypto_data/cli.py +625 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.csv +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.metadata.json +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.csv +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.metadata.json +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.csv +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.metadata.json +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.csv +1 -1
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.metadata.json +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/validation/storage.py +3 -3
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_api_edge_cases.py +1 -1
- gapless_crypto_data-4.0.2/tests/test_cli.py +409 -0
- gapless_crypto_data-4.0.2/tests/test_cli_integration.py +446 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_package.py +23 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/uv.lock +504 -81
- gapless_crypto_data-4.0.0/.cz.toml +0 -11
- gapless_crypto_data-4.0.0/.env +0 -7
- gapless_crypto_data-4.0.0/.github/workflows/ci.yml +0 -51
- gapless_crypto_data-4.0.0/.github/workflows/publish.yml +0 -104
- gapless_crypto_data-4.0.0/.github/workflows/release.yml +0 -56
- gapless_crypto_data-4.0.0/.lychee-results-verify.txt +0 -56
- gapless_crypto_data-4.0.0/.releaserc.json +0 -117
- gapless_crypto_data-4.0.0/AGENTS.md +0 -43
- gapless_crypto_data-4.0.0/CLAUDE.md +0 -81
- gapless_crypto_data-4.0.0/CONFORMITY_AUDIT_REPORT.md +0 -223
- gapless_crypto_data-4.0.0/PKG-INFO +0 -1221
- gapless_crypto_data-4.0.0/README.md +0 -1185
- gapless_crypto_data-4.0.0/RELEASE_NOTES.md +0 -13
- gapless_crypto_data-4.0.0/RELEASE_NOTES_SHORT.md +0 -17
- gapless_crypto_data-4.0.0/UV_BUILD_SUCCESS.md +0 -105
- gapless_crypto_data-4.0.0/dead_code_audit_plan.md +0 -120
- gapless_crypto_data-4.0.0/deployment/systemd/gapless-crypto-collector.service +0 -111
- gapless_crypto_data-4.0.0/docker-compose.yml +0 -82
- gapless_crypto_data-4.0.0/docs/CLICKHOUSE_MIGRATION.md +0 -414
- gapless_crypto_data-4.0.0/docs/DOCUMENTATION_INVENTORY.yaml +0 -508
- gapless_crypto_data-4.0.0/docs/MIGRATION_v3_to_v4.md +0 -551
- gapless_crypto_data-4.0.0/docs/api/mempool-pressure-probe.yaml +0 -338
- gapless_crypto_data-4.0.0/docs/api/v3.0.0-stabilization-plan.yaml +0 -425
- gapless_crypto_data-4.0.0/docs/api/v3.1.0-test-quality-plan.yaml +0 -201
- gapless_crypto_data-4.0.0/docs/architecture/SAMPLE_DATA_POLICY.md +0 -117
- gapless_crypto_data-4.0.0/docs/architecture/cross-package-feature-integration.yaml +0 -781
- gapless_crypto_data-4.0.0/docs/audit/mempool-probe-adversarial-audit.yaml +0 -721
- gapless_crypto_data-4.0.0/docs/decisions/0001-questdb-single-source-truth.md +0 -226
- gapless_crypto_data-4.0.0/docs/decisions/0002-e2e-validation-approach.md +0 -263
- gapless_crypto_data-4.0.0/docs/decisions/0003-questdb-schema-robustness-validation.md +0 -792
- gapless_crypto_data-4.0.0/docs/decisions/0004-futures-support-implementation.md +0 -268
- gapless_crypto_data-4.0.0/docs/decisions/0005-clickhouse-migration.md +0 -330
- gapless_crypto_data-4.0.0/docs/decisions/0006-v4-audit-remediation.md +0 -308
- gapless_crypto_data-4.0.0/docs/decisions/0007-release-validation-remediation.md +0 -317
- gapless_crypto_data-4.0.0/docs/decisions/0008-clickhouse-local-visualization-toolchain.md +0 -408
- gapless_crypto_data-4.0.0/docs/decisions/0009-port-reconfiguration-ch-ui-enablement.md +0 -291
- gapless_crypto_data-4.0.0/docs/decisions/0010-optional-development-tooling-chdig.md +0 -211
- gapless_crypto_data-4.0.0/docs/decisions/0011-pypi-package-fork-clickhouse.md +0 -278
- gapless_crypto_data-4.0.0/docs/decisions/0012-v4-documentation-alignment.md +0 -102
- gapless_crypto_data-4.0.0/docs/deployment/linux-docker-setup.md +0 -611
- gapless_crypto_data-4.0.0/docs/deployment/linux-native-setup.md +0 -587
- gapless_crypto_data-4.0.0/docs/deployment/macos-colima-setup.md +0 -432
- gapless_crypto_data-4.0.0/docs/deployment/python-uv-setup.md +0 -636
- gapless_crypto_data-4.0.0/docs/development/CHDIG_GUIDE.md +0 -451
- gapless_crypto_data-4.0.0/docs/development/CLICKHOUSE_CLIENT_GUIDE.md +0 -485
- gapless_crypto_data-4.0.0/docs/development/CLICKHOUSE_LOCAL_GUIDE.md +0 -433
- gapless_crypto_data-4.0.0/docs/development/CLICKHOUSE_PLAY_GUIDE.md +0 -225
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.0.yaml +0 -141
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.1.yaml +0 -160
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.2.yaml +0 -178
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.3.yaml +0 -208
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.4.yaml +0 -262
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.0.5.yaml +0 -302
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.1.0.yaml +0 -385
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.1.1.yaml +0 -296
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.10.0.yaml +0 -254
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.11.0.yaml +0 -278
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.12.0.yaml +0 -325
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.14.0.yaml +0 -381
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.15.0.yaml +0 -507
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.15.1.yaml +0 -142
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.2.0.yaml +0 -75
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.3.0.yaml +0 -139
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.4.0.yaml +0 -142
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.5.0.yaml +0 -228
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.6.0.yaml +0 -164
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.6.1.yaml +0 -284
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.7.0.yaml +0 -157
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.8.0.yaml +0 -405
- gapless_crypto_data-4.0.0/docs/milestones/MILESTONE_v2.9.0.yaml +0 -396
- gapless_crypto_data-4.0.0/docs/plan/0001-questdb-refactor/plan.yaml +0 -446
- gapless_crypto_data-4.0.0/docs/plan/0002-e2e-validation/plan.yaml +0 -418
- gapless_crypto_data-4.0.0/docs/plan/0003-questdb-schema-robustness/plan.yaml +0 -505
- gapless_crypto_data-4.0.0/docs/plan/0004-futures-support/plan.yaml +0 -409
- gapless_crypto_data-4.0.0/docs/plan/0005-clickhouse-migration/plan.yaml +0 -402
- gapless_crypto_data-4.0.0/docs/plan/0006-v4-audit-remediation/plan.yaml +0 -275
- gapless_crypto_data-4.0.0/docs/plan/0007-release-validation-remediation/plan.yaml +0 -243
- gapless_crypto_data-4.0.0/docs/plan/0008-clickhouse-local-visualization-toolchain/VALIDATION_REPORT.md +0 -470
- gapless_crypto_data-4.0.0/docs/plan/0008-clickhouse-local-visualization-toolchain/plan.yaml +0 -372
- gapless_crypto_data-4.0.0/docs/plan/0009-port-reconfiguration-ch-ui-enablement/plan.yaml +0 -248
- gapless_crypto_data-4.0.0/docs/plan/0010-optional-development-tooling-chdig/plan.yaml +0 -210
- gapless_crypto_data-4.0.0/docs/plan/0011-pypi-package-fork-clickhouse/plan.md +0 -661
- gapless_crypto_data-4.0.0/docs/plan/0012-v4-documentation-alignment/plan.md +0 -222
- gapless_crypto_data-4.0.0/docs/research/questdb-docker-image-analysis.md +0 -560
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/EXPLORATION_REPORT.md +0 -352
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/README.md +0 -142
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/discovered_futures_symbols.json +0 -6045
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/futures_discovery.py +0 -249
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/historical_probe.py +0 -293
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/output/binance_futures_um_BTCUSDT-1m_2024-01-15.csv +0 -1441
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/output/binance_futures_um_BTCUSDT-1m_2024-01-15.csv.metadata.json +0 -13
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/output/binance_futures_um_ETHUSDT-1m_2024-01-15.csv +0 -1441
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/output/binance_futures_um_ETHUSDT-1m_2024-01-15.csv.metadata.json +0 -13
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/output/integration_analysis.json +0 -32
- gapless_crypto_data-4.0.0/scratch/vision-futures-explorer/vision_futures_collector.py +0 -304
- gapless_crypto_data-4.0.0/scripts/publish-to-pypi.sh +0 -167
- gapless_crypto_data-4.0.0/scripts/validate-clickhouse-tools.sh +0 -161
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/clickhouse/__init__.py +0 -17
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/clickhouse/config.py +0 -115
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/clickhouse/connection.py +0 -239
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/clickhouse/schema.sql +0 -89
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/clickhouse_query.py +0 -643
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/collectors/clickhouse_bulk_loader.py +0 -440
- gapless_crypto_data-4.0.0/src/gapless_crypto_data/collectors/csv_format_detector.py +0 -123
- gapless_crypto_data-4.0.0/tmp/adr-plan-code-sync-verification.md +0 -402
- gapless_crypto_data-4.0.0/tmp/clickhouse-local-viz-research/ide-integrations/IDE_INTEGRATIONS_REPORT.md +0 -1149
- gapless_crypto_data-4.0.0/tmp/clickhouse_futures_validation.py +0 -176
- gapless_crypto_data-4.0.0/tmp/clickhouse_futures_validation_results.txt +0 -136
- gapless_crypto_data-4.0.0/tmp/clickhouse_quick_validation.py +0 -112
- gapless_crypto_data-4.0.0/tmp/clickhouse_validation.py +0 -199
- gapless_crypto_data-4.0.0/tmp/clickhouse_validation_results.txt +0 -146
- gapless_crypto_data-4.0.0/tmp/comprehensive_validation.py +0 -444
- gapless_crypto_data-4.0.0/tmp/comprehensive_validation_report.txt +0 -123
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/METADATA.txt +0 -1175
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/SUMMARY.txt +0 -73
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/VALIDATION_REPORT.md +0 -343
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/dependencies-check.txt +0 -1
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/test_import.py +0 -61
- gapless_crypto_data-4.0.0/tmp/full-validation/build-distribution/wheel-contents.txt +0 -101
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/REPORT.md +0 -220
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/mypy-analysis.md +0 -176
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/mypy-check.txt +0 -141
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/pre-commit.txt +0 -97
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/ruff-check.txt +0 -84
- gapless_crypto_data-4.0.0/tmp/full-validation/code-quality/ruff-format.txt +0 -84
- gapless_crypto_data-4.0.0/tmp/full-validation/documentation/validation-report.md +0 -345
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/GIT_HISTORY_VALIDATION_REPORT.md +0 -443
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/adr-plan-sync-analysis.txt +0 -109
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/commit-details.txt +0 -316
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/commit-subjects.txt +0 -15
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/conventional-commits-analysis.txt +0 -161
- gapless_crypto_data-4.0.0/tmp/full-validation/git-history/semantic-release-analysis.txt +0 -158
- gapless_crypto_data-4.0.0/tmp/full-validation/test-coverage/SUMMARY.txt +0 -50
- gapless_crypto_data-4.0.0/tmp/full-validation/test-coverage/VALIDATION_REPORT.md +0 -264
- gapless_crypto_data-4.0.0/tmp/full-validation/test-coverage/failure-analysis.txt +0 -80
- gapless_crypto_data-4.0.0/tmp/full-validation/test-coverage/pytest-output.txt +0 -791
- gapless_crypto_data-4.0.0/tmp/full-validation/test-coverage/test-inventory.txt +0 -127
- gapless_crypto_data-4.0.0/tmp/pypi-package-split/agent1-publishing/INVESTIGATION_REPORT.md +0 -416
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.claude/settings.local.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.gitattributes +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.pre-commit-config.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.python-version +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/.sessions/.gitignore +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/AUTHORS.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/CONTRIBUTING.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/LICENSE +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/MANIFEST.in +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/PROBE_USAGE_EXAMPLE.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/SSOT_PLANNING_SUMMARY.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/api/dual-parameter-enhancement.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/api/gapless-dataframe-enhancement.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/api/pruning-parquet-implementation.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/api/quick-start.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/audit/comprehensive-audit-findings.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/audit/comprehensive-audit-plan.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/development/PUBLISHING.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/01-collection-pipeline.mmd +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/02-gap-filling.mmd +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/03-multi-symbol-collection.mmd +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/04-download-caching.mmd +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/05-validation-flow.mmd +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/diagrams/README.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/guides/pypi-documentation.md +0 -0
- {gapless_crypto_data-4.0.0/docs → gapless_crypto_data-4.0.2/docs/milestones/archive}/MILESTONE_v3.0.0.yaml +0 -0
- {gapless_crypto_data-4.0.0/docs → gapless_crypto_data-4.0.2/docs/milestones/archive}/MILESTONE_v3.1.0.yaml +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/docs/release-notes.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/README.md +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/advanced_api_examples.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/basic_data_collection.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/cli_usage_examples.sh +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/complete_workflow.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/gap_filling_example.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/safe_data_collection.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/examples/simple_api_examples.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/llms.txt +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/__probe__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/api.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/collectors/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/collectors/httpx_downloader.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/collectors/hybrid_url_generator.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/exceptions.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/py.typed +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/resume/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/utils/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/utils/error_handling.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/utils/etag_cache.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/utils/timeframe_constants.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/utils/timestamp_format_analyzer.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/validation/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/validation/csv_validator.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/src/gapless_crypto_data/validation/models.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/__init__.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/conftest.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.csv +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0_gapped.csv.bak +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_1s_1d_gap_filling.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_atomic_operations.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_binance_collector.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_binance_collector_advanced.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_concurrent_download.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_error_handling.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_etag_cache.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_gap_filler.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_gapless_validation_1d_2018_present.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_integration.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_monthly_to_daily_fallback.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_output_dir_dataframe_fix.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_probe_module.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_simple_api.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_timeframe_constants.py +0 -0
- {gapless_crypto_data-4.0.0 → gapless_crypto_data-4.0.2}/tests/test_validation_storage.py +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Publish to PyPI on GitHub Release
|
|
2
|
+
# ADR-0005: No tests/linting - run locally before release
|
|
3
|
+
#
|
|
4
|
+
# Triggered by: GitHub Release publish event
|
|
5
|
+
# Purpose: Build and publish Python package to PyPI with Sigstore signing
|
|
6
|
+
|
|
7
|
+
name: Publish to PyPI
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
release:
|
|
11
|
+
types: [published]
|
|
12
|
+
|
|
13
|
+
env:
|
|
14
|
+
UV_SYSTEM_PYTHON: 1
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
name: Build distribution packages
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: '3.12'
|
|
27
|
+
|
|
28
|
+
- name: Install UV
|
|
29
|
+
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
30
|
+
|
|
31
|
+
- name: Add UV to PATH
|
|
32
|
+
run: echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
33
|
+
|
|
34
|
+
- name: Build package
|
|
35
|
+
run: |
|
|
36
|
+
uv venv
|
|
37
|
+
source .venv/bin/activate
|
|
38
|
+
uv build
|
|
39
|
+
|
|
40
|
+
- name: Store distribution packages
|
|
41
|
+
uses: actions/upload-artifact@v4
|
|
42
|
+
with:
|
|
43
|
+
name: python-package-distributions
|
|
44
|
+
path: dist/
|
|
45
|
+
|
|
46
|
+
publish-to-pypi:
|
|
47
|
+
name: Publish to PyPI
|
|
48
|
+
needs: [build]
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
environment: pypi
|
|
51
|
+
permissions:
|
|
52
|
+
id-token: write
|
|
53
|
+
contents: read
|
|
54
|
+
steps:
|
|
55
|
+
- name: Download distributions
|
|
56
|
+
uses: actions/download-artifact@v4
|
|
57
|
+
with:
|
|
58
|
+
name: python-package-distributions
|
|
59
|
+
path: dist/
|
|
60
|
+
|
|
61
|
+
- name: Publish to PyPI
|
|
62
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
63
|
+
with:
|
|
64
|
+
verbose: true
|
|
65
|
+
|
|
66
|
+
sign-artifacts:
|
|
67
|
+
name: Sign with Sigstore
|
|
68
|
+
needs: [publish-to-pypi]
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
permissions:
|
|
71
|
+
id-token: write
|
|
72
|
+
contents: write
|
|
73
|
+
steps:
|
|
74
|
+
- name: Download distributions
|
|
75
|
+
uses: actions/download-artifact@v4
|
|
76
|
+
with:
|
|
77
|
+
name: python-package-distributions
|
|
78
|
+
path: dist/
|
|
79
|
+
|
|
80
|
+
- name: Sign with Sigstore
|
|
81
|
+
uses: sigstore/gh-action-sigstore-python@v3.0.1
|
|
82
|
+
with:
|
|
83
|
+
inputs: ./dist/*.tar.gz ./dist/*.whl
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Create GitHub Release on Tag Push
|
|
2
|
+
# ADR-0005: Earthly-based release validation with Pushover alerts
|
|
3
|
+
#
|
|
4
|
+
# Triggered by: Tag push (v*.*.*)
|
|
5
|
+
# Purpose: Create GitHub Release, run Earthly validation, send Pushover notification
|
|
6
|
+
#
|
|
7
|
+
# NOTE: This is a BACKUP workflow. Primary release method is local:
|
|
8
|
+
# npm run release # Uses semantic-release locally (faster, instant feedback)
|
|
9
|
+
|
|
10
|
+
name: Create Release
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
tags:
|
|
15
|
+
- 'v*.*.*'
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
release:
|
|
22
|
+
name: Create GitHub Release
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
outputs:
|
|
25
|
+
release_url: ${{ steps.create_release.outputs.url }}
|
|
26
|
+
version: ${{ steps.get_version.outputs.version }}
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout code
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
|
|
33
|
+
- name: Extract version from tag
|
|
34
|
+
id: get_version
|
|
35
|
+
run: |
|
|
36
|
+
VERSION=${GITHUB_REF#refs/tags/}
|
|
37
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
38
|
+
|
|
39
|
+
- name: Generate changelog
|
|
40
|
+
id: changelog
|
|
41
|
+
run: |
|
|
42
|
+
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
|
43
|
+
if [ -n "$PREV_TAG" ]; then
|
|
44
|
+
CHANGES=$(git log --pretty=format:"- %s (%h)" $PREV_TAG..HEAD)
|
|
45
|
+
else
|
|
46
|
+
CHANGES="- Initial release"
|
|
47
|
+
fi
|
|
48
|
+
echo "changes<<EOF" >> $GITHUB_OUTPUT
|
|
49
|
+
echo "$CHANGES" >> $GITHUB_OUTPUT
|
|
50
|
+
echo "EOF" >> $GITHUB_OUTPUT
|
|
51
|
+
|
|
52
|
+
- name: Create GitHub Release
|
|
53
|
+
id: create_release
|
|
54
|
+
uses: softprops/action-gh-release@v2
|
|
55
|
+
with:
|
|
56
|
+
tag_name: ${{ steps.get_version.outputs.version }}
|
|
57
|
+
name: Release ${{ steps.get_version.outputs.version }}
|
|
58
|
+
body: |
|
|
59
|
+
# Release ${{ steps.get_version.outputs.version }}
|
|
60
|
+
|
|
61
|
+
## Installation
|
|
62
|
+
```bash
|
|
63
|
+
pip install gapless-crypto-data==${{ steps.get_version.outputs.version }}
|
|
64
|
+
# or
|
|
65
|
+
uv add gapless-crypto-data==${{ steps.get_version.outputs.version }}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Changes
|
|
69
|
+
${{ steps.changelog.outputs.changes }}
|
|
70
|
+
|
|
71
|
+
## Links
|
|
72
|
+
- [PyPI Package](https://pypi.org/project/gapless-crypto-data/${{ steps.get_version.outputs.version }}/)
|
|
73
|
+
- [Documentation](https://github.com/terrylica/gapless-crypto-data#readme)
|
|
74
|
+
draft: false
|
|
75
|
+
prerelease: false
|
|
76
|
+
generate_release_notes: true
|
|
77
|
+
|
|
78
|
+
earthly-validate:
|
|
79
|
+
name: Earthly Release Validation
|
|
80
|
+
needs: [release]
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
steps:
|
|
83
|
+
- name: Checkout code
|
|
84
|
+
uses: actions/checkout@v4
|
|
85
|
+
|
|
86
|
+
- name: Setup Earthly
|
|
87
|
+
uses: earthly/actions-setup@v1
|
|
88
|
+
with:
|
|
89
|
+
version: v0.8.15
|
|
90
|
+
|
|
91
|
+
- name: Run Earthly build
|
|
92
|
+
run: earthly +build
|
|
93
|
+
|
|
94
|
+
- name: Generate release stats
|
|
95
|
+
run: |
|
|
96
|
+
earthly +release-stats \
|
|
97
|
+
--VERSION=${{ needs.release.outputs.version }} \
|
|
98
|
+
--RELEASE_URL=${{ needs.release.outputs.release_url }}
|
|
99
|
+
|
|
100
|
+
- name: Upload release stats
|
|
101
|
+
uses: actions/upload-artifact@v4
|
|
102
|
+
with:
|
|
103
|
+
name: release-stats
|
|
104
|
+
path: logs/release-stats.json
|
|
105
|
+
|
|
106
|
+
pushover-notify:
|
|
107
|
+
name: Send Pushover Notification
|
|
108
|
+
needs: [release, earthly-validate]
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
if: success()
|
|
111
|
+
steps:
|
|
112
|
+
- name: Send Pushover notification
|
|
113
|
+
env:
|
|
114
|
+
PUSHOVER_USER_KEY: ${{ secrets.PUSHOVER_USER_KEY }}
|
|
115
|
+
PUSHOVER_APP_TOKEN: ${{ secrets.PUSHOVER_APP_TOKEN }}
|
|
116
|
+
run: |
|
|
117
|
+
if [ -n "$PUSHOVER_USER_KEY" ] && [ -n "$PUSHOVER_APP_TOKEN" ]; then
|
|
118
|
+
curl -s \
|
|
119
|
+
--form-string "token=$PUSHOVER_APP_TOKEN" \
|
|
120
|
+
--form-string "user=$PUSHOVER_USER_KEY" \
|
|
121
|
+
--form-string "title=gapless-crypto-data Release" \
|
|
122
|
+
--form-string "message=Version ${{ needs.release.outputs.version }} released successfully" \
|
|
123
|
+
--form-string "url=${{ needs.release.outputs.release_url }}" \
|
|
124
|
+
--form-string "url_title=View Release" \
|
|
125
|
+
--form-string "priority=0" \
|
|
126
|
+
https://api.pushover.net/1/messages.json
|
|
127
|
+
echo "Pushover notification sent"
|
|
128
|
+
else
|
|
129
|
+
echo "Pushover credentials not configured, skipping notification"
|
|
130
|
+
fi
|
|
@@ -24,12 +24,23 @@ test-env/
|
|
|
24
24
|
coverage.json
|
|
25
25
|
htmlcov/
|
|
26
26
|
|
|
27
|
+
# Type checking and testing caches
|
|
28
|
+
.mypy_cache/
|
|
29
|
+
.pytest_cache/
|
|
30
|
+
|
|
27
31
|
# .Sessions folder - never delete
|
|
28
32
|
.sessions/
|
|
29
33
|
!.sessions/.gitignore
|
|
30
34
|
|
|
31
|
-
# Lychee link checker
|
|
35
|
+
# Lychee link checker output
|
|
32
36
|
.lycheecache
|
|
33
|
-
.lycheecache/
|
|
34
|
-
.lychee-results.json
|
|
35
37
|
.lychee-results.txt
|
|
38
|
+
.lychee-results.json
|
|
39
|
+
.lychee-results.md
|
|
40
|
+
|
|
41
|
+
# Node.js (semantic-release)
|
|
42
|
+
node_modules/
|
|
43
|
+
package-lock.json
|
|
44
|
+
|
|
45
|
+
# Earthly logs and artifacts
|
|
46
|
+
logs/
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/semantic-release.json",
|
|
3
|
+
"branches": ["main"],
|
|
4
|
+
"tagFormat": "v${version}",
|
|
5
|
+
"plugins": [
|
|
6
|
+
[
|
|
7
|
+
"@semantic-release/commit-analyzer",
|
|
8
|
+
{
|
|
9
|
+
"preset": "conventionalcommits",
|
|
10
|
+
"releaseRules": [
|
|
11
|
+
{ "type": "feat", "release": "minor" },
|
|
12
|
+
{ "type": "fix", "release": "patch" },
|
|
13
|
+
{ "type": "perf", "release": "patch" },
|
|
14
|
+
{ "type": "refactor", "release": "patch" },
|
|
15
|
+
{ "type": "docs", "release": false },
|
|
16
|
+
{ "type": "style", "release": false },
|
|
17
|
+
{ "type": "chore", "release": false },
|
|
18
|
+
{ "type": "test", "release": false },
|
|
19
|
+
{ "type": "ci", "release": false },
|
|
20
|
+
{ "breaking": true, "release": "major" }
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
"@semantic-release/release-notes-generator",
|
|
26
|
+
{
|
|
27
|
+
"preset": "conventionalcommits",
|
|
28
|
+
"presetConfig": {
|
|
29
|
+
"types": [
|
|
30
|
+
{ "type": "feat", "section": "Features" },
|
|
31
|
+
{ "type": "fix", "section": "Bug Fixes" },
|
|
32
|
+
{ "type": "perf", "section": "Performance" },
|
|
33
|
+
{ "type": "refactor", "section": "Refactoring" },
|
|
34
|
+
{ "type": "docs", "section": "Documentation", "hidden": true },
|
|
35
|
+
{ "type": "chore", "section": "Maintenance", "hidden": true }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
"@semantic-release/changelog",
|
|
42
|
+
{
|
|
43
|
+
"changelogFile": "CHANGELOG.md",
|
|
44
|
+
"changelogTitle": "# Changelog\n\nAll notable changes to gapless-crypto-data will be documented in this file."
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"@semantic-release/exec",
|
|
49
|
+
{
|
|
50
|
+
"prepareCmd": "sed -i.bak 's/^version = \".*\"/version = \"${nextRelease.version}\"/' pyproject.toml && rm -f pyproject.toml.bak",
|
|
51
|
+
"publishCmd": "echo 'Version ${nextRelease.version} prepared for release'"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"@semantic-release/git",
|
|
56
|
+
{
|
|
57
|
+
"assets": ["CHANGELOG.md", "pyproject.toml"],
|
|
58
|
+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
"@semantic-release/github",
|
|
63
|
+
{
|
|
64
|
+
"assets": [
|
|
65
|
+
{ "path": "dist/*.whl", "label": "Python Wheel" },
|
|
66
|
+
{ "path": "dist/*.tar.gz", "label": "Source Distribution" }
|
|
67
|
+
],
|
|
68
|
+
"successComment": false,
|
|
69
|
+
"failComment": false
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
]
|
|
73
|
+
}
|
|
@@ -5,63 +5,30 @@ All notable changes to gapless-crypto-data will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [4.0.
|
|
8
|
+
## [4.0.1] - 2025-01-22
|
|
9
9
|
|
|
10
10
|
### ⚠️ BREAKING CHANGES
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
- **cli**: CLI interface removed completely
|
|
13
|
+
- CLI entry point removed from package (no longer accessible via `gapless-crypto-data` command)
|
|
14
|
+
- All CLI functionality available through Python API
|
|
15
|
+
- See docs/development/CLI_MIGRATION_GUIDE.md for migration examples
|
|
16
|
+
- Python API remains unchanged and fully backward compatible
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
#### Upgrading from v3.x
|
|
17
|
-
|
|
18
|
-
**IMPORTANT**: Clean uninstall required to avoid import errors.
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
# Remove v3.x completely
|
|
22
|
-
pip uninstall gapless-crypto-data
|
|
23
|
-
rm -f ~/.local/bin/gapless-crypto-data # Remove old CLI entry point
|
|
24
|
-
|
|
25
|
-
# Install v4.0.0
|
|
26
|
-
pip install gapless-crypto-data==4.0.0
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**Migration**: See `docs/development/CLI_MIGRATION_GUIDE.md` for Python API equivalents.
|
|
30
|
-
|
|
31
|
-
**Why the breaking change?**
|
|
32
|
-
|
|
33
|
-
- CLI represented <5% of usage based on download statistics
|
|
34
|
-
- Python API provides superior programmatic control and composability
|
|
35
|
-
- Maintenance burden of dual interfaces slowed feature development
|
|
36
|
-
- Industry trend: pandas, scikit-learn, requests all dropped CLIs for cleaner APIs
|
|
37
|
-
|
|
38
|
-
### Added
|
|
39
|
-
|
|
40
|
-
- **ClickHouse database support**: Primary storage backend with 10x performance vs file-based workflows
|
|
41
|
-
- **Enhanced Python API**: Comprehensive examples and simplified function signatures
|
|
42
|
-
- **11-column microstructure format**: Order flow and liquidity metrics (trade_count, taker_buy_base_volume, etc.)
|
|
43
|
-
- **Multi-agent validation workflows**: Parallel E2E validation and performance profiling methodologies
|
|
44
|
-
- **Semantic versioning automation**: Conventional commits → automated changelog → GitHub releases
|
|
45
|
-
|
|
46
|
-
### Removed
|
|
47
|
-
|
|
48
|
-
- **CLI interface**: Completely removed (see breaking changes above)
|
|
49
|
-
- **QuestDB database support**: ClickHouse is now the sole database backend
|
|
50
|
-
- **Legacy interval parameter**: Use `timeframe` parameter instead (5-year deprecation period ended)
|
|
51
|
-
|
|
52
|
-
### Fixed
|
|
18
|
+
### 📚 Documentation
|
|
53
19
|
|
|
54
|
-
- **
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
- **Test assertions**: Version checks updated to expect 4.0.0
|
|
20
|
+
- **cli**: Update all CLI references to reflect v4.0.0 removal
|
|
21
|
+
- Updated README.md with removal notice and migration guidance
|
|
22
|
+
- Updated CLI_MIGRATION_GUIDE.md to past tense
|
|
23
|
+
- Added clear pointer to Python API examples
|
|
59
24
|
|
|
60
|
-
###
|
|
25
|
+
### 📝 Notes
|
|
61
26
|
|
|
62
|
-
- **
|
|
63
|
-
-
|
|
64
|
-
-
|
|
27
|
+
- **Version History**: v4.0.0 was published in error with ClickHouse references and has been yanked from PyPI
|
|
28
|
+
- v4.0.0 contained database-first implementation not appropriate for this repository
|
|
29
|
+
- ClickHouse implementation moved to separate repository (gapless-crypto-clickhouse)
|
|
30
|
+
- v4.0.1 is the correct file-based v4.x release
|
|
31
|
+
- See docs/architecture/decisions/0001-repository-split-clickhouse.md for details
|
|
65
32
|
|
|
66
33
|
## [3.3.0] - 2025-10-18
|
|
67
34
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
Gapless Crypto Data is a high-performance cryptocurrency data collection tool providing authentic Binance data with zero-gap guarantee. 22x faster than API-only approaches via Binance Public Data Repository (CloudFront CDN).
|
|
8
|
+
|
|
9
|
+
**Core Capability**: Collect complete historical OHLCV data with microstructure metrics (11-column format) for 13 timeframes (1s to 1d) across 400+ trading pairs.
|
|
10
|
+
|
|
11
|
+
## Quick Navigation
|
|
12
|
+
|
|
13
|
+
### Architecture
|
|
14
|
+
|
|
15
|
+
- [Architecture Overview](./docs/architecture/OVERVIEW.md) - Core components, data flow, SLOs
|
|
16
|
+
- [Data Format Specification](./docs/architecture/DATA_FORMAT.md) - 11-column microstructure format
|
|
17
|
+
|
|
18
|
+
### Usage Guides
|
|
19
|
+
|
|
20
|
+
- [Data Collection Guide](./docs/guides/DATA_COLLECTION.md) - CLI usage, dual data source strategy, troubleshooting
|
|
21
|
+
- [Python API Reference](./docs/guides/python-api.md) - Function-based and class-based APIs, complete examples
|
|
22
|
+
|
|
23
|
+
### Validation System
|
|
24
|
+
|
|
25
|
+
- [Validation Overview](./docs/validation/OVERVIEW.md) - 5-layer validation pipeline, DuckDB persistence
|
|
26
|
+
- [ValidationStorage Specification](./docs/validation/STORAGE.md) - Database schema, API methods
|
|
27
|
+
- [AI Agent Query Patterns](./docs/validation/QUERY_PATTERNS.md) - Common patterns for validation analysis
|
|
28
|
+
|
|
29
|
+
### Development
|
|
30
|
+
|
|
31
|
+
- [Development Setup](./docs/development/SETUP.md) - Environment setup, IDE configuration, troubleshooting
|
|
32
|
+
- [Development Commands](./docs/development/COMMANDS.md) - Testing, code quality, build, CI/CD
|
|
33
|
+
- [CLI Migration Guide](./docs/development/CLI_MIGRATION_GUIDE.md) - v2.x to v3.x migration
|
|
34
|
+
- [Publishing Guide](./docs/development/PUBLISHING.md) - PyPI publishing workflow
|
|
35
|
+
|
|
36
|
+
## SDK Quality Standards
|
|
37
|
+
|
|
38
|
+
**Primary Use Case**: Programmatic API consumption (`import gapless_crypto_data`) by downstream packages and AI coding agents
|
|
39
|
+
|
|
40
|
+
**Specification**: [`docs/SDK_QUALITY_STANDARDS.yaml`](./docs/SDK_QUALITY_STANDARDS.yaml) - Machine-readable standards
|
|
41
|
+
|
|
42
|
+
**Key Abstractions**:
|
|
43
|
+
|
|
44
|
+
- **Type Safety**: PEP 561 compliance via py.typed marker
|
|
45
|
+
- **AI Discoverability**: **probe** module, llms.txt
|
|
46
|
+
- **Structured Exceptions**: Machine-parseable error context
|
|
47
|
+
- **Coverage Strategy**: SDK entry points (85%+) > Core engines (70%+)
|
|
48
|
+
|
|
49
|
+
## Network Architecture
|
|
50
|
+
|
|
51
|
+
**CRITICAL - Empirically Validated (2025-01-19)**: DO NOT modify network implementation
|
|
52
|
+
|
|
53
|
+
- **Data Source**: AWS S3 + CloudFront CDN (400+ edge locations, 99.99% SLA)
|
|
54
|
+
- **Performance**: urllib is 2x faster than httpx for CDN downloads
|
|
55
|
+
- **NO connection pooling** (CloudFront uses different edge servers per request)
|
|
56
|
+
- **NO retry logic** (CloudFront handles failover, 0% failure rate in production)
|
|
57
|
+
|
|
58
|
+
**Single improvement worth making**: ETag-based caching for bandwidth optimization
|
|
59
|
+
|
|
60
|
+
## Authentication
|
|
61
|
+
|
|
62
|
+
**No authentication required** for primary data collection (public Binance data repository). Gap filling uses public Binance API endpoints (rate-limited but no auth required).
|
|
63
|
+
|
|
64
|
+
## Current Architecture
|
|
65
|
+
|
|
66
|
+
**Version**: v4.0.1 (validation v3.3.0+ with DuckDB persistence)
|
|
67
|
+
|
|
68
|
+
**Canonical Reference**: `docs/CURRENT_ARCHITECTURE_STATUS.yaml`
|
|
69
|
+
|
|
70
|
+
**Production-Ready**: Core collection, intelligent resume (JSON checkpointing), CSV and Parquet output formats, zero-gap guarantee via dual-source validation
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Complete documentation for gapless-crypto-data - ultra-fast cryptocurrency data collection from Binance's public repository with zero-gap guarantee.
|
|
4
4
|
|
|
5
|
-
**Version**: 4.0.
|
|
5
|
+
**Version**: 4.0.1 | **Type**: Cryptocurrency Data Collection | **Compatibility**: UV-native Python SDK
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -143,7 +143,7 @@ Complete documentation for gapless-crypto-data - ultra-fast cryptocurrency data
|
|
|
143
143
|
|
|
144
144
|
### SDK Quality Standards
|
|
145
145
|
|
|
146
|
-
- [docs/
|
|
146
|
+
- [docs/SDK_QUALITY_STANDARDS.yaml](docs/SDK_QUALITY_STANDARDS.yaml) - SDK quality specification
|
|
147
147
|
- Type safety standards (PEP 561)
|
|
148
148
|
- Exception hierarchy
|
|
149
149
|
- AI discoverability
|
|
@@ -164,16 +164,6 @@ Complete documentation for gapless-crypto-data - ultra-fast cryptocurrency data
|
|
|
164
164
|
- Parquet format implementation
|
|
165
165
|
- Dependency pruning strategy
|
|
166
166
|
|
|
167
|
-
### Stabilization Plans
|
|
168
|
-
|
|
169
|
-
- [docs/api/v3.0.0-stabilization-plan.yaml](docs/api/v3.0.0-stabilization-plan.yaml) - v3.0.0 stabilization
|
|
170
|
-
- Production readiness roadmap
|
|
171
|
-
- API stability guarantees
|
|
172
|
-
|
|
173
|
-
- [docs/api/v3.1.0-test-quality-plan.yaml](docs/api/v3.1.0-test-quality-plan.yaml) - Test quality plan
|
|
174
|
-
- Test coverage strategy
|
|
175
|
-
- Quality metrics targets
|
|
176
|
-
|
|
177
167
|
---
|
|
178
168
|
|
|
179
169
|
## Development
|
|
@@ -206,32 +196,16 @@ Complete documentation for gapless-crypto-data - ultra-fast cryptocurrency data
|
|
|
206
196
|
- Environment variables
|
|
207
197
|
- Security configuration
|
|
208
198
|
|
|
209
|
-
###
|
|
210
|
-
|
|
211
|
-
- [UV_BUILD_SUCCESS.md](UV_BUILD_SUCCESS.md) - UV build success
|
|
212
|
-
- UV build system validation
|
|
213
|
-
- Build configuration
|
|
214
|
-
|
|
215
|
-
### Milestone Planning
|
|
199
|
+
### Archived Milestones
|
|
216
200
|
|
|
217
|
-
|
|
218
|
-
- Production stabilization goals
|
|
219
|
-
- Implementation timeline
|
|
201
|
+
Historical milestone documentation archived for reference:
|
|
220
202
|
|
|
221
|
-
- [docs/
|
|
222
|
-
-
|
|
223
|
-
-
|
|
203
|
+
- [docs/milestones/archive/](docs/milestones/archive/) - Archived v3.x milestones
|
|
204
|
+
- v3.0.0, v3.1.0 milestone specifications
|
|
205
|
+
- v2.x milestones removed (history preserved in git)
|
|
224
206
|
|
|
225
207
|
### Audit Documentation
|
|
226
208
|
|
|
227
|
-
- [CONFORMITY_AUDIT_REPORT.md](CONFORMITY_AUDIT_REPORT.md) - Conformity audit
|
|
228
|
-
- Code quality assessment
|
|
229
|
-
- Standards compliance
|
|
230
|
-
|
|
231
|
-
- [dead_code_audit_plan.md](dead_code_audit_plan.md) - Dead code audit
|
|
232
|
-
- Dead code detection strategy
|
|
233
|
-
- Cleanup plan
|
|
234
|
-
|
|
235
209
|
- [docs/audit/comprehensive-audit-plan.yaml](docs/audit/comprehensive-audit-plan.yaml) - Audit plan
|
|
236
210
|
- Comprehensive audit strategy
|
|
237
211
|
- Quality metrics
|
|
@@ -246,72 +220,9 @@ Complete documentation for gapless-crypto-data - ultra-fast cryptocurrency data
|
|
|
246
220
|
|
|
247
221
|
**Deep technical documentation and machine-readable specifications.**
|
|
248
222
|
|
|
249
|
-
### Historical Milestones
|
|
250
|
-
|
|
251
|
-
Complete version history with technical details, hard-learned lessons, and implementation rationale.
|
|
252
|
-
|
|
253
|
-
**v2.15.x Series** (Latest v2 Branch)
|
|
254
|
-
|
|
255
|
-
- [docs/milestones/MILESTONE_v2.15.1.yaml](docs/milestones/MILESTONE_v2.15.1.yaml) - Latest v2 series
|
|
256
|
-
- [docs/milestones/MILESTONE_v2.15.0.yaml](docs/milestones/MILESTONE_v2.15.0.yaml) - AI agent integration
|
|
257
|
-
|
|
258
|
-
**v2.14.x Series** (DataFrame Simplification)
|
|
259
|
-
|
|
260
|
-
- [docs/milestones/MILESTONE_v2.14.0.yaml](docs/milestones/MILESTONE_v2.14.0.yaml) - DataFrame simplification
|
|
261
|
-
|
|
262
|
-
**v2.12.x Series** (GaplessDataFrame)
|
|
263
|
-
|
|
264
|
-
- [docs/milestones/MILESTONE_v2.12.0.yaml](docs/milestones/MILESTONE_v2.12.0.yaml) - GaplessDataFrame implementation
|
|
265
|
-
|
|
266
|
-
**v2.11.x Series** (Datetime Enhancement)
|
|
267
|
-
|
|
268
|
-
- [docs/milestones/MILESTONE_v2.11.0.yaml](docs/milestones/MILESTONE_v2.11.0.yaml) - Datetime index enhancement
|
|
269
|
-
|
|
270
|
-
**v2.10.x Series** (Dependency Pruning)
|
|
271
|
-
|
|
272
|
-
- [docs/milestones/MILESTONE_v2.10.0.yaml](docs/milestones/MILESTONE_v2.10.0.yaml) - Dependency pruning & Parquet
|
|
273
|
-
|
|
274
|
-
**v2.9.x Series** (Performance Optimization)
|
|
275
|
-
|
|
276
|
-
- [docs/milestones/MILESTONE_v2.9.0.yaml](docs/milestones/MILESTONE_v2.9.0.yaml) - Performance optimization
|
|
223
|
+
### Historical Milestones
|
|
277
224
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
- [docs/milestones/MILESTONE_v2.8.0.yaml](docs/milestones/MILESTONE_v2.8.0.yaml) - Gap filling enhancement
|
|
281
|
-
|
|
282
|
-
**v2.7.x Series** (Quality Improvements)
|
|
283
|
-
|
|
284
|
-
- [docs/milestones/MILESTONE_v2.7.0.yaml](docs/milestones/MILESTONE_v2.7.0.yaml) - Quality improvements
|
|
285
|
-
|
|
286
|
-
**v2.6.x Series** (CLI Enhancement)
|
|
287
|
-
|
|
288
|
-
- [docs/milestones/MILESTONE_v2.6.1.yaml](docs/milestones/MILESTONE_v2.6.1.yaml) - Patch release
|
|
289
|
-
- [docs/milestones/MILESTONE_v2.6.0.yaml](docs/milestones/MILESTONE_v2.6.0.yaml) - CLI enhancement
|
|
290
|
-
|
|
291
|
-
**v2.5.x Series** (Validation & Checkpointing)
|
|
292
|
-
|
|
293
|
-
- [docs/milestones/MILESTONE_v2.5.0.yaml](docs/milestones/MILESTONE_v2.5.0.yaml) - Validation & checkpointing
|
|
294
|
-
|
|
295
|
-
**v2.4.x Series** (Gap Filling Integration)
|
|
296
|
-
|
|
297
|
-
- [docs/milestones/MILESTONE_v2.4.0.yaml](docs/milestones/MILESTONE_v2.4.0.yaml) - Gap filling integration
|
|
298
|
-
|
|
299
|
-
**v2.3.x Series** (Metadata Enhancement)
|
|
300
|
-
|
|
301
|
-
- [docs/milestones/MILESTONE_v2.3.0.yaml](docs/milestones/MILESTONE_v2.3.0.yaml) - Metadata enhancement
|
|
302
|
-
|
|
303
|
-
**v2.2.x Series** (Timestamp Format Support)
|
|
304
|
-
|
|
305
|
-
- [docs/milestones/MILESTONE_v2.2.0.yaml](docs/milestones/MILESTONE_v2.2.0.yaml) - Timestamp format support
|
|
306
|
-
|
|
307
|
-
**v2.1.x Series** (UTC Timezone Fix)
|
|
308
|
-
|
|
309
|
-
- [docs/milestones/MILESTONE_v2.1.0.yaml](docs/milestones/MILESTONE_v2.1.0.yaml) - UTC timezone fix
|
|
310
|
-
|
|
311
|
-
**v2.0.x Series** (Multi-Symbol Support)
|
|
312
|
-
|
|
313
|
-
- [docs/milestones/MILESTONE_v2.0.1.yaml](docs/milestones/MILESTONE_v2.0.1.yaml) - Patch release
|
|
314
|
-
- [docs/milestones/MILESTONE_v2.0.0.yaml](docs/milestones/MILESTONE_v2.0.0.yaml) - Multi-symbol support
|
|
225
|
+
v2.x milestone files have been removed (history preserved in git). See [CHANGELOG.md](CHANGELOG.md) for complete version history.
|
|
315
226
|
|
|
316
227
|
---
|
|
317
228
|
|
|
@@ -330,16 +241,6 @@ Complete version history with technical details, hard-learned lessons, and imple
|
|
|
330
241
|
- Documentation-specific changes
|
|
331
242
|
- Structural improvements
|
|
332
243
|
|
|
333
|
-
### Release Notes
|
|
334
|
-
|
|
335
|
-
- [RELEASE_NOTES.md](RELEASE_NOTES.md) - Detailed release notes
|
|
336
|
-
- Version-specific features
|
|
337
|
-
- Migration guides
|
|
338
|
-
|
|
339
|
-
- [RELEASE_NOTES_SHORT.md](RELEASE_NOTES_SHORT.md) - Short release notes
|
|
340
|
-
- Quick version summaries
|
|
341
|
-
- Key highlights only
|
|
342
|
-
|
|
343
244
|
---
|
|
344
245
|
|
|
345
246
|
## Documentation Statistics
|
|
@@ -387,4 +288,4 @@ Complete version history with technical details, hard-learned lessons, and imple
|
|
|
387
288
|
|
|
388
289
|
---
|
|
389
290
|
|
|
390
|
-
**Last Updated**: 2025-
|
|
291
|
+
**Last Updated**: 2025-11-24 (v4.0.1)
|