aether-quant 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. aether_quant-0.3.0/.env.live.example +15 -0
  2. {aether_quant-0.2.0 → aether_quant-0.3.0}/.gitignore +1 -0
  3. aether_quant-0.3.0/Dockerfile.workers +8 -0
  4. {aether_quant-0.2.0 → aether_quant-0.3.0}/PKG-INFO +1 -1
  5. aether_quant-0.3.0/README.md +536 -0
  6. {aether_quant-0.2.0 → aether_quant-0.3.0}/aether_quant.egg-info/PKG-INFO +1 -1
  7. {aether_quant-0.2.0 → aether_quant-0.3.0}/aether_quant.egg-info/SOURCES.txt +25 -6
  8. {aether_quant-0.2.0 → aether_quant-0.3.0}/aether_quant.egg-info/scm_file_list.json +25 -6
  9. aether_quant-0.3.0/aether_quant.egg-info/scm_version.json +8 -0
  10. aether_quant-0.3.0/aether_quant.egg-info/top_level.txt +4 -0
  11. {aether_quant-0.2.0 → aether_quant-0.3.0}/aq_cli.py +100 -2
  12. aether_quant-0.3.0/development/Changelog.md +697 -0
  13. aether_quant-0.3.0/development/Problems.md +469 -0
  14. aether_quant-0.3.0/development/backtest_equity_chart.png +0 -0
  15. aether_quant-0.3.0/development/infrastructure.md +489 -0
  16. {aether_quant-0.2.0 → aether_quant-0.3.0}/development/v2_architecture.md +259 -23
  17. {aether_quant-0.2.0 → aether_quant-0.3.0}/docker-compose.yml +35 -3
  18. aether_quant-0.3.0/execution/README.md +58 -0
  19. aether_quant-0.3.0/execution/__init__.py +28 -0
  20. aether_quant-0.3.0/execution/config_cache.py +48 -0
  21. aether_quant-0.3.0/execution/live_credentials.py +21 -0
  22. aether_quant-0.3.0/execution/live_credentials_io.py +42 -0
  23. aether_quant-0.3.0/execution/paper_readiness.py +163 -0
  24. aether_quant-0.3.0/execution/paper_readiness_io.py +54 -0
  25. aether_quant-0.3.0/execution/paper_readiness_report.py +99 -0
  26. aether_quant-0.3.0/execution/runtime_config_io.py +38 -0
  27. aether_quant-0.3.0/generate_backtest_report.py +270 -0
  28. aether_quant-0.3.0/inference/README.md +35 -0
  29. aether_quant-0.3.0/inference/__init__.py +3 -0
  30. aether_quant-0.3.0/inference/exported_model.py +68 -0
  31. {aether_quant-0.2.0 → aether_quant-0.3.0}/main.py +86 -64
  32. {aether_quant-0.2.0 → aether_quant-0.3.0}/monitoring/api_server.py +9 -0
  33. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/README.md +5 -4
  34. {aether_quant-0.2.0 → aether_quant-0.3.0}/performance/README.md +8 -3
  35. {aether_quant-0.2.0 → aether_quant-0.3.0}/performance/triggers.py +52 -0
  36. {aether_quant-0.2.0 → aether_quant-0.3.0}/pyproject.toml +12 -5
  37. {aether_quant-0.2.0 → aether_quant-0.3.0}/requirements/README.md +3 -5
  38. {aether_quant-0.2.0 → aether_quant-0.3.0}/requirements/requirements-dev.txt +4 -0
  39. aether_quant-0.3.0/requirements/requirements-workers.txt +14 -0
  40. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/README.md +9 -4
  41. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/worker.py +20 -2
  42. {aether_quant-0.2.0 → aether_quant-0.3.0}/risk/manual_override.py +9 -1
  43. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/README.md +3 -1
  44. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_aq_cli.py +158 -3
  45. aether_quant-0.3.0/tests/test_config_cache.py +87 -0
  46. aether_quant-0.3.0/tests/test_exported_model.py +106 -0
  47. aether_quant-0.3.0/tests/test_generate_backtest_report.py +194 -0
  48. aether_quant-0.3.0/tests/test_live_credentials.py +38 -0
  49. aether_quant-0.3.0/tests/test_live_credentials_io.py +53 -0
  50. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_manual_override.py +20 -0
  51. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_market_topology.py +133 -0
  52. aether_quant-0.3.0/tests/test_paper_readiness.py +233 -0
  53. aether_quant-0.3.0/tests/test_paper_readiness_io.py +83 -0
  54. aether_quant-0.3.0/tests/test_paper_readiness_report.py +88 -0
  55. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_retraining_worker.py +57 -0
  56. aether_quant-0.3.0/tests/test_runtime_config_io.py +54 -0
  57. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_simulated_portfolio.py +17 -0
  58. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_triggers.py +24 -0
  59. {aether_quant-0.2.0 → aether_quant-0.3.0}/topology/README.md +46 -11
  60. {aether_quant-0.2.0 → aether_quant-0.3.0}/topology/market_topology.py +71 -33
  61. aether_quant-0.3.0/webui/src/components/monitoring/PaperReadinessPanel.tsx +58 -0
  62. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/pages/Overview.tsx +2 -0
  63. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/types/state.ts +16 -0
  64. aether_quant-0.2.0/Dockerfile.telegram_worker +0 -9
  65. aether_quant-0.2.0/Dockerfile.trigger_worker +0 -8
  66. aether_quant-0.2.0/Dockerfile.worker +0 -7
  67. aether_quant-0.2.0/README.md +0 -409
  68. aether_quant-0.2.0/aether_quant.egg-info/scm_version.json +0 -8
  69. aether_quant-0.2.0/aether_quant.egg-info/top_level.txt +0 -2
  70. aether_quant-0.2.0/development/Changelog.md +0 -482
  71. aether_quant-0.2.0/development/Problems.md +0 -214
  72. aether_quant-0.2.0/development/infrastructure.md +0 -366
  73. aether_quant-0.2.0/execution/README.md +0 -9
  74. aether_quant-0.2.0/execution/__init__.py +0 -13
  75. aether_quant-0.2.0/requirements/requirements-telegram-worker.txt +0 -8
  76. aether_quant-0.2.0/requirements/requirements-trigger-worker.txt +0 -3
  77. aether_quant-0.2.0/requirements/requirements-worker.txt +0 -4
  78. {aether_quant-0.2.0 → aether_quant-0.3.0}/.dockerignore +0 -0
  79. {aether_quant-0.2.0 → aether_quant-0.3.0}/.env.compose.example +0 -0
  80. {aether_quant-0.2.0 → aether_quant-0.3.0}/.gitattributes +0 -0
  81. {aether_quant-0.2.0 → aether_quant-0.3.0}/.github/workflows/ci.yml +0 -0
  82. {aether_quant-0.2.0 → aether_quant-0.3.0}/.github/workflows/release.yml +0 -0
  83. {aether_quant-0.2.0 → aether_quant-0.3.0}/Dockerfile +0 -0
  84. {aether_quant-0.2.0 → aether_quant-0.3.0}/Dockerfile.retraining_worker +0 -0
  85. {aether_quant-0.2.0 → aether_quant-0.3.0}/aether_quant.egg-info/dependency_links.txt +0 -0
  86. {aether_quant-0.2.0 → aether_quant-0.3.0}/aether_quant.egg-info/entry_points.txt +0 -0
  87. {aether_quant-0.2.0 → aether_quant-0.3.0}/analyzer/README.md +0 -0
  88. {aether_quant-0.2.0 → aether_quant-0.3.0}/analyzer/__init__.py +0 -0
  89. {aether_quant-0.2.0 → aether_quant-0.3.0}/analyzer/market_analyzer.py +0 -0
  90. {aether_quant-0.2.0 → aether_quant-0.3.0}/backtests/.gitkeep +0 -0
  91. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/estimize/consensus/aapl/.keep +0 -0
  92. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/estimize/estimate/.keep +0 -0
  93. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/estimize/release/.keep +0 -0
  94. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/sec/aapl/.keep +0 -0
  95. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/trading-economics/.keep +0 -0
  96. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/trading-economics/calendar/.keep +0 -0
  97. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/trading-economics/earnings/.keep +0 -0
  98. {aether_quant-0.2.0 → aether_quant-0.3.0}/data/alternative/trading-economics/indicator/.keep +0 -0
  99. {aether_quant-0.2.0 → aether_quant-0.3.0}/data_pipeline/README.md +0 -0
  100. {aether_quant-0.2.0 → aether_quant-0.3.0}/data_pipeline/__init__.py +0 -0
  101. {aether_quant-0.2.0 → aether_quant-0.3.0}/data_pipeline/v2_manifest.py +0 -0
  102. {aether_quant-0.2.0 → aether_quant-0.3.0}/data_pipeline/yfinance_backfill.py +0 -0
  103. {aether_quant-0.2.0 → aether_quant-0.3.0}/development/README.md +0 -0
  104. {aether_quant-0.2.0 → aether_quant-0.3.0}/execution/order_gate.py +0 -0
  105. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/README.md +0 -0
  106. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/__init__.py +0 -0
  107. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/observation_metrics.py +0 -0
  108. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/postgres_worker.py +0 -0
  109. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/redis_queue.py +0 -0
  110. {aether_quant-0.2.0 → aether_quant-0.3.0}/experience/simulated_portfolio.py +0 -0
  111. {aether_quant-0.2.0 → aether_quant-0.3.0}/experts/README.md +0 -0
  112. {aether_quant-0.2.0 → aether_quant-0.3.0}/experts/__init__.py +0 -0
  113. {aether_quant-0.2.0 → aether_quant-0.3.0}/experts/expert_datasets.py +0 -0
  114. {aether_quant-0.2.0 → aether_quant-0.3.0}/liquidity/README.md +0 -0
  115. {aether_quant-0.2.0 → aether_quant-0.3.0}/liquidity/__init__.py +0 -0
  116. {aether_quant-0.2.0 → aether_quant-0.3.0}/liquidity/market_liquidity.py +0 -0
  117. {aether_quant-0.2.0 → aether_quant-0.3.0}/ml/README.md +0 -0
  118. {aether_quant-0.2.0 → aether_quant-0.3.0}/moe/README.md +0 -0
  119. {aether_quant-0.2.0 → aether_quant-0.3.0}/moe/__init__.py +0 -0
  120. {aether_quant-0.2.0 → aether_quant-0.3.0}/moe/gating.py +0 -0
  121. {aether_quant-0.2.0 → aether_quant-0.3.0}/monitoring/README.md +0 -0
  122. {aether_quant-0.2.0 → aether_quant-0.3.0}/monitoring/__init__.py +0 -0
  123. {aether_quant-0.2.0 → aether_quant-0.3.0}/monitoring/neural_network_state.py +0 -0
  124. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/__init__.py +0 -0
  125. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/postgres_telegram.py +0 -0
  126. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/telegram_alerts.py +0 -0
  127. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/telegram_client.py +0 -0
  128. {aether_quant-0.2.0 → aether_quant-0.3.0}/notifications/telegram_worker.py +0 -0
  129. {aether_quant-0.2.0 → aether_quant-0.3.0}/performance/__init__.py +0 -0
  130. {aether_quant-0.2.0 → aether_quant-0.3.0}/performance/postgres_triggers.py +0 -0
  131. {aether_quant-0.2.0 → aether_quant-0.3.0}/performance/trigger_worker.py +0 -0
  132. {aether_quant-0.2.0 → aether_quant-0.3.0}/regime/README.md +0 -0
  133. {aether_quant-0.2.0 → aether_quant-0.3.0}/regime/__init__.py +0 -0
  134. {aether_quant-0.2.0 → aether_quant-0.3.0}/regime/market_regime.py +0 -0
  135. {aether_quant-0.2.0 → aether_quant-0.3.0}/requirements/requirements-retraining-worker.txt +0 -0
  136. {aether_quant-0.2.0 → aether_quant-0.3.0}/requirements/requirements-runtime.txt +0 -0
  137. {aether_quant-0.2.0 → aether_quant-0.3.0}/requirements/requirements.txt +0 -0
  138. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/__init__.py +0 -0
  139. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/artifacts.py +0 -0
  140. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/backtest_gate.py +0 -0
  141. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/lean_backtest.py +0 -0
  142. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/orchestrator.py +0 -0
  143. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/planning.py +0 -0
  144. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/postgres_registry.py +0 -0
  145. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/status_export.py +0 -0
  146. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/validation_gate.py +0 -0
  147. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/vault_client.py +0 -0
  148. {aether_quant-0.2.0 → aether_quant-0.3.0}/retraining/vault_commands.py +0 -0
  149. {aether_quant-0.2.0 → aether_quant-0.3.0}/risk/README.md +0 -0
  150. {aether_quant-0.2.0 → aether_quant-0.3.0}/risk/__init__.py +0 -0
  151. {aether_quant-0.2.0 → aether_quant-0.3.0}/risk/position_sizing.py +0 -0
  152. {aether_quant-0.2.0 → aether_quant-0.3.0}/risk_controls.py +0 -0
  153. {aether_quant-0.2.0 → aether_quant-0.3.0}/setup.cfg +0 -0
  154. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_backtest_gate.py +0 -0
  155. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_experience_queue.py +0 -0
  156. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_expert_datasets.py +0 -0
  157. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_expert_models.py +0 -0
  158. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_gating_network.py +0 -0
  159. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_lean_backtest.py +0 -0
  160. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_lean_backtest_ml_coverage.py +0 -0
  161. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_learned_topology.py +0 -0
  162. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_market_analyzer.py +0 -0
  163. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_market_liquidity.py +0 -0
  164. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_market_regime.py +0 -0
  165. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_neural_network_state.py +0 -0
  166. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_observation_metrics.py +0 -0
  167. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_order_gate.py +0 -0
  168. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_position_sizing.py +0 -0
  169. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_postgres_telegram.py +0 -0
  170. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_postgres_triggers.py +0 -0
  171. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_postgres_worker.py +0 -0
  172. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_retraining_artifacts.py +0 -0
  173. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_retraining_orchestrator.py +0 -0
  174. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_retraining_planning.py +0 -0
  175. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_retraining_postgres_registry.py +0 -0
  176. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_risk_controls.py +0 -0
  177. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_status_export.py +0 -0
  178. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_telegram_alerts.py +0 -0
  179. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_telegram_client.py +0 -0
  180. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_telegram_worker.py +0 -0
  181. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_train_pipeline.py +0 -0
  182. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_train_topology.py +0 -0
  183. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_trigger_worker.py +0 -0
  184. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_v2_pipeline_manifest.py +0 -0
  185. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_validation_gate.py +0 -0
  186. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_vault_client.py +0 -0
  187. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_vault_commands.py +0 -0
  188. {aether_quant-0.2.0 → aether_quant-0.3.0}/tests/test_yfinance_backfill.py +0 -0
  189. {aether_quant-0.2.0 → aether_quant-0.3.0}/topology/__init__.py +0 -0
  190. {aether_quant-0.2.0 → aether_quant-0.3.0}/topology/learned_topology.py +0 -0
  191. {aether_quant-0.2.0 → aether_quant-0.3.0}/train.py +0 -0
  192. {aether_quant-0.2.0 → aether_quant-0.3.0}/train_topology.py +0 -0
  193. {aether_quant-0.2.0 → aether_quant-0.3.0}/visualization/README.md +0 -0
  194. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/.gitignore +0 -0
  195. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/.oxlintrc.json +0 -0
  196. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/README.md +0 -0
  197. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/index.html +0 -0
  198. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/overview_v2_12.png +0 -0
  199. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/package-lock.json +0 -0
  200. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/package.json +0 -0
  201. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/public/favicon.svg +0 -0
  202. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/public/icons.svg +0 -0
  203. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/risk_v2_12.png +0 -0
  204. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/App.tsx +0 -0
  205. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/api/client.ts +0 -0
  206. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/api/hooks.ts +0 -0
  207. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/heatmap/AssetHeatmap.tsx +0 -0
  208. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/layout/AppShell.tsx +0 -0
  209. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/layout/Panel.tsx +0 -0
  210. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/CountTable.tsx +0 -0
  211. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/MonitoringFeeds.tsx +0 -0
  212. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/ObservationPanel.tsx +0 -0
  213. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/PerformanceTriggersPanel.tsx +0 -0
  214. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/RawStateViewer.tsx +0 -0
  215. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/monitoring/RetrainingStatusPanel.tsx +0 -0
  216. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/neuralnet/NeuralNetworkScene3D.tsx +0 -0
  217. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/neuralnet/NeuralNetworkStatsPanel.tsx +0 -0
  218. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/risk/AssetSizingTable.tsx +0 -0
  219. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/risk/LiquidityTable.tsx +0 -0
  220. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/risk/RiskBar.tsx +0 -0
  221. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/risk/RiskCore.tsx +0 -0
  222. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/risk/StrategyRiskCards.tsx +0 -0
  223. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/scene3d/Scene3D.tsx +0 -0
  224. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/scorecards/Scorecards.tsx +0 -0
  225. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/signals/Badge.tsx +0 -0
  226. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/signals/PositionsList.tsx +0 -0
  227. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/signals/SignalBoard.tsx +0 -0
  228. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/topology/ClusterList.tsx +0 -0
  229. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/topology/TopologyLearningPanel.tsx +0 -0
  230. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/topology/TopologyScene3D.tsx +0 -0
  231. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/AssetPerformancePanel.tsx +0 -0
  232. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/BacktestEquityPanel.tsx +0 -0
  233. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/DivergingBarChart.tsx +0 -0
  234. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/LineChart.tsx +0 -0
  235. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/MetricsSnapshotPanel.tsx +0 -0
  236. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/components/tracing/ObservationEquityPanel.tsx +0 -0
  237. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/index.css +0 -0
  238. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/lib/downsample.ts +0 -0
  239. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/lib/format.ts +0 -0
  240. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/main.tsx +0 -0
  241. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/pages/NeuralNetworkPage.tsx +0 -0
  242. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/pages/RiskPage.tsx +0 -0
  243. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/pages/TopologyPage.tsx +0 -0
  244. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/pages/TracingPage.tsx +0 -0
  245. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/src/types/tracing.ts +0 -0
  246. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/tsconfig.app.json +0 -0
  247. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/tsconfig.json +0 -0
  248. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/tsconfig.node.json +0 -0
  249. {aether_quant-0.2.0 → aether_quant-0.3.0}/webui/vite.config.ts +0 -0
@@ -0,0 +1,15 @@
1
+ # Copy this file to .env.live (untracked, .gitignore'd) and fill in real
2
+ # values before switching phase_v2.runtime.mode to "live" (V2-22). Never
3
+ # commit .env.live.
4
+ #
5
+ # This is read by execution/live_credentials_io.py as a pre-flight
6
+ # credential-presence check only. It does NOT wire Lean itself - Lean's
7
+ # BrokerageSetupHandler reads ib-account/ib-user-name/ib-password/
8
+ # ib-trading-mode directly out of lean.json (also gitignored); populate
9
+ # those fields by hand as a separate step (see development/infrastructure.md's
10
+ # "Live Deployment Betreiben (V2-22)" runbook).
11
+
12
+ AETHER_IB_ACCOUNT=
13
+ AETHER_IB_USER_NAME=
14
+ AETHER_IB_PASSWORD=
15
+ AETHER_IB_TRADING_MODE=paper
@@ -16,6 +16,7 @@ env/
16
16
  .env
17
17
  .env.*
18
18
  !.env.compose.example
19
+ !.env.live.example
19
20
  ib_config.py
20
21
  *_config.local.py
21
22
  config.json
@@ -0,0 +1,8 @@
1
+ FROM python:3.11-slim
2
+ WORKDIR /app
3
+ COPY requirements/requirements-workers.txt .
4
+ RUN pip install --no-cache-dir -r requirements-workers.txt
5
+ COPY execution/ ./execution/
6
+ COPY experience/ ./experience/
7
+ COPY performance/ ./performance/
8
+ COPY notifications/ ./notifications/
@@ -1,5 +1,5 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aether-quant
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Aether Quant convenience CLI
5
5
  Requires-Python: >=3.10
@@ -0,0 +1,536 @@
1
+ <p align="center">
2
+ <img src="development/logo.png" width="220" alt="Aether Quant logo">
3
+ </p>
4
+
5
+ <h1 align="center">Aether Quant</h1>
6
+
7
+ <p align="center">
8
+ <strong>My state-of-the-art flagship trading model — a dynamic, self-adapting algorithmic trading system built on QuantConnect Lean and PyTorch, engineered to prove that dynamic models belong in dynamic markets.</strong>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <img src="https://img.shields.io/badge/python-3.10%2B-FF8C00?style=flat-square&labelColor=1A1A1A&logo=python&logoColor=white" alt="Python 3.10+">
13
+ <!-- AQ:TEST_BADGE_START --><img src="https://img.shields.io/badge/tests-528%2F528%20passing-brightgreen?style=flat-square&labelColor=1A1A1A" alt="528 of 528 tests passing"><!-- AQ:TEST_BADGE_END -->
14
+ <img src="https://img.shields.io/pypi/v/aether-quant?style=flat-square&labelColor=1A1A1A&color=FF8C00" alt="PyPI version">
15
+ <img src="https://img.shields.io/badge/docker-ghcr.io%2Faether--quant-2496ED?style=flat-square&labelColor=1A1A1A&logo=docker&logoColor=white" alt="Docker image on GHCR">
16
+ </p>
17
+
18
+ Aether Quant is not a single static strategy — it's a **dynamic system**: a
19
+ Mixture-of-Experts ensemble (bullish/bearish/sideways/volatility specialists)
20
+ routed by a learned gating network, a market-regime detector, a 3D market
21
+ topology layer that combines a deterministic correlation embedding with a
22
+ learned probabilistic overlay, a liquidity/market-impact engine that adjusts
23
+ position sizing to real trading conditions, and a controlled retraining loop
24
+ that lets the model itself evolve as markets do — all wired together and
25
+ validated end-to-end inside QuantConnect's Lean engine. The thesis this
26
+ project exists to test is simple to state and hard to prove: **markets are
27
+ non-stationary, so a trading model should be too.** Every subsystem here
28
+ exists to make the model adapt — to regime shifts, to changing correlation
29
+ structure, to liquidity conditions — rather than to fit one historical
30
+ window and hope it generalizes.
31
+
32
+ ## Table of Contents
33
+
34
+ - [Download](#download)
35
+ - [Getting Started](#getting-started)
36
+ - [Requirements](#requirements)
37
+ - [Architecture](#architecture)
38
+ - [Project Structure](#project-structure)
39
+ - [Module Documentation](#module-documentation)
40
+ - [Development Documentation](#development-documentation)
41
+ - [Backtest Results](#backtest-results)
42
+ - [Test Suite](#test-suite)
43
+ - [CLI Reference](#cli-reference)
44
+ - [Release Process](#release-process)
45
+ - [Runbook](#runbook)
46
+ - [Roadmap](#roadmap)
47
+ - [Contributing](#contributing)
48
+
49
+ ---
50
+
51
+ ## Download
52
+
53
+ If you just want to use Aether Quant rather than develop on it, no local
54
+ `pip install -e .` or source checkout is needed — the CLI and backend are
55
+ published as ready-to-use releases:
56
+
57
+ ```powershell
58
+ pip install aether-quant
59
+ docker pull ghcr.io/leon1706-lol/aether-quant:latest
60
+ ```
61
+
62
+ `aq --help` is then available immediately (see [CLI Reference](#cli-reference)
63
+ below). `aq` checks PyPI at most once every 24h (short timeout, never
64
+ blocking) for a newer version and prints a one-line notice if one's
65
+ available — disable with `AQ_SKIP_UPDATE_CHECK=1`.
66
+
67
+ The Docker image is the same one `docker-compose.yml`'s `aether-quant`
68
+ service pulls by default (override with the `AETHER_QUANT_IMAGE` env var,
69
+ e.g. to use a locally built image instead).
70
+
71
+ ## Getting Started
72
+
73
+ For local development (this repo cloned, a virtual environment active):
74
+
75
+ 1. Install dependencies:
76
+
77
+ ```powershell
78
+ pip install -r requirements/requirements.txt
79
+ pip install -r requirements/requirements-dev.txt # local dev extras
80
+ ```
81
+
82
+ 2. Refresh the data inventory only:
83
+
84
+ ```powershell
85
+ python train.py --init-only
86
+ ```
87
+
88
+ 3. Build the dataset and train the model:
89
+
90
+ ```powershell
91
+ python train.py
92
+ ```
93
+
94
+ Or build dataset artifacts only, without training:
95
+
96
+ ```powershell
97
+ python train.py --dataset-only
98
+ ```
99
+
100
+ 4. Start the webui locally (two processes):
101
+
102
+ ```powershell
103
+ uvicorn monitoring.api_server:app --port 8001 --reload
104
+ ```
105
+
106
+ ```powershell
107
+ cd webui
108
+ npm install
109
+ npm run dev
110
+ ```
111
+
112
+ Then open `http://localhost:3002`.
113
+
114
+ 5. Run a real backtest and refresh this README's [Backtest Results](#backtest-results):
115
+
116
+ ```powershell
117
+ pip install -e . # registers the `aq` command from source
118
+ aq backtest
119
+ ```
120
+
121
+ ## Requirements
122
+
123
+ - **Python ≥ 3.10** for the training pipeline, `main.py`'s Lean algorithm, the FastAPI monitoring server, and the `aq` CLI.
124
+ - **QuantConnect Lean CLI** (`pip install lean`) for running backtests and paper/live trading.
125
+ - **Docker & Docker Compose** for the local infrastructure (Redis, PostgreSQL, and the background workers — experience persistence, performance triggers, controlled retraining, Telegram alerts).
126
+ - **Node.js** (for the `webui/` React/Vite dashboard).
127
+
128
+ This repo splits its Python dependencies across several `requirements*.txt`
129
+ files (full training stack vs. minimal per-Docker-image installs vs. local
130
+ dev extras) rather than one monolithic file. See
131
+ **[`requirements/README.md`](requirements/README.md)** for the exact
132
+ `pip install` command for every variant and which Dockerfile consumes each one.
133
+
134
+ ## Architecture
135
+
136
+ Aether Quant runs a daily-bar decision pipeline entirely inside Lean's
137
+ `on_data()` callback: features flow through regime detection and 3D topology
138
+ modeling, both feed a gating network that routes across four specialized
139
+ experts, the central market analyzer combines all of that with the liquidity
140
+ engine's sizing input into one categorical action per asset per bar, and
141
+ every decision is persisted through a Redis → PostgreSQL experience pipeline
142
+ that a controlled retraining loop reads from to evolve the model over time.
143
+
144
+ #### System Flow
145
+
146
+ ```mermaid
147
+ flowchart LR
148
+ A["Lean data folder<br/>stocks, ETFs, crypto"] --> B["Feature pipeline<br/>train.py"]
149
+ B --> C["Regime detection<br/>trend, volatility, drawdown, correlation"]
150
+ B --> D["3D topology modeling<br/>market structure and clusters"]
151
+ C --> E["Gating network<br/>the manager"]
152
+ D --> E
153
+ E --> F["Expert modules"]
154
+ F --> G["Bullish expert"]
155
+ F --> H["Bearish expert"]
156
+ F --> I["Sideways expert"]
157
+ F --> J["Volatility expert"]
158
+ G --> K["Market analyzer<br/>central decision layer"]
159
+ H --> K
160
+ I --> K
161
+ J --> K
162
+ C --> K
163
+ D --> K
164
+ L["Liquidity engine<br/>DDV, participation rate,<br/>slippage estimate"] --> K
165
+ K --> M["Action categorization<br/>trade / simulate / observe<br/>reduce_risk / retrain_candidate"]
166
+ M --> N["Lean order execution<br/>InteractiveBrokersFeeModel"]
167
+ M --> O["Observation / simulation record"]
168
+ N --> P["Redis event stream<br/>temporary low-latency buffer"]
169
+ O --> P
170
+ P --> Q["Experience worker<br/>async batch persistence"]
171
+ Q --> R["PostgreSQL experience database<br/>single source of truth"]
172
+ R --> S["Performance triggers<br/>100 observations, drawdown, Sharpe, regime shift"]
173
+ S --> T["Controlled retraining<br/>versioned weights and rollback"]
174
+ T --> E
175
+ ```
176
+
177
+ #### Tech Stack
178
+
179
+ ```mermaid
180
+ flowchart TB
181
+ A["Infrastructure"] --> A1["Docker Compose<br/>(Redis, Postgres, aether-quant app)"]
182
+ A --> A2["Lean CLI<br/>(backtest + paper trading)"]
183
+ A --> A3["30-day observation phase before live mode"]
184
+ B["Development"] --> B1["VS Code + Claude Code"]
185
+ B --> B2["GitHub"]
186
+ C["Data and storage"] --> C1["Lean data folder for training/backtesting"]
187
+ C --> C2["Redis temporary event stream"]
188
+ C --> C3["PostgreSQL permanent experience database"]
189
+ D["AI and modeling"] --> D1["PyTorch"]
190
+ D --> D2["scikit-learn"]
191
+ D --> D3["NumPy / Pandas"]
192
+ D --> D4["MoE experts and gating network"]
193
+ E["Monitoring and UI"] --> E1["React/Vite webui — Tracing dashboard (port 3002 dev / 8001 Docker)"]
194
+ E --> E2["FastAPI JSON API (port 8000)"]
195
+ E --> E3["Telegram alerts (V2-19)<br/>notifications/telegram_worker.py"]
196
+ ```
197
+
198
+ These two diagrams are the high-level summary. For the full system —
199
+ every per-phase "contract" (Observation Mode, Performance Triggers,
200
+ Controlled Retraining, 3D Topology, Liquidity Engine, Paper/Live Deployment,
201
+ and more), the module map, and an honest analysis of what would need to
202
+ change for this to become a genuinely low-latency/HFT system — see
203
+ **[`development/v2_architecture.md`](development/v2_architecture.md)**.
204
+
205
+ ## Project Structure
206
+
207
+ ```text
208
+ aether-quant/
209
+ ├── .github/ # CI workflows (tests, webui build, release)
210
+ ├── development/ # Architecture docs, changelog, problems log, backtest chart
211
+ ├── data/ # Local Lean data folder (equities, crypto)
212
+ ├── data_pipeline/ # Lean-data contract + Yahoo Finance historical backfill
213
+ ├── analyzer/ # Central market analyzer (final per-asset decision layer)
214
+ ├── moe/ # Mixture-of-Experts gating network
215
+ ├── experts/ # Bullish / bearish / sideways / volatility expert models
216
+ ├── regime/ # Market regime detection
217
+ ├── topology/ # 3D market topology (deterministic SMACOF + learned overlay)
218
+ ├── liquidity/ # Liquidity / market-impact engine
219
+ ├── risk/ # Dynamic position sizing, leverage, drawdown controls
220
+ ├── execution/ # Order gating, paper/live broker readiness, config caching
221
+ ├── inference/ # Vectorized neural-network forward-pass interpreter
222
+ ├── experience/ # Redis -> PostgreSQL observation/decision history pipeline
223
+ ├── performance/ # Performance trigger system (drawdown, Sharpe, regime-shift, ...)
224
+ ├── retraining/ # Controlled retraining: plan/train/validate/backtest/promote
225
+ ├── monitoring/ # FastAPI JSON API serving runtime state to the webui
226
+ ├── notifications/ # Telegram alerting worker
227
+ ├── visualization/ # Shared runtime-state JSON/CSV exports
228
+ ├── webui/ # React/Vite dashboard (Overview, Risk, Topology, Neural Network, Tracing)
229
+ ├── ml/ # Model weights, datasets, versioned retraining candidates
230
+ ├── storage/ # Reserved for future persistent artifact storage
231
+ ├── requirements/ # All requirements*.txt variants
232
+ ├── tests/ # Full pytest suite (507 tests)
233
+ ├── backtests/ # Lean backtest run outputs (gitignored)
234
+ ├── Aether-quant-Obsidian-Vault/ # Auto-generated code-graph / architecture vault
235
+ ├── main.py # Lean algorithm: inference, signal engine, risk controls
236
+ ├── train.py # Training pipeline: dataset build, model training, validation
237
+ ├── train_topology.py # Offline trainer for the learned topology overlay
238
+ ├── generate_backtest_report.py # Regenerates this README's Backtest Results section
239
+ ├── aq_cli.py # `aq` convenience CLI
240
+ ├── config.json # Runtime configuration (phase1 / phase_v2 blocks)
241
+ ├── lean.json # Lean engine + brokerage configuration
242
+ ├── docker-compose.yml # Local infrastructure (Lean, Redis, PostgreSQL, workers)
243
+ └── pyproject.toml # Package metadata, `aq` entry point, pytest config
244
+ ```
245
+
246
+ ## Module Documentation
247
+
248
+ Every package below has its own README with the full detail on what it owns
249
+ and how it's wired in — this table is the index.
250
+
251
+ | Module | What it owns | Docs |
252
+ |---|---|---|
253
+ | `analyzer/` | Central market analyzer — the final per-asset action categorization layer | [README](analyzer/README.md) |
254
+ | `data/` | Local Lean data-folder format documentation | [README](data/README.md) |
255
+ | `data_pipeline/` | Lean-data contract + Yahoo Finance historical backfill | [README](data_pipeline/README.md) |
256
+ | `execution/` | Order gating, paper/live broker readiness, config-read caching | [README](execution/README.md) |
257
+ | `experience/` | Observation/decision history — Redis buffer + PostgreSQL persistence | [README](experience/README.md) |
258
+ | `experts/` | Bullish, bearish, sideways, and volatility expert models | [README](experts/README.md) |
259
+ | `inference/` | Vectorized forward-pass interpreter for the exported neural networks | [README](inference/README.md) |
260
+ | `liquidity/` | Liquidity and market-impact engine | [README](liquidity/README.md) |
261
+ | `ml/` | Model & dataset artifacts, including versioned retraining candidates | [README](ml/README.md) |
262
+ | `moe/` | Mixture-of-Experts gating network | [README](moe/README.md) |
263
+ | `monitoring/` | FastAPI JSON API serving runtime state to the webui | [README](monitoring/README.md) |
264
+ | `notifications/` | Telegram alerting worker | [README](notifications/README.md) |
265
+ | `performance/` | Performance trigger system (14 trigger functions) | [README](performance/README.md) |
266
+ | `regime/` | Market regime detection | [README](regime/README.md) |
267
+ | `requirements/` | All `requirements*.txt` variants and what consumes each | [README](requirements/README.md) |
268
+ | `retraining/` | Controlled retraining — plan/train/validate/backtest/commit/promote/rollback | [README](retraining/README.md) |
269
+ | `risk/` | Dynamic position sizing, leverage caps, drawdown-aware sizing | [README](risk/README.md) |
270
+ | `storage/` | Reserved placeholder for future persistent artifact storage | [README](storage/README.md) |
271
+ | `tests/` | Pytest suite conventions (507 tests) | [README](tests/README.md) |
272
+ | `topology/` | 3D market topology — deterministic SMACOF embedding + learned overlay | [README](topology/README.md) |
273
+ | `visualization/` | Shared runtime-state JSON/CSV exports | [README](visualization/README.md) |
274
+ | `webui/` | React/Vite dashboard (Overview, Risk, Topology, Neural Network, Tracing) | [README](webui/README.md) |
275
+ | `Aether-quant-Obsidian-Vault/` | Auto-generated Obsidian vault mirroring the repo's architecture/code graph | [README](Aether-quant-Obsidian-Vault/README.md) |
276
+
277
+ ## Development Documentation
278
+
279
+ | Document | Contents |
280
+ |---|---|
281
+ | [`development/README.md`](development/README.md) | Index of this folder |
282
+ | [`development/v2_architecture.md`](development/v2_architecture.md) | The full V2 system architecture: process-flow and tech-stack diagrams, the module map, per-phase "contract" sections, and the HFT-readiness analysis |
283
+ | [`development/infrastructure.md`](development/infrastructure.md) | Docker Compose runbook — start commands for every service, SQL inspection snippets, port reference |
284
+ | [`development/Changelog.md`](development/Changelog.md) | Detailed, append-only, per-phase build history — what was built, when, and why |
285
+ | [`development/Problems.md`](development/Problems.md) | Append-only audit log of bugs and infrastructure issues, each with a severity rating and fixed/open status |
286
+
287
+ ## Backtest Results
288
+
289
+ <!-- AQ:BACKTEST_START -->
290
+ ![Backtest equity curve](development/backtest_equity_chart.png)
291
+
292
+ | Metric | Value |
293
+ |---|---|
294
+ | Backtest window | 2014-12-01 to 2016-07-06 |
295
+ | Last updated | 2026-07-05 15:37 UTC (auto-generated by `aq backtest`) |
296
+ <!-- AQ:BACKTEST_END -->
297
+
298
+ This section is regenerated automatically every time you run `aq backtest`
299
+ (see [`generate_backtest_report.py`](generate_backtest_report.py)) — it
300
+ always reflects your most recent successful Lean backtest, reading directly
301
+ from Lean's own result JSON (strategy equity curve, its native SPY benchmark
302
+ series, and the full statistics block), so it never goes stale as long as
303
+ you keep backtesting.
304
+
305
+ ## Test Suite
306
+
307
+ 507 tests, one file per source module, run via:
308
+
309
+ ```powershell
310
+ aq test
311
+ ```
312
+
313
+ which — like the backtest chart above — automatically keeps the badge at
314
+ the top of this README in sync with the real pass count every time you run
315
+ it. See [`tests/README.md`](tests/README.md) for the suite's conventions.
316
+
317
+ ## CLI Reference
318
+
319
+ The easiest way to get the `aq` command is straight from PyPI (see
320
+ [Download](#download) above) — no source checkout needed:
321
+
322
+ ```powershell
323
+ pip install aether-quant
324
+ ```
325
+
326
+ For local development (this repo cloned, a virtual environment active),
327
+ `pip install -e .` registers the same `aq` command directly from source
328
+ instead, without waiting on a PyPI release:
329
+
330
+ ```powershell
331
+ pip install -e .
332
+ ```
333
+
334
+ Either way, `aq --help` gives the full command list:
335
+
336
+ ```text
337
+ aq train [--dataset-only|--init-only|--experts-only]
338
+ aq test
339
+ aq backtest
340
+ aq report <backtest-folder> <result-id>
341
+ aq api
342
+ aq webui
343
+ aq docker up [--lean|--all]
344
+ aq docker build
345
+ aq retrain <plan|train|validate|backtest|commit|promote|rollback|status> [...]
346
+ aq trade-lock --on|--off|--auto|--status
347
+ aq status
348
+ ```
349
+
350
+ Every command except `aq trade-lock` is a thin `subprocess` wrapper around a
351
+ command already documented elsewhere in this README:
352
+
353
+ - **`aq train`** — runs `train.py`: builds the dataset and trains the baseline + expert models.
354
+ - **`aq test`** — runs the pytest suite and refreshes this README's test badge.
355
+ - **`aq backtest`** — runs `lean backtest .` and refreshes this README's [Backtest Results](#backtest-results) section.
356
+ - **`aq report <backtest-folder> <result-id>`** — generates Lean's own HTML backtest report (trade blotter, standard Lean charts) at `backtests/<backtest-folder>/report.html`.
357
+ - **`aq api`** — starts the FastAPI monitoring server on `:8001`.
358
+ - **`aq webui`** — starts the webui dev server (`npm run dev`).
359
+ - **`aq docker up [--lean|--all]`** — starts local infrastructure (default: Redis + PostgreSQL only).
360
+ - **`aq docker build`** — rebuilds the `aether-quant` app image.
361
+ - **`aq retrain <stage>`** — dispatches to `python -m retraining.orchestrator <stage> ...` for a single manual pipeline stage.
362
+ - **`aq trade-lock --on|--off|--auto|--status`** — manually overrides `main.py`'s sticky total-drawdown trade lock (see `development/v2_architecture.md`'s Manual Trade-Lock Override Contract). `--off` deliberately clears an otherwise-permanent lock; `--auto` returns to fully automatic behavior.
363
+ - **`aq status`** — shows `git status`.
364
+
365
+ ## Release Process
366
+
367
+ A release is exactly one manual step — deliberately no automatic release on
368
+ every push to `main`, only on an explicitly pushed version tag
369
+ (`.github/workflows/release.yml`, triggered on `push: tags: ["v*.*.*"]`):
370
+
371
+ ```powershell
372
+ git tag v0.1.0
373
+ git push origin v0.1.0
374
+ ```
375
+
376
+ This then automatically runs (no manual version bump anywhere in the repo —
377
+ `pyproject.toml` reads the version straight from the tag via
378
+ `setuptools-scm`):
379
+
380
+ 1. The test suite (`pytest`) — a failure blocks the release entirely.
381
+ 2. PyPI publishing via Trusted Publishing (OIDC) — no PyPI token is stored as a GitHub secret.
382
+ 3. Docker image build and push to `ghcr.io/leon1706-lol/aether-quant`, tagged with the version number and `:latest`.
383
+
384
+ **One-time manual setup, before the first tag is ever pushed** (can't be
385
+ done from here):
386
+
387
+ - Create a "Trusted Publisher" on pypi.org for this project (pointing at `leon1706-lol/Aether-quant` + the `release.yml` workflow file).
388
+ - After the very first tag push: check the **Packages** tab of this repo to see whether the new `aether-quant` package is private, and switch it to public if needed so `docker pull` works for everyone.
389
+
390
+ ## Runbook
391
+
392
+ Everyday local commands.
393
+
394
+ Activate the virtual environment:
395
+
396
+ ```powershell
397
+ .\.venv\Scripts\Activate.ps1
398
+ ```
399
+
400
+ Rebuild training artifacts:
401
+
402
+ ```powershell
403
+ python train.py
404
+ ```
405
+
406
+ Rebuild only the dataset/scaler/manifest:
407
+
408
+ ```powershell
409
+ python train.py --dataset-only
410
+ ```
411
+
412
+ Run the tests:
413
+
414
+ ```powershell
415
+ pytest tests/
416
+ ```
417
+
418
+ Recommended full workflow:
419
+
420
+ ```powershell
421
+ python train.py
422
+ pytest tests/
423
+ aq backtest
424
+ aq report <backtest-folder> <result-id>
425
+ git status
426
+ ```
427
+
428
+ Start a Lean backtest from the project folder:
429
+
430
+ ```powershell
431
+ lean backtest .
432
+ ```
433
+
434
+ Find a finished backtest:
435
+
436
+ ```powershell
437
+ Get-ChildItem .\backtests\<backtest-folder>\*-summary.json
438
+ ```
439
+
440
+ Generate the official Lean HTML report:
441
+
442
+ ```powershell
443
+ lean report --backtest-results .\backtests\<backtest-folder>\<result-id>.json --report-destination .\backtests\<backtest-folder>\report.html --overwrite
444
+ ```
445
+
446
+ Start the webui locally (API server and frontend, two terminals):
447
+
448
+ ```powershell
449
+ uvicorn monitoring.api_server:app --port 8001 --reload
450
+ ```
451
+
452
+ ```powershell
453
+ cd webui
454
+ npm run dev
455
+ ```
456
+
457
+ Then:
458
+
459
+ ```text
460
+ http://localhost:3002 (Overview)
461
+ http://localhost:3002/risk (Risk)
462
+ ```
463
+
464
+ Check git status before a commit:
465
+
466
+ ```powershell
467
+ git status
468
+ ```
469
+
470
+ ## Roadmap
471
+
472
+ ### V1 — ✅ Finished
473
+
474
+ The first universe was deliberately small and mixed:
475
+
476
+ - `AAPL`
477
+ - `SPY`
478
+ - `QQQ`
479
+ - `BTCUSD`
480
+
481
+ Shared V1 data coverage:
482
+
483
+ - Start: `2014-12-01`
484
+ - End: `2018-08-13`
485
+ - Resolution: `Daily`
486
+
487
+ First windows:
488
+
489
+ - Training: `2014-12-01` to `2017-06-30`
490
+ - Validation: `2017-07-01` to `2017-12-31`
491
+ - Backtest: `2018-01-01` to `2018-08-13`
492
+
493
+ First target definition:
494
+
495
+ - Target type: next day's direction
496
+ - Label: `1` if the next close-to-close return is positive, else `0`
497
+
498
+ First feature ideas:
499
+
500
+ - 1d, 5d, and 20d returns
501
+ - 5d and 20d volatility
502
+ - 5d and 20d momentum
503
+ - Daily range and open-close range
504
+ - Volume change
505
+
506
+ Detailed phase results (Phase 2 through Phase 10, Phase V2-1 through Phase
507
+ V2-15, Visualization Unification) live in
508
+ [`development/Changelog.md`](development/Changelog.md) to keep this README short.
509
+
510
+ ### V3 — 🔜 Incoming Soon
511
+
512
+ `development/v2_architecture.md`'s own "Why This Is Not HFT, And What It
513
+ Would Take" analysis is the honest starting point for what V3 needs to
514
+ close — not marketing aspiration, but a concrete gap list the system's own
515
+ architecture docs already identify:
516
+
517
+ - **Tick/L1-L2 market data pipeline** — replacing the daily Lean zip files with a genuinely higher-frequency data source and storage layer.
518
+ - **A shorter-horizon model** — a new model operating at sub-second/tick granularity with a much shorter prediction horizon, not a retrained version of today's daily classifier.
519
+ - **Real slippage- and latency-aware execution** — an actual fill simulator and limit-order support, replacing today's `SetHoldings`/`Liquidate` market orders with no slippage model wired to fills.
520
+ - **A low-latency, event-driven runtime** — replacing the daily-bar `on_data()` callback and the 30s+ polling background workers with something closer to a real-time event loop.
521
+ - **Real broker/exchange connectivity beyond paper trading** — building on the credential/readiness groundwork V2-21/V2-22 already laid.
522
+ - **Continuous / online retraining** — moving beyond today's offline, cooldown-gated batch retraining pipeline.
523
+ - Further out: an expanded asset universe, multi-timeframe ensembles, and reinforcement-learning-based position sizing/execution.
524
+
525
+ ## Contributing
526
+
527
+ 1. Fork the repository
528
+ 2. Create a feature branch: `git checkout -b feature/my-feature`
529
+ 3. Commit your changes following the existing module structure (see [`development/Changelog.md`](development/Changelog.md) for this project's development history)
530
+ 4. Open a Pull Request
531
+
532
+ ---
533
+
534
+ <div align="center">
535
+ <sub>Built with Python · PyTorch · QuantConnect Lean · FastAPI · React · Redis · PostgreSQL · Docker</sub>
536
+ </div>
@@ -1,5 +1,5 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aether-quant
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Aether Quant convenience CLI
5
5
  Requires-Python: >=3.10
@@ -1,15 +1,15 @@
1
1
  .dockerignore
2
2
  .env.compose.example
3
+ .env.live.example
3
4
  .gitattributes
4
5
  .gitignore
5
6
  Dockerfile
6
7
  Dockerfile.retraining_worker
7
- Dockerfile.telegram_worker
8
- Dockerfile.trigger_worker
9
- Dockerfile.worker
8
+ Dockerfile.workers
10
9
  README.md
11
10
  aq_cli.py
12
11
  docker-compose.yml
12
+ generate_backtest_report.py
13
13
  main.py
14
14
  pyproject.toml
15
15
  risk_controls.py
@@ -43,11 +43,19 @@ data_pipeline/yfinance_backfill.py
43
43
  development/Changelog.md
44
44
  development/Problems.md
45
45
  development/README.md
46
+ development/backtest_equity_chart.png
46
47
  development/infrastructure.md
47
48
  development/v2_architecture.md
48
49
  execution/README.md
49
50
  execution/__init__.py
51
+ execution/config_cache.py
52
+ execution/live_credentials.py
53
+ execution/live_credentials_io.py
50
54
  execution/order_gate.py
55
+ execution/paper_readiness.py
56
+ execution/paper_readiness_io.py
57
+ execution/paper_readiness_report.py
58
+ execution/runtime_config_io.py
51
59
  experience/README.md
52
60
  experience/__init__.py
53
61
  experience/observation_metrics.py
@@ -57,6 +65,9 @@ experience/simulated_portfolio.py
57
65
  experts/README.md
58
66
  experts/__init__.py
59
67
  experts/expert_datasets.py
68
+ inference/README.md
69
+ inference/__init__.py
70
+ inference/exported_model.py
60
71
  liquidity/README.md
61
72
  liquidity/__init__.py
62
73
  liquidity/market_liquidity.py
@@ -86,9 +97,7 @@ requirements/README.md
86
97
  requirements/requirements-dev.txt
87
98
  requirements/requirements-retraining-worker.txt
88
99
  requirements/requirements-runtime.txt
89
- requirements/requirements-telegram-worker.txt
90
- requirements/requirements-trigger-worker.txt
91
- requirements/requirements-worker.txt
100
+ requirements/requirements-workers.txt
92
101
  requirements/requirements.txt
93
102
  retraining/README.md
94
103
  retraining/__init__.py
@@ -110,13 +119,18 @@ risk/position_sizing.py
110
119
  tests/README.md
111
120
  tests/test_aq_cli.py
112
121
  tests/test_backtest_gate.py
122
+ tests/test_config_cache.py
113
123
  tests/test_experience_queue.py
114
124
  tests/test_expert_datasets.py
115
125
  tests/test_expert_models.py
126
+ tests/test_exported_model.py
116
127
  tests/test_gating_network.py
128
+ tests/test_generate_backtest_report.py
117
129
  tests/test_lean_backtest.py
118
130
  tests/test_lean_backtest_ml_coverage.py
119
131
  tests/test_learned_topology.py
132
+ tests/test_live_credentials.py
133
+ tests/test_live_credentials_io.py
120
134
  tests/test_manual_override.py
121
135
  tests/test_market_analyzer.py
122
136
  tests/test_market_liquidity.py
@@ -125,6 +139,9 @@ tests/test_market_topology.py
125
139
  tests/test_neural_network_state.py
126
140
  tests/test_observation_metrics.py
127
141
  tests/test_order_gate.py
142
+ tests/test_paper_readiness.py
143
+ tests/test_paper_readiness_io.py
144
+ tests/test_paper_readiness_report.py
128
145
  tests/test_position_sizing.py
129
146
  tests/test_postgres_telegram.py
130
147
  tests/test_postgres_triggers.py
@@ -135,6 +152,7 @@ tests/test_retraining_planning.py
135
152
  tests/test_retraining_postgres_registry.py
136
153
  tests/test_retraining_worker.py
137
154
  tests/test_risk_controls.py
155
+ tests/test_runtime_config_io.py
138
156
  tests/test_simulated_portfolio.py
139
157
  tests/test_status_export.py
140
158
  tests/test_telegram_alerts.py
@@ -179,6 +197,7 @@ webui/src/components/layout/Panel.tsx
179
197
  webui/src/components/monitoring/CountTable.tsx
180
198
  webui/src/components/monitoring/MonitoringFeeds.tsx
181
199
  webui/src/components/monitoring/ObservationPanel.tsx
200
+ webui/src/components/monitoring/PaperReadinessPanel.tsx
182
201
  webui/src/components/monitoring/PerformanceTriggersPanel.tsx
183
202
  webui/src/components/monitoring/RawStateViewer.tsx
184
203
  webui/src/components/monitoring/RetrainingStatusPanel.tsx