aether-quant 5.4.8__tar.gz → 6.6.4__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.
- aether_quant-6.6.4/.devcontainer/README.md +6 -0
- aether_quant-6.6.4/.devcontainer/dind-v1-test/devcontainer.json +14 -0
- aether_quant-6.6.4/.dockerignore +55 -0
- aether_quant-6.6.4/.gitattributes +5 -0
- aether_quant-6.6.4/.githooks/README.md +5 -0
- aether_quant-6.6.4/.githooks/pre-commit +36 -0
- aether_quant-6.6.4/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
- aether_quant-6.6.4/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- aether_quant-6.6.4/.github/PULL_REQUEST_TEMPLATE.md +26 -0
- aether_quant-6.6.4/.github/dependabot.yml +21 -0
- aether_quant-6.6.4/.github/workflows/ci.yml +420 -0
- aether_quant-6.6.4/.github/workflows/formal.yml +71 -0
- aether_quant-6.6.4/.github/workflows/forward-ledger.yml +53 -0
- aether_quant-6.6.4/.github/workflows/keepalive.yml +26 -0
- aether_quant-6.6.4/.github/workflows/release.yml +125 -0
- aether_quant-6.6.4/.github/workflows/research-cycle.yml +53 -0
- aether_quant-6.6.4/.gitignore +231 -0
- aether_quant-6.6.4/.gitleaks.toml +9 -0
- aether_quant-6.6.4/AGENTS.md +99 -0
- aether_quant-6.6.4/CODE_OF_CONDUCT.md +20 -0
- aether_quant-6.6.4/CONTRIBUTING.md +68 -0
- aether_quant-6.6.4/PKG-INFO +930 -0
- aether_quant-6.6.4/README.md +893 -0
- aether_quant-6.6.4/REPRODUCIBILITY.md +58 -0
- aether_quant-6.6.4/RUNBOOK.md +171 -0
- aether_quant-6.6.4/SECURITY.md +28 -0
- aether_quant-6.6.4/aether_quant/README.md +37 -0
- aether_quant-6.6.4/aether_quant/__init__.py +13 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/admission.json +22409 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/book_construction.json +34008 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/book_neutrality.json +20521 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/cost_model.json +9249 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/generation_blend.json +10509 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/generation_glide.json +12009 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/hash_chain.json +603 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/holdout_once.json +5503 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/json_safety.json +3246 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/kill_switch.json +17270 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/order_gate.json +5879 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/position_sizing.json +10509 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/reconciliation.json +11402 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/risk_controls.json +8559 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/session_resolve.json +6628 -0
- aether_quant-6.6.4/aether_quant/_formal_cases/sleeve_guard.json +6653 -0
- aether_quant-6.6.4/aether_quant/analyzer.py +10 -0
- aether_quant-6.6.4/aether_quant/audit.py +6 -0
- aether_quant-6.6.4/aether_quant/cycle.py +170 -0
- aether_quant-6.6.4/aether_quant/data.py +108 -0
- aether_quant-6.6.4/aether_quant/evaluation.py +103 -0
- aether_quant-6.6.4/aether_quant/execution.py +95 -0
- aether_quant-6.6.4/aether_quant/experience.py +16 -0
- aether_quant-6.6.4/aether_quant/experts.py +9 -0
- aether_quant-6.6.4/aether_quant/features.py +146 -0
- aether_quant-6.6.4/aether_quant/formal.py +44 -0
- aether_quant-6.6.4/aether_quant/inference.py +25 -0
- aether_quant-6.6.4/aether_quant/io.py +5 -0
- aether_quant-6.6.4/aether_quant/liquidity.py +10 -0
- aether_quant-6.6.4/aether_quant/moe.py +10 -0
- aether_quant-6.6.4/aether_quant/monitoring.py +10 -0
- aether_quant-6.6.4/aether_quant/notifications.py +9 -0
- aether_quant-6.6.4/aether_quant/performance.py +46 -0
- aether_quant-6.6.4/aether_quant/portfolio.py +375 -0
- aether_quant-6.6.4/aether_quant/regime.py +12 -0
- aether_quant-6.6.4/aether_quant/research.py +107 -0
- aether_quant-6.6.4/aether_quant/retraining.py +30 -0
- aether_quant-6.6.4/aether_quant/risk.py +108 -0
- aether_quant-6.6.4/aether_quant/topology.py +18 -0
- aether_quant-6.6.4/aether_quant/training.py +25 -0
- aether_quant-6.6.4/aether_quant.egg-info/PKG-INFO +930 -0
- aether_quant-6.6.4/aether_quant.egg-info/SOURCES.txt +1090 -0
- aether_quant-6.6.4/aether_quant.egg-info/requires.txt +19 -0
- aether_quant-6.6.4/aether_quant.egg-info/scm_file_list.json +1086 -0
- aether_quant-6.6.4/aether_quant.egg-info/scm_version.json +8 -0
- aether_quant-6.6.4/aether_quant.egg-info/top_level.txt +27 -0
- aether_quant-6.6.4/analyzer/README.md +19 -0
- aether_quant-6.6.4/analyzer/market_analyzer.py +533 -0
- aether_quant-6.6.4/aq_cli.py +5365 -0
- aether_quant-6.6.4/audit/README.md +13 -0
- aether_quant-6.6.4/audit/hash_chain.py +78 -0
- aether_quant-6.6.4/audit/postgres_audit.py +75 -0
- aether_quant-6.6.4/audit/postgres_worker.py +451 -0
- aether_quant-6.6.4/backtests/README.md +9 -0
- aether_quant-6.6.4/config.json +2598 -0
- aether_quant-6.6.4/cpp_inference_ext/README.md +18 -0
- aether_quant-6.6.4/data/README.md +11 -0
- aether_quant-6.6.4/data/alternative/trading-economics/indicator/.keep +0 -0
- aether_quant-6.6.4/data/reference/crypto_listing_dates.json +83 -0
- aether_quant-6.6.4/data_pipeline/README.md +44 -0
- aether_quant-6.6.4/data_pipeline/bar_synthesis.py +120 -0
- aether_quant-6.6.4/data_pipeline/binance_archive.py +193 -0
- aether_quant-6.6.4/data_pipeline/cftc_cot.py +148 -0
- aether_quant-6.6.4/data_pipeline/data_audit.py +254 -0
- aether_quant-6.6.4/data_pipeline/edgar_facts.py +568 -0
- aether_quant-6.6.4/data_pipeline/factor_file_backfill.py +482 -0
- aether_quant-6.6.4/data_pipeline/factor_library.py +68 -0
- aether_quant-6.6.4/data_pipeline/filing_text.py +104 -0
- aether_quant-6.6.4/data_pipeline/finra_short_volume.py +56 -0
- aether_quant-6.6.4/data_pipeline/fred_backfill.py +476 -0
- aether_quant-6.6.4/data_pipeline/net_retry.py +40 -0
- aether_quant-6.6.4/data_pipeline/price_overrides.json +10 -0
- aether_quant-6.6.4/data_pipeline/sec_form345.py +113 -0
- aether_quant-6.6.4/data_pipeline/sp500_membership.py +149 -0
- aether_quant-6.6.4/data_pipeline/yfinance_backfill.py +685 -0
- aether_quant-6.6.4/development/Changelog.md +902 -0
- aether_quant-6.6.4/development/Problems.md +1715 -0
- aether_quant-6.6.4/development/README.md +12 -0
- aether_quant-6.6.4/development/architecture.md +233 -0
- aether_quant-6.6.4/development/asset_universe.md +32 -0
- aether_quant-6.6.4/development/backtest_equity_chart.png +0 -0
- aether_quant-6.6.4/development/backups/Changelog.md.bak_pre_condense_v63 +2191 -0
- aether_quant-6.6.4/development/backups/Changelog.md.bak_pre_condense_v662 +2032 -0
- aether_quant-6.6.4/development/backups/Problems.md.bak_pre_condense_v63 +2508 -0
- aether_quant-6.6.4/development/backups/Problems.md.bak_pre_condense_v662 +3306 -0
- aether_quant-6.6.4/development/backups/Problems_pre_v664_b8.md +1710 -0
- aether_quant-6.6.4/development/backups/README.md +12 -0
- aether_quant-6.6.4/development/infrastructure.md +209 -0
- aether_quant-6.6.4/development/monte_carlo_equity_curves.png +0 -0
- aether_quant-6.6.4/development/project_structure.md +53 -0
- aether_quant-6.6.4/development/research_results.md +371 -0
- aether_quant-6.6.4/development/verification.md +75 -0
- aether_quant-6.6.4/docker-compose.yml +295 -0
- aether_quant-6.6.4/docs_facts.py +139 -0
- aether_quant-6.6.4/evaluation/README.md +73 -0
- aether_quant-6.6.4/evaluation/__init__.py +75 -0
- aether_quant-6.6.4/evaluation/alpha_decay.py +130 -0
- aether_quant-6.6.4/evaluation/alpha_proof.py +288 -0
- aether_quant-6.6.4/evaluation/audit_runners.py +156 -0
- aether_quant-6.6.4/evaluation/backtest_audit.py +537 -0
- aether_quant-6.6.4/evaluation/backtest_statistics.py +732 -0
- aether_quant-6.6.4/evaluation/class_ic_audit.py +101 -0
- aether_quant-6.6.4/evaluation/classification_parity.py +132 -0
- aether_quant-6.6.4/evaluation/engaged_day_skill.py +128 -0
- aether_quant-6.6.4/evaluation/factor_neutralization_check.py +175 -0
- aether_quant-6.6.4/evaluation/factor_spanning.py +97 -0
- aether_quant-6.6.4/evaluation/feature_parity.py +361 -0
- aether_quant-6.6.4/evaluation/feature_quality_audit.py +145 -0
- aether_quant-6.6.4/evaluation/fill_price_audit.py +216 -0
- aether_quant-6.6.4/evaluation/forward_ledger.py +171 -0
- aether_quant-6.6.4/evaluation/gate_audit.py +134 -0
- aether_quant-6.6.4/evaluation/gate_replica_audit.py +119 -0
- aether_quant-6.6.4/evaluation/generation_ledger.py +313 -0
- aether_quant-6.6.4/evaluation/generation_registry.py +189 -0
- aether_quant-6.6.4/evaluation/glide_calibration.py +263 -0
- aether_quant-6.6.4/evaluation/head_audit.py +148 -0
- aether_quant-6.6.4/evaluation/kill_switch_replay.py +229 -0
- aether_quant-6.6.4/evaluation/leakage_audit.py +125 -0
- aether_quant-6.6.4/evaluation/lean_attribution.py +436 -0
- aether_quant-6.6.4/evaluation/lean_benchmarks.py +55 -0
- aether_quant-6.6.4/evaluation/lean_report.py +46 -0
- aether_quant-6.6.4/evaluation/lean_statistics.py +178 -0
- aether_quant-6.6.4/evaluation/lean_verdict.py +126 -0
- aether_quant-6.6.4/evaluation/live_parity.py +760 -0
- aether_quant-6.6.4/evaluation/ml_cleanup.py +91 -0
- aether_quant-6.6.4/evaluation/model_audit.py +80 -0
- aether_quant-6.6.4/evaluation/model_predictions.py +308 -0
- aether_quant-6.6.4/evaluation/monte_carlo.py +162 -0
- aether_quant-6.6.4/evaluation/overfit_diagnostics.py +64 -0
- aether_quant-6.6.4/evaluation/paper_protocol.py +216 -0
- aether_quant-6.6.4/evaluation/pbo.py +68 -0
- aether_quant-6.6.4/evaluation/power_analysis.py +54 -0
- aether_quant-6.6.4/evaluation/premia_research.py +241 -0
- aether_quant-6.6.4/evaluation/probability_calibration.py +200 -0
- aether_quant-6.6.4/evaluation/rank_book_simulator.py +1348 -0
- aether_quant-6.6.4/evaluation/rank_ic_core.py +225 -0
- aether_quant-6.6.4/evaluation/rank_signal_calibration.py +753 -0
- aether_quant-6.6.4/evaluation/readme_research.py +658 -0
- aether_quant-6.6.4/evaluation/readme_statistics.py +237 -0
- aether_quant-6.6.4/evaluation/research_cells.py +154 -0
- aether_quant-6.6.4/evaluation/research_cycle.py +171 -0
- aether_quant-6.6.4/evaluation/research_harness.py +112 -0
- aether_quant-6.6.4/evaluation/research_probes.py +66 -0
- aether_quant-6.6.4/evaluation/research_round.py +536 -0
- aether_quant-6.6.4/evaluation/research_runners.py +98 -0
- aether_quant-6.6.4/evaluation/rolling_ic_gate_calibration.py +186 -0
- aether_quant-6.6.4/evaluation/rolling_ic_gate_replay.py +133 -0
- aether_quant-6.6.4/evaluation/rolling_ic_series.py +147 -0
- aether_quant-6.6.4/evaluation/round_builders.py +100 -0
- aether_quant-6.6.4/evaluation/sim_lean_calibration.py +83 -0
- aether_quant-6.6.4/evaluation/target_weights_engine.py +435 -0
- aether_quant-6.6.4/evaluation/trade_bootstrap.py +74 -0
- aether_quant-6.6.4/evaluation/tranche_book.py +111 -0
- aether_quant-6.6.4/evaluation/trend_sleeve_backtest.py +161 -0
- aether_quant-6.6.4/evaluation/trial_ledger.py +99 -0
- aether_quant-6.6.4/evaluation/trial_registry.py +82 -0
- aether_quant-6.6.4/evaluation/verification_matrix.py +147 -0
- aether_quant-6.6.4/evaluation/volatility_threshold_calibration.py +100 -0
- aether_quant-6.6.4/evaluation/walk_forward_linear.py +78 -0
- aether_quant-6.6.4/evaluation/wide_context.py +319 -0
- aether_quant-6.6.4/examples/aether_quant_cycle.py +44 -0
- aether_quant-6.6.4/examples/aether_quant_quickstart.py +71 -0
- aether_quant-6.6.4/execution/README.md +65 -0
- aether_quant-6.6.4/execution/__init__.py +98 -0
- aether_quant-6.6.4/execution/cost_model.py +307 -0
- aether_quant-6.6.4/execution/lean_config_render.py +156 -0
- aether_quant-6.6.4/execution/live_credentials_io.py +52 -0
- aether_quant-6.6.4/execution/order_gate.py +575 -0
- aether_quant-6.6.4/execution/paper_readiness.py +191 -0
- aether_quant-6.6.4/execution/paper_readiness_io.py +62 -0
- aether_quant-6.6.4/execution/paper_readiness_report.py +107 -0
- aether_quant-6.6.4/execution/paper_readiness_scheduler.py +136 -0
- aether_quant-6.6.4/experience/README.md +14 -0
- aether_quant-6.6.4/experts/README.md +7 -0
- aether_quant-6.6.4/features/README.md +22 -0
- aether_quant-6.6.4/features/__init__.py +139 -0
- aether_quant-6.6.4/features/asof_beta_labels.py +115 -0
- aether_quant-6.6.4/features/bond_features.py +418 -0
- aether_quant-6.6.4/features/cross_asset_sensitivity.py +120 -0
- aether_quant-6.6.4/features/cross_asset_timing.py +209 -0
- aether_quant-6.6.4/features/cross_sectional_inputs.py +157 -0
- aether_quant-6.6.4/features/cross_sectional_norm.py +16 -0
- aether_quant-6.6.4/features/fx_carry.py +67 -0
- aether_quant-6.6.4/features/fx_signals.py +109 -0
- aether_quant-6.6.4/features/training_splits.py +202 -0
- aether_quant-6.6.4/features/wide_panel.py +220 -0
- aether_quant-6.6.4/formal/AetherFormal/Admission.lean +154 -0
- aether_quant-6.6.4/formal/AetherFormal/BookConstruction.lean +273 -0
- aether_quant-6.6.4/formal/AetherFormal/BookNeutrality.lean +493 -0
- aether_quant-6.6.4/formal/AetherFormal/CostModel.lean +98 -0
- aether_quant-6.6.4/formal/AetherFormal/GenCases.lean +630 -0
- aether_quant-6.6.4/formal/AetherFormal/GenerationBlend.lean +142 -0
- aether_quant-6.6.4/formal/AetherFormal/GenerationGlide.lean +80 -0
- aether_quant-6.6.4/formal/AetherFormal/HashChain.lean +166 -0
- aether_quant-6.6.4/formal/AetherFormal/HoldoutOnce.lean +61 -0
- aether_quant-6.6.4/formal/AetherFormal/JsonSafety.lean +110 -0
- aether_quant-6.6.4/formal/AetherFormal/KillSwitch.lean +171 -0
- aether_quant-6.6.4/formal/AetherFormal/OrderGate.lean +149 -0
- aether_quant-6.6.4/formal/AetherFormal/PositionSizing.lean +129 -0
- aether_quant-6.6.4/formal/AetherFormal/Real.lean +46 -0
- aether_quant-6.6.4/formal/AetherFormal/Reconciliation.lean +111 -0
- aether_quant-6.6.4/formal/AetherFormal/RiskControls.lean +104 -0
- aether_quant-6.6.4/formal/AetherFormal/SessionResolve.lean +126 -0
- aether_quant-6.6.4/formal/AetherFormal/SleeveGuard.lean +71 -0
- aether_quant-6.6.4/formal/AetherFormal.lean +18 -0
- aether_quant-6.6.4/formal/README.md +84 -0
- aether_quant-6.6.4/formal/lake-manifest.json +96 -0
- aether_quant-6.6.4/formal/lakefile.toml +10 -0
- aether_quant-6.6.4/formal/lean-toolchain +1 -0
- aether_quant-6.6.4/generate_backtest_report.py +509 -0
- aether_quant-6.6.4/generate_evaluation_report.py +786 -0
- aether_quant-6.6.4/inference/README.md +27 -0
- aether_quant-6.6.4/inference/__init__.py +58 -0
- aether_quant-6.6.4/inference/exported_model.py +1142 -0
- aether_quant-6.6.4/inference/parallel_inference.py +160 -0
- aether_quant-6.6.4/lean.json +650 -0
- aether_quant-6.6.4/liquidity/README.md +25 -0
- aether_quant-6.6.4/liquidity/__init__.py +17 -0
- aether_quant-6.6.4/liquidity/market_liquidity.py +360 -0
- aether_quant-6.6.4/main.py +9464 -0
- aether_quant-6.6.4/ml/README.md +28 -0
- aether_quant-6.6.4/ml/backups/pre_v630_cleanup.zip +0 -0
- aether_quant-6.6.4/ml/forward/candidates.json +65 -0
- aether_quant-6.6.4/ml/generations/glide2_policy.json +260 -0
- aether_quant-6.6.4/ml/generations/glide_policy.json +55 -0
- aether_quant-6.6.4/ml/generations/lifecycle.jsonl +6 -0
- aether_quant-6.6.4/ml/generations/policy.json +22 -0
- aether_quant-6.6.4/ml/generations/registry.json +468 -0
- aether_quant-6.6.4/ml/generations/rules_glide1.json +271 -0
- aether_quant-6.6.4/ml/generations/rules_glide1.sha256 +1 -0
- aether_quant-6.6.4/ml/generations/rules_glide2.json +453 -0
- aether_quant-6.6.4/ml/generations/rules_glide2.sha256 +1 -0
- aether_quant-6.6.4/ml/target_weights.csv +1388 -0
- aether_quant-6.6.4/ml/target_weights_candidate.json +9 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_multitask_v1_gate_off.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_multitask_v2_book_heads.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_multitask_v3_listnet.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_multitask_v4_stop_rank5d.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_sequence_v1_gate_off.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_sequence_v2_book_heads.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_sequence_v3_listnet.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008/cfg_sequence_v4_stop_rank5d.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008r2/cfg_multitask_v1_gate_off.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008r2/cfg_multitask_v2_book_heads.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008r2/cfg_multitask_v3_listnet.json +2387 -0
- aether_quant-6.6.4/ml/variant_configs_v560cs20261008r2/cfg_multitask_v4_stop_rank5d.json +2387 -0
- aether_quant-6.6.4/moe/README.md +17 -0
- aether_quant-6.6.4/moe/gating.py +417 -0
- aether_quant-6.6.4/monitoring/README.md +19 -0
- aether_quant-6.6.4/monitoring/api_server.py +193 -0
- aether_quant-6.6.4/monitoring/assets_status.py +136 -0
- aether_quant-6.6.4/monitoring/evaluation_state.py +135 -0
- aether_quant-6.6.4/notifications/README.md +15 -0
- aether_quant-6.6.4/performance/README.md +16 -0
- aether_quant-6.6.4/performance_probe.py +219 -0
- aether_quant-6.6.4/portfolio/README.md +61 -0
- aether_quant-6.6.4/portfolio/__init__.py +69 -0
- aether_quant-6.6.4/portfolio/book_construction.py +1065 -0
- aether_quant-6.6.4/portfolio/book_neutrality.py +198 -0
- aether_quant-6.6.4/portfolio/cash_sweep.py +149 -0
- aether_quant-6.6.4/portfolio/class_sleeve.py +99 -0
- aether_quant-6.6.4/portfolio/crypto_signals.py +157 -0
- aether_quant-6.6.4/portfolio/direction_overlay.py +97 -0
- aether_quant-6.6.4/portfolio/filing_signals.py +191 -0
- aether_quant-6.6.4/portfolio/financing.py +82 -0
- aether_quant-6.6.4/portfolio/forex_sleeve.py +33 -0
- aether_quant-6.6.4/portfolio/generation_blend.py +248 -0
- aether_quant-6.6.4/portfolio/legacy_sleeve.py +165 -0
- aether_quant-6.6.4/portfolio/options_arbitrage_detector.py +267 -0
- aether_quant-6.6.4/portfolio/options_strategy.py +2013 -0
- aether_quant-6.6.4/portfolio/premia_signals.py +455 -0
- aether_quant-6.6.4/portfolio/rank_signal.py +282 -0
- aether_quant-6.6.4/portfolio/rolling_ic_gate.py +201 -0
- aether_quant-6.6.4/portfolio/signal_construction.py +70 -0
- aether_quant-6.6.4/portfolio/sleeve_guard.py +98 -0
- aether_quant-6.6.4/portfolio/target_weights.py +260 -0
- aether_quant-6.6.4/portfolio/trend_sleeve.py +164 -0
- aether_quant-6.6.4/portfolio/wide_signals.py +79 -0
- aether_quant-6.6.4/pyproject.toml +165 -0
- aether_quant-6.6.4/regime/README.md +15 -0
- aether_quant-6.6.4/regime/__init__.py +19 -0
- aether_quant-6.6.4/regime/market_regime.py +215 -0
- aether_quant-6.6.4/requirements/README.md +13 -0
- aether_quant-6.6.4/requirements/requirements-dev.txt +74 -0
- aether_quant-6.6.4/requirements/requirements.txt +48 -0
- aether_quant-6.6.4/retraining/README.md +45 -0
- aether_quant-6.6.4/retraining/lean_backtest.py +69 -0
- aether_quant-6.6.4/retraining/orchestrator.py +964 -0
- aether_quant-6.6.4/retraining/validation_gate.py +363 -0
- aether_quant-6.6.4/retraining/vault_client.py +216 -0
- aether_quant-6.6.4/retraining/vault_commands.py +73 -0
- aether_quant-6.6.4/retraining/worker.py +366 -0
- aether_quant-6.6.4/risk/README.md +56 -0
- aether_quant-6.6.4/risk/asset_class_router.py +632 -0
- aether_quant-6.6.4/risk/forex_risk.py +182 -0
- aether_quant-6.6.4/risk/kill_switch.py +289 -0
- aether_quant-6.6.4/risk/position_sizing.py +308 -0
- aether_quant-6.6.4/risk/rl_sizing.py +263 -0
- aether_quant-6.6.4/risk_controls.py +511 -0
- aether_quant-6.6.4/scripts/README.md +78 -0
- aether_quant-6.6.4/scripts/active_baseline.py +42 -0
- aether_quant-6.6.4/scripts/active_baseline_swap.sh +51 -0
- aether_quant-6.6.4/scripts/as_live_levers.py +435 -0
- aether_quant-6.6.4/scripts/book_variant_research.py +251 -0
- aether_quant-6.6.4/scripts/build_crypto_wide_root.py +218 -0
- aether_quant-6.6.4/scripts/build_filing_signals.py +198 -0
- aether_quant-6.6.4/scripts/build_holdout_data.py +132 -0
- aether_quant-6.6.4/scripts/build_holdout_dataset.py +116 -0
- aether_quant-6.6.4/scripts/build_legacy_probability.py +172 -0
- aether_quant-6.6.4/scripts/build_pre2013_root.py +124 -0
- aether_quant-6.6.4/scripts/build_trial_registry.py +36 -0
- aether_quant-6.6.4/scripts/build_wide_info.py +204 -0
- aether_quant-6.6.4/scripts/build_wide_root.py +167 -0
- aether_quant-6.6.4/scripts/check_axioms.py +97 -0
- aether_quant-6.6.4/scripts/check_test_count_drift.py +68 -0
- aether_quant-6.6.4/scripts/class_sleeve_research.py +196 -0
- aether_quant-6.6.4/scripts/clean_checkout_test.ps1 +57 -0
- aether_quant-6.6.4/scripts/codespace_calibration_v600.sh +19 -0
- aether_quant-6.6.4/scripts/codespace_clean_checkout_test.sh +14 -0
- aether_quant-6.6.4/scripts/codespace_diag.sh +8 -0
- aether_quant-6.6.4/scripts/codespace_engine_check.sh +29 -0
- aether_quant-6.6.4/scripts/codespace_final_session.sh +14 -0
- aether_quant-6.6.4/scripts/codespace_grep.sh +5 -0
- aether_quant-6.6.4/scripts/codespace_keepalive.sh +9 -0
- aether_quant-6.6.4/scripts/codespace_lean_dind.sh +122 -0
- aether_quant-6.6.4/scripts/codespace_lean_parallel.sh +107 -0
- aether_quant-6.6.4/scripts/codespace_lean_run.ps1 +143 -0
- aether_quant-6.6.4/scripts/codespace_mem.sh +7 -0
- aether_quant-6.6.4/scripts/codespace_memsummary.sh +10 -0
- aether_quant-6.6.4/scripts/codespace_memwatch.sh +11 -0
- aether_quant-6.6.4/scripts/codespace_p53_eval.sh +30 -0
- aether_quant-6.6.4/scripts/codespace_pack_eval.sh +6 -0
- aether_quant-6.6.4/scripts/codespace_predict_v600.sh +14 -0
- aether_quant-6.6.4/scripts/codespace_predict_v610.sh +10 -0
- aether_quant-6.6.4/scripts/codespace_prepare_v580.sh +32 -0
- aether_quant-6.6.4/scripts/codespace_prove.sh +35 -0
- aether_quant-6.6.4/scripts/codespace_readme_v610.sh +74 -0
- aether_quant-6.6.4/scripts/codespace_rebuild_then_b.sh +22 -0
- aether_quant-6.6.4/scripts/codespace_research_v600.sh +17 -0
- aether_quant-6.6.4/scripts/codespace_research_v610.sh +60 -0
- aether_quant-6.6.4/scripts/codespace_research_v620.sh +72 -0
- aether_quant-6.6.4/scripts/codespace_retrain_a.sh +46 -0
- aether_quant-6.6.4/scripts/codespace_retrain_b.sh +78 -0
- aether_quant-6.6.4/scripts/codespace_retrain_v570.sh +145 -0
- aether_quant-6.6.4/scripts/codespace_retrain_v580.sh +157 -0
- aether_quant-6.6.4/scripts/codespace_run_tests.sh +6 -0
- aether_quant-6.6.4/scripts/codespace_session_v600.sh +115 -0
- aether_quant-6.6.4/scripts/codespace_session_v610.sh +118 -0
- aether_quant-6.6.4/scripts/codespace_session_v620.sh +107 -0
- aether_quant-6.6.4/scripts/codespace_session_v630.sh +87 -0
- aether_quant-6.6.4/scripts/codespace_session_v640.sh +226 -0
- aether_quant-6.6.4/scripts/codespace_session_v644.sh +152 -0
- aether_quant-6.6.4/scripts/codespace_session_v644b.sh +100 -0
- aether_quant-6.6.4/scripts/codespace_session_v650.sh +84 -0
- aether_quant-6.6.4/scripts/codespace_start_bg.sh +9 -0
- aether_quant-6.6.4/scripts/codespace_status.sh +12 -0
- aether_quant-6.6.4/scripts/codespace_stop_jobs.sh +21 -0
- aether_quant-6.6.4/scripts/codespace_survival_test.sh +19 -0
- aether_quant-6.6.4/scripts/codespace_sync.ps1 +243 -0
- aether_quant-6.6.4/scripts/codespace_topology_retrain.sh +11 -0
- aether_quant-6.6.4/scripts/codespace_v664_extras.sh +44 -0
- aether_quant-6.6.4/scripts/codespace_verify.ps1 +60 -0
- aether_quant-6.6.4/scripts/codespace_verify.sh +149 -0
- aether_quant-6.6.4/scripts/codespace_wf_cleaner.sh +15 -0
- aether_quant-6.6.4/scripts/codespace_wf_done.sh +10 -0
- aether_quant-6.6.4/scripts/codespace_wf_progress.sh +8 -0
- aether_quant-6.6.4/scripts/coinbase_listing_dates.py +102 -0
- aether_quant-6.6.4/scripts/compare_datasets.py +80 -0
- aether_quant-6.6.4/scripts/compare_training_variants.py +183 -0
- aether_quant-6.6.4/scripts/crypto_fee_research.py +189 -0
- aether_quant-6.6.4/scripts/crypto_graduation_research.py +128 -0
- aether_quant-6.6.4/scripts/cycle_daily.py +234 -0
- aether_quant-6.6.4/scripts/cycle_decide.py +69 -0
- aether_quant-6.6.4/scripts/cycle_lean.py +237 -0
- aether_quant-6.6.4/scripts/cycle_retrain.py +327 -0
- aether_quant-6.6.4/scripts/daily_target_weights.py +150 -0
- aether_quant-6.6.4/scripts/data_append_guard.py +156 -0
- aether_quant-6.6.4/scripts/data_append_refresh.py +145 -0
- aether_quant-6.6.4/scripts/extend_frozen_weights.py +57 -0
- aether_quant-6.6.4/scripts/feature_parity_audit.py +440 -0
- aether_quant-6.6.4/scripts/fetch_cash_sweep_data.py +58 -0
- aether_quant-6.6.4/scripts/field_services.sh +57 -0
- aether_quant-6.6.4/scripts/field_test_services.py +140 -0
- aether_quant-6.6.4/scripts/forex_keep_or_drop.py +107 -0
- aether_quant-6.6.4/scripts/forex_sleeve_research.py +120 -0
- aether_quant-6.6.4/scripts/forward_ledger.py +207 -0
- aether_quant-6.6.4/scripts/freeze_run_config.py +64 -0
- aether_quant-6.6.4/scripts/gate_research.py +152 -0
- aether_quant-6.6.4/scripts/gate_value_compare.py +100 -0
- aether_quant-6.6.4/scripts/holdout_report.py +122 -0
- aether_quant-6.6.4/scripts/install_hooks.py +61 -0
- aether_quant-6.6.4/scripts/k09_decide.py +99 -0
- aether_quant-6.6.4/scripts/lean_calibration.py +460 -0
- aether_quant-6.6.4/scripts/lean_smoke/exception_scope.py +51 -0
- aether_quant-6.6.4/scripts/lean_smoke/futures_margin.py +46 -0
- aether_quant-6.6.4/scripts/lean_smoke/live_plumbing.sh +82 -0
- aether_quant-6.6.4/scripts/lean_smoke/live_plumbing_report.py +91 -0
- aether_quant-6.6.4/scripts/lean_smoke/main_option_order.py +69 -0
- aether_quant-6.6.4/scripts/lean_smoke/main_option_scenarios.py +194 -0
- aether_quant-6.6.4/scripts/lean_smoke/make_live_plumbing_config.py +63 -0
- aether_quant-6.6.4/scripts/lean_smoke/make_option_main_config.py +53 -0
- aether_quant-6.6.4/scripts/lean_smoke/option_structures.py +141 -0
- aether_quant-6.6.4/scripts/lean_smoke/run.sh +32 -0
- aether_quant-6.6.4/scripts/lean_smoke/run_main_option_order.sh +28 -0
- aether_quant-6.6.4/scripts/lean_smoke/run_main_option_scenarios.sh +31 -0
- aether_quant-6.6.4/scripts/lean_teardown_smoke/config.json +6 -0
- aether_quant-6.6.4/scripts/lean_teardown_smoke/main.py +21 -0
- aether_quant-6.6.4/scripts/library_gate.py +180 -0
- aether_quant-6.6.4/scripts/make_variant_configs.py +130 -0
- aether_quant-6.6.4/scripts/ml_manifest.py +43 -0
- aether_quant-6.6.4/scripts/model_candidate_research.py +201 -0
- aether_quant-6.6.4/scripts/mutation_check.py +160 -0
- aether_quant-6.6.4/scripts/overlap_vs_sharpe_analysis.py +96 -0
- aether_quant-6.6.4/scripts/predict_sweep_bt1.py +196 -0
- aether_quant-6.6.4/scripts/prepare_v610_candidates.py +142 -0
- aether_quant-6.6.4/scripts/profile_main_tick.py +190 -0
- aether_quant-6.6.4/scripts/readme_freshness.py +106 -0
- aether_quant-6.6.4/scripts/refresh_lean_interest_rate.py +119 -0
- aether_quant-6.6.4/scripts/refresh_universe_availability.py +110 -0
- aether_quant-6.6.4/scripts/rl_sizing_research.py +102 -0
- aether_quant-6.6.4/scripts/select_feature_subset.py +90 -0
- aether_quant-6.6.4/scripts/sleeve_alpha_check.py +110 -0
- aether_quant-6.6.4/scripts/splice_holdout_dataset.py +212 -0
- aether_quant-6.6.4/scripts/topology_sizing_research.py +129 -0
- aether_quant-6.6.4/scripts/v610_research.py +450 -0
- aether_quant-6.6.4/scripts/v620_research.py +274 -0
- aether_quant-6.6.4/scripts/v630_research.py +307 -0
- aether_quant-6.6.4/scripts/v640_research.py +1048 -0
- aether_quant-6.6.4/scripts/v643_microbench.py +84 -0
- aether_quant-6.6.4/scripts/v643_rcal4.py +72 -0
- aether_quant-6.6.4/scripts/v643_research.py +451 -0
- aether_quant-6.6.4/scripts/v643_sector_cap_frequency.py +84 -0
- aether_quant-6.6.4/scripts/v644_make_configs.py +97 -0
- aether_quant-6.6.4/scripts/v644_rcal5.py +137 -0
- aether_quant-6.6.4/scripts/v644_research.py +640 -0
- aether_quant-6.6.4/scripts/v650_amendment2.py +312 -0
- aether_quant-6.6.4/scripts/v650_install.py +55 -0
- aether_quant-6.6.4/scripts/v650_instrument.py +253 -0
- aether_quant-6.6.4/scripts/v650_lean.py +352 -0
- aether_quant-6.6.4/scripts/v650_make_recipe.py +44 -0
- aether_quant-6.6.4/scripts/v650_ml_scores.py +95 -0
- aether_quant-6.6.4/scripts/v650_research.py +222 -0
- aether_quant-6.6.4/scripts/v650_trials.py +61 -0
- aether_quant-6.6.4/scripts/v650_write_rules.py +104 -0
- aether_quant-6.6.4/scripts/v660_build_panel.py +38 -0
- aether_quant-6.6.4/scripts/v660_codespace_crypto.sh +13 -0
- aether_quant-6.6.4/scripts/v660_codespace_selection.sh +47 -0
- aether_quant-6.6.4/scripts/v660_crypto_splices.py +48 -0
- aether_quant-6.6.4/scripts/v660_lean.py +234 -0
- aether_quant-6.6.4/scripts/v660_rescore_v650.py +59 -0
- aether_quant-6.6.4/scripts/v660_research.py +385 -0
- aether_quant-6.6.4/scripts/v660_round2.py +408 -0
- aether_quant-6.6.4/scripts/v660_sanity.py +54 -0
- aether_quant-6.6.4/scripts/v660_trials.py +58 -0
- aether_quant-6.6.4/scripts/v660_venue_coverage.py +87 -0
- aether_quant-6.6.4/scripts/v660_venue_study.py +118 -0
- aether_quant-6.6.4/scripts/v660_verdict.py +201 -0
- aether_quant-6.6.4/scripts/v660_wait_codespace.sh +17 -0
- aether_quant-6.6.4/scripts/v660_write_rules.py +113 -0
- aether_quant-6.6.4/scripts/v661_codespace_audit.sh +11 -0
- aether_quant-6.6.4/scripts/v661_codespace_glide2.sh +12 -0
- aether_quant-6.6.4/scripts/v661_codespace_round3.sh +43 -0
- aether_quant-6.6.4/scripts/v661_glide.py +137 -0
- aether_quant-6.6.4/scripts/v661_model_audit.py +52 -0
- aether_quant-6.6.4/scripts/v661_replay_check.py +81 -0
- aether_quant-6.6.4/scripts/v661_sanity.py +47 -0
- aether_quant-6.6.4/scripts/v661_write_round3.py +111 -0
- aether_quant-6.6.4/scripts/v664_crypto_gbm.py +113 -0
- aether_quant-6.6.4/scripts/v664_drop_eos.py +60 -0
- aether_quant-6.6.4/scripts/v664_eos_repin.py +164 -0
- aether_quant-6.6.4/scripts/v664_register_observers.py +161 -0
- aether_quant-6.6.4/scripts/v664_sanity.py +68 -0
- aether_quant-6.6.4/scripts/v664_table_smoke.py +63 -0
- aether_quant-6.6.4/scripts/v664_write_rounds.py +178 -0
- aether_quant-6.6.4/scripts/vault_record.py +89 -0
- aether_quant-6.6.4/scripts/wheel_smoke.py +159 -0
- aether_quant-6.6.4/storage/README.md +3 -0
- aether_quant-6.6.4/tests/README.md +46 -0
- aether_quant-6.6.4/tests/data/aether_quant_api.json +853 -0
- aether_quant-6.6.4/tests/data/aether_quant_unexported.json +324 -0
- aether_quant-6.6.4/tests/data/modules_without_own_test.json +29 -0
- aether_quant-6.6.4/tests/test_aether_quant_api.py +101 -0
- aether_quant-6.6.4/tests/test_aether_quant_coverage.py +111 -0
- aether_quant-6.6.4/tests/test_aether_quant_quickstart.py +34 -0
- aether_quant-6.6.4/tests/test_alpha_decay.py +82 -0
- aether_quant-6.6.4/tests/test_alpha_proof.py +112 -0
- aether_quant-6.6.4/tests/test_alt_data_v650.py +269 -0
- aether_quant-6.6.4/tests/test_api_server.py +199 -0
- aether_quant-6.6.4/tests/test_aq_cli.py +4089 -0
- aether_quant-6.6.4/tests/test_aq_cycle_cli.py +104 -0
- aether_quant-6.6.4/tests/test_as_live_levers.py +96 -0
- aether_quant-6.6.4/tests/test_asof_beta_labels.py +102 -0
- aether_quant-6.6.4/tests/test_asset_class_router.py +522 -0
- aether_quant-6.6.4/tests/test_assets_status.py +160 -0
- aether_quant-6.6.4/tests/test_audit_postgres_worker.py +373 -0
- aether_quant-6.6.4/tests/test_backtest_audit.py +436 -0
- aether_quant-6.6.4/tests/test_backtest_statistics.py +244 -0
- aether_quant-6.6.4/tests/test_binance_archive.py +252 -0
- aether_quant-6.6.4/tests/test_book_variant_research.py +83 -0
- aether_quant-6.6.4/tests/test_build_holdout_dataset.py +39 -0
- aether_quant-6.6.4/tests/test_build_legacy_probability.py +55 -0
- aether_quant-6.6.4/tests/test_build_pre2013_root.py +77 -0
- aether_quant-6.6.4/tests/test_build_trial_registry.py +46 -0
- aether_quant-6.6.4/tests/test_cash_sweep.py +93 -0
- aether_quant-6.6.4/tests/test_check_axioms.py +48 -0
- aether_quant-6.6.4/tests/test_ci_scripts.py +100 -0
- aether_quant-6.6.4/tests/test_ci_workflows.py +326 -0
- aether_quant-6.6.4/tests/test_class_ic_audit.py +46 -0
- aether_quant-6.6.4/tests/test_class_sleeve.py +50 -0
- aether_quant-6.6.4/tests/test_class_sleeve_research.py +60 -0
- aether_quant-6.6.4/tests/test_classification_parity.py +94 -0
- aether_quant-6.6.4/tests/test_cli_help_surface.py +142 -0
- aether_quant-6.6.4/tests/test_codespace_lean_scripts.py +142 -0
- aether_quant-6.6.4/tests/test_codespace_session_v640.py +48 -0
- aether_quant-6.6.4/tests/test_codespace_session_v644.py +112 -0
- aether_quant-6.6.4/tests/test_compare_datasets.py +34 -0
- aether_quant-6.6.4/tests/test_compare_training_variants.py +100 -0
- aether_quant-6.6.4/tests/test_cost_model.py +350 -0
- aether_quant-6.6.4/tests/test_cross_asset_timing.py +241 -0
- aether_quant-6.6.4/tests/test_cross_sectional_inputs.py +123 -0
- aether_quant-6.6.4/tests/test_cross_sectional_norm.py +32 -0
- aether_quant-6.6.4/tests/test_crypto_fee_research.py +46 -0
- aether_quant-6.6.4/tests/test_crypto_signals.py +208 -0
- aether_quant-6.6.4/tests/test_cycle_daily.py +182 -0
- aether_quant-6.6.4/tests/test_cycle_lean.py +48 -0
- aether_quant-6.6.4/tests/test_cycle_retrain.py +315 -0
- aether_quant-6.6.4/tests/test_daily_target_weights.py +108 -0
- aether_quant-6.6.4/tests/test_data_append_guard.py +97 -0
- aether_quant-6.6.4/tests/test_data_audit.py +105 -0
- aether_quant-6.6.4/tests/test_direction_overlay.py +62 -0
- aether_quant-6.6.4/tests/test_docs_facts.py +169 -0
- aether_quant-6.6.4/tests/test_docs_links.py +155 -0
- aether_quant-6.6.4/tests/test_engaged_day_skill.py +88 -0
- aether_quant-6.6.4/tests/test_exported_model.py +1121 -0
- aether_quant-6.6.4/tests/test_factor_file_backfill.py +397 -0
- aether_quant-6.6.4/tests/test_factor_spanning.py +79 -0
- aether_quant-6.6.4/tests/test_feature_parity.py +171 -0
- aether_quant-6.6.4/tests/test_feature_quality_audit.py +53 -0
- aether_quant-6.6.4/tests/test_filing_signals.py +181 -0
- aether_quant-6.6.4/tests/test_filing_text.py +64 -0
- aether_quant-6.6.4/tests/test_fill_price_audit.py +116 -0
- aether_quant-6.6.4/tests/test_financing.py +57 -0
- aether_quant-6.6.4/tests/test_forex_keep_or_drop.py +34 -0
- aether_quant-6.6.4/tests/test_forex_sleeve.py +44 -0
- aether_quant-6.6.4/tests/test_formal_cases_drift.py +25 -0
- aether_quant-6.6.4/tests/test_formal_differential_admission.py +38 -0
- aether_quant-6.6.4/tests/test_formal_differential_book_construction.py +54 -0
- aether_quant-6.6.4/tests/test_formal_differential_book_neutrality.py +25 -0
- aether_quant-6.6.4/tests/test_formal_differential_cost_model.py +31 -0
- aether_quant-6.6.4/tests/test_formal_differential_generation_blend.py +19 -0
- aether_quant-6.6.4/tests/test_formal_differential_generation_glide.py +17 -0
- aether_quant-6.6.4/tests/test_formal_differential_hash_chain.py +41 -0
- aether_quant-6.6.4/tests/test_formal_differential_holdout_once.py +39 -0
- aether_quant-6.6.4/tests/test_formal_differential_json_safety.py +45 -0
- aether_quant-6.6.4/tests/test_formal_differential_kill_switch.py +32 -0
- aether_quant-6.6.4/tests/test_formal_differential_order_gate.py +38 -0
- aether_quant-6.6.4/tests/test_formal_differential_position_sizing.py +22 -0
- aether_quant-6.6.4/tests/test_formal_differential_reconciliation.py +28 -0
- aether_quant-6.6.4/tests/test_formal_differential_risk_controls.py +21 -0
- aether_quant-6.6.4/tests/test_formal_differential_session_resolve.py +34 -0
- aether_quant-6.6.4/tests/test_formal_differential_sleeve_guard.py +15 -0
- aether_quant-6.6.4/tests/test_formal_no_sorry.py +52 -0
- aether_quant-6.6.4/tests/test_forward_ledger.py +259 -0
- aether_quant-6.6.4/tests/test_fred_backfill.py +411 -0
- aether_quant-6.6.4/tests/test_freeze_run_config.py +51 -0
- aether_quant-6.6.4/tests/test_fx_carry.py +65 -0
- aether_quant-6.6.4/tests/test_fx_signals.py +61 -0
- aether_quant-6.6.4/tests/test_gate_audit.py +70 -0
- aether_quant-6.6.4/tests/test_gate_replica_audit.py +51 -0
- aether_quant-6.6.4/tests/test_gating_network.py +578 -0
- aether_quant-6.6.4/tests/test_generate_backtest_report.py +454 -0
- aether_quant-6.6.4/tests/test_generate_evaluation_report.py +607 -0
- aether_quant-6.6.4/tests/test_generation_blend.py +326 -0
- aether_quant-6.6.4/tests/test_generation_ledger.py +243 -0
- aether_quant-6.6.4/tests/test_generation_registry.py +168 -0
- aether_quant-6.6.4/tests/test_glide_calibration.py +131 -0
- aether_quant-6.6.4/tests/test_head_audit.py +60 -0
- aether_quant-6.6.4/tests/test_holdout_report.py +45 -0
- aether_quant-6.6.4/tests/test_install_hooks.py +48 -0
- aether_quant-6.6.4/tests/test_k09_decide.py +66 -0
- aether_quant-6.6.4/tests/test_kill_switch.py +486 -0
- aether_quant-6.6.4/tests/test_leakage_audit.py +75 -0
- aether_quant-6.6.4/tests/test_lean_attribution.py +184 -0
- aether_quant-6.6.4/tests/test_lean_backtest.py +84 -0
- aether_quant-6.6.4/tests/test_lean_benchmarks.py +59 -0
- aether_quant-6.6.4/tests/test_lean_calibration.py +100 -0
- aether_quant-6.6.4/tests/test_lean_config_render.py +121 -0
- aether_quant-6.6.4/tests/test_lean_report.py +77 -0
- aether_quant-6.6.4/tests/test_lean_runtime_imports.py +152 -0
- aether_quant-6.6.4/tests/test_lean_smoke_scripts.py +113 -0
- aether_quant-6.6.4/tests/test_lean_statistics.py +80 -0
- aether_quant-6.6.4/tests/test_lean_verdict.py +69 -0
- aether_quant-6.6.4/tests/test_learned_topology.py +510 -0
- aether_quant-6.6.4/tests/test_legacy_sleeve.py +124 -0
- aether_quant-6.6.4/tests/test_live_parity.py +339 -0
- aether_quant-6.6.4/tests/test_main_ensure_ready_smoke.py +273 -0
- aether_quant-6.6.4/tests/test_main_on_data_target_weights.py +183 -0
- aether_quant-6.6.4/tests/test_main_wiring.py +856 -0
- aether_quant-6.6.4/tests/test_make_variant_configs.py +67 -0
- aether_quant-6.6.4/tests/test_market_analyzer.py +710 -0
- aether_quant-6.6.4/tests/test_market_topology.py +1027 -0
- aether_quant-6.6.4/tests/test_ml_cleanup.py +47 -0
- aether_quant-6.6.4/tests/test_ml_manifest.py +30 -0
- aether_quant-6.6.4/tests/test_model_audit.py +81 -0
- aether_quant-6.6.4/tests/test_model_candidate_research.py +52 -0
- aether_quant-6.6.4/tests/test_model_predictions.py +335 -0
- aether_quant-6.6.4/tests/test_module_has_test.py +48 -0
- aether_quant-6.6.4/tests/test_monte_carlo.py +129 -0
- aether_quant-6.6.4/tests/test_mutation_check.py +88 -0
- aether_quant-6.6.4/tests/test_net_retry.py +50 -0
- aether_quant-6.6.4/tests/test_options_arbitrage_detector.py +241 -0
- aether_quant-6.6.4/tests/test_options_strategy.py +534 -0
- aether_quant-6.6.4/tests/test_options_strategy_multileg.py +586 -0
- aether_quant-6.6.4/tests/test_order_gate.py +608 -0
- aether_quant-6.6.4/tests/test_overfit_diagnostics.py +41 -0
- aether_quant-6.6.4/tests/test_overlap_vs_sharpe_analysis.py +60 -0
- aether_quant-6.6.4/tests/test_packaging_modules.py +123 -0
- aether_quant-6.6.4/tests/test_paper_protocol.py +93 -0
- aether_quant-6.6.4/tests/test_paper_readiness_io.py +110 -0
- aether_quant-6.6.4/tests/test_pbo.py +35 -0
- aether_quant-6.6.4/tests/test_performance_probe.py +138 -0
- aether_quant-6.6.4/tests/test_portfolio_book_construction.py +1117 -0
- aether_quant-6.6.4/tests/test_postgres_audit.py +113 -0
- aether_quant-6.6.4/tests/test_power_analysis.py +47 -0
- aether_quant-6.6.4/tests/test_premia_research.py +98 -0
- aether_quant-6.6.4/tests/test_premia_signals.py +233 -0
- aether_quant-6.6.4/tests/test_prepare_v610_candidates.py +32 -0
- aether_quant-6.6.4/tests/test_probability_calibration.py +92 -0
- aether_quant-6.6.4/tests/test_rank_book_simulator.py +408 -0
- aether_quant-6.6.4/tests/test_rank_ic_core.py +183 -0
- aether_quant-6.6.4/tests/test_rank_signal.py +286 -0
- aether_quant-6.6.4/tests/test_rank_signal_calibration.py +803 -0
- aether_quant-6.6.4/tests/test_readme_freshness.py +83 -0
- aether_quant-6.6.4/tests/test_readme_research.py +289 -0
- aether_quant-6.6.4/tests/test_readme_statistics.py +140 -0
- aether_quant-6.6.4/tests/test_refresh_lean_interest_rate.py +39 -0
- aether_quant-6.6.4/tests/test_refresh_universe_availability.py +62 -0
- aether_quant-6.6.4/tests/test_regime_model_input.py +89 -0
- aether_quant-6.6.4/tests/test_research_cells.py +123 -0
- aether_quant-6.6.4/tests/test_research_cycle.py +153 -0
- aether_quant-6.6.4/tests/test_research_harness.py +60 -0
- aether_quant-6.6.4/tests/test_research_probes.py +40 -0
- aether_quant-6.6.4/tests/test_research_round.py +362 -0
- aether_quant-6.6.4/tests/test_research_runners.py +74 -0
- aether_quant-6.6.4/tests/test_retraining_orchestrator.py +789 -0
- aether_quant-6.6.4/tests/test_retraining_worker.py +414 -0
- aether_quant-6.6.4/tests/test_risk_controls.py +664 -0
- aether_quant-6.6.4/tests/test_rl_sizing_v541.py +111 -0
- aether_quant-6.6.4/tests/test_rolling_ic_series.py +107 -0
- aether_quant-6.6.4/tests/test_round_builders.py +64 -0
- aether_quant-6.6.4/tests/test_sector_map.py +65 -0
- aether_quant-6.6.4/tests/test_signal_construction.py +93 -0
- aether_quant-6.6.4/tests/test_sim_lean_calibration.py +46 -0
- aether_quant-6.6.4/tests/test_sleeve_guard.py +53 -0
- aether_quant-6.6.4/tests/test_sp500_membership.py +167 -0
- aether_quant-6.6.4/tests/test_splice_holdout_dataset.py +119 -0
- aether_quant-6.6.4/tests/test_target_weights.py +143 -0
- aether_quant-6.6.4/tests/test_target_weights_engine.py +145 -0
- aether_quant-6.6.4/tests/test_topology_sizing_research.py +28 -0
- aether_quant-6.6.4/tests/test_trade_bootstrap.py +55 -0
- aether_quant-6.6.4/tests/test_train_asset_class_context_features.py +97 -0
- aether_quant-6.6.4/tests/test_train_cross_sectional.py +162 -0
- aether_quant-6.6.4/tests/test_train_cross_sectional_features.py +703 -0
- aether_quant-6.6.4/tests/test_train_forex_fill_forward.py +91 -0
- aether_quant-6.6.4/tests/test_train_indicators.py +216 -0
- aether_quant-6.6.4/tests/test_train_macro_features.py +160 -0
- aether_quant-6.6.4/tests/test_train_multitask.py +610 -0
- aether_quant-6.6.4/tests/test_train_ranking_validation.py +909 -0
- aether_quant-6.6.4/tests/test_train_rl_sizing.py +397 -0
- aether_quant-6.6.4/tests/test_train_sequence_architecture.py +328 -0
- aether_quant-6.6.4/tests/test_train_strategy_selector.py +221 -0
- aether_quant-6.6.4/tests/test_train_topology.py +207 -0
- aether_quant-6.6.4/tests/test_train_walk_forward_windows.py +176 -0
- aether_quant-6.6.4/tests/test_trend_sleeve.py +78 -0
- aether_quant-6.6.4/tests/test_trend_sleeve_backtest.py +69 -0
- aether_quant-6.6.4/tests/test_trial_ledger.py +78 -0
- aether_quant-6.6.4/tests/test_trial_registry.py +41 -0
- aether_quant-6.6.4/tests/test_v550_backtest_findings.py +159 -0
- aether_quant-6.6.4/tests/test_v550_parity_fixes.py +624 -0
- aether_quant-6.6.4/tests/test_v560_fixes.py +77 -0
- aether_quant-6.6.4/tests/test_v570_live_mechanisms.py +360 -0
- aether_quant-6.6.4/tests/test_v570_training_fixes.py +200 -0
- aether_quant-6.6.4/tests/test_v580_live_parity.py +498 -0
- aether_quant-6.6.4/tests/test_v580_training_fixes.py +62 -0
- aether_quant-6.6.4/tests/test_v600_across_symbols.py +113 -0
- aether_quant-6.6.4/tests/test_v600_config_decisions.py +57 -0
- aether_quant-6.6.4/tests/test_v600_extra_horizon.py +98 -0
- aether_quant-6.6.4/tests/test_v600_forex_parity.py +143 -0
- aether_quant-6.6.4/tests/test_v600_late_bar_cross_asset.py +82 -0
- aether_quant-6.6.4/tests/test_v600_sensitivity_vector.py +105 -0
- aether_quant-6.6.4/tests/test_v600_simulator_parity.py +150 -0
- aether_quant-6.6.4/tests/test_v610_config_decisions.py +17 -0
- aether_quant-6.6.4/tests/test_v610_forex_holidays.py +82 -0
- aether_quant-6.6.4/tests/test_v610_model_ensemble.py +70 -0
- aether_quant-6.6.4/tests/test_v610_research.py +109 -0
- aether_quant-6.6.4/tests/test_v610_simulator_parity.py +207 -0
- aether_quant-6.6.4/tests/test_v620_cash_sweep_parity.py +115 -0
- aether_quant-6.6.4/tests/test_v620_config_decisions.py +33 -0
- aether_quant-6.6.4/tests/test_v620_dedupe.py +47 -0
- aether_quant-6.6.4/tests/test_v620_model_inputs.py +78 -0
- aether_quant-6.6.4/tests/test_v620_research.py +52 -0
- aether_quant-6.6.4/tests/test_v620_tranche_book.py +102 -0
- aether_quant-6.6.4/tests/test_v630_research.py +78 -0
- aether_quant-6.6.4/tests/test_v630_round.py +67 -0
- aether_quant-6.6.4/tests/test_v640_research.py +295 -0
- aether_quant-6.6.4/tests/test_v640_round.py +280 -0
- aether_quant-6.6.4/tests/test_v643_formal_findings.py +172 -0
- aether_quant-6.6.4/tests/test_v644_fixes.py +110 -0
- aether_quant-6.6.4/tests/test_v650_lean.py +82 -0
- aether_quant-6.6.4/tests/test_v650_scripts.py +148 -0
- aether_quant-6.6.4/tests/test_v660_fixes.py +602 -0
- aether_quant-6.6.4/tests/test_v660_research.py +236 -0
- aether_quant-6.6.4/tests/test_v660_round2.py +70 -0
- aether_quant-6.6.4/tests/test_v664_crypto_gbm.py +78 -0
- aether_quant-6.6.4/tests/test_v664_eos_repin.py +35 -0
- aether_quant-6.6.4/tests/test_v664_late_session.py +96 -0
- aether_quant-6.6.4/tests/test_v664_mutation_ledgers.py +410 -0
- aether_quant-6.6.4/tests/test_v664_mutation_safety.py +240 -0
- aether_quant-6.6.4/tests/test_v664_properties.py +281 -0
- aether_quant-6.6.4/tests/test_v664_register_observers.py +85 -0
- aether_quant-6.6.4/tests/test_v664_sanity.py +35 -0
- aether_quant-6.6.4/tests/test_v664_write_rounds.py +86 -0
- aether_quant-6.6.4/tests/test_validation_gate.py +369 -0
- aether_quant-6.6.4/tests/test_vault_client.py +271 -0
- aether_quant-6.6.4/tests/test_vault_commands.py +80 -0
- aether_quant-6.6.4/tests/test_vault_contract.py +174 -0
- aether_quant-6.6.4/tests/test_vault_record.py +67 -0
- aether_quant-6.6.4/tests/test_verification_matrix.py +92 -0
- aether_quant-6.6.4/tests/test_volatility_threshold_calibration.py +82 -0
- aether_quant-6.6.4/tests/test_walk_forward_linear.py +108 -0
- aether_quant-6.6.4/tests/test_walk_forward_multimodel.py +286 -0
- aether_quant-6.6.4/tests/test_wide_info.py +387 -0
- aether_quant-6.6.4/tests/test_wide_signals.py +244 -0
- aether_quant-6.6.4/tests/test_yfinance_backfill.py +513 -0
- aether_quant-6.6.4/todo.md +46 -0
- aether_quant-6.6.4/topology/README.md +26 -0
- aether_quant-6.6.4/topology/__init__.py +25 -0
- aether_quant-6.6.4/topology/learned_topology.py +340 -0
- aether_quant-6.6.4/topology/market_topology.py +841 -0
- aether_quant-6.6.4/train.py +7648 -0
- aether_quant-6.6.4/train_cross_sectional.py +342 -0
- aether_quant-6.6.4/train_multitask.py +875 -0
- aether_quant-6.6.4/train_rl_sizing.py +802 -0
- aether_quant-6.6.4/train_sequence.py +887 -0
- aether_quant-6.6.4/train_topology.py +441 -0
- aether_quant-6.6.4/visualization/README.md +12 -0
- aether_quant-6.6.4/visualization/forex_order_sizing.jsonl +6946 -0
- aether_quant-6.6.4/webui/README.md +40 -0
- aether_quant-6.6.4/webui/src/api/client.ts +35 -0
- aether_quant-6.6.4/webui/src/api/hooks.ts +132 -0
- aether_quant-6.6.4/webui/src/components/monitoring/AssetsStatusPanel.test.tsx +60 -0
- aether_quant-6.6.4/webui/src/components/monitoring/AssetsStatusPanel.tsx +123 -0
- aether_quant-6.6.4/webui/src/components/monitoring/GenerationsPanel.tsx +64 -0
- aether_quant-6.6.4/webui/src/pages/OperationsPage.tsx +40 -0
- aether_quant-6.6.4/webui/src/pages/pages.test.tsx +210 -0
- aether_quant-6.6.4/webui/src/types/state.ts +997 -0
- aether_quant-5.4.8/.devcontainer/README.md +0 -12
- aether_quant-5.4.8/.devcontainer/dind-v1-test/devcontainer.json +0 -14
- aether_quant-5.4.8/.dockerignore +0 -51
- aether_quant-5.4.8/.gitattributes +0 -2
- aether_quant-5.4.8/.githooks/README.md +0 -14
- aether_quant-5.4.8/.githooks/pre-commit +0 -29
- aether_quant-5.4.8/.github/ISSUE_TEMPLATE/bug_report.md +0 -50
- aether_quant-5.4.8/.github/ISSUE_TEMPLATE/feature_request.md +0 -32
- aether_quant-5.4.8/.github/PULL_REQUEST_TEMPLATE.md +0 -37
- aether_quant-5.4.8/.github/workflows/ci.yml +0 -158
- aether_quant-5.4.8/.github/workflows/release.yml +0 -125
- aether_quant-5.4.8/.gitignore +0 -192
- aether_quant-5.4.8/AGENTS.md +0 -144
- aether_quant-5.4.8/CODE_OF_CONDUCT.md +0 -56
- aether_quant-5.4.8/CONTRIBUTING.md +0 -167
- aether_quant-5.4.8/PKG-INFO +0 -7
- aether_quant-5.4.8/README.md +0 -1231
- aether_quant-5.4.8/REPRODUCIBILITY.md +0 -65
- aether_quant-5.4.8/RUNBOOK.md +0 -122
- aether_quant-5.4.8/SECURITY.md +0 -64
- aether_quant-5.4.8/aether_quant.egg-info/PKG-INFO +0 -7
- aether_quant-5.4.8/aether_quant.egg-info/SOURCES.txt +0 -546
- aether_quant-5.4.8/aether_quant.egg-info/scm_file_list.json +0 -543
- aether_quant-5.4.8/aether_quant.egg-info/scm_version.json +0 -8
- aether_quant-5.4.8/aether_quant.egg-info/top_level.txt +0 -13
- aether_quant-5.4.8/analyzer/README.md +0 -69
- aether_quant-5.4.8/analyzer/market_analyzer.py +0 -521
- aether_quant-5.4.8/aq_cli.py +0 -3633
- aether_quant-5.4.8/audit/README.md +0 -47
- aether_quant-5.4.8/audit/hash_chain.py +0 -52
- aether_quant-5.4.8/audit/postgres_audit.py +0 -61
- aether_quant-5.4.8/audit/postgres_worker.py +0 -402
- aether_quant-5.4.8/config.json +0 -2333
- aether_quant-5.4.8/cpp_inference_ext/README.md +0 -60
- aether_quant-5.4.8/data_pipeline/README.md +0 -257
- aether_quant-5.4.8/data_pipeline/bar_synthesis.py +0 -97
- aether_quant-5.4.8/data_pipeline/factor_file_backfill.py +0 -276
- aether_quant-5.4.8/data_pipeline/fred_backfill.py +0 -435
- aether_quant-5.4.8/data_pipeline/yfinance_backfill.py +0 -501
- aether_quant-5.4.8/development/Changelog.md +0 -1888
- aether_quant-5.4.8/development/Problems.md +0 -1646
- aether_quant-5.4.8/development/README.md +0 -36
- aether_quant-5.4.8/development/architecture.md +0 -2090
- aether_quant-5.4.8/development/asset_universe.md +0 -189
- aether_quant-5.4.8/development/backtest_equity_chart.png +0 -0
- aether_quant-5.4.8/development/backups/README.md +0 -22
- aether_quant-5.4.8/development/infrastructure.md +0 -775
- aether_quant-5.4.8/development/monte_carlo_equity_curves.png +0 -0
- aether_quant-5.4.8/development/project_structure.md +0 -70
- aether_quant-5.4.8/docker-compose.yml +0 -292
- aether_quant-5.4.8/evaluation/README.md +0 -152
- aether_quant-5.4.8/evaluation/__init__.py +0 -73
- aether_quant-5.4.8/evaluation/factor_neutralization_check.py +0 -94
- aether_quant-5.4.8/evaluation/feature_parity.py +0 -321
- aether_quant-5.4.8/evaluation/kill_switch_replay.py +0 -186
- aether_quant-5.4.8/evaluation/model_predictions.py +0 -192
- aether_quant-5.4.8/evaluation/monte_carlo.py +0 -161
- aether_quant-5.4.8/evaluation/rank_book_simulator.py +0 -494
- aether_quant-5.4.8/evaluation/rank_ic_core.py +0 -204
- aether_quant-5.4.8/evaluation/rank_signal_calibration.py +0 -690
- aether_quant-5.4.8/evaluation/rolling_ic_gate_calibration.py +0 -190
- aether_quant-5.4.8/evaluation/rolling_ic_gate_replay.py +0 -138
- aether_quant-5.4.8/execution/README.md +0 -281
- aether_quant-5.4.8/execution/__init__.py +0 -80
- aether_quant-5.4.8/execution/cost_model.py +0 -213
- aether_quant-5.4.8/execution/lean_config_render.py +0 -131
- aether_quant-5.4.8/execution/live_credentials_io.py +0 -52
- aether_quant-5.4.8/execution/order_gate.py +0 -388
- aether_quant-5.4.8/execution/paper_readiness.py +0 -181
- aether_quant-5.4.8/execution/paper_readiness_io.py +0 -54
- aether_quant-5.4.8/execution/paper_readiness_report.py +0 -103
- aether_quant-5.4.8/execution/paper_readiness_scheduler.py +0 -137
- aether_quant-5.4.8/experience/README.md +0 -68
- aether_quant-5.4.8/experts/README.md +0 -37
- aether_quant-5.4.8/features/README.md +0 -77
- aether_quant-5.4.8/features/__init__.py +0 -137
- aether_quant-5.4.8/features/bond_features.py +0 -275
- aether_quant-5.4.8/features/cross_asset_sensitivity.py +0 -79
- aether_quant-5.4.8/generate_backtest_report.py +0 -311
- aether_quant-5.4.8/generate_evaluation_report.py +0 -712
- aether_quant-5.4.8/inference/README.md +0 -105
- aether_quant-5.4.8/inference/__init__.py +0 -36
- aether_quant-5.4.8/inference/exported_model.py +0 -929
- aether_quant-5.4.8/inference/parallel_inference.py +0 -160
- aether_quant-5.4.8/lean.json +0 -649
- aether_quant-5.4.8/liquidity/README.md +0 -97
- aether_quant-5.4.8/liquidity/__init__.py +0 -15
- aether_quant-5.4.8/liquidity/market_liquidity.py +0 -335
- aether_quant-5.4.8/main.py +0 -7779
- aether_quant-5.4.8/ml/README.md +0 -84
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bearish/metrics.json +0 -314
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bearish/model.pt +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bearish/model_weights.json +0 -1900
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bearish/multitask_model.json +0 -1954
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bearish/multitask_training_metrics.json +0 -202
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bullish/metrics.json +0 -308
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bullish/model.pt +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bullish/model_weights.json +0 -1902
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bullish/multitask_model.json +0 -1954
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/bullish/multitask_training_metrics.json +0 -227
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/sideways/metrics.json +0 -325
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/sideways/model.pt +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/sideways/model_weights.json +0 -1901
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/sideways/multitask_model.json +0 -1954
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/sideways/multitask_training_metrics.json +0 -192
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/volatility/metrics.json +0 -295
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/volatility/model.pt +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/volatility/model_weights.json +0 -1901
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/volatility/multitask_model.json +0 -1954
- aether_quant-5.4.8/ml/_backup_pre_v537/expert_models/volatility/multitask_training_metrics.json +0 -232
- aether_quant-5.4.8/ml/_backup_pre_v537/feature_schema.json +0 -2378
- aether_quant-5.4.8/ml/_backup_pre_v537/gating_feature_schema.json +0 -30
- aether_quant-5.4.8/ml/_backup_pre_v537/gating_model.json +0 -570
- aether_quant-5.4.8/ml/_backup_pre_v537/gating_training_metrics.json +0 -262
- aether_quant-5.4.8/ml/_backup_pre_v537/model.pt +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/model_weights.json +0 -11017
- aether_quant-5.4.8/ml/_backup_pre_v537/multitask_feature_schema.json +0 -70
- aether_quant-5.4.8/ml/_backup_pre_v537/multitask_model.json +0 -7448
- aether_quant-5.4.8/ml/_backup_pre_v537/multitask_training_metrics.json +0 -11852
- aether_quant-5.4.8/ml/_backup_pre_v537/scaler.pkl +0 -0
- aether_quant-5.4.8/ml/_backup_pre_v537/scaler_stats.json +0 -156
- aether_quant-5.4.8/ml/_backup_pre_v537/sequence_feature_schema.json +0 -71
- aether_quant-5.4.8/ml/_backup_pre_v537/sequence_model.json +0 -16695
- aether_quant-5.4.8/ml/_backup_pre_v537/sequence_training_metrics.json +0 -11872
- aether_quant-5.4.8/ml/_backup_pre_v537/training_metrics.json +0 -633
- aether_quant-5.4.8/moe/README.md +0 -147
- aether_quant-5.4.8/moe/gating.py +0 -414
- aether_quant-5.4.8/monitoring/README.md +0 -23
- aether_quant-5.4.8/monitoring/api_server.py +0 -187
- aether_quant-5.4.8/monitoring/assets_status.py +0 -90
- aether_quant-5.4.8/monitoring/evaluation_state.py +0 -127
- aether_quant-5.4.8/notifications/README.md +0 -52
- aether_quant-5.4.8/performance/README.md +0 -79
- aether_quant-5.4.8/portfolio/README.md +0 -447
- aether_quant-5.4.8/portfolio/__init__.py +0 -41
- aether_quant-5.4.8/portfolio/book_construction.py +0 -786
- aether_quant-5.4.8/portfolio/book_neutrality.py +0 -178
- aether_quant-5.4.8/portfolio/options_arbitrage_detector.py +0 -232
- aether_quant-5.4.8/portfolio/options_strategy.py +0 -1999
- aether_quant-5.4.8/portfolio/rank_signal.py +0 -219
- aether_quant-5.4.8/portfolio/rolling_ic_gate.py +0 -183
- aether_quant-5.4.8/pyproject.toml +0 -123
- aether_quant-5.4.8/regime/README.md +0 -53
- aether_quant-5.4.8/regime/__init__.py +0 -17
- aether_quant-5.4.8/regime/market_regime.py +0 -187
- aether_quant-5.4.8/requirements/README.md +0 -28
- aether_quant-5.4.8/requirements/requirements-dev.txt +0 -63
- aether_quant-5.4.8/requirements/requirements.txt +0 -44
- aether_quant-5.4.8/retraining/README.md +0 -145
- aether_quant-5.4.8/retraining/lean_backtest.py +0 -64
- aether_quant-5.4.8/retraining/orchestrator.py +0 -898
- aether_quant-5.4.8/retraining/validation_gate.py +0 -339
- aether_quant-5.4.8/retraining/vault_client.py +0 -108
- aether_quant-5.4.8/retraining/vault_commands.py +0 -52
- aether_quant-5.4.8/retraining/worker.py +0 -356
- aether_quant-5.4.8/risk/README.md +0 -275
- aether_quant-5.4.8/risk/asset_class_router.py +0 -584
- aether_quant-5.4.8/risk/forex_risk.py +0 -158
- aether_quant-5.4.8/risk/kill_switch.py +0 -261
- aether_quant-5.4.8/risk/position_sizing.py +0 -303
- aether_quant-5.4.8/risk/rl_sizing.py +0 -189
- aether_quant-5.4.8/risk_controls.py +0 -386
- aether_quant-5.4.8/scripts/README.md +0 -66
- aether_quant-5.4.8/scripts/feature_parity_audit.py +0 -390
- aether_quant-5.4.8/scripts/overlap_vs_sharpe_analysis.py +0 -82
- aether_quant-5.4.8/tests/README.md +0 -45
- aether_quant-5.4.8/tests/test_api_server.py +0 -180
- aether_quant-5.4.8/tests/test_aq_cli.py +0 -3666
- aether_quant-5.4.8/tests/test_asset_class_router.py +0 -512
- aether_quant-5.4.8/tests/test_assets_status.py +0 -112
- aether_quant-5.4.8/tests/test_audit_postgres_worker.py +0 -274
- aether_quant-5.4.8/tests/test_ci_workflows.py +0 -138
- aether_quant-5.4.8/tests/test_cli_help_surface.py +0 -142
- aether_quant-5.4.8/tests/test_cost_model.py +0 -246
- aether_quant-5.4.8/tests/test_exported_model.py +0 -1073
- aether_quant-5.4.8/tests/test_factor_file_backfill.py +0 -224
- aether_quant-5.4.8/tests/test_feature_parity.py +0 -125
- aether_quant-5.4.8/tests/test_fred_backfill.py +0 -350
- aether_quant-5.4.8/tests/test_gating_network.py +0 -542
- aether_quant-5.4.8/tests/test_generate_backtest_report.py +0 -259
- aether_quant-5.4.8/tests/test_generate_evaluation_report.py +0 -561
- aether_quant-5.4.8/tests/test_kill_switch.py +0 -406
- aether_quant-5.4.8/tests/test_lean_backtest.py +0 -67
- aether_quant-5.4.8/tests/test_lean_config_render.py +0 -109
- aether_quant-5.4.8/tests/test_lean_runtime_imports.py +0 -89
- aether_quant-5.4.8/tests/test_learned_topology.py +0 -486
- aether_quant-5.4.8/tests/test_market_analyzer.py +0 -695
- aether_quant-5.4.8/tests/test_market_topology.py +0 -902
- aether_quant-5.4.8/tests/test_model_predictions.py +0 -252
- aether_quant-5.4.8/tests/test_monte_carlo.py +0 -120
- aether_quant-5.4.8/tests/test_options_arbitrage_detector.py +0 -170
- aether_quant-5.4.8/tests/test_options_strategy.py +0 -524
- aether_quant-5.4.8/tests/test_options_strategy_multileg.py +0 -572
- aether_quant-5.4.8/tests/test_order_gate.py +0 -563
- aether_quant-5.4.8/tests/test_paper_readiness_io.py +0 -83
- aether_quant-5.4.8/tests/test_portfolio_book_construction.py +0 -1105
- aether_quant-5.4.8/tests/test_postgres_audit.py +0 -83
- aether_quant-5.4.8/tests/test_rank_book_simulator.py +0 -375
- aether_quant-5.4.8/tests/test_rank_ic_core.py +0 -156
- aether_quant-5.4.8/tests/test_rank_signal.py +0 -242
- aether_quant-5.4.8/tests/test_rank_signal_calibration.py +0 -664
- aether_quant-5.4.8/tests/test_retraining_orchestrator.py +0 -703
- aether_quant-5.4.8/tests/test_retraining_worker.py +0 -392
- aether_quant-5.4.8/tests/test_risk_controls.py +0 -632
- aether_quant-5.4.8/tests/test_rl_sizing_v541.py +0 -83
- aether_quant-5.4.8/tests/test_sector_map.py +0 -66
- aether_quant-5.4.8/tests/test_train_asset_class_context_features.py +0 -87
- aether_quant-5.4.8/tests/test_train_cross_sectional_features.py +0 -701
- aether_quant-5.4.8/tests/test_train_indicators.py +0 -229
- aether_quant-5.4.8/tests/test_train_macro_features.py +0 -157
- aether_quant-5.4.8/tests/test_train_multitask.py +0 -567
- aether_quant-5.4.8/tests/test_train_ranking_validation.py +0 -907
- aether_quant-5.4.8/tests/test_train_rl_sizing.py +0 -244
- aether_quant-5.4.8/tests/test_train_sequence_architecture.py +0 -310
- aether_quant-5.4.8/tests/test_train_strategy_selector.py +0 -145
- aether_quant-5.4.8/tests/test_train_topology.py +0 -171
- aether_quant-5.4.8/tests/test_train_walk_forward_windows.py +0 -176
- aether_quant-5.4.8/tests/test_validation_gate.py +0 -323
- aether_quant-5.4.8/tests/test_vault_client.py +0 -109
- aether_quant-5.4.8/tests/test_vault_commands.py +0 -65
- aether_quant-5.4.8/tests/test_walk_forward_multimodel.py +0 -225
- aether_quant-5.4.8/tests/test_yfinance_backfill.py +0 -416
- aether_quant-5.4.8/topology/README.md +0 -122
- aether_quant-5.4.8/topology/__init__.py +0 -23
- aether_quant-5.4.8/topology/learned_topology.py +0 -301
- aether_quant-5.4.8/topology/market_topology.py +0 -710
- aether_quant-5.4.8/train.py +0 -7390
- aether_quant-5.4.8/train_multitask.py +0 -853
- aether_quant-5.4.8/train_rl_sizing.py +0 -461
- aether_quant-5.4.8/train_sequence.py +0 -836
- aether_quant-5.4.8/train_topology.py +0 -341
- aether_quant-5.4.8/visualization/README.md +0 -68
- aether_quant-5.4.8/visualization/forex_order_sizing.jsonl +0 -991
- aether_quant-5.4.8/webui/README.md +0 -173
- aether_quant-5.4.8/webui/src/api/client.ts +0 -33
- aether_quant-5.4.8/webui/src/api/hooks.ts +0 -123
- aether_quant-5.4.8/webui/src/components/monitoring/AssetsStatusPanel.tsx +0 -69
- aether_quant-5.4.8/webui/src/pages/OperationsPage.tsx +0 -37
- aether_quant-5.4.8/webui/src/pages/pages.test.tsx +0 -208
- aether_quant-5.4.8/webui/src/types/state.ts +0 -954
- {aether_quant-5.4.8 → aether_quant-6.6.4}/.devcontainer/devcontainer.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/.env.compose.example +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/.env.live.example +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/Dockerfile +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/Dockerfile.lean +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/LICENSE +0 -0
- /aether_quant-5.4.8/data/alternative/estimize/consensus/aapl/.keep → /aether_quant-6.6.4/aether_quant/py.typed +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/aether_quant.egg-info/dependency_links.txt +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/aether_quant.egg-info/entry_points.txt +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/analyzer/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/audit/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/audit/redis_queue.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/audit/status_export.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/backtests/.gitkeep +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/cpp_inference_ext/pyproject.toml +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/cpp_inference_ext/setup.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/cpp_inference_ext/src/linear_batched.cpp +0 -0
- {aether_quant-5.4.8/data/alternative/estimize/estimate → aether_quant-6.6.4/data/alternative/estimize/consensus/aapl}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/estimize/release → aether_quant-6.6.4/data/alternative/estimize/estimate}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/sec/aapl → aether_quant-6.6.4/data/alternative/estimize/release}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/trading-economics → aether_quant-6.6.4/data/alternative/sec/aapl}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/trading-economics/calendar → aether_quant-6.6.4/data/alternative/trading-economics}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/trading-economics/earnings → aether_quant-6.6.4/data/alternative/trading-economics/calendar}/.keep +0 -0
- {aether_quant-5.4.8/data/alternative/trading-economics/indicator → aether_quant-6.6.4/data/alternative/trading-economics/earnings}/.keep +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data/reference/forex_pair_specs.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data/reference/futures_contract_specs.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data/reference/sector_mapping.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data_pipeline/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data_pipeline/dividend_backfill.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data_pipeline/fetch.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data_pipeline/ib_backfill.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/data_pipeline/v2_manifest.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/development/backups/Changelog.md.bak_pre_condense +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/development/backups/Changelog.md.bak_pre_condense_v54 +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/development/backups/Problems.md.bak_pre_condense +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/development/backups/Problems.md.bak_pre_condense_v54 +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/development/logo.png +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/ablation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/benchmark_comparison.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/confidence_threshold_calibration.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/feature_reconciliation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/impact_model.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/limit_fill_simulator.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/evaluation/public_benchmarks.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/execution/config_cache.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/execution/live_credentials.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/execution/reconciliation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/execution/runtime_config_io.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/execution/secret_scan.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experience/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experience/observation_metrics.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experience/postgres_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experience/redis_queue.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experience/simulated_portfolio.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experts/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/experts/expert_datasets.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/alt_data_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/derivatives_macro_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/macro_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/options_greeks.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/sector_map.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/features/technical_indicators.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/inference/strategy_selector_inference.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/json_safety.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/moe/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/monitoring/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/monitoring/neural_network_state.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/monitoring/strategy_catalog.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/notifications/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/notifications/postgres_telegram.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/notifications/telegram_alerts.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/notifications/telegram_client.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/notifications/telegram_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/performance/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/performance/postgres_triggers.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/performance/rank_ic_monitor.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/performance/trigger_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/performance/triggers.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/portfolio/hrp_allocation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/portfolio/options_assignment_risk.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/portfolio/options_margin_sizing.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/requirements/lean-runtime.txt +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/artifacts.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/auto_rollback.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/backtest_gate.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/planning.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/postgres_registry.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/rollback_hardening.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/retraining/status_export.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/risk/__init__.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/risk/futures_risk.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/risk/manual_override.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/gate_sweep.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/gate_sweep_score_stage.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/order_events_audit.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/profile_inference.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/profile_subsystems.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/promotion_gate_null_calibration.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/promotion_gate_null_gate_scheme.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/render_lean_credentials.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/scripts/run_lean_cli_windows.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/setup.cfg +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_ablation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_alt_data_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_aq_test_ruff_flag.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_audit_queue.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_audit_status_export.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_auto_rollback.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_backtest_gate.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_bar_synthesis_parity.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_bond_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_book_neutrality.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_confidence_threshold_calibration.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_config_cache.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_cross_asset_sensitivity.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_derivatives_macro_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_dividend_backfill.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_dockerignore_secrets.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_evaluation_state.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_experience_queue.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_expert_datasets.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_expert_models.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_feature_reconciliation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_fetch.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_forex_risk.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_futures_risk.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_hash_chain.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_hrp_book_sizing.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_ib_backfill.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_impact_model.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_json_safety.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_kill_switch_replay.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_lean_backtest_ml_coverage.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_limit_fill_simulator.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_live_credentials.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_live_credentials_io.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_macro_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_manual_override.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_market_liquidity.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_market_regime.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_neural_network_state.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_observation_metrics.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_options_assignment_risk.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_options_greeks.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_options_margin_sizing.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_order_events_audit.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_paper_readiness.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_paper_readiness_report.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_paper_readiness_scheduler.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_parallel_inference.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_position_sizing.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_postgres_telegram.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_postgres_triggers.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_postgres_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_profile_inference.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_profile_subsystems.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_promotion_gate_era_rule.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_public_benchmarks.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rank_ic_monitor.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_reconciliation.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_retraining_artifacts.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_retraining_planning.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_retraining_postgres_registry.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rl_sizing.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rollback_hardening.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rolling_ic_gate.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rolling_ic_gate_calibration.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_rolling_ic_gate_replay.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_runtime_config_io.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_secret_scan.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_simulated_portfolio.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_status_export.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_strategy_catalog.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_strategy_selector_inference.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_technical_indicators.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_telegram_alerts.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_telegram_client.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_telegram_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_alt_data_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_bond_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_cross_asset_sensitivity.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_cross_sectional_batching.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_derivatives_macro_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_gate_friendliness.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_gating.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_multitask_architecture.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_optimizer_and_swa.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_pipeline.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_ranking_loss.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_residual_rank_targets.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_select_model_context_columns.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_sequence.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_train_threshold_and_early_stop.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_trigger_worker.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_triggers.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_v2_pipeline_manifest.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_v543_new_features.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/tests/test_v547_bug_hunt.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/train_gating.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/train_strategy_selector.py +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/.gitignore +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/.oxlintrc.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/index.html +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/overview_v2_12.png +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/package-lock.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/package.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/public/favicon.svg +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/public/icons.svg +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/risk_v2_12.png +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/App.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/AblationPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/AblationPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BenchmarkPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BenchmarkPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BookHistoryReconciliationPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BookHistoryReconciliationPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BookSpreadCalibrationPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/BookSpreadCalibrationPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/CapacityStressPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/MonteCarloPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/MonteCarloPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/RankBookPerformancePanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/RankBookPerformancePanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/WalkForwardStabilityPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/evaluation/WalkForwardStabilityPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/heatmap/AssetHeatmap.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/layout/AppShell.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/layout/Panel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/AuditLogPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/CountTable.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/KillSwitchPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/KillSwitchPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/MonitoringFeeds.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/ObservationPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/PaperReadinessPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/PerformanceTriggersPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/RawStateViewer.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/ReconciliationPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/ReconciliationPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/RetrainingStatusPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/monitoring/RetrainingStatusPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/neuralnet/NeuralNetworkScene3D.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/neuralnet/NeuralNetworkStatsPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/neuralnet/NeuralNetworkStatsPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/neuralnet/TrainingRecipePanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/neuralnet/TrainingRecipePanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/CorporateActionsPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/DividendScheduleSummaryPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/ForexPairDetailPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/HeldMultiLegPositionsPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/StrategyCatalogBrowser.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/optionsstrategy/StrategySelectorScoresPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/portfolio/BookNeutralityPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/portfolio/BookNeutralityPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/AssetSizingTable.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/AssetSizingTable.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/DerivativesMacroPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/LiquidityTable.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/MacroSnapshotPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/MacroSnapshotPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/NetEdgePanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/NetEdgePanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/RiskBar.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/RiskCore.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/SensitivityPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/SensitivityPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/risk/StrategyRiskCards.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/scene3d/Scene3D.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/scorecards/Scorecards.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/signals/Badge.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/signals/PositionsList.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/signals/RankSignalPanel.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/signals/RankSignalPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/signals/SignalBoard.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/topology/ClusterList.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/topology/TopologyLearningPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/topology/TopologyScene3D.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/topology/TopologyScene3D.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/AssetPerformancePanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/BacktestEquityPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/DivergingBarChart.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/DivergingBarChart.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/LineChart.test.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/LineChart.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/MetricsSnapshotPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/components/tracing/ObservationEquityPanel.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/index.css +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/lib/downsample.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/lib/format.test.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/lib/format.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/main.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/EvaluationPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/NeuralNetworkPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/OptionsStrategyPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/Overview.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/RiskPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/TopologyPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/pages/TracingPage.tsx +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/test/setup.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/types/audit.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/types/evaluation.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/src/types/tracing.ts +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/tsconfig.app.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/tsconfig.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/tsconfig.node.json +0 -0
- {aether_quant-5.4.8 → aether_quant-6.6.4}/webui/vite.config.ts +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# .devcontainer
|
|
2
|
+
|
|
3
|
+
Codespaces and Dev Container definitions. See [`development/infrastructure.md`](../development/infrastructure.md).
|
|
4
|
+
|
|
5
|
+
- **`devcontainer.json`:** the training Codespace. Python 3.11 with sshd, CPU PyTorch and both requirements files. Create it on 4 cores / 16 GB (`-m standardLinux32gb`), with `--devcontainer-path .devcontainer/devcontainer.json`, because the repo has two definitions.
|
|
6
|
+
- **`dind-v1-test/`:** Lean backtests in a temporary 4-core Codespace. Pinned to `python:3.11-bookworm` (the Docker-in-Docker feature doesn't support Debian trixie). Move Docker's data root to the large local disk before building the 20 GB image: `/etc/docker/daemon.json` with `{"data-root": "/tmp/docker-data", "dns": ["168.63.129.16"]}`, then restart `dockerd`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Aether Quant DinD v1 Test",
|
|
3
|
+
"image": "mcr.microsoft.com/devcontainers/python:3.11-bookworm",
|
|
4
|
+
"features": {
|
|
5
|
+
"ghcr.io/devcontainers/features/sshd:1": {
|
|
6
|
+
"version": "latest"
|
|
7
|
+
},
|
|
8
|
+
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
|
|
9
|
+
},
|
|
10
|
+
"hostRequirements": {
|
|
11
|
+
"cpus": 4,
|
|
12
|
+
"memory": "16gb"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.pyc
|
|
3
|
+
*.pyo
|
|
4
|
+
.venv/
|
|
5
|
+
node_modules/
|
|
6
|
+
webui/node_modules/
|
|
7
|
+
webui/dist/
|
|
8
|
+
backtests/
|
|
9
|
+
.lean/
|
|
10
|
+
.git/
|
|
11
|
+
.av/
|
|
12
|
+
.claude/
|
|
13
|
+
Aether-quant-Obsidian-Vault/
|
|
14
|
+
# Large data directories not needed by the FastAPI server
|
|
15
|
+
data/
|
|
16
|
+
ml/
|
|
17
|
+
storage/
|
|
18
|
+
|
|
19
|
+
# Local secrets and broker/API credentials - mirrors .gitignore's own list.
|
|
20
|
+
# Being .gitignore'd does NOT keep a file out of the image: the engine build
|
|
21
|
+
# does `COPY . .`, and that same image is published to ghcr (single fat
|
|
22
|
+
# target, no slim variant), so anything not excluded here is baked into a
|
|
23
|
+
# public registry layer - recoverable via `docker history`/`docker save` even
|
|
24
|
+
# if a later commit removes it. lean.live.json is the rendered, secret-bearing
|
|
25
|
+
# config `aq render-lean-config` produces (execution/lean_config_render.py);
|
|
26
|
+
# lean.json itself is git-tracked with empty placeholders but is excluded too,
|
|
27
|
+
# so a locally-populated copy can never leak. Keep this list in sync with
|
|
28
|
+
# .gitignore's "Local secrets" block.
|
|
29
|
+
.env
|
|
30
|
+
.env.*
|
|
31
|
+
!.env.compose.example
|
|
32
|
+
!.env.live.example
|
|
33
|
+
ib_config.py
|
|
34
|
+
*_config.local.py
|
|
35
|
+
config.local.json
|
|
36
|
+
lean.local.json
|
|
37
|
+
lean.live.json
|
|
38
|
+
lean.json
|
|
39
|
+
*.key
|
|
40
|
+
*.pem
|
|
41
|
+
|
|
42
|
+
# cpp_inference_ext/'s compiled build artifacts - mirrors .gitignore's own
|
|
43
|
+
# exclusion list. Docker now builds this extension fresh for the
|
|
44
|
+
# container's own Python 3.11 (see Dockerfile) - a locally-pre-built
|
|
45
|
+
# stray .pyd/.so from a developer's own (ABI-incompatible) host Python
|
|
46
|
+
# must never leak into the build context and get baked into the image,
|
|
47
|
+
# which is published to a public ghcr registry.
|
|
48
|
+
cpp_inference_ext/build/
|
|
49
|
+
cpp_inference_ext/*.egg-info/
|
|
50
|
+
cpp_inference_ext/*.pyd
|
|
51
|
+
cpp_inference_ext/*.so
|
|
52
|
+
cpp_inference_ext/install_log*.txt
|
|
53
|
+
data_pre2013/
|
|
54
|
+
data_wide/
|
|
55
|
+
data_crypto_wide/
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Aether Quant pre-commit secret guard (Phase V2-22 security).
|
|
3
|
+
#
|
|
4
|
+
# Blocks a commit that would publish a secret: a populated secret field in the
|
|
5
|
+
# tracked lean.json, or a tracked real `.env` file. All detection lives in
|
|
6
|
+
# `aq secrets-check` (execution/secret_scan.py) - this hook just invokes it.
|
|
7
|
+
#
|
|
8
|
+
# Enable once per clone (opt-in, so it never surprises a fresh checkout):
|
|
9
|
+
# git config core.hooksPath .githooks
|
|
10
|
+
#
|
|
11
|
+
# Runs under git's POSIX sh (git-bash on Windows), so keep it portable.
|
|
12
|
+
|
|
13
|
+
set -e
|
|
14
|
+
|
|
15
|
+
repo_root=$(git rev-parse --show-toplevel)
|
|
16
|
+
cd "$repo_root"
|
|
17
|
+
|
|
18
|
+
# Prefer the installed `aq` console script; fall back to running the module
|
|
19
|
+
# directly with whichever Python is on PATH (venv-activated shells get theirs).
|
|
20
|
+
if command -v aq >/dev/null 2>&1; then
|
|
21
|
+
aq secrets-check
|
|
22
|
+
elif command -v python >/dev/null 2>&1; then
|
|
23
|
+
python aq_cli.py secrets-check
|
|
24
|
+
elif command -v python3 >/dev/null 2>&1; then
|
|
25
|
+
python3 aq_cli.py secrets-check
|
|
26
|
+
else
|
|
27
|
+
echo "pre-commit: could not find 'aq' or 'python' to run secrets-check" >&2
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# V6.6.4 - the library gate: a public function that no aether_quant facade exports blocks the commit (scripts/library_gate.py). It reads the source and imports nothing.
|
|
32
|
+
if command -v python >/dev/null 2>&1; then
|
|
33
|
+
python scripts/library_gate.py
|
|
34
|
+
elif command -v python3 >/dev/null 2>&1; then
|
|
35
|
+
python3 scripts/library_gate.py
|
|
36
|
+
fi
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Something is broken, wrong, or behaves differently than documented.
|
|
4
|
+
title: "[bug] "
|
|
5
|
+
labels: ["bug"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## What happened
|
|
9
|
+
|
|
10
|
+
<!-- Lead with the observable failure. -->
|
|
11
|
+
|
|
12
|
+
## Where
|
|
13
|
+
|
|
14
|
+
<!-- File, module or command, e.g. `aq evaluate --rank-book`. -->
|
|
15
|
+
|
|
16
|
+
## Expected vs actual
|
|
17
|
+
|
|
18
|
+
- **Expected:**
|
|
19
|
+
- **Actual:**
|
|
20
|
+
|
|
21
|
+
## Reproduction
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
<steps from a clean clone; `aq config get <key>` output helps>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Evidence
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
<smallest relevant output>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Environment
|
|
34
|
+
|
|
35
|
+
- OS, Python version, commit or tag:
|
|
36
|
+
- [ ] I checked `development/Problems.md` for a known entry
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: A new subsystem, module, CLI capability, or behavioral improvement.
|
|
4
|
+
title: "[feature] "
|
|
5
|
+
labels: ["enhancement"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Problem to solve
|
|
9
|
+
|
|
10
|
+
<!-- The need, not the implementation. -->
|
|
11
|
+
|
|
12
|
+
## Proposed behaviour
|
|
13
|
+
|
|
14
|
+
<!-- New `aq` command or flag, config block, or output. -->
|
|
15
|
+
|
|
16
|
+
## Fit
|
|
17
|
+
|
|
18
|
+
- [ ] An unmodified `config.json` keeps today's behaviour.
|
|
19
|
+
- [ ] Testable without Lean: pure logic in a package module, not `main.py`.
|
|
20
|
+
|
|
21
|
+
## Alternatives considered
|
|
22
|
+
|
|
23
|
+
<!-- What you ruled out, and why. -->
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- Title: `V<version> <what and why>` for release-bound PRs, otherwise plain and descriptive. -->
|
|
2
|
+
|
|
3
|
+
## What and why
|
|
4
|
+
|
|
5
|
+
<!-- One paragraph. Reference development/Problems.md entries (#N) where they apply. -->
|
|
6
|
+
|
|
7
|
+
## Behaviour
|
|
8
|
+
|
|
9
|
+
- [ ] Unchanged when new flags are absent, **or** the change is intentional and listed here:
|
|
10
|
+
- New config keys and defaults: <!-- or "none" -->
|
|
11
|
+
|
|
12
|
+
## Verification
|
|
13
|
+
|
|
14
|
+
- [ ] `aq test` green (N passed), `ruff check .` clean, `aq verify --quick` green
|
|
15
|
+
- [ ] A new public function or class is in `aether_quant`, or listed with a reason (`scripts/library_gate.py`)
|
|
16
|
+
- [ ] A new invariant in a safety, admission or ledger path has a Lean spec, a differential test and a property test (`development/verification.md`)
|
|
17
|
+
- [ ] `scripts/clean_checkout_test.ps1`, or `scripts/codespace_verify.ps1 -Start` on a low-memory PC
|
|
18
|
+
- New tests: <!-- files, and what they pin -->
|
|
19
|
+
- Manual checks: <!-- dry runs, real-data spot checks -->
|
|
20
|
+
|
|
21
|
+
## Docs
|
|
22
|
+
|
|
23
|
+
- [ ] README or package README
|
|
24
|
+
- [ ] `development/Changelog.md`, and `development/Problems.md` if a bug was found
|
|
25
|
+
- [ ] `development/architecture.md` or `infrastructure.md` if structure or services changed
|
|
26
|
+
- [ ] `aq docs sync`, and the vault regenerated
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# V5.5.0 - weekly dependency PRs, one ecosystem each. The CI jobs
|
|
2
|
+
# (dependency-audit, webui npm audit) report advisories; this is what turns
|
|
3
|
+
# an advisory into a reviewable bump. tests/test_ci_workflows.py pins the
|
|
4
|
+
# three ecosystems so none can be dropped silently.
|
|
5
|
+
version: 2
|
|
6
|
+
updates:
|
|
7
|
+
- package-ecosystem: "pip"
|
|
8
|
+
directory: "/requirements"
|
|
9
|
+
schedule:
|
|
10
|
+
interval: "weekly"
|
|
11
|
+
open-pull-requests-limit: 5
|
|
12
|
+
- package-ecosystem: "npm"
|
|
13
|
+
directory: "/webui"
|
|
14
|
+
schedule:
|
|
15
|
+
interval: "weekly"
|
|
16
|
+
open-pull-requests-limit: 5
|
|
17
|
+
- package-ecosystem: "github-actions"
|
|
18
|
+
directory: "/"
|
|
19
|
+
schedule:
|
|
20
|
+
interval: "weekly"
|
|
21
|
+
open-pull-requests-limit: 5
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
# V5.3.9 - deep CI suite: windows+ubuntu pytest matrix with a calibrated
|
|
4
|
+
# coverage fail-under gate (82% measured - 2), ruff lint, the full webui
|
|
5
|
+
# vitest suite, an offline CLI smoke battery, and workflow self-validation.
|
|
6
|
+
# V5.5.0 - guard jobs for the offline/live-parity round: fast-guards,
|
|
7
|
+
# subsystem-matrix, wheel-smoke, python-compat, docker-checks, parity-smoke,
|
|
8
|
+
# secret-scan and test-count-drift. tests/test_ci_workflows.py pins them all.
|
|
9
|
+
# V6.2.0 - Linux jobs pin ubuntu-24.04: ubuntu-latest moves to 26.04 from 2026-10-19
|
|
10
|
+
# and setup-python's 3.11 builds for a new image can lag; the actions run on Node 24.
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches: [main]
|
|
14
|
+
pull_request:
|
|
15
|
+
|
|
16
|
+
# V5.4.2 - cancel superseded runs on rapid-fire pushes (ported from Aether-Vault)
|
|
17
|
+
concurrency:
|
|
18
|
+
group: ci-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
python-tests:
|
|
23
|
+
runs-on: ${{ matrix.os }}
|
|
24
|
+
timeout-minutes: 30
|
|
25
|
+
strategy:
|
|
26
|
+
fail-fast: false
|
|
27
|
+
matrix:
|
|
28
|
+
os: [ubuntu-24.04, windows-latest]
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
|
+
|
|
32
|
+
- uses: actions/setup-python@v7
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.11"
|
|
35
|
+
cache: "pip"
|
|
36
|
+
|
|
37
|
+
- name: Syntax-check main.py (no Lean runtime available in CI - see development/Problems.md #69)
|
|
38
|
+
run: python -m py_compile main.py
|
|
39
|
+
|
|
40
|
+
- name: Install CPU-only PyTorch (Linux runner)
|
|
41
|
+
if: runner.os == 'Linux'
|
|
42
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
43
|
+
|
|
44
|
+
- name: Install dependencies
|
|
45
|
+
run: |
|
|
46
|
+
pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
47
|
+
pip install pytest-cov
|
|
48
|
+
|
|
49
|
+
- name: Run full test suite with coverage gate
|
|
50
|
+
run: >
|
|
51
|
+
pytest -m "not lean_backtest" -ra
|
|
52
|
+
--cov --cov-report=term-missing --cov-report=xml
|
|
53
|
+
--cov-fail-under=80
|
|
54
|
+
|
|
55
|
+
- name: Upload coverage artifact
|
|
56
|
+
if: matrix.os == 'ubuntu-24.04'
|
|
57
|
+
uses: actions/upload-artifact@v7
|
|
58
|
+
with:
|
|
59
|
+
name: coverage-xml
|
|
60
|
+
path: coverage.xml
|
|
61
|
+
|
|
62
|
+
python-lint:
|
|
63
|
+
runs-on: ubuntu-24.04
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v7
|
|
66
|
+
|
|
67
|
+
- uses: actions/setup-python@v7
|
|
68
|
+
with:
|
|
69
|
+
python-version: "3.11"
|
|
70
|
+
cache: "pip"
|
|
71
|
+
cache-dependency-path: requirements/requirements-dev.txt
|
|
72
|
+
|
|
73
|
+
# V5.3.11 FIX: bare `ruff check .` — NOT `aq test --ruff` (which
|
|
74
|
+
# requires importing aq_cli → pandas via the full package chain, but
|
|
75
|
+
# this job intentionally has a minimal environment). Local devs use
|
|
76
|
+
# `aq test --ruff`; CI uses bare ruff for speed.
|
|
77
|
+
# V5.4.7: ruff is PINNED - the previous unbounded range let new ruff
|
|
78
|
+
# releases add rules and break CI independently of any repo change.
|
|
79
|
+
- name: Install ruff
|
|
80
|
+
run: pip install "ruff==0.16.4"
|
|
81
|
+
|
|
82
|
+
- name: Ruff check (E/F ruleset calibrated in pyproject.toml)
|
|
83
|
+
run: ruff check .
|
|
84
|
+
|
|
85
|
+
- name: Syntax-check main.py
|
|
86
|
+
run: python -m py_compile main.py
|
|
87
|
+
|
|
88
|
+
dependency-audit:
|
|
89
|
+
runs-on: ubuntu-24.04
|
|
90
|
+
timeout-minutes: 15
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v7
|
|
93
|
+
|
|
94
|
+
- uses: actions/setup-python@v7
|
|
95
|
+
with:
|
|
96
|
+
python-version: "3.11"
|
|
97
|
+
cache: "pip"
|
|
98
|
+
cache-dependency-path: requirements/requirements.txt
|
|
99
|
+
|
|
100
|
+
- name: Install pip-audit
|
|
101
|
+
run: pip install pip-audit
|
|
102
|
+
|
|
103
|
+
- name: Audit runtime dependencies for known CVEs
|
|
104
|
+
run: |
|
|
105
|
+
pip install -r requirements/requirements.txt
|
|
106
|
+
pip-audit --requirement requirements/requirements.txt --desc
|
|
107
|
+
|
|
108
|
+
- name: Audit dev dependencies for known CVEs
|
|
109
|
+
run: |
|
|
110
|
+
pip-audit --requirement requirements/requirements-dev.txt --desc
|
|
111
|
+
|
|
112
|
+
webui-tests:
|
|
113
|
+
runs-on: ubuntu-24.04
|
|
114
|
+
timeout-minutes: 20
|
|
115
|
+
defaults:
|
|
116
|
+
run:
|
|
117
|
+
working-directory: webui
|
|
118
|
+
steps:
|
|
119
|
+
- uses: actions/checkout@v7
|
|
120
|
+
|
|
121
|
+
- uses: actions/setup-node@v7
|
|
122
|
+
with:
|
|
123
|
+
node-version: "20"
|
|
124
|
+
cache: "npm"
|
|
125
|
+
cache-dependency-path: webui/package-lock.json
|
|
126
|
+
|
|
127
|
+
- run: npm ci
|
|
128
|
+
- run: npx tsc -b
|
|
129
|
+
- run: npx oxlint
|
|
130
|
+
# V5.3.9 - the full frontend suite finally runs in CI too.
|
|
131
|
+
- run: npx vitest run --pool=threads
|
|
132
|
+
- run: npm run build
|
|
133
|
+
# V5.5.0 - advisory: a new upstream advisory must be visible without
|
|
134
|
+
# turning an unrelated PR red (the lockfile is the owner's to bump).
|
|
135
|
+
- name: npm audit (advisory, runtime deps, high+)
|
|
136
|
+
continue-on-error: true
|
|
137
|
+
run: npm audit --omit=dev --audit-level=high
|
|
138
|
+
|
|
139
|
+
cli-smoke:
|
|
140
|
+
runs-on: ubuntu-24.04
|
|
141
|
+
timeout-minutes: 15
|
|
142
|
+
steps:
|
|
143
|
+
- uses: actions/checkout@v7
|
|
144
|
+
|
|
145
|
+
- uses: actions/setup-python@v7
|
|
146
|
+
with:
|
|
147
|
+
python-version: "3.11"
|
|
148
|
+
cache: "pip"
|
|
149
|
+
cache-dependency-path: requirements/requirements.txt
|
|
150
|
+
|
|
151
|
+
# V5.5.0 - the default Linux torch wheel drags in ~2 GB of CUDA libraries a
|
|
152
|
+
# CPU-only runner never uses. Installing the CPU build FIRST lets the
|
|
153
|
+
# requirements install below see torch as already satisfied.
|
|
154
|
+
- name: Install CPU-only PyTorch
|
|
155
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
156
|
+
|
|
157
|
+
- name: Install package editable
|
|
158
|
+
run: |
|
|
159
|
+
pip install -r requirements/requirements.txt
|
|
160
|
+
pip install -e .
|
|
161
|
+
|
|
162
|
+
- name: CLI smoke battery (offline, deterministic)
|
|
163
|
+
run: |
|
|
164
|
+
aq --help > /dev/null
|
|
165
|
+
aq evaluate --help > /dev/null
|
|
166
|
+
aq config get phase1.universe.name
|
|
167
|
+
aq secrets-check
|
|
168
|
+
|
|
169
|
+
workflows-lint:
|
|
170
|
+
runs-on: ubuntu-24.04
|
|
171
|
+
timeout-minutes: 10
|
|
172
|
+
steps:
|
|
173
|
+
- uses: actions/checkout@v7
|
|
174
|
+
|
|
175
|
+
# V5.3.10 - single-step pinned install + validate: the previous two-step
|
|
176
|
+
# pattern (PATH append, then bare `actionlint`) failed with
|
|
177
|
+
# "command not found" on the runner. Pinned to v1.7.7 for
|
|
178
|
+
# reproducibility (meta-tested in tests/test_ci_workflows.py).
|
|
179
|
+
- name: Validate workflow files (actionlint v1.7.7)
|
|
180
|
+
run: |
|
|
181
|
+
curl -sSL -o actionlint.tar.gz \
|
|
182
|
+
https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_linux_amd64.tar.gz
|
|
183
|
+
tar -xzf actionlint.tar.gz actionlint
|
|
184
|
+
./actionlint -no-color -verbose
|
|
185
|
+
|
|
186
|
+
# V5.5.0 - the cheap, high-signal guards, in one place so a PR that breaks
|
|
187
|
+
# test registration, the README flag docs, a workflow, the packaging list,
|
|
188
|
+
# a docs link or a parity fix fails in minutes instead of after the whole
|
|
189
|
+
# coverage matrix. They also run inside python-tests; this is the fast copy.
|
|
190
|
+
fast-guards:
|
|
191
|
+
runs-on: ubuntu-24.04
|
|
192
|
+
timeout-minutes: 20
|
|
193
|
+
steps:
|
|
194
|
+
- uses: actions/checkout@v7
|
|
195
|
+
|
|
196
|
+
- uses: actions/setup-python@v7
|
|
197
|
+
with:
|
|
198
|
+
python-version: "3.11"
|
|
199
|
+
cache: "pip"
|
|
200
|
+
cache-dependency-path: requirements/requirements-dev.txt
|
|
201
|
+
|
|
202
|
+
# V5.5.0 - the default Linux torch wheel drags in ~2 GB of CUDA libraries a
|
|
203
|
+
# CPU-only runner never uses. Installing the CPU build FIRST lets the
|
|
204
|
+
# requirements install below see torch as already satisfied.
|
|
205
|
+
- name: Install CPU-only PyTorch
|
|
206
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
207
|
+
|
|
208
|
+
- name: Install dependencies
|
|
209
|
+
run: pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
210
|
+
|
|
211
|
+
- name: Guard tests (registration, help surface, workflows, packaging, docs links, parity round)
|
|
212
|
+
run: >
|
|
213
|
+
pytest -q -p no:cacheprovider
|
|
214
|
+
tests/test_cli_help_surface.py
|
|
215
|
+
tests/test_ci_workflows.py
|
|
216
|
+
tests/test_dockerignore_secrets.py
|
|
217
|
+
tests/test_lean_runtime_imports.py
|
|
218
|
+
tests/test_packaging_modules.py
|
|
219
|
+
tests/test_docs_links.py
|
|
220
|
+
tests/test_docs_facts.py
|
|
221
|
+
tests/test_aether_quant_coverage.py
|
|
222
|
+
tests/test_v550_parity_fixes.py
|
|
223
|
+
tests/test_aq_cli.py::test_subsystem_test_files_maps_every_real_test_file_to_exactly_one_bucket
|
|
224
|
+
|
|
225
|
+
# V5.5.0 - `aq test --<subsystem>` per bucket: proves every bucket is
|
|
226
|
+
# self-contained (no hidden cross-file ordering) and that the routing in
|
|
227
|
+
# aq_cli.py::_SUBSYSTEM_TEST_FILES works, which the single full-tree run
|
|
228
|
+
# never exercises. The full run above stays the coverage source of truth.
|
|
229
|
+
subsystem-matrix:
|
|
230
|
+
runs-on: ubuntu-24.04
|
|
231
|
+
timeout-minutes: 30
|
|
232
|
+
strategy:
|
|
233
|
+
fail-fast: false
|
|
234
|
+
matrix:
|
|
235
|
+
subsystem: [cli, audit, risk, portfolio, features, data-pipeline, webui, ml, retraining, notifications, storage, live, evaluation, formal, meta]
|
|
236
|
+
steps:
|
|
237
|
+
- uses: actions/checkout@v7
|
|
238
|
+
|
|
239
|
+
- uses: actions/setup-python@v7
|
|
240
|
+
with:
|
|
241
|
+
python-version: "3.11"
|
|
242
|
+
cache: "pip"
|
|
243
|
+
cache-dependency-path: requirements/requirements-dev.txt
|
|
244
|
+
|
|
245
|
+
# V5.5.0 - the default Linux torch wheel drags in ~2 GB of CUDA libraries a
|
|
246
|
+
# CPU-only runner never uses. Installing the CPU build FIRST lets the
|
|
247
|
+
# requirements install below see torch as already satisfied.
|
|
248
|
+
- name: Install CPU-only PyTorch
|
|
249
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
250
|
+
|
|
251
|
+
- name: Install dependencies and the package
|
|
252
|
+
run: |
|
|
253
|
+
pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
254
|
+
pip install -e .
|
|
255
|
+
|
|
256
|
+
- name: aq test --${{ matrix.subsystem }}
|
|
257
|
+
run: aq test --${{ matrix.subsystem }}
|
|
258
|
+
|
|
259
|
+
# V5.5.0 - builds the real wheel and exercises it OUTSIDE the checkout.
|
|
260
|
+
# `pip install -e .` (cli-smoke) puts the whole repo on sys.path and hides
|
|
261
|
+
# every pyproject.toml packaging gap; this job found four missing packages
|
|
262
|
+
# and a missing root module the first time it ran.
|
|
263
|
+
wheel-smoke:
|
|
264
|
+
runs-on: ubuntu-24.04
|
|
265
|
+
timeout-minutes: 25
|
|
266
|
+
steps:
|
|
267
|
+
- uses: actions/checkout@v7
|
|
268
|
+
with:
|
|
269
|
+
fetch-depth: 0 # setuptools-scm needs tags to version the wheel
|
|
270
|
+
|
|
271
|
+
- uses: actions/setup-python@v7
|
|
272
|
+
with:
|
|
273
|
+
python-version: "3.11"
|
|
274
|
+
cache: "pip"
|
|
275
|
+
cache-dependency-path: requirements/requirements.txt
|
|
276
|
+
|
|
277
|
+
- name: Build the wheel
|
|
278
|
+
run: |
|
|
279
|
+
pip install build
|
|
280
|
+
python -m build --wheel
|
|
281
|
+
|
|
282
|
+
- name: Install the wheel into a clean venv (CPU torch first)
|
|
283
|
+
run: |
|
|
284
|
+
python -m venv "$RUNNER_TEMP/aq-wheel"
|
|
285
|
+
"$RUNNER_TEMP/aq-wheel/bin/pip" install --upgrade pip
|
|
286
|
+
"$RUNNER_TEMP/aq-wheel/bin/pip" install torch --index-url https://download.pytorch.org/whl/cpu
|
|
287
|
+
"$RUNNER_TEMP/aq-wheel/bin/pip" install -r requirements/requirements.txt dist/*.whl
|
|
288
|
+
|
|
289
|
+
- name: Smoke-test the installed wheel from outside the checkout
|
|
290
|
+
working-directory: ${{ runner.temp }}
|
|
291
|
+
run: '"$RUNNER_TEMP/aq-wheel/bin/python" "$GITHUB_WORKSPACE/scripts/wheel_smoke.py"'
|
|
292
|
+
|
|
293
|
+
# V5.5.0 - requires-python is >=3.10 but every other job runs 3.11, so a
|
|
294
|
+
# 3.11-only construct would ship unnoticed. Byte-compiling is syntax-only
|
|
295
|
+
# (cheap, no dependencies); it still catches except*, 3.12 f-strings, etc.
|
|
296
|
+
python-compat:
|
|
297
|
+
runs-on: ubuntu-24.04
|
|
298
|
+
timeout-minutes: 10
|
|
299
|
+
steps:
|
|
300
|
+
- uses: actions/checkout@v7
|
|
301
|
+
|
|
302
|
+
- uses: actions/setup-python@v7
|
|
303
|
+
with:
|
|
304
|
+
python-version: "3.10"
|
|
305
|
+
|
|
306
|
+
- name: Byte-compile first-party sources on Python 3.10
|
|
307
|
+
run: >
|
|
308
|
+
python -m compileall -q
|
|
309
|
+
-x '(^|/)(\.git|\.venv|venv|node_modules|backtests|webui|Aether-quant-Obsidian-Vault|build|dist|\.matplotlib_cache)(/|$)'
|
|
310
|
+
.
|
|
311
|
+
|
|
312
|
+
# Byte-compiling can't see a standard-library name that is new in 3.11 (datetime.UTC, #326). vermin reads what each source needs and fails on anything above 3.10.
|
|
313
|
+
- name: First-party sources need no more than Python 3.10 (vermin)
|
|
314
|
+
run: |
|
|
315
|
+
pip install vermin==1.9.2
|
|
316
|
+
vermin -t=3.10- --no-tips --violations -q aether_quant analyzer audit data_pipeline evaluation execution experience experts features inference liquidity moe monitoring notifications performance portfolio regime retraining risk topology aq_cli.py docs_facts.py json_safety.py performance_probe.py risk_controls.py generate_backtest_report.py generate_evaluation_report.py scripts/cycle_daily.py scripts/forward_ledger.py
|
|
317
|
+
|
|
318
|
+
# V5.5.0 - Docker is never built with Lean in CI (the 40 GB base image does
|
|
319
|
+
# not fit a hosted runner), but everything checkable without it is checked.
|
|
320
|
+
docker-checks:
|
|
321
|
+
runs-on: ubuntu-24.04
|
|
322
|
+
timeout-minutes: 20
|
|
323
|
+
steps:
|
|
324
|
+
- uses: actions/checkout@v7
|
|
325
|
+
|
|
326
|
+
- name: Lint Dockerfiles (hadolint v2.12.0, errors only)
|
|
327
|
+
run: |
|
|
328
|
+
curl -sSL -o hadolint \
|
|
329
|
+
https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64
|
|
330
|
+
chmod +x hadolint
|
|
331
|
+
./hadolint --failure-threshold error Dockerfile Dockerfile.lean
|
|
332
|
+
|
|
333
|
+
- name: Validate docker-compose.yml (default and lean profile)
|
|
334
|
+
run: |
|
|
335
|
+
docker compose -f docker-compose.yml config -q
|
|
336
|
+
docker compose -f docker-compose.yml --profile lean config -q
|
|
337
|
+
|
|
338
|
+
- name: Build the webui stage of the engine image
|
|
339
|
+
run: docker build --target webui-builder -t aq-webui-check .
|
|
340
|
+
|
|
341
|
+
# V5.5.0 - the new parity tooling, run in isolation so a regression in
|
|
342
|
+
# the offline/live-parity measurements is named by the job that failed.
|
|
343
|
+
parity-smoke:
|
|
344
|
+
runs-on: ubuntu-24.04
|
|
345
|
+
timeout-minutes: 20
|
|
346
|
+
steps:
|
|
347
|
+
- uses: actions/checkout@v7
|
|
348
|
+
|
|
349
|
+
- uses: actions/setup-python@v7
|
|
350
|
+
with:
|
|
351
|
+
python-version: "3.11"
|
|
352
|
+
cache: "pip"
|
|
353
|
+
cache-dependency-path: requirements/requirements-dev.txt
|
|
354
|
+
|
|
355
|
+
# V5.5.0 - the default Linux torch wheel drags in ~2 GB of CUDA libraries a
|
|
356
|
+
# CPU-only runner never uses. Installing the CPU build FIRST lets the
|
|
357
|
+
# requirements install below see torch as already satisfied.
|
|
358
|
+
- name: Install CPU-only PyTorch
|
|
359
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
360
|
+
|
|
361
|
+
- name: Install dependencies
|
|
362
|
+
run: pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
363
|
+
|
|
364
|
+
- name: Backtest audit, as-live simulator, calibration and sleeve tests
|
|
365
|
+
run: >
|
|
366
|
+
pytest -q -p no:cacheprovider
|
|
367
|
+
tests/test_backtest_audit.py
|
|
368
|
+
tests/test_live_parity.py
|
|
369
|
+
tests/test_volatility_threshold_calibration.py
|
|
370
|
+
tests/test_legacy_sleeve.py
|
|
371
|
+
tests/test_performance_probe.py
|
|
372
|
+
tests/test_rank_book_simulator.py
|
|
373
|
+
tests/test_feature_parity.py
|
|
374
|
+
|
|
375
|
+
- name: Offline parity audit of feature replicas (synthetic, no data files needed)
|
|
376
|
+
run: python scripts/feature_parity_audit.py --synthetic-only
|
|
377
|
+
|
|
378
|
+
# V5.5.0 - ADVISORY until it has run once against the real history: a
|
|
379
|
+
# first scan may flag historic dev defaults that need an allowlist entry.
|
|
380
|
+
secret-scan:
|
|
381
|
+
runs-on: ubuntu-24.04
|
|
382
|
+
timeout-minutes: 10
|
|
383
|
+
continue-on-error: true
|
|
384
|
+
steps:
|
|
385
|
+
- uses: actions/checkout@v7
|
|
386
|
+
|
|
387
|
+
- name: Scan the working tree for secrets (gitleaks v8.18.4)
|
|
388
|
+
run: |
|
|
389
|
+
curl -sSL -o gitleaks.tar.gz \
|
|
390
|
+
https://github.com/gitleaks/gitleaks/releases/download/v8.18.4/gitleaks_8.18.4_linux_x64.tar.gz
|
|
391
|
+
tar -xzf gitleaks.tar.gz gitleaks
|
|
392
|
+
./gitleaks detect --source . --no-git --no-banner --redact --exit-code 1 --config .gitleaks.toml
|
|
393
|
+
|
|
394
|
+
# V5.5.0 - WARN-ONLY: the README badge is rewritten by a local `aq test`,
|
|
395
|
+
# so it lags whenever a test is added in a commit that skipped it. This
|
|
396
|
+
# surfaces the drift without blocking anyone.
|
|
397
|
+
test-count-drift:
|
|
398
|
+
runs-on: ubuntu-24.04
|
|
399
|
+
timeout-minutes: 20
|
|
400
|
+
continue-on-error: true
|
|
401
|
+
steps:
|
|
402
|
+
- uses: actions/checkout@v7
|
|
403
|
+
|
|
404
|
+
- uses: actions/setup-python@v7
|
|
405
|
+
with:
|
|
406
|
+
python-version: "3.11"
|
|
407
|
+
cache: "pip"
|
|
408
|
+
cache-dependency-path: requirements/requirements-dev.txt
|
|
409
|
+
|
|
410
|
+
# V5.5.0 - the default Linux torch wheel drags in ~2 GB of CUDA libraries a
|
|
411
|
+
# CPU-only runner never uses. Installing the CPU build FIRST lets the
|
|
412
|
+
# requirements install below see torch as already satisfied.
|
|
413
|
+
- name: Install CPU-only PyTorch
|
|
414
|
+
run: pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
415
|
+
|
|
416
|
+
- name: Install dependencies
|
|
417
|
+
run: pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
418
|
+
|
|
419
|
+
- name: Compare the collected test count with the README badge
|
|
420
|
+
run: python scripts/check_test_count_drift.py
|