From 241fed6e76a9ad586ffba32072d48ac9036aa38a Mon Sep 17 00:00:00 2001 From: rootSunc Date: Sat, 15 Aug 2026 09:47:41 +0300 Subject: [PATCH 1/3] chore: rename project from ashare-lake to CNEquity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "ashare" collided with established projects in the same space (mpquant/Ashare, AKShare) and didn't surface in searches for A股 data tools. Package, CLI (asl -> cne), Python import path, and config/data conventions all move together; old ashare-lake PyPI listing and local data/config directories are untouched. --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 +- .github/ISSUE_TEMPLATE/config.yml | 8 +- .github/ISSUE_TEMPLATE/source_regression.yml | 10 +- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 8 +- .github/workflows/source-health.yml | 18 +- .gitignore | 4 +- CHANGELOG.md | 57 ++--- CITATION.cff | 10 +- CONTRIBUTING.md | 8 +- NOTICE | 6 +- README.en.md | 86 ++++---- README.md | 88 ++++---- README.pypi.md | 40 ++-- ROADMAP.md | 4 +- SECURITY.md | 4 +- codecov.yml | 2 +- ...ake.example.toml => cnequity.example.toml} | 28 +-- docs/README.md | 8 +- .../adr/0004-store-hfq-derive-qfq-at-query.md | 4 +- docs/architecture/data-flow.md | 18 +- docs/architecture/design-principles.md | 2 +- docs/architecture/lake-layout.md | 10 +- docs/architecture/overview.md | 8 +- docs/assets/README.md | 32 +-- docs/assets/{asl-demo.png => cne-demo.png} | Bin docs/assets/{asl-load.png => cne-load.png} | Bin docs/assets/{asl-query.png => cne-query.png} | Bin ...erve-dataset.png => cne-serve-dataset.png} | Bin ...-hero-demo.png => cne-serve-hero-demo.png} | Bin ...{asl-serve-hero.png => cne-serve-hero.png} | Bin docs/assets/{asl-serve.png => cne-serve.png} | Bin docs/assets/og-image.html | 10 +- docs/citation.md | 10 +- docs/comparison.md | 6 +- docs/datasets/catalog.md | 38 ++-- docs/datasets/query-guide.md | 16 +- docs/datasets/schema.md | 16 +- docs/datasets/sources.md | 28 +-- docs/development/adding-dataset.md | 2 +- docs/development/conventions.md | 2 +- docs/development/testing.md | 2 +- docs/getting-started/configuration.md | 40 ++-- docs/getting-started/installation.md | 68 +++--- docs/getting-started/quickstart.md | 78 +++---- docs/index.md | 16 +- docs/legal-and-data-sources.md | 4 +- docs/modules/README.md | 10 +- docs/modules/adapters/README.md | 4 +- docs/modules/adapters/baostock.md | 6 +- docs/modules/adapters/calendar.md | 2 +- docs/modules/adapters/cninfo.md | 2 +- docs/modules/adapters/eastmoney.md | 6 +- docs/modules/adapters/macro.md | 6 +- docs/modules/adapters/pboc.md | 4 +- docs/modules/adapters/sina.md | 2 +- docs/modules/adapters/tdx-protocol.md | 4 +- docs/modules/cli.md | 8 +- docs/modules/config.md | 8 +- docs/modules/derive.md | 8 +- docs/modules/domain.md | 4 +- docs/modules/orchestrator.md | 10 +- docs/modules/quality.md | 10 +- docs/modules/query.md | 2 +- docs/modules/serve.md | 10 +- docs/modules/steps.md | 10 +- docs/modules/storage.md | 10 +- docs/operations/runbook.md | 140 ++++++------- docs/operations/scripts.md | 40 ++-- docs/operations/source-health.md | 20 +- docs/operations/troubleshooting.md | 106 +++++----- docs/recipes/README.md | 4 +- docs/recipes/duckdb-polars.md | 10 +- docs/recipes/pit-rebalance.md | 6 +- docs/recipes/research-baseline.md | 16 +- docs/reference/cli.md | 140 ++++++------- docs/reference/mcp.md | 30 +-- docs/reference/python-api.md | 12 +- frontend/README.md | 8 +- frontend/package-lock.json | 4 +- frontend/package.json | 10 +- frontend/src/charts.js | 4 +- frontend/src/main.js | 6 +- mkdocs.yml | 12 +- pyproject.toml | 35 ++-- scripts/accept_backfill.py | 8 +- scripts/backup_meta.sh | 8 +- scripts/china_egress_backfill.sh | 16 +- scripts/daily_pipeline.sh | 48 ++--- scripts/health_notify.sh | 18 +- scripts/install_scheduler.sh | 12 +- ...late => com.cnequity.daily.plist.template} | 6 +- scripts/migrate_daily_bars_volume_v2.py | 20 +- scripts/probe_trade_ticks.py | 12 +- scripts/render_readme_screenshots.py | 26 +-- scripts/retry_init_finalize.py | 8 +- scripts/run_init_2016.py | 6 +- scripts/smoke_daily_e2e.py | 14 +- scripts/survivorship_gap.py | 8 +- scripts/uninstall_scheduler.sh | 2 +- src/ashare_lake/__init__.py | 3 - src/ashare_lake/adapters/baostock/__init__.py | 5 - src/ashare_lake/adapters/cninfo/__init__.py | 3 - .../adapters/eastmoney/__init__.py | 15 -- src/ashare_lake/orchestrator/__init__.py | 5 - src/ashare_lake/serve/__init__.py | 6 - src/ashare_lake/storage/__init__.py | 4 - src/cnequity/__init__.py | 3 + src/{ashare_lake => cnequity}/__main__.py | 2 +- .../adapters/__init__.py | 0 src/cnequity/adapters/baostock/__init__.py | 5 + .../adapters/baostock/_session.py | 4 +- .../adapters/baostock/delisted_bars.py | 8 +- .../adapters/baostock/instruments.py | 4 +- .../adapters/baostock/st_history.py | 2 +- .../adapters/baostock/valuation.py | 2 +- .../adapters/calendar/__init__.py | 2 +- .../adapters/calendar/exchange_calendar.py | 4 +- .../adapters/calendar/holidays_cn.py | 0 .../calendar/seeds/trading_calendar.csv | 0 .../adapters/cni/__init__.py | 2 +- .../cni/index_constituents_history.py | 8 +- src/cnequity/adapters/cninfo/__init__.py | 3 + .../adapters/cninfo/announcements.py | 2 +- .../adapters/cninfo/regulatory.py | 2 +- src/cnequity/adapters/eastmoney/__init__.py | 15 ++ .../adapters/eastmoney/bars.py | 12 +- .../adapters/eastmoney/capital.py | 12 +- .../adapters/eastmoney/clist.py | 6 +- .../adapters/eastmoney/commodity_bars.py | 10 +- .../adapters/eastmoney/common.py | 2 +- .../adapters/eastmoney/consensus.py | 8 +- .../adapters/eastmoney/corporate_actions.py | 10 +- .../adapters/eastmoney/datacenter.py | 6 +- .../eastmoney/datacenter_contracts.py | 22 +- .../adapters/eastmoney/earnings_disclosure.py | 8 +- .../adapters/eastmoney/economic_calendar.py | 4 +- .../adapters/eastmoney/em_auth.py | 2 +- .../adapters/eastmoney/fundamentals.py | 12 +- .../adapters/eastmoney/index_constituents.py | 8 +- .../adapters/eastmoney/industry.py | 6 +- .../adapters/eastmoney/institutional.py | 8 +- .../adapters/eastmoney/instruments.py | 8 +- .../adapters/eastmoney/news_wire.py | 2 +- .../adapters/eastmoney/rotation.py | 8 +- .../adapters/eastmoney/sectors.py | 6 +- .../adapters/eastmoney/share_unlock.py | 6 +- .../adapters/eastmoney/shareholders.py | 8 +- .../adapters/eastmoney/stock_news.py | 6 +- .../adapters/eastmoney/trading_status.py | 8 +- .../adapters/eastmoney/valuation.py | 6 +- .../adapters/exchange/__init__.py | 2 +- .../adapters/exchange/st_lists.py | 2 +- .../adapters/macro/__init__.py | 0 .../adapters/macro/indicators.py | 6 +- .../adapters/nbs/__init__.py | 2 +- .../adapters/nbs/pmi_release.py | 0 .../adapters/pboc/__init__.py | 2 +- .../adapters/pboc/_tables.py | 0 .../adapters/pboc/social_financing.py | 2 +- .../adapters/sina/__init__.py | 4 +- .../adapters/sina/adj_factors.py | 4 +- .../adapters/sina/bars.py | 6 +- .../adapters/sina/domestic_futures.py | 0 .../adapters/sina/global_futures.py | 0 .../adapters/sw/__init__.py | 2 +- .../sw/geotrust_g2_tls_cn_rsa4096.pem | 0 .../adapters/sw/industry_history.py | 6 +- .../adapters/tdx_protocol/__init__.py | 2 +- .../adapters/tdx_protocol/_decode.py | 0 .../adapters/tdx_protocol/_wire/LICENSE.tdxpy | 0 .../adapters/tdx_protocol/_wire/__init__.py | 22 +- .../adapters/tdx_protocol/_wire/constants.py | 0 .../adapters/tdx_protocol/_wire/exceptions.py | 0 .../adapters/tdx_protocol/_wire/heartbeat.py | 2 +- .../adapters/tdx_protocol/_wire/helper.py | 4 +- .../adapters/tdx_protocol/_wire/logger.py | 2 +- .../tdx_protocol/_wire/parser/__init__.py | 0 .../tdx_protocol/_wire/parser/base.py | 2 +- .../tdx_protocol/_wire/parser/raw_parser.py | 2 +- .../_wire/parser/setup_commands.py | 2 +- .../tdx_protocol/_wire/parser/std/__init__.py | 0 .../std/get_history_transaction_data.py | 4 +- .../_wire/parser/std/get_index_bars.py | 4 +- .../_wire/parser/std/get_security_bars.py | 4 +- .../_wire/parser/std/get_security_count.py | 2 +- .../_wire/parser/std/get_security_list.py | 4 +- .../_wire/parser/std/get_transaction_data.py | 6 +- .../_wire/parser/std/get_xdxr_info.py | 4 +- .../tdx_protocol/_wire/socket_client.py | 8 +- .../adapters/tdx_protocol/bars.py | 8 +- .../adapters/tdx_protocol/client.py | 32 +-- .../tdx_protocol/corporate_actions.py | 4 +- .../adapters/tdx_protocol/hosts.py | 0 .../adapters/tdx_protocol/minute_bars.py | 6 +- .../adapters/tdx_protocol/quotes.py | 2 +- .../adapters/tdx_protocol/sector_bars.py | 10 +- .../adapters/tdx_protocol/session.py | 0 .../adapters/tdx_protocol/trade_ticks.py | 8 +- .../adapters/throttle.py | 4 +- .../adapters/ths/__init__.py | 2 +- .../adapters/ths/boards.py | 2 +- .../adapters/ths/index_bars.py | 4 +- .../ths/seeds/board_catalog_seed.json | 0 .../adapters/ths/stock_bars.py | 6 +- src/{ashare_lake => cnequity}/cli/__init__.py | 0 src/{ashare_lake => cnequity}/cli/demo.py | 56 ++--- src/{ashare_lake => cnequity}/cli/main.py | 194 +++++++++--------- .../config/__init__.py | 4 +- .../config/bootstrap.py | 14 +- .../config/loader.py | 14 +- .../config/templates/__init__.py | 0 .../config/templates/cnequity.example.toml} | 28 +-- .../derive/__init__.py | 0 .../derive/adj_factors.py | 26 +-- .../derive/industry_index.py | 18 +- .../derive/market_breadth.py | 2 +- .../derive/sector_code_map.py | 6 +- .../derive/sector_routing.py | 12 +- .../derive/sentiment_scores.py | 8 +- .../derive/trading_status_history.py | 10 +- .../diagnostics/__init__.py | 6 +- .../diagnostics/health_page.py | 12 +- .../diagnostics/packages.py | 0 .../diagnostics/render.py | 2 +- .../diagnostics/report.py | 20 +- .../diagnostics/source_health.py | 36 ++-- .../domain/__init__.py | 4 +- .../domain/datasets.py | 10 +- .../domain/market_time.py | 0 .../domain/partitions.py | 0 .../domain/rate_limit.py | 2 +- .../domain/schemas.py | 6 +- .../domain/sentiment.py | 0 .../domain/symbols.py | 0 src/{ashare_lake => cnequity}/domain/units.py | 2 +- src/{ashare_lake => cnequity}/file_lock.py | 0 .../mcp_server/__init__.py | 4 +- .../mcp_server/catalog.py | 2 +- .../mcp_server/live.py | 12 +- .../mcp_server/protocol.py | 12 +- .../mcp_server/tools.py | 20 +- src/cnequity/orchestrator/__init__.py | 5 + .../orchestrator/compact_gate.py | 2 +- .../orchestrator/deps.py | 2 +- .../orchestrator/engine.py | 24 +-- .../orchestrator/init_phases.py | 0 .../orchestrator/manifest.py | 6 +- .../orchestrator/registry.py | 2 +- .../orchestrator/run_lock.py | 4 +- .../orchestrator/worker_pool.py | 22 +- src/{ashare_lake => cnequity}/py.typed | 0 .../quality/__init__.py | 0 .../quality/audit.py | 36 ++-- .../quality/authority_checks.py | 10 +- .../quality/cross_checks.py | 10 +- .../quality/dataset_checks.py | 18 +- .../quality/failover.py | 16 +- .../quality/historical_validity.py | 14 +- .../quality/intraday_checks.py | 10 +- .../quality/macro_checks.py | 4 +- .../quality/source_diff.py | 10 +- .../quality/st_coverage.py | 6 +- .../quality/tick_checks.py | 6 +- .../quality/unit_checks.py | 6 +- .../quality/verify.py | 16 +- .../query/__init__.py | 2 +- .../query/on_demand.py | 6 +- .../query/parquet_scan.py | 6 +- src/{ashare_lake => cnequity}/query/reader.py | 24 +-- .../query/universe.py | 6 +- src/{ashare_lake => cnequity}/query/views.py | 10 +- src/cnequity/serve/__init__.py | 6 + src/{ashare_lake => cnequity}/serve/app.py | 16 +- src/{ashare_lake => cnequity}/serve/lake.py | 40 ++-- .../serve/static/bundle.js | 8 +- .../serve/static/index.html | 2 +- .../serve/static/styles.css | 0 .../steps/__init__.py | 2 +- src/{ashare_lake => cnequity}/steps/bars.py | 70 +++---- .../steps/capital.py | 24 +-- .../steps/commodity.py | 8 +- src/{ashare_lake => cnequity}/steps/common.py | 18 +- .../steps/delisted.py | 44 ++-- src/{ashare_lake => cnequity}/steps/events.py | 22 +- .../steps/finalize.py | 34 +-- .../steps/fundamentals.py | 34 +-- .../steps/http_common.py | 6 +- .../steps/intraday.py | 24 +-- .../steps/macro_risk.py | 26 +-- .../steps/newsboard.py | 10 +- .../steps/reference.py | 28 +-- .../steps/research.py | 12 +- .../steps/rotation.py | 14 +- .../steps/structure.py | 18 +- src/{ashare_lake => cnequity}/steps/ticks.py | 16 +- src/cnequity/storage/__init__.py | 4 + .../storage/atomic.py | 0 .../storage/instruments.py | 6 +- .../storage/layout.py | 6 +- .../storage/parquet.py | 8 +- .../storage/repartition.py | 14 +- .../storage/source_snapshots.py | 2 +- .../storage/staging_cleanup.py | 10 +- .../storage/state.py | 2 +- .../storage/stats.py | 16 +- .../storage/valuation_orphans.py | 8 +- tests/conftest.py | 4 +- tests/integration/test_engine.py | 12 +- tests/integration/test_engine_validation.py | 8 +- tests/unit/test_adj_factor_coverage.py | 4 +- tests/unit/test_adj_factor_reconciliation.py | 6 +- tests/unit/test_adj_factors.py | 44 ++-- tests/unit/test_atomic.py | 4 +- tests/unit/test_audit_calendar_coverage.py | 4 +- tests/unit/test_audit_datasets.py | 10 +- tests/unit/test_audit_index_bars_coverage.py | 4 +- tests/unit/test_authority_adapters.py | 4 +- tests/unit/test_authority_checks.py | 16 +- tests/unit/test_backfill_horizon.py | 18 +- tests/unit/test_baostock_pacing.py | 2 +- tests/unit/test_baostock_session.py | 4 +- tests/unit/test_baostock_st_history.py | 4 +- tests/unit/test_baostock_valuation.py | 14 +- tests/unit/test_bars_helpers.py | 8 +- tests/unit/test_bars_pagination.py | 2 +- tests/unit/test_bars_preopen_guard.py | 2 +- tests/unit/test_batch_lifecycle.py | 12 +- tests/unit/test_bj_routing.py | 14 +- tests/unit/test_calendar.py | 4 +- tests/unit/test_calendar_horizon.py | 14 +- tests/unit/test_cli_commands.py | 116 +++++------ tests/unit/test_cli_demo.py | 78 ++++--- tests/unit/test_cli_init.py | 20 +- tests/unit/test_close_crosscheck.py | 4 +- tests/unit/test_cni_adjustments.py | 2 +- tests/unit/test_cninfo_announcements.py | 4 +- tests/unit/test_commodity_bars.py | 32 +-- tests/unit/test_compact_gate.py | 14 +- tests/unit/test_compact_group.py | 8 +- tests/unit/test_config_init.py | 22 +- tests/unit/test_config_validation.py | 18 +- tests/unit/test_corporate_actions_daily.py | 12 +- tests/unit/test_cross_checks.py | 4 +- tests/unit/test_curated_hygiene.py | 10 +- tests/unit/test_daily_bar_ownership.py | 2 +- tests/unit/test_daily_bars_clist_gapfill.py | 26 +-- tests/unit/test_daily_bars_finality_guard.py | 8 +- tests/unit/test_datacenter_contracts.py | 6 +- tests/unit/test_datacenter_fail_loud.py | 6 +- tests/unit/test_datacenter_keyset.py | 2 +- tests/unit/test_datacenter_live_contracts.py | 6 +- tests/unit/test_datacenter_page_size.py | 4 +- tests/unit/test_dataset_registry.py | 14 +- tests/unit/test_delisted_bars.py | 2 +- tests/unit/test_delisted_coverage.py | 10 +- tests/unit/test_delisted_discovery.py | 6 +- tests/unit/test_delisted_ingest.py | 10 +- tests/unit/test_delisted_instruments.py | 16 +- tests/unit/test_delisted_reconciliation.py | 6 +- tests/unit/test_delisted_repair.py | 10 +- tests/unit/test_delisting_events.py | 6 +- tests/unit/test_deps.py | 6 +- tests/unit/test_docs_catalog.py | 6 +- tests/unit/test_docs_contract.py | 8 +- tests/unit/test_doctor.py | 22 +- tests/unit/test_domain_sentiment.py | 2 +- tests/unit/test_duckdb_views.py | 10 +- tests/unit/test_earnings_disclosure.py | 14 +- tests/unit/test_eastmoney_bars_kline.py | 4 +- tests/unit/test_eastmoney_capital.py | 4 +- .../test_eastmoney_corporate_actions_parse.py | 24 +-- tests/unit/test_eastmoney_fail_fast.py | 6 +- tests/unit/test_eastmoney_proxy.py | 8 +- .../test_eastmoney_trading_status_adapter.py | 2 +- tests/unit/test_eastmoney_valuation.py | 10 +- tests/unit/test_economic_calendar.py | 12 +- tests/unit/test_em_auth_helpers.py | 4 +- tests/unit/test_engine_run_metadata.py | 8 +- tests/unit/test_engine_trading_day.py | 12 +- tests/unit/test_evidence_state_machine.py | 20 +- tests/unit/test_file_lock.py | 10 +- tests/unit/test_fundamentals_reports.py | 2 +- tests/unit/test_fundamentals_steps.py | 18 +- tests/unit/test_historical_validity.py | 10 +- tests/unit/test_incremental_daily.py | 8 +- tests/unit/test_index_bars_complete.py | 12 +- tests/unit/test_industry_index.py | 16 +- tests/unit/test_init_phases_engine.py | 28 +-- tests/unit/test_init_phases_helpers.py | 2 +- tests/unit/test_init_phases_loader.py | 6 +- tests/unit/test_init_profile.py | 30 +-- tests/unit/test_instruments_compact.py | 20 +- tests/unit/test_intraday_checks.py | 8 +- tests/unit/test_m3_adapters.py | 2 +- tests/unit/test_m3_steps.py | 22 +- tests/unit/test_m3plus.py | 20 +- tests/unit/test_macro_checks.py | 4 +- tests/unit/test_margin_backfill.py | 8 +- tests/unit/test_market_time.py | 2 +- tests/unit/test_mcp_server.py | 18 +- tests/unit/test_membership_history.py | 8 +- tests/unit/test_minute_bars_adapter.py | 14 +- tests/unit/test_minute_bars_reader.py | 6 +- tests/unit/test_minute_bars_step.py | 24 +-- tests/unit/test_news_wire_adapter.py | 4 +- tests/unit/test_offshore_commodity_bars.py | 6 +- tests/unit/test_on_demand.py | 10 +- tests/unit/test_pagination_fail_loud.py | 8 +- tests/unit/test_partitions.py | 10 +- tests/unit/test_pboc_social_financing.py | 4 +- tests/unit/test_phase4_failover.py | 6 +- tests/unit/test_pit_vintages.py | 10 +- tests/unit/test_progress_logging.py | 16 +- tests/unit/test_quality_failover.py | 30 ++- tests/unit/test_rate_limit.py | 2 +- tests/unit/test_reader.py | 16 +- tests/unit/test_retry_hardening.py | 14 +- tests/unit/test_rotation_adapters.py | 6 +- tests/unit/test_schema_validation.py | 2 +- tests/unit/test_sector_bars_backfill.py | 12 +- tests/unit/test_sector_code_map.py | 4 +- tests/unit/test_sector_routing.py | 22 +- tests/unit/test_sentiment_batch.py | 10 +- tests/unit/test_serve.py | 28 +-- tests/unit/test_share_unlock.py | 6 +- tests/unit/test_share_unlock_backfill.py | 16 +- tests/unit/test_shareholders.py | 6 +- tests/unit/test_sina_bars.py | 2 +- tests/unit/test_source_health.py | 18 +- tests/unit/test_st_label_crosscheck.py | 4 +- tests/unit/test_staging_cleanup.py | 28 +-- tests/unit/test_stale_only.py | 10 +- tests/unit/test_state.py | 2 +- tests/unit/test_stats.py | 16 +- tests/unit/test_stock_news.py | 8 +- tests/unit/test_structure_steps.py | 8 +- tests/unit/test_subscription_placeholder.py | 6 +- tests/unit/test_survivorship.py | 4 +- tests/unit/test_sw_industry_history.py | 2 +- tests/unit/test_symbols.py | 2 +- tests/unit/test_tdx_client_config.py | 16 +- tests/unit/test_tdx_corporate_actions.py | 2 +- tests/unit/test_tdx_decode.py | 2 +- tests/unit/test_tdx_decoupling.py | 14 +- tests/unit/test_tdx_mock_gate.py | 6 +- tests/unit/test_tdx_quotes.py | 2 +- tests/unit/test_tdx_sector_bars.py | 12 +- tests/unit/test_thin_step_wrappers.py | 8 +- tests/unit/test_ths_boards.py | 4 +- tests/unit/test_ths_pacing.py | 2 +- tests/unit/test_ths_stock_bars.py | 20 +- tests/unit/test_tick_checks.py | 4 +- tests/unit/test_trade_ticks_adapter.py | 4 +- tests/unit/test_trade_ticks_step.py | 10 +- tests/unit/test_trading_status_coverage.py | 10 +- tests/unit/test_trading_status_history.py | 4 +- tests/unit/test_trading_status_st_backfill.py | 20 +- tests/unit/test_trading_status_st_clist.py | 2 +- tests/unit/test_v11_macro_risk.py | 34 +-- tests/unit/test_v11_p2.py | 16 +- tests/unit/test_valuation_orphans.py | 4 +- tests/unit/test_valuation_tip_hygiene.py | 16 +- tests/unit/test_verify.py | 24 +-- tests/unit/test_volume_units.py | 18 +- tests/unit/test_walk_day_backfill.py | 4 +- tests/unit/test_watermark_truth.py | 10 +- tests/unit/test_worker_manifest.py | 34 +-- tests/unit/test_worker_pool_broken.py | 22 +- uv.lock | 112 +++++----- 470 files changed, 2807 insertions(+), 2801 deletions(-) rename configs/{ashare-lake.example.toml => cnequity.example.toml} (94%) rename docs/assets/{asl-demo.png => cne-demo.png} (100%) rename docs/assets/{asl-load.png => cne-load.png} (100%) rename docs/assets/{asl-query.png => cne-query.png} (100%) rename docs/assets/{asl-serve-dataset.png => cne-serve-dataset.png} (100%) rename docs/assets/{asl-serve-hero-demo.png => cne-serve-hero-demo.png} (100%) rename docs/assets/{asl-serve-hero.png => cne-serve-hero.png} (100%) rename docs/assets/{asl-serve.png => cne-serve.png} (100%) rename scripts/launchd/{com.asharelake.daily.plist.template => com.cnequity.daily.plist.template} (85%) delete mode 100644 src/ashare_lake/__init__.py delete mode 100644 src/ashare_lake/adapters/baostock/__init__.py delete mode 100644 src/ashare_lake/adapters/cninfo/__init__.py delete mode 100644 src/ashare_lake/adapters/eastmoney/__init__.py delete mode 100644 src/ashare_lake/orchestrator/__init__.py delete mode 100644 src/ashare_lake/serve/__init__.py delete mode 100644 src/ashare_lake/storage/__init__.py create mode 100644 src/cnequity/__init__.py rename src/{ashare_lake => cnequity}/__main__.py (50%) rename src/{ashare_lake => cnequity}/adapters/__init__.py (100%) create mode 100644 src/cnequity/adapters/baostock/__init__.py rename src/{ashare_lake => cnequity}/adapters/baostock/_session.py (98%) rename src/{ashare_lake => cnequity}/adapters/baostock/delisted_bars.py (94%) rename src/{ashare_lake => cnequity}/adapters/baostock/instruments.py (97%) rename src/{ashare_lake => cnequity}/adapters/baostock/st_history.py (98%) rename src/{ashare_lake => cnequity}/adapters/baostock/valuation.py (99%) rename src/{ashare_lake => cnequity}/adapters/calendar/__init__.py (63%) rename src/{ashare_lake => cnequity}/adapters/calendar/exchange_calendar.py (96%) rename src/{ashare_lake => cnequity}/adapters/calendar/holidays_cn.py (100%) rename src/{ashare_lake => cnequity}/adapters/calendar/seeds/trading_calendar.csv (100%) rename src/{ashare_lake => cnequity}/adapters/cni/__init__.py (78%) rename src/{ashare_lake => cnequity}/adapters/cni/index_constituents_history.py (95%) create mode 100644 src/cnequity/adapters/cninfo/__init__.py rename src/{ashare_lake => cnequity}/adapters/cninfo/announcements.py (98%) rename src/{ashare_lake => cnequity}/adapters/cninfo/regulatory.py (97%) create mode 100644 src/cnequity/adapters/eastmoney/__init__.py rename src/{ashare_lake => cnequity}/adapters/eastmoney/bars.py (92%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/capital.py (97%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/clist.py (96%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/commodity_bars.py (96%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/common.py (98%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/consensus.py (92%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/corporate_actions.py (95%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/datacenter.py (98%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/datacenter_contracts.py (83%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/earnings_disclosure.py (95%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/economic_calendar.py (95%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/em_auth.py (99%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/fundamentals.py (97%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/index_constituents.py (88%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/industry.py (88%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/institutional.py (94%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/instruments.py (90%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/news_wire.py (95%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/rotation.py (96%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/sectors.py (89%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/share_unlock.py (94%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/shareholders.py (98%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/stock_news.py (94%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/trading_status.py (92%) rename src/{ashare_lake => cnequity}/adapters/eastmoney/valuation.py (82%) rename src/{ashare_lake => cnequity}/adapters/exchange/__init__.py (81%) rename src/{ashare_lake => cnequity}/adapters/exchange/st_lists.py (98%) rename src/{ashare_lake => cnequity}/adapters/macro/__init__.py (100%) rename src/{ashare_lake => cnequity}/adapters/macro/indicators.py (97%) rename src/{ashare_lake => cnequity}/adapters/nbs/__init__.py (51%) rename src/{ashare_lake => cnequity}/adapters/nbs/pmi_release.py (100%) rename src/{ashare_lake => cnequity}/adapters/pboc/__init__.py (50%) rename src/{ashare_lake => cnequity}/adapters/pboc/_tables.py (100%) rename src/{ashare_lake => cnequity}/adapters/pboc/social_financing.py (96%) rename src/{ashare_lake => cnequity}/adapters/sina/__init__.py (65%) rename src/{ashare_lake => cnequity}/adapters/sina/adj_factors.py (95%) rename src/{ashare_lake => cnequity}/adapters/sina/bars.py (97%) rename src/{ashare_lake => cnequity}/adapters/sina/domestic_futures.py (100%) rename src/{ashare_lake => cnequity}/adapters/sina/global_futures.py (100%) rename src/{ashare_lake => cnequity}/adapters/sw/__init__.py (78%) rename src/{ashare_lake => cnequity}/adapters/sw/geotrust_g2_tls_cn_rsa4096.pem (100%) rename src/{ashare_lake => cnequity}/adapters/sw/industry_history.py (96%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/__init__.py (87%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_decode.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/LICENSE.tdxpy (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/__init__.py (82%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/constants.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/exceptions.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/heartbeat.py (95%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/helper.py (97%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/logger.py (84%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/__init__.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/base.py (98%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/raw_parser.py (82%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/setup_commands.py (94%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/__init__.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_history_transaction_data.py (95%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_index_bars.py (94%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_security_bars.py (94%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_security_count.py (87%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_security_list.py (90%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_transaction_data.py (92%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/parser/std/get_xdxr_info.py (96%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/_wire/socket_client.py (96%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/bars.py (95%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/client.py (96%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/corporate_actions.py (97%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/hosts.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/minute_bars.py (97%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/quotes.py (99%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/sector_bars.py (92%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/session.py (100%) rename src/{ashare_lake => cnequity}/adapters/tdx_protocol/trade_ticks.py (97%) rename src/{ashare_lake => cnequity}/adapters/throttle.py (89%) rename src/{ashare_lake => cnequity}/adapters/ths/__init__.py (80%) rename src/{ashare_lake => cnequity}/adapters/ths/boards.py (99%) rename src/{ashare_lake => cnequity}/adapters/ths/index_bars.py (97%) rename src/{ashare_lake => cnequity}/adapters/ths/seeds/board_catalog_seed.json (100%) rename src/{ashare_lake => cnequity}/adapters/ths/stock_bars.py (96%) rename src/{ashare_lake => cnequity}/cli/__init__.py (100%) rename src/{ashare_lake => cnequity}/cli/demo.py (90%) rename src/{ashare_lake => cnequity}/cli/main.py (92%) rename src/{ashare_lake => cnequity}/config/__init__.py (84%) rename src/{ashare_lake => cnequity}/config/bootstrap.py (87%) rename src/{ashare_lake => cnequity}/config/loader.py (97%) rename src/{ashare_lake => cnequity}/config/templates/__init__.py (100%) rename src/{ashare_lake/config/templates/ashare-lake.example.toml => cnequity/config/templates/cnequity.example.toml} (94%) rename src/{ashare_lake => cnequity}/derive/__init__.py (100%) rename src/{ashare_lake => cnequity}/derive/adj_factors.py (96%) rename src/{ashare_lake => cnequity}/derive/industry_index.py (96%) rename src/{ashare_lake => cnequity}/derive/market_breadth.py (98%) rename src/{ashare_lake => cnequity}/derive/sector_code_map.py (97%) rename src/{ashare_lake => cnequity}/derive/sector_routing.py (95%) rename src/{ashare_lake => cnequity}/derive/sentiment_scores.py (97%) rename src/{ashare_lake => cnequity}/derive/trading_status_history.py (96%) rename src/{ashare_lake => cnequity}/diagnostics/__init__.py (67%) rename src/{ashare_lake => cnequity}/diagnostics/health_page.py (96%) rename src/{ashare_lake => cnequity}/diagnostics/packages.py (100%) rename src/{ashare_lake => cnequity}/diagnostics/render.py (97%) rename src/{ashare_lake => cnequity}/diagnostics/report.py (90%) rename src/{ashare_lake => cnequity}/diagnostics/source_health.py (94%) rename src/{ashare_lake => cnequity}/domain/__init__.py (70%) rename src/{ashare_lake => cnequity}/domain/datasets.py (99%) rename src/{ashare_lake => cnequity}/domain/market_time.py (100%) rename src/{ashare_lake => cnequity}/domain/partitions.py (100%) rename src/{ashare_lake => cnequity}/domain/rate_limit.py (97%) rename src/{ashare_lake => cnequity}/domain/schemas.py (99%) rename src/{ashare_lake => cnequity}/domain/sentiment.py (100%) rename src/{ashare_lake => cnequity}/domain/symbols.py (100%) rename src/{ashare_lake => cnequity}/domain/units.py (97%) rename src/{ashare_lake => cnequity}/file_lock.py (100%) rename src/{ashare_lake => cnequity}/mcp_server/__init__.py (76%) rename src/{ashare_lake => cnequity}/mcp_server/catalog.py (99%) rename src/{ashare_lake => cnequity}/mcp_server/live.py (93%) rename src/{ashare_lake => cnequity}/mcp_server/protocol.py (96%) rename src/{ashare_lake => cnequity}/mcp_server/tools.py (97%) create mode 100644 src/cnequity/orchestrator/__init__.py rename src/{ashare_lake => cnequity}/orchestrator/compact_gate.py (95%) rename src/{ashare_lake => cnequity}/orchestrator/deps.py (96%) rename src/{ashare_lake => cnequity}/orchestrator/engine.py (97%) rename src/{ashare_lake => cnequity}/orchestrator/init_phases.py (100%) rename src/{ashare_lake => cnequity}/orchestrator/manifest.py (99%) rename src/{ashare_lake => cnequity}/orchestrator/registry.py (97%) rename src/{ashare_lake => cnequity}/orchestrator/run_lock.py (93%) rename src/{ashare_lake => cnequity}/orchestrator/worker_pool.py (95%) rename src/{ashare_lake => cnequity}/py.typed (100%) rename src/{ashare_lake => cnequity}/quality/__init__.py (100%) rename src/{ashare_lake => cnequity}/quality/audit.py (92%) rename src/{ashare_lake => cnequity}/quality/authority_checks.py (96%) rename src/{ashare_lake => cnequity}/quality/cross_checks.py (99%) rename src/{ashare_lake => cnequity}/quality/dataset_checks.py (97%) rename src/{ashare_lake => cnequity}/quality/failover.py (88%) rename src/{ashare_lake => cnequity}/quality/historical_validity.py (93%) rename src/{ashare_lake => cnequity}/quality/intraday_checks.py (97%) rename src/{ashare_lake => cnequity}/quality/macro_checks.py (98%) rename src/{ashare_lake => cnequity}/quality/source_diff.py (95%) rename src/{ashare_lake => cnequity}/quality/st_coverage.py (98%) rename src/{ashare_lake => cnequity}/quality/tick_checks.py (98%) rename src/{ashare_lake => cnequity}/quality/unit_checks.py (96%) rename src/{ashare_lake => cnequity}/quality/verify.py (94%) rename src/{ashare_lake => cnequity}/query/__init__.py (80%) rename src/{ashare_lake => cnequity}/query/on_demand.py (95%) rename src/{ashare_lake => cnequity}/query/parquet_scan.py (97%) rename src/{ashare_lake => cnequity}/query/reader.py (96%) rename src/{ashare_lake => cnequity}/query/universe.py (98%) rename src/{ashare_lake => cnequity}/query/views.py (95%) create mode 100644 src/cnequity/serve/__init__.py rename src/{ashare_lake => cnequity}/serve/app.py (97%) rename src/{ashare_lake => cnequity}/serve/lake.py (96%) rename src/{ashare_lake => cnequity}/serve/static/bundle.js (99%) rename src/{ashare_lake => cnequity}/serve/static/index.html (95%) rename src/{ashare_lake => cnequity}/serve/static/styles.css (100%) rename src/{ashare_lake => cnequity}/steps/__init__.py (84%) rename src/{ashare_lake => cnequity}/steps/bars.py (93%) rename src/{ashare_lake => cnequity}/steps/capital.py (93%) rename src/{ashare_lake => cnequity}/steps/commodity.py (78%) rename src/{ashare_lake => cnequity}/steps/common.py (96%) rename src/{ashare_lake => cnequity}/steps/delisted.py (97%) rename src/{ashare_lake => cnequity}/steps/events.py (87%) rename src/{ashare_lake => cnequity}/steps/finalize.py (90%) rename src/{ashare_lake => cnequity}/steps/fundamentals.py (92%) rename src/{ashare_lake => cnequity}/steps/http_common.py (90%) rename src/{ashare_lake => cnequity}/steps/intraday.py (94%) rename src/{ashare_lake => cnequity}/steps/macro_risk.py (89%) rename src/{ashare_lake => cnequity}/steps/newsboard.py (78%) rename src/{ashare_lake => cnequity}/steps/reference.py (94%) rename src/{ashare_lake => cnequity}/steps/research.py (82%) rename src/{ashare_lake => cnequity}/steps/rotation.py (95%) rename src/{ashare_lake => cnequity}/steps/structure.py (92%) rename src/{ashare_lake => cnequity}/steps/ticks.py (94%) create mode 100644 src/cnequity/storage/__init__.py rename src/{ashare_lake => cnequity}/storage/atomic.py (100%) rename src/{ashare_lake => cnequity}/storage/instruments.py (95%) rename src/{ashare_lake => cnequity}/storage/layout.py (83%) rename src/{ashare_lake => cnequity}/storage/parquet.py (94%) rename src/{ashare_lake => cnequity}/storage/repartition.py (95%) rename src/{ashare_lake => cnequity}/storage/source_snapshots.py (99%) rename src/{ashare_lake => cnequity}/storage/staging_cleanup.py (96%) rename src/{ashare_lake => cnequity}/storage/state.py (98%) rename src/{ashare_lake => cnequity}/storage/stats.py (97%) rename src/{ashare_lake => cnequity}/storage/valuation_orphans.py (93%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 00435b7..ac880e7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -7,7 +7,7 @@ body: attributes: value: | 感谢反馈。**安全问题**请走 - [SECURITY.md](https://github.com/rootSunc/ashare-lake/security/advisories/new), + [SECURITY.md](https://github.com/rootSunc/cnequity/security/advisories/new), 不要开公开 issue。 - type: textarea id: what @@ -22,7 +22,7 @@ body: label: 复现步骤 description: 尽量精简的命令/配置(打码本机路径与代理)。 placeholder: | - asl run daily --group reference --config configs/ashare-lake.toml + cne run daily --group reference --config configs/cnequity.toml validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c651193..ef89bd2 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,14 +1,14 @@ blank_issues_enabled: true contact_links: - name: 安全漏洞 - url: https://github.com/rootSunc/ashare-lake/security/advisories/new + url: https://github.com/rootSunc/cnequity/security/advisories/new about: 私密披露 — 请勿开公开 issue - name: 文档与定位 - url: https://rootsunc.github.io/ashare-lake/comparison/ + url: https://rootsunc.github.io/cnequity/comparison/ about: 提功能前先看与 akshare / Tushare / Baostock 的差异 - name: 快速开始与 Recipes - url: https://rootsunc.github.io/ashare-lake/ + url: https://rootsunc.github.io/cnequity/ about: 先用真实 demo 和可复制 Recipe 验证问题是否已经有答案 - name: 使用帮助与想法 - url: https://github.com/rootSunc/ashare-lake/discussions + url: https://github.com/rootSunc/cnequity/discussions about: 适合开放式问题、使用经验和还没有明确实现范围的想法 diff --git a/.github/ISSUE_TEMPLATE/source_regression.yml b/.github/ISSUE_TEMPLATE/source_regression.yml index 992fbd0..9728a4d 100644 --- a/.github/ISSUE_TEMPLATE/source_regression.yml +++ b/.github/ISSUE_TEMPLATE/source_regression.yml @@ -7,12 +7,12 @@ body: attributes: value: | 这张表用于上游数据源回归,不要附带湖数据或代理凭据。 - 安全问题请走私密 [SECURITY.md](https://github.com/rootSunc/ashare-lake/security/advisories/new)。 + 安全问题请走私密 [SECURITY.md](https://github.com/rootSunc/cnequity/security/advisories/new)。 - type: input id: source attributes: label: 源 key - description: '`asl sources --only ...` 使用的 key,例如 tdx_protocol、sina、eastmoney_push2。' + description: '`cne sources --only ...` 使用的 key,例如 tdx_protocol、sina、eastmoney_push2。' placeholder: "sina" validations: required: true @@ -32,9 +32,9 @@ body: id: command attributes: label: 最小复现命令与输出 - description: "请打码本地路径、代理地址、token;优先附 `asl sources --vantage