gapless-crypto-data 2.5.0__tar.gz → 2.6.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.
- gapless_crypto_data-2.6.0/.gapless_checkpoints/progress_report_20250918_024058_d544b2de.json +36 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/progress_report_20250918_024100_6302c48d.json +37 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/progress_report_20250918_024101_b880e45d.json +43 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/progress_report_20250918_024104_8950cece.json +36 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/progress_report_20250918_024110_7356f614.json +36 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/session_20250918_024058_d544b2de.json +22 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/session_20250918_024100_6302c48d.json +23 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/session_20250918_024101_b880e45d.json +29 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/session_20250918_024104_8950cece.json +22 -0
- gapless_crypto_data-2.6.0/.gapless_checkpoints/session_20250918_024110_7356f614.json +22 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.github/workflows/publish.yml +3 -6
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/PKG-INFO +1 -1
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +14 -6
- gapless_crypto_data-2.6.0/docs/MILESTONE_v2.6.0.yaml +164 -0
- gapless_crypto_data-2.6.0/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +95 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/pyproject.toml +1 -1
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/__init__.py +1 -1
- gapless_crypto_data-2.6.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +3 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +2 -2
- gapless_crypto_data-2.6.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +3 -0
- gapless_crypto_data-2.6.0/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +3 -0
- gapless_crypto_data-2.6.0/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +3 -0
- gapless_crypto_data-2.6.0/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.csv +3 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/uv.lock +1 -1
- gapless_crypto_data-2.5.0/.claude/settings.local.json +0 -19
- gapless_crypto_data-2.5.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -35
- gapless_crypto_data-2.5.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -17
- gapless_crypto_data-2.5.0/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -35
- gapless_crypto_data-2.5.0/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -35
- gapless_crypto_data-2.5.0/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.csv +0 -55872
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/joblib_cache/.gitignore +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183058_36e7d2ec.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183100_7e130f98.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183101_515b4690.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183103_828c36f1.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183117_9d842ca2.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183118_35b71e32.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183120_e201f120.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183121_7aa0a4fd.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183841_63564a52.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183843_01458e87.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183844_30f0e3c0.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_183846_8c1e44b4.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_184500_9b6f812c.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_184502_ae48d84a.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_184503_b094245f.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_184505_665fb523.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_184510_fe5d92fa.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_185913_7e391e5f.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_185915_9eeeaea3.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_185917_315392bf.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_185918_82d9bb0d.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_190357_002f8cec.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_190358_be23058d.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_190359_c676ca87.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_190401_ccacb147.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/progress_report_20250917_190406_d23113c8.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183058_36e7d2ec.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183100_7e130f98.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183101_515b4690.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183103_828c36f1.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183117_9d842ca2.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183118_35b71e32.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183120_e201f120.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183121_7aa0a4fd.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183841_63564a52.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183843_01458e87.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183844_30f0e3c0.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_183846_8c1e44b4.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_184500_9b6f812c.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_184502_ae48d84a.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_184503_b094245f.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_184505_665fb523.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_184510_fe5d92fa.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_185913_7e391e5f.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_185915_9eeeaea3.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_185917_315392bf.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_185918_82d9bb0d.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_190357_002f8cec.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_190358_be23058d.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_190359_c676ca87.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_190401_ccacb147.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gapless_checkpoints/session_20250917_190406_d23113c8.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gitattributes +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.github/workflows/ci-cd.yml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.gitignore +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.pre-commit-config.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/.python-version +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/CHANGELOG.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/CLAUDE.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/LICENSE +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/README.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/RELEASE_NOTES.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/MILESTONE_v2.5.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/PUBLISHING.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.1.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.2.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.3.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.4.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.0.5.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.1.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.1.1.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.2.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.3.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/archive/MILESTONE_v2.4.0.yaml +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/README.md +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/basic_data_collection.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/cli_usage_examples.sh +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/complete_workflow.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/gap_filling_example.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/examples/safe_data_collection.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/cli.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/collectors/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/regression/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/regression/regression_detector.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/resume/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/streaming/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/streaming/memory_streaming.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/utils/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/src/gapless_crypto_data/utils/error_handling.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0_gapped.csv.bak +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/__init__.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_atomic_operations.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_binance_collector.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_cli.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_cli_integration.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_gap_filler.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_integration.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_output_dir_dataframe_fix.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_package.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_regression.py +0 -0
- {gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/tests/test_streaming.py +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"progress_summary": {
|
|
3
|
+
"session_id": "20250918_024058_d544b2de",
|
|
4
|
+
"completed_symbols": 2,
|
|
5
|
+
"symbols_in_progress": 0,
|
|
6
|
+
"total_datasets": 2,
|
|
7
|
+
"last_updated": "2025-09-18T02:40:59.566663",
|
|
8
|
+
"errors": 0
|
|
9
|
+
},
|
|
10
|
+
"detailed_progress": {
|
|
11
|
+
"session_id": "20250918_024058_d544b2de",
|
|
12
|
+
"created_at": "2025-09-18T02:40:58.193211",
|
|
13
|
+
"last_updated": "2025-09-18T02:40:59.566663",
|
|
14
|
+
"symbols_completed": [
|
|
15
|
+
"BTCUSDT",
|
|
16
|
+
"ETHUSDT"
|
|
17
|
+
],
|
|
18
|
+
"symbols_in_progress": {},
|
|
19
|
+
"total_datasets_collected": 2,
|
|
20
|
+
"collection_parameters": {
|
|
21
|
+
"start_date": "2024-01-01",
|
|
22
|
+
"end_date": "2024-01-01",
|
|
23
|
+
"output_dir": "/tmp/tmp9usf4gmq",
|
|
24
|
+
"timeframes": [
|
|
25
|
+
"1h"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"errors": [],
|
|
29
|
+
"current_symbol": "ETHUSDT",
|
|
30
|
+
"completed_symbol": "ETHUSDT"
|
|
31
|
+
},
|
|
32
|
+
"cache_info": {
|
|
33
|
+
"cache_dir": "/home/runner/work/gapless-crypto-data/gapless-crypto-data/.gapless_checkpoints",
|
|
34
|
+
"cache_size_mb": 0.04127788543701172
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"progress_summary": {
|
|
3
|
+
"session_id": "20250918_024100_6302c48d",
|
|
4
|
+
"completed_symbols": 3,
|
|
5
|
+
"symbols_in_progress": 0,
|
|
6
|
+
"total_datasets": 3,
|
|
7
|
+
"last_updated": "2025-09-18T02:41:01.478270",
|
|
8
|
+
"errors": 0
|
|
9
|
+
},
|
|
10
|
+
"detailed_progress": {
|
|
11
|
+
"session_id": "20250918_024100_6302c48d",
|
|
12
|
+
"created_at": "2025-09-18T02:41:00.044526",
|
|
13
|
+
"last_updated": "2025-09-18T02:41:01.478270",
|
|
14
|
+
"symbols_completed": [
|
|
15
|
+
"BTCUSDT",
|
|
16
|
+
"ETHUSDT",
|
|
17
|
+
"SOLUSDT"
|
|
18
|
+
],
|
|
19
|
+
"symbols_in_progress": {},
|
|
20
|
+
"total_datasets_collected": 3,
|
|
21
|
+
"collection_parameters": {
|
|
22
|
+
"start_date": "2024-01-01",
|
|
23
|
+
"end_date": "2024-01-01",
|
|
24
|
+
"output_dir": "/tmp/tmpsqk4fxvn",
|
|
25
|
+
"timeframes": [
|
|
26
|
+
"1h"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"errors": [],
|
|
30
|
+
"current_symbol": "SOLUSDT",
|
|
31
|
+
"completed_symbol": "SOLUSDT"
|
|
32
|
+
},
|
|
33
|
+
"cache_info": {
|
|
34
|
+
"cache_dir": "/home/runner/work/gapless-crypto-data/gapless-crypto-data/.gapless_checkpoints",
|
|
35
|
+
"cache_size_mb": 0.04270362854003906
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"progress_summary": {
|
|
3
|
+
"session_id": "20250918_024101_b880e45d",
|
|
4
|
+
"completed_symbols": 2,
|
|
5
|
+
"symbols_in_progress": 0,
|
|
6
|
+
"total_datasets": 2,
|
|
7
|
+
"last_updated": "2025-09-18T02:41:03.744405",
|
|
8
|
+
"errors": 1
|
|
9
|
+
},
|
|
10
|
+
"detailed_progress": {
|
|
11
|
+
"session_id": "20250918_024101_b880e45d",
|
|
12
|
+
"created_at": "2025-09-18T02:41:01.976849",
|
|
13
|
+
"last_updated": "2025-09-18T02:41:03.744405",
|
|
14
|
+
"symbols_completed": [
|
|
15
|
+
"BTCUSDT",
|
|
16
|
+
"ETHUSDT"
|
|
17
|
+
],
|
|
18
|
+
"symbols_in_progress": {},
|
|
19
|
+
"total_datasets_collected": 2,
|
|
20
|
+
"collection_parameters": {
|
|
21
|
+
"start_date": "2024-01-01",
|
|
22
|
+
"end_date": "2024-01-01",
|
|
23
|
+
"output_dir": "/tmp/tmphxjbqx85",
|
|
24
|
+
"timeframes": [
|
|
25
|
+
"1h"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"errors": [
|
|
29
|
+
{
|
|
30
|
+
"symbol": "INVALIDSYMBOL",
|
|
31
|
+
"error": "Collection returned no results",
|
|
32
|
+
"timestamp": "2025-09-18T02:41:03.264368"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"current_symbol": "ETHUSDT",
|
|
36
|
+
"completed_symbol": "ETHUSDT",
|
|
37
|
+
"failed_symbol": "INVALIDSYMBOL"
|
|
38
|
+
},
|
|
39
|
+
"cache_info": {
|
|
40
|
+
"cache_dir": "/home/runner/work/gapless-crypto-data/gapless-crypto-data/.gapless_checkpoints",
|
|
41
|
+
"cache_size_mb": 0.04430389404296875
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"progress_summary": {
|
|
3
|
+
"session_id": "20250918_024104_8950cece",
|
|
4
|
+
"completed_symbols": 2,
|
|
5
|
+
"symbols_in_progress": 0,
|
|
6
|
+
"total_datasets": 2,
|
|
7
|
+
"last_updated": "2025-09-18T02:41:05.200815",
|
|
8
|
+
"errors": 0
|
|
9
|
+
},
|
|
10
|
+
"detailed_progress": {
|
|
11
|
+
"session_id": "20250918_024104_8950cece",
|
|
12
|
+
"created_at": "2025-09-18T02:41:04.219378",
|
|
13
|
+
"last_updated": "2025-09-18T02:41:05.200815",
|
|
14
|
+
"symbols_completed": [
|
|
15
|
+
"BTCUSDT",
|
|
16
|
+
"ETHUSDT"
|
|
17
|
+
],
|
|
18
|
+
"symbols_in_progress": {},
|
|
19
|
+
"total_datasets_collected": 2,
|
|
20
|
+
"collection_parameters": {
|
|
21
|
+
"start_date": "2024-01-01",
|
|
22
|
+
"end_date": "2024-01-01",
|
|
23
|
+
"output_dir": "/tmp/tmp5s7nnfcm",
|
|
24
|
+
"timeframes": [
|
|
25
|
+
"1h"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"errors": [],
|
|
29
|
+
"current_symbol": "ETHUSDT",
|
|
30
|
+
"completed_symbol": "ETHUSDT"
|
|
31
|
+
},
|
|
32
|
+
"cache_info": {
|
|
33
|
+
"cache_dir": "/home/runner/work/gapless-crypto-data/gapless-crypto-data/.gapless_checkpoints",
|
|
34
|
+
"cache_size_mb": 0.04590129852294922
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"progress_summary": {
|
|
3
|
+
"session_id": "20250918_024110_7356f614",
|
|
4
|
+
"completed_symbols": 2,
|
|
5
|
+
"symbols_in_progress": 0,
|
|
6
|
+
"total_datasets": 2,
|
|
7
|
+
"last_updated": "2025-09-18T02:41:11.600558",
|
|
8
|
+
"errors": 0
|
|
9
|
+
},
|
|
10
|
+
"detailed_progress": {
|
|
11
|
+
"session_id": "20250918_024110_7356f614",
|
|
12
|
+
"created_at": "2025-09-18T02:41:10.532089",
|
|
13
|
+
"last_updated": "2025-09-18T02:41:11.600558",
|
|
14
|
+
"symbols_completed": [
|
|
15
|
+
"BTCUSDT",
|
|
16
|
+
"ETHUSDT"
|
|
17
|
+
],
|
|
18
|
+
"symbols_in_progress": {},
|
|
19
|
+
"total_datasets_collected": 2,
|
|
20
|
+
"collection_parameters": {
|
|
21
|
+
"start_date": "2024-01-01",
|
|
22
|
+
"end_date": "2024-01-01",
|
|
23
|
+
"output_dir": "/tmp/tmp82yh6ce7",
|
|
24
|
+
"timeframes": [
|
|
25
|
+
"1h"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"errors": [],
|
|
29
|
+
"current_symbol": "ETHUSDT",
|
|
30
|
+
"completed_symbol": "ETHUSDT"
|
|
31
|
+
},
|
|
32
|
+
"cache_info": {
|
|
33
|
+
"cache_dir": "/home/runner/work/gapless-crypto-data/gapless-crypto-data/.gapless_checkpoints",
|
|
34
|
+
"cache_size_mb": 0.04731273651123047
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "20250918_024058_d544b2de",
|
|
3
|
+
"created_at": "2025-09-18T02:40:58.193211",
|
|
4
|
+
"last_updated": "2025-09-18T02:40:59.566663",
|
|
5
|
+
"symbols_completed": [
|
|
6
|
+
"BTCUSDT",
|
|
7
|
+
"ETHUSDT"
|
|
8
|
+
],
|
|
9
|
+
"symbols_in_progress": {},
|
|
10
|
+
"total_datasets_collected": 2,
|
|
11
|
+
"collection_parameters": {
|
|
12
|
+
"start_date": "2024-01-01",
|
|
13
|
+
"end_date": "2024-01-01",
|
|
14
|
+
"output_dir": "/tmp/tmp9usf4gmq",
|
|
15
|
+
"timeframes": [
|
|
16
|
+
"1h"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"errors": [],
|
|
20
|
+
"current_symbol": "ETHUSDT",
|
|
21
|
+
"completed_symbol": "ETHUSDT"
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "20250918_024100_6302c48d",
|
|
3
|
+
"created_at": "2025-09-18T02:41:00.044526",
|
|
4
|
+
"last_updated": "2025-09-18T02:41:01.478270",
|
|
5
|
+
"symbols_completed": [
|
|
6
|
+
"BTCUSDT",
|
|
7
|
+
"ETHUSDT",
|
|
8
|
+
"SOLUSDT"
|
|
9
|
+
],
|
|
10
|
+
"symbols_in_progress": {},
|
|
11
|
+
"total_datasets_collected": 3,
|
|
12
|
+
"collection_parameters": {
|
|
13
|
+
"start_date": "2024-01-01",
|
|
14
|
+
"end_date": "2024-01-01",
|
|
15
|
+
"output_dir": "/tmp/tmpsqk4fxvn",
|
|
16
|
+
"timeframes": [
|
|
17
|
+
"1h"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"errors": [],
|
|
21
|
+
"current_symbol": "SOLUSDT",
|
|
22
|
+
"completed_symbol": "SOLUSDT"
|
|
23
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "20250918_024101_b880e45d",
|
|
3
|
+
"created_at": "2025-09-18T02:41:01.976849",
|
|
4
|
+
"last_updated": "2025-09-18T02:41:03.744405",
|
|
5
|
+
"symbols_completed": [
|
|
6
|
+
"BTCUSDT",
|
|
7
|
+
"ETHUSDT"
|
|
8
|
+
],
|
|
9
|
+
"symbols_in_progress": {},
|
|
10
|
+
"total_datasets_collected": 2,
|
|
11
|
+
"collection_parameters": {
|
|
12
|
+
"start_date": "2024-01-01",
|
|
13
|
+
"end_date": "2024-01-01",
|
|
14
|
+
"output_dir": "/tmp/tmphxjbqx85",
|
|
15
|
+
"timeframes": [
|
|
16
|
+
"1h"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"errors": [
|
|
20
|
+
{
|
|
21
|
+
"symbol": "INVALIDSYMBOL",
|
|
22
|
+
"error": "Collection returned no results",
|
|
23
|
+
"timestamp": "2025-09-18T02:41:03.264368"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"current_symbol": "ETHUSDT",
|
|
27
|
+
"completed_symbol": "ETHUSDT",
|
|
28
|
+
"failed_symbol": "INVALIDSYMBOL"
|
|
29
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "20250918_024104_8950cece",
|
|
3
|
+
"created_at": "2025-09-18T02:41:04.219378",
|
|
4
|
+
"last_updated": "2025-09-18T02:41:05.200815",
|
|
5
|
+
"symbols_completed": [
|
|
6
|
+
"BTCUSDT",
|
|
7
|
+
"ETHUSDT"
|
|
8
|
+
],
|
|
9
|
+
"symbols_in_progress": {},
|
|
10
|
+
"total_datasets_collected": 2,
|
|
11
|
+
"collection_parameters": {
|
|
12
|
+
"start_date": "2024-01-01",
|
|
13
|
+
"end_date": "2024-01-01",
|
|
14
|
+
"output_dir": "/tmp/tmp5s7nnfcm",
|
|
15
|
+
"timeframes": [
|
|
16
|
+
"1h"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"errors": [],
|
|
20
|
+
"current_symbol": "ETHUSDT",
|
|
21
|
+
"completed_symbol": "ETHUSDT"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_id": "20250918_024110_7356f614",
|
|
3
|
+
"created_at": "2025-09-18T02:41:10.532089",
|
|
4
|
+
"last_updated": "2025-09-18T02:41:11.600558",
|
|
5
|
+
"symbols_completed": [
|
|
6
|
+
"BTCUSDT",
|
|
7
|
+
"ETHUSDT"
|
|
8
|
+
],
|
|
9
|
+
"symbols_in_progress": {},
|
|
10
|
+
"total_datasets_collected": 2,
|
|
11
|
+
"collection_parameters": {
|
|
12
|
+
"start_date": "2024-01-01",
|
|
13
|
+
"end_date": "2024-01-01",
|
|
14
|
+
"output_dir": "/tmp/tmp82yh6ce7",
|
|
15
|
+
"timeframes": [
|
|
16
|
+
"1h"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"errors": [],
|
|
20
|
+
"current_symbol": "ETHUSDT",
|
|
21
|
+
"completed_symbol": "ETHUSDT"
|
|
22
|
+
}
|
|
@@ -73,6 +73,9 @@ jobs:
|
|
|
73
73
|
needs:
|
|
74
74
|
- build
|
|
75
75
|
runs-on: ubuntu-latest
|
|
76
|
+
environment: pypi
|
|
77
|
+
permissions:
|
|
78
|
+
id-token: write
|
|
76
79
|
steps:
|
|
77
80
|
- name: Download all the dists
|
|
78
81
|
uses: actions/download-artifact@v4
|
|
@@ -82,13 +85,7 @@ jobs:
|
|
|
82
85
|
- name: Publish distribution packages to PyPI
|
|
83
86
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
84
87
|
with:
|
|
85
|
-
user: __token__
|
|
86
|
-
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
87
|
-
repository-url: https://upload.pypi.org/legacy/
|
|
88
88
|
verbose: true
|
|
89
|
-
attestations: false
|
|
90
|
-
env:
|
|
91
|
-
TWINE_NON_INTERACTIVE: 1
|
|
92
89
|
sign-artifacts:
|
|
93
90
|
name: Sign artifacts with Sigstore
|
|
94
91
|
needs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gapless-crypto-data
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: Ultra-fast cryptocurrency data collection with zero gaps guarantee and full 11-column microstructure format
|
|
5
5
|
Project-URL: Homepage, https://github.com/Eon-Labs/gapless-crypto-data
|
|
6
6
|
Project-URL: Documentation, https://github.com/Eon-Labs/gapless-crypto-data#readme
|
{gapless_crypto_data-2.5.0 → gapless_crypto_data-2.6.0}/docs/CURRENT_ARCHITECTURE_STATUS.yaml
RENAMED
|
@@ -4,7 +4,7 @@ info:
|
|
|
4
4
|
description: |
|
|
5
5
|
Consolidated status of current system architecture, replacing outdated planning documents.
|
|
6
6
|
All references should point to this canonical source for current capabilities.
|
|
7
|
-
version: "2.
|
|
7
|
+
version: "2.6.0"
|
|
8
8
|
|
|
9
9
|
paths: {}
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ components:
|
|
|
23
23
|
|
|
24
24
|
# CURRENT ARCHITECTURE STATUS (2025-09-17)
|
|
25
25
|
x-current-status:
|
|
26
|
-
canonical_version: "v2.
|
|
26
|
+
canonical_version: "v2.6.0"
|
|
27
27
|
architecture_phase: "COMPLETE"
|
|
28
28
|
|
|
29
29
|
implemented_capabilities:
|
|
@@ -65,14 +65,22 @@ x-current-status:
|
|
|
65
65
|
|
|
66
66
|
cli_interface:
|
|
67
67
|
status: "PRODUCTION_READY"
|
|
68
|
-
description: "
|
|
68
|
+
description: "Traditional argparse CLI with multi-symbol support"
|
|
69
69
|
technical_specs:
|
|
70
|
-
- "
|
|
71
|
-
- "Backward compatibility with legacy argparse interface"
|
|
70
|
+
- "Traditional argparse interface with standard Python patterns"
|
|
72
71
|
- "Comma-separated multi-symbol support"
|
|
73
72
|
- "16 timeframe options with validation"
|
|
74
73
|
- "Custom date ranges and output directories"
|
|
75
|
-
- "Sequential processing with
|
|
74
|
+
- "Sequential processing with progress reporting"
|
|
75
|
+
|
|
76
|
+
pypi_publishing:
|
|
77
|
+
status: "PRODUCTION_READY"
|
|
78
|
+
description: "Native GitHub Actions trusted publishing with OIDC authentication"
|
|
79
|
+
technical_specs:
|
|
80
|
+
- "OIDC-based authentication eliminating API token dependencies"
|
|
81
|
+
- "PyPI trusted publisher configuration for Eon-Labs/gapless-crypto-data"
|
|
82
|
+
- "Environment-scoped publishing with pypi environment requirement"
|
|
83
|
+
- "Automatic digital attestations and Sigstore artifact signing"
|
|
76
84
|
|
|
77
85
|
removed_concepts:
|
|
78
86
|
parallel_processing:
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
openapi: 3.1.1
|
|
2
|
+
info:
|
|
3
|
+
title: "Milestone v2.6.0 - Native GitHub Actions Trusted Publishing"
|
|
4
|
+
description: |
|
|
5
|
+
Implementation of OIDC-based PyPI publishing pipeline eliminating API token dependencies.
|
|
6
|
+
Migration from token-based authentication to GitHub-native trusted publishing approach.
|
|
7
|
+
version: "2.6.0"
|
|
8
|
+
|
|
9
|
+
components:
|
|
10
|
+
schemas:
|
|
11
|
+
TrustedPublishingMigration:
|
|
12
|
+
type: object
|
|
13
|
+
properties:
|
|
14
|
+
authentication_method:
|
|
15
|
+
type: string
|
|
16
|
+
enum: [oidc_trusted_publishing]
|
|
17
|
+
api_tokens_eliminated:
|
|
18
|
+
type: boolean
|
|
19
|
+
workflow_configuration:
|
|
20
|
+
type: object
|
|
21
|
+
properties:
|
|
22
|
+
environment_requirement:
|
|
23
|
+
type: string
|
|
24
|
+
enum: [pypi]
|
|
25
|
+
permissions:
|
|
26
|
+
type: object
|
|
27
|
+
properties:
|
|
28
|
+
id-token:
|
|
29
|
+
type: string
|
|
30
|
+
enum: [write]
|
|
31
|
+
platform_limitations_documented:
|
|
32
|
+
type: boolean
|
|
33
|
+
|
|
34
|
+
x-milestone-implementation:
|
|
35
|
+
version: "v2.6.0"
|
|
36
|
+
implementation_date: "2025-09-18"
|
|
37
|
+
scope: "PyPI publishing pipeline modernization"
|
|
38
|
+
|
|
39
|
+
technical_achievements:
|
|
40
|
+
trusted_publishing_configuration:
|
|
41
|
+
status: "IMPLEMENTED"
|
|
42
|
+
pypi_publisher_config:
|
|
43
|
+
provider: "GitHub"
|
|
44
|
+
repository: "Eon-Labs/gapless-crypto-data"
|
|
45
|
+
workflow: "publish.yml"
|
|
46
|
+
environment: "pypi"
|
|
47
|
+
|
|
48
|
+
workflow_modifications:
|
|
49
|
+
file: ".github/workflows/publish.yml"
|
|
50
|
+
authentication_method: "oidc"
|
|
51
|
+
permissions_added: ["id-token: write"]
|
|
52
|
+
environment_requirement: "pypi"
|
|
53
|
+
api_token_dependencies_removed: true
|
|
54
|
+
|
|
55
|
+
github_packages_limitation_analysis:
|
|
56
|
+
status: "DOCUMENTED"
|
|
57
|
+
python_support: false
|
|
58
|
+
supported_package_types: [npm, docker, rubygems, maven, gradle, nuget]
|
|
59
|
+
canonical_distribution_channel: "PyPI"
|
|
60
|
+
documentation_location: "docs/PYPI_PUBLISHING_CONFIGURATION.yaml"
|
|
61
|
+
|
|
62
|
+
root_cause_resolution:
|
|
63
|
+
status: "COMPLETED"
|
|
64
|
+
original_issue: "PyPI publishing gap from v2.2.0 to v2.5.0"
|
|
65
|
+
cascading_issues_resolved:
|
|
66
|
+
- yaml_syntax_errors
|
|
67
|
+
- linting_failures
|
|
68
|
+
- dependency_inconsistencies
|
|
69
|
+
- test_mock_incompatibilities
|
|
70
|
+
- invalid_documentation_validation
|
|
71
|
+
- authentication_method_conflicts
|
|
72
|
+
|
|
73
|
+
final_resolution_method: "local_token_validation_and_trusted_publishing_migration"
|
|
74
|
+
|
|
75
|
+
validation_evidence:
|
|
76
|
+
authentication_test:
|
|
77
|
+
method: "OIDC token generation and PyPI upload attempt"
|
|
78
|
+
result: "PASSED"
|
|
79
|
+
error_condition: "file_already_exists"
|
|
80
|
+
confirms: "authentication mechanism operational"
|
|
81
|
+
|
|
82
|
+
workflow_execution:
|
|
83
|
+
build_step: "PASSED"
|
|
84
|
+
test_step: "PASSED"
|
|
85
|
+
publish_step: "AUTHENTICATED"
|
|
86
|
+
sigstore_signing: "CONFIGURED"
|
|
87
|
+
|
|
88
|
+
documentation_updates:
|
|
89
|
+
files_modified:
|
|
90
|
+
- "docs/PYPI_PUBLISHING_CONFIGURATION.yaml"
|
|
91
|
+
- "docs/CURRENT_ARCHITECTURE_STATUS.yaml"
|
|
92
|
+
- ".github/workflows/publish.yml"
|
|
93
|
+
|
|
94
|
+
specifications_format: "OpenAPI 3.1.1"
|
|
95
|
+
documentation_approach: "machine_readable_technical_specifications"
|
|
96
|
+
|
|
97
|
+
canonical_references_established:
|
|
98
|
+
publishing_configuration: "docs/PYPI_PUBLISHING_CONFIGURATION.yaml"
|
|
99
|
+
architecture_status: "docs/CURRENT_ARCHITECTURE_STATUS.yaml"
|
|
100
|
+
project_guidance: "CLAUDE.md"
|
|
101
|
+
|
|
102
|
+
dependency_evolution:
|
|
103
|
+
additions:
|
|
104
|
+
httpx: "0.25.0+"
|
|
105
|
+
reason: "performance_improvement_over_requests"
|
|
106
|
+
|
|
107
|
+
removals:
|
|
108
|
+
requests: "eliminated"
|
|
109
|
+
typer: "eliminated"
|
|
110
|
+
rich: "eliminated"
|
|
111
|
+
reason: "maintain_traditional_argparse_interface"
|
|
112
|
+
|
|
113
|
+
testing_validation:
|
|
114
|
+
total_tests: "124 passed, 1 skipped"
|
|
115
|
+
integration_tests: "PASSED"
|
|
116
|
+
cli_functionality: "VALIDATED"
|
|
117
|
+
build_process: "VERIFIED"
|
|
118
|
+
|
|
119
|
+
x-evolution-tracking:
|
|
120
|
+
migration_pattern: "api_token_to_oidc_trusted_publishing"
|
|
121
|
+
architectural_improvement: "zero_credential_workflow"
|
|
122
|
+
security_advancement: "eliminate_stored_secrets"
|
|
123
|
+
|
|
124
|
+
backward_compatibility:
|
|
125
|
+
pypi_distribution: "maintained"
|
|
126
|
+
cli_interface: "preserved"
|
|
127
|
+
api_surface: "unchanged"
|
|
128
|
+
|
|
129
|
+
forward_compatibility:
|
|
130
|
+
automatic_attestations: "enabled"
|
|
131
|
+
sigstore_signing: "configured"
|
|
132
|
+
environment_scoped_publishing: "implemented"
|
|
133
|
+
|
|
134
|
+
x-technical-debt-resolution:
|
|
135
|
+
api_token_secret_management: "eliminated"
|
|
136
|
+
workflow_authentication_complexity: "simplified"
|
|
137
|
+
publishing_failure_points: "reduced"
|
|
138
|
+
|
|
139
|
+
maintenance_burden_reduction:
|
|
140
|
+
token_rotation: "not_required"
|
|
141
|
+
credential_updates: "not_required"
|
|
142
|
+
authentication_troubleshooting: "minimized"
|
|
143
|
+
|
|
144
|
+
x-compliance-validation:
|
|
145
|
+
openapi_conformity: "3.1.1"
|
|
146
|
+
documentation_style: "evolutionary_machine_readable"
|
|
147
|
+
version_tracking: "technical_descriptive"
|
|
148
|
+
promotional_language: "eliminated"
|
|
149
|
+
|
|
150
|
+
pattern_adherence:
|
|
151
|
+
user_global_patterns: "unix_conventions_sota_tools"
|
|
152
|
+
project_patterns: "exception_only_failures_atomic_operations"
|
|
153
|
+
cross_pattern_harmony: "validated"
|
|
154
|
+
|
|
155
|
+
x-milestone-closure:
|
|
156
|
+
implementation_complete: true
|
|
157
|
+
validation_passed: true
|
|
158
|
+
documentation_updated: true
|
|
159
|
+
version_incremented: true
|
|
160
|
+
|
|
161
|
+
next_evolution_readiness:
|
|
162
|
+
trusted_publishing: "operational"
|
|
163
|
+
pypi_distribution: "automated"
|
|
164
|
+
github_actions_integration: "native"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
openapi: 3.1.1
|
|
2
|
+
info:
|
|
3
|
+
title: PyPI Publishing Configuration
|
|
4
|
+
version: 2.6.0
|
|
5
|
+
description: |
|
|
6
|
+
Native GitHub Actions trusted publishing configuration for gapless-crypto-data.
|
|
7
|
+
Implements OIDC-based authentication without API token dependencies.
|
|
8
|
+
|
|
9
|
+
components:
|
|
10
|
+
schemas:
|
|
11
|
+
TrustedPublisher:
|
|
12
|
+
type: object
|
|
13
|
+
properties:
|
|
14
|
+
provider:
|
|
15
|
+
type: string
|
|
16
|
+
enum: [GitHub]
|
|
17
|
+
repository:
|
|
18
|
+
type: string
|
|
19
|
+
example: "Eon-Labs/gapless-crypto-data"
|
|
20
|
+
workflow:
|
|
21
|
+
type: string
|
|
22
|
+
example: "publish.yml"
|
|
23
|
+
environment:
|
|
24
|
+
type: string
|
|
25
|
+
example: "pypi"
|
|
26
|
+
required: [provider, repository, workflow, environment]
|
|
27
|
+
|
|
28
|
+
WorkflowConfiguration:
|
|
29
|
+
type: object
|
|
30
|
+
properties:
|
|
31
|
+
permissions:
|
|
32
|
+
type: object
|
|
33
|
+
properties:
|
|
34
|
+
id-token:
|
|
35
|
+
type: string
|
|
36
|
+
enum: [write]
|
|
37
|
+
required: [id-token]
|
|
38
|
+
environment:
|
|
39
|
+
type: string
|
|
40
|
+
enum: [pypi]
|
|
41
|
+
authentication_method:
|
|
42
|
+
type: string
|
|
43
|
+
enum: [oidc]
|
|
44
|
+
required: [permissions, environment, authentication_method]
|
|
45
|
+
|
|
46
|
+
paths:
|
|
47
|
+
/pypi-publishing:
|
|
48
|
+
post:
|
|
49
|
+
summary: Publish package to PyPI via trusted publishing
|
|
50
|
+
requestBody:
|
|
51
|
+
required: true
|
|
52
|
+
content:
|
|
53
|
+
application/json:
|
|
54
|
+
schema:
|
|
55
|
+
$ref: '#/components/schemas/WorkflowConfiguration'
|
|
56
|
+
responses:
|
|
57
|
+
'200':
|
|
58
|
+
description: Package published successfully
|
|
59
|
+
'400':
|
|
60
|
+
description: File already exists or validation failed
|
|
61
|
+
|
|
62
|
+
current_configuration:
|
|
63
|
+
pypi_trusted_publisher:
|
|
64
|
+
provider: GitHub
|
|
65
|
+
repository: Eon-Labs/gapless-crypto-data
|
|
66
|
+
workflow: publish.yml
|
|
67
|
+
environment: pypi
|
|
68
|
+
configured_date: "2025-09-18"
|
|
69
|
+
|
|
70
|
+
github_workflow:
|
|
71
|
+
file: .github/workflows/publish.yml
|
|
72
|
+
permissions:
|
|
73
|
+
id-token: write
|
|
74
|
+
environment: pypi
|
|
75
|
+
authentication_method: oidc
|
|
76
|
+
api_token_removed: true
|
|
77
|
+
|
|
78
|
+
validation_status:
|
|
79
|
+
authentication_test: passed
|
|
80
|
+
file_upload_attempt: passed
|
|
81
|
+
error_reason: "file_already_exists"
|
|
82
|
+
confirms_working: true
|
|
83
|
+
|
|
84
|
+
github_packages_limitation:
|
|
85
|
+
python_support: false
|
|
86
|
+
supported_types: [npm, docker, rubygems, maven, gradle, nuget]
|
|
87
|
+
reason: "GitHub Packages does not support Python/PyPI packages as of 2025-09-18"
|
|
88
|
+
workaround: "PyPI remains canonical distribution channel for Python packages"
|
|
89
|
+
|
|
90
|
+
migration_completed:
|
|
91
|
+
from: api_token_authentication
|
|
92
|
+
to: oidc_trusted_publishing
|
|
93
|
+
date: "2025-09-18"
|
|
94
|
+
version: v2.5.0
|
|
95
|
+
root_cause_resolution: completed
|