alpha-visualizer 0.7.2__tar.gz → 0.7.3__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 (488) hide show
  1. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/ci.yml +68 -0
  2. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.gitignore +1 -0
  3. alpha_visualizer-0.7.2/.hypothesis/constants/65993953f7ccf191 → alpha_visualizer-0.7.3/.hypothesis/constants/efa1548145a8bfba +1 -1
  4. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/PKG-INFO +1 -1
  5. alpha_visualizer-0.7.3/docs/screenshots/en/browse.png +0 -0
  6. alpha_visualizer-0.7.3/docs/screenshots/en/compare.png +0 -0
  7. alpha_visualizer-0.7.3/docs/screenshots/en/detail.png +0 -0
  8. alpha_visualizer-0.7.3/docs/screenshots/en/strategy.png +0 -0
  9. alpha_visualizer-0.7.3/docs/screenshots/ja/browse.png +0 -0
  10. alpha_visualizer-0.7.3/docs/screenshots/ja/compare.png +0 -0
  11. alpha_visualizer-0.7.3/docs/screenshots/ja/detail.png +0 -0
  12. alpha_visualizer-0.7.3/docs/screenshots/ja/strategy.png +0 -0
  13. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/capture.spec.ts +4 -3
  14. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/equity-tv.spec.ts +4 -2
  15. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/compare.spec.ts +4 -3
  16. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/detail.spec.ts +9 -2
  17. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.samples.config.ts +1 -1
  18. alpha_visualizer-0.7.3/frontend/src/constants/__tests__/featureFlags.test.ts +120 -0
  19. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/constants/featureFlags.ts +10 -6
  20. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BacktestScreen.tsx +21 -18
  21. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/strategy/SignalChartCard.tsx +4 -4
  22. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/pyproject.toml +2 -2
  23. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/__init__.py +1 -1
  24. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/BrowsePage-B7NJWk-W.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/BrowsePage-D_oh_f9q.js +2 -2
  25. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/BrowsePage-B7NJWk-W.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/BrowsePage-D_oh_f9q.js.map +1 -1
  26. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/ComparePage-Brk6b7s3.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/ComparePage-DtDelizG.js +2 -2
  27. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/ComparePage-Brk6b7s3.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/ComparePage-DtDelizG.js.map +1 -1
  28. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/DetailPage-RbPDGMb3.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/DetailPage-DelKLR38.js +2 -2
  29. alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/DetailPage-DelKLR38.js.map +1 -0
  30. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/IdeasPage-BEPzOoeJ.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/IdeasPage-CCohB3id.js +2 -2
  31. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/IdeasPage-BEPzOoeJ.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/IdeasPage-CCohB3id.js.map +1 -1
  32. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LivePage-DeKnCzqb.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LivePage-q72oTm92.js +2 -2
  33. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LivePage-DeKnCzqb.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LivePage-q72oTm92.js.map +1 -1
  34. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LiveTab-B9tKV9zX.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LiveTab-B3SvCjHQ.js +2 -2
  35. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LiveTab-B9tKV9zX.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LiveTab-B3SvCjHQ.js.map +1 -1
  36. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/SettingsToggles-CM8XnjQC.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/SettingsToggles-D_8he1u5.js +2 -2
  37. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/SettingsToggles-CM8XnjQC.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/SettingsToggles-D_8he1u5.js.map +1 -1
  38. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/featureFlags-A2oZeWlh.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/featureFlags-B5arCULb.js +2 -2
  39. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/featureFlags-A2oZeWlh.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/featureFlags-B5arCULb.js.map +1 -1
  40. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/index-Drd2-lJN.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/index-BdNp8jFI.js +3 -3
  41. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/index-Drd2-lJN.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/index-BdNp8jFI.js.map +1 -1
  42. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/useBacktestData-BehdHkgb.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/useBacktestData-B0uqJGPi.js +2 -2
  43. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/useBacktestData-BehdHkgb.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/useBacktestData-B0uqJGPi.js.map +1 -1
  44. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/index.html +1 -1
  45. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/uv.lock +4 -4
  46. alpha_visualizer-0.7.2/docs/screenshots/en/browse.png +0 -0
  47. alpha_visualizer-0.7.2/docs/screenshots/en/compare.png +0 -0
  48. alpha_visualizer-0.7.2/docs/screenshots/en/detail.png +0 -0
  49. alpha_visualizer-0.7.2/docs/screenshots/en/strategy.png +0 -0
  50. alpha_visualizer-0.7.2/docs/screenshots/ja/browse.png +0 -0
  51. alpha_visualizer-0.7.2/docs/screenshots/ja/compare.png +0 -0
  52. alpha_visualizer-0.7.2/docs/screenshots/ja/detail.png +0 -0
  53. alpha_visualizer-0.7.2/docs/screenshots/ja/strategy.png +0 -0
  54. alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/DetailPage-RbPDGMb3.js.map +0 -1
  55. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
  56. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
  57. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.claude/commands/audit-licenses.md +0 -0
  58. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.claude/commands/pre-release.md +0 -0
  59. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.codex/hooks.json +0 -0
  60. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  61. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
  62. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  63. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  64. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
  65. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  66. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/codeql/README.md +0 -0
  67. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/codeql/codeql-config.yml +0 -0
  68. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/dependabot.yml +0 -0
  69. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/codeql.yml +0 -0
  70. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/lighthouse.yml +0 -0
  71. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/release.yml +0 -0
  72. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/.gitignore +0 -0
  73. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
  74. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/0f38aca28193156b +0 -0
  75. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/10d56fd11d90e91d +0 -0
  76. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/2826595e28fa870a +0 -0
  77. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/291dc4c40995bea6 +0 -0
  78. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/296b8092179c9f55 +0 -0
  79. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
  80. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/331e194303817b32 +0 -0
  81. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/368f2bae545df6be +0 -0
  82. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/3f7b61d4b4a660e1 +0 -0
  83. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/43f703bafb1e4b04 +0 -0
  84. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4577b97f57a8a832 +0 -0
  85. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4726660442f99a00 +0 -0
  86. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
  87. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/508b282112ab038e +0 -0
  88. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/757b1f8305546439 +0 -0
  89. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/7d3b67d825fc154a +0 -0
  90. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/7f90c9d611001617 +0 -0
  91. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/828ed73d45fcee28 +0 -0
  92. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/82e279d41edd645d +0 -0
  93. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/89aaa48f251cd53d +0 -0
  94. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/89d70ebe84c5b2b7 +0 -0
  95. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/8add761403393fca +0 -0
  96. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/90fccc12da2fa6c9 +0 -0
  97. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/96ca93165140d446 +0 -0
  98. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/97982d8e7c8d4a95 +0 -0
  99. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/a636a4647020033d +0 -0
  100. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ab4df659c6b192db +0 -0
  101. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/b76328deebb21ae6 +0 -0
  102. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
  103. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/bd75c3c18e8ba4f4 +0 -0
  104. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
  105. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/c5f6cf064ffb412d +0 -0
  106. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/cd09731f3dfbf59f +0 -0
  107. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/d4cc884f331eee77 +0 -0
  108. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
  109. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/e44a457d795e56c2 +0 -0
  110. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ea2d606acbfff989 +0 -0
  111. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ee487c54cd5ca7dc +0 -0
  112. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
  113. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f2f91c7f9b44111d +0 -0
  114. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
  115. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f7f9c6b3c86f63a8 +0 -0
  116. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/fa443af6269a6e02 +0 -0
  117. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/fe325b4404aa1121 +0 -0
  118. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
  119. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/AGENTS.md +0 -0
  120. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CHANGELOG.md +0 -0
  121. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CLAUDE.md +0 -0
  122. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CODE_OF_CONDUCT.en.md +0 -0
  123. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CODE_OF_CONDUCT.md +0 -0
  124. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CONTRIBUTING.en.md +0 -0
  125. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CONTRIBUTING.md +0 -0
  126. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/LICENSE +0 -0
  127. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/NOTICE +0 -0
  128. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/README.en.md +0 -0
  129. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/README.md +0 -0
  130. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/SECURITY.en.md +0 -0
  131. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/SECURITY.md +0 -0
  132. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/THIRDPARTY_LICENSES.txt +0 -0
  133. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/cliff.toml +0 -0
  134. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0001-pages-vs-screens.md +0 -0
  135. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0002-charts-visx-vs-components.md +0 -0
  136. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0003-openapi-typescript-codegen.md +0 -0
  137. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
  138. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/lighthouse-ci.md +0 -0
  139. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/compare-heatmap.png +0 -0
  140. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/ideas.png +0 -0
  141. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/optimize.png +0 -0
  142. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/strategy-signal-tv.png +0 -0
  143. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/compare-heatmap.png +0 -0
  144. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/ideas.png +0 -0
  145. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/optimize.png +0 -0
  146. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/strategy-signal-tv.png +0 -0
  147. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.gitignore +0 -0
  148. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.npmrc +0 -0
  149. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.size-limit.json +0 -0
  150. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.storybook/main.ts +0 -0
  151. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.storybook/preview.ts +0 -0
  152. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/CLAUDE.md +0 -0
  153. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/README.md +0 -0
  154. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/THIRDPARTY_FONTS.md +0 -0
  155. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/README.md +0 -0
  156. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/historical/SPY_1d.parquet +0 -0
  157. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
  158. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
  159. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
  160. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
  161. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
  162. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
  163. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/helpers/locators.ts +0 -0
  164. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
  165. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/strategy-signal-tv.spec.ts +0 -0
  166. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/browse.spec.ts +0 -0
  167. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/i18n.spec.ts +0 -0
  168. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/eslint.config.js +0 -0
  169. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/index.html +0 -0
  170. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/openapi.json +0 -0
  171. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/package.json +0 -0
  172. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.config.ts +0 -0
  173. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.screenshots.config.ts +0 -0
  174. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/pnpm-lock.yaml +0 -0
  175. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/pnpm-workspace.yaml +0 -0
  176. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/public/favicon.svg +0 -0
  177. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/public/icons.svg +0 -0
  178. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/__tests__/client.test.ts +0 -0
  179. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/client.ts +0 -0
  180. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/types.gen.ts +0 -0
  181. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/types.ts +0 -0
  182. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/CompareEquityTV.stories.tsx +0 -0
  183. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/CompareEquityTV.tsx +0 -0
  184. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +0 -0
  185. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +0 -0
  186. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +0 -0
  187. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/RollingMetricsChartTV.tsx +0 -0
  188. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/StrategySignalChartTV.stories.tsx +0 -0
  189. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/StrategySignalChartTV.tsx +0 -0
  190. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/WFOEquityTV.stories.tsx +0 -0
  191. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/WFOEquityTV.tsx +0 -0
  192. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +0 -0
  193. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +0 -0
  194. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +0 -0
  195. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/StrategySignalChartTV.test.tsx +0 -0
  196. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +0 -0
  197. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/data.test.ts +0 -0
  198. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/theme.test.ts +0 -0
  199. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/trades.test.ts +0 -0
  200. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/data.ts +0 -0
  201. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/theme.ts +0 -0
  202. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/trades.ts +0 -0
  203. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
  204. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
  205. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
  206. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
  207. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/EquityChartV.tsx +0 -0
  208. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
  209. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
  210. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
  211. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
  212. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/Sparkline.tsx +0 -0
  213. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +0 -0
  214. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/regimeBands.ts +0 -0
  215. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/CommandPalette.tsx +0 -0
  216. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/DetailToolbar.tsx +0 -0
  217. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
  218. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
  219. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/RootLayout.tsx +0 -0
  220. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/SettingsToggles.tsx +0 -0
  221. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/StrategyHero.tsx +0 -0
  222. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
  223. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
  224. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
  225. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
  226. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/FilterBar.tsx +0 -0
  227. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
  228. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/Heroline.tsx +0 -0
  229. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
  230. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SavedViews.tsx +0 -0
  231. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
  232. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/StrategyTable.tsx +0 -0
  233. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
  234. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SymbolCard.tsx +0 -0
  235. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
  236. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
  237. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
  238. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
  239. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
  240. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
  241. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
  242. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/RollingMetricsChart.tsx +0 -0
  243. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/VaRChart.tsx +0 -0
  244. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
  245. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
  246. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/LivePositionView.tsx +0 -0
  247. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/LiveTab.tsx +0 -0
  248. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/SummaryCard.tsx +0 -0
  249. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
  250. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/__tests__/format.test.ts +0 -0
  251. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/format.ts +0 -0
  252. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/CompareTable.tsx +0 -0
  253. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
  254. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
  255. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
  256. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
  257. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
  258. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/evaluate.ts +0 -0
  259. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/nav.ts +0 -0
  260. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/trades/TradeTable.tsx +0 -0
  261. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/constants/metricDefinitions.ts +0 -0
  262. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/contexts/DashboardContext.tsx +0 -0
  263. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/contexts/dashboardConstants.ts +0 -0
  264. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/a11y.css +0 -0
  265. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Button.tsx +0 -0
  266. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Card.tsx +0 -0
  267. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Chip.tsx +0 -0
  268. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Divider.tsx +0 -0
  269. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/KeyValue.tsx +0 -0
  270. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
  271. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
  272. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Pill.tsx +0 -0
  273. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
  274. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
  275. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Stat.tsx +0 -0
  276. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/TabBar.tsx +0 -0
  277. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Toolbar.tsx +0 -0
  278. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
  279. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/index.ts +0 -0
  280. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/tokens.css +0 -0
  281. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/useChartTheme.ts +0 -0
  282. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
  283. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
  284. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
  285. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useStrategyHistorical.test.tsx +0 -0
  286. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
  287. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
  288. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useBacktestData.ts +0 -0
  289. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useDebounce.ts +0 -0
  290. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useEquityViewport.ts +0 -0
  291. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useFetchByKey.ts +0 -0
  292. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useIdeasList.ts +0 -0
  293. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useLiveList.ts +0 -0
  294. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useRecentStrategies.ts +0 -0
  295. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useScrollRestoration.ts +0 -0
  296. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useSparklineCache.ts +0 -0
  297. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useStrategyHistorical.ts +0 -0
  298. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useStrategyList.ts +0 -0
  299. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useSymbolStats.ts +0 -0
  300. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useTheme.ts +0 -0
  301. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
  302. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/i18n/strings.ts +0 -0
  303. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
  304. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
  305. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
  306. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/format.test.ts +0 -0
  307. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
  308. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
  309. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
  310. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
  311. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
  312. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
  313. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
  314. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/assetClass.ts +0 -0
  315. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/correlation.ts +0 -0
  316. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/csv.ts +0 -0
  317. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/distribution.ts +0 -0
  318. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/drawdown.ts +0 -0
  319. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/exportPng.ts +0 -0
  320. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/format.ts +0 -0
  321. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/monteCarlo.ts +0 -0
  322. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/rolling.ts +0 -0
  323. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/searchParams.ts +0 -0
  324. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/searchStrategies.ts +0 -0
  325. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/walkForward.ts +0 -0
  326. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/weekday.ts +0 -0
  327. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/main.tsx +0 -0
  328. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/mock/btData.ts +0 -0
  329. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/BrowsePage.tsx +0 -0
  330. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/ComparePage.tsx +0 -0
  331. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/DetailPage.tsx +0 -0
  332. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/IdeasPage.tsx +0 -0
  333. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/LivePage.tsx +0 -0
  334. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/router.tsx +0 -0
  335. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
  336. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BrowseScreen.tsx +0 -0
  337. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
  338. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/CompareScreen.tsx +0 -0
  339. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/ISOOSScreen.tsx +0 -0
  340. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
  341. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/IdeasScreen.tsx +0 -0
  342. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/LiveScreen.stories.tsx +0 -0
  343. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/LiveScreen.tsx +0 -0
  344. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
  345. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/OptimizeScreen.tsx +0 -0
  346. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/StrategyScreen.tsx +0 -0
  347. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
  348. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/WFOScreen.tsx +0 -0
  349. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/__tests__/LiveScreen.test.tsx +0 -0
  350. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/test-setup.ts +0 -0
  351. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.app.json +0 -0
  352. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.e2e.json +0 -0
  353. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.json +0 -0
  354. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.node.json +0 -0
  355. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/vite.config.ts +0 -0
  356. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/lighthouserc.json +0 -0
  357. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/release.sh +0 -0
  358. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/README.en.md +0 -0
  359. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/README.md +0 -0
  360. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/__init__.py +0 -0
  361. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/__init__.py +0 -0
  362. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/compatibility_matrix.py +0 -0
  363. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/ideas_defs.py +0 -0
  364. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_backtest.py +0 -0
  365. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_grid.py +0 -0
  366. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_wfo.py +0 -0
  367. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/strategy_defs.py +0 -0
  368. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/synthetic_ohlcv.py +0 -0
  369. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/writers.py +0 -0
  370. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/build_samples.py +0 -0
  371. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/ideas/ideas.json +0 -0
  372. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/results/backtest_results.db +0 -0
  373. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
  374. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
  375. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
  376. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
  377. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
  378. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
  379. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
  380. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
  381. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/forge.yaml +0 -0
  382. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/compare_sqlite_dump.py +0 -0
  383. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/generate_openapi.py +0 -0
  384. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/verify_build_artifacts.py +0 -0
  385. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/app.py +0 -0
  386. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/cli.py +0 -0
  387. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/db.py +0 -0
  388. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/dependencies.py +0 -0
  389. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/errors.py +0 -0
  390. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/forge_config.py +0 -0
  391. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/log_sanitize.py +0 -0
  392. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/__init__.py +0 -0
  393. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
  394. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/ideas.py +0 -0
  395. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/live.py +0 -0
  396. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/optimization.py +0 -0
  397. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/strategies.py +0 -0
  398. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/__init__.py +0 -0
  399. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/historical.py +0 -0
  400. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/ideas.py +0 -0
  401. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/live.py +0 -0
  402. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/optimize.py +0 -0
  403. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/results.py +0 -0
  404. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/run.py +0 -0
  405. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/strategies.py +0 -0
  406. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/wfo.py +0 -0
  407. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/__init__.py +0 -0
  408. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/historical.py +0 -0
  409. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/ideas.py +0 -0
  410. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/live.py +0 -0
  411. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/optimize.py +0 -0
  412. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/results.py +0 -0
  413. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/strategies.py +0 -0
  414. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/wfo.py +0 -0
  415. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/__init__.py +0 -0
  416. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/backtest.py +0 -0
  417. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/historical.py +0 -0
  418. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/live.py +0 -0
  419. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/walk_forward.py +0 -0
  420. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/Sparkline-BcO_EWxr.js +0 -0
  421. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/Sparkline-BcO_EWxr.js.map +0 -0
  422. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/fonts-DJsrEZjK.css +0 -0
  423. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/format-D00KW3px.js +0 -0
  424. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/format-D00KW3px.js.map +0 -0
  425. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/index-Cbl7J_5s.css +0 -0
  426. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
  427. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
  428. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
  429. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
  430. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
  431. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
  432. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  433. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  434. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/react-cUP_GJAW.js +0 -0
  435. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/react-cUP_GJAW.js.map +0 -0
  436. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/rolldown-runtime-DDdRRPPX.js +0 -0
  437. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
  438. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
  439. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/tv-rsB_oRi5.js +0 -0
  440. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/tv-rsB_oRi5.js.map +0 -0
  441. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/visx-D9BH_cru.js +0 -0
  442. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/visx-D9BH_cru.js.map +0 -0
  443. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/favicon.svg +0 -0
  444. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/icons.svg +0 -0
  445. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/__init__.py +0 -0
  446. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/conftest.py +0 -0
  447. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/factories.py +0 -0
  448. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/fixtures/build_e2e_fixture.py +0 -0
  449. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/__init__.py +0 -0
  450. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_backtest_results_repo.py +0 -0
  451. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_ideas_reader.py +0 -0
  452. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_live_repo.py +0 -0
  453. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_optimization_repo.py +0 -0
  454. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_strategies_repo.py +0 -0
  455. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/__init__.py +0 -0
  456. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_forge_yaml_integration.py +0 -0
  457. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_historical.py +0 -0
  458. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_ideas.py +0 -0
  459. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_live.py +0 -0
  460. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_optimize.py +0 -0
  461. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_results.py +0 -0
  462. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_run.py +0 -0
  463. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_strategies.py +0 -0
  464. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_wfo.py +0 -0
  465. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/__init__.py +0 -0
  466. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_backtest.py +0 -0
  467. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_grid.py +0 -0
  468. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_wfo.py +0 -0
  469. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_sample_forge.py +0 -0
  470. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_strategy_defs.py +0 -0
  471. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_synthetic_ohlcv.py +0 -0
  472. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_writers.py +0 -0
  473. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/schemas/__init__.py +0 -0
  474. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/schemas/test_schemas.py +0 -0
  475. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/__init__.py +0 -0
  476. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_backtest.py +0 -0
  477. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_backtest_properties.py +0 -0
  478. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_historical.py +0 -0
  479. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_live.py +0 -0
  480. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_wfo.py +0 -0
  481. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_app.py +0 -0
  482. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_cli.py +0 -0
  483. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_compare_sqlite_dump.py +0 -0
  484. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_db.py +0 -0
  485. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_dependencies.py +0 -0
  486. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_errors.py +0 -0
  487. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_forge_config.py +0 -0
  488. {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_log_sanitize.py +0 -0
@@ -306,3 +306,71 @@ jobs:
306
306
  name: playwright-traces
307
307
  path: frontend/test-results/
308
308
  retention-days: 14
309
+
310
+ e2e-samples:
311
+ runs-on: ubuntu-latest
312
+ timeout-minutes: 20
313
+ steps:
314
+ - uses: actions/checkout@v6
315
+
316
+ - name: Install uv
317
+ uses: astral-sh/setup-uv@v7
318
+ with:
319
+ version: "0.11.19"
320
+
321
+ - name: Set up Python
322
+ run: uv python install 3.12
323
+
324
+ - name: Install Python dependencies
325
+ run: uv sync --all-extras
326
+
327
+ - name: Setup pnpm
328
+ uses: pnpm/action-setup@v6
329
+ with:
330
+ version: 11
331
+
332
+ - name: Set up Node.js
333
+ uses: actions/setup-node@v6
334
+ with:
335
+ node-version: '22'
336
+ cache: 'pnpm'
337
+ cache-dependency-path: frontend/pnpm-lock.yaml
338
+
339
+ - name: Install pnpm dependencies
340
+ working-directory: frontend
341
+ run: pnpm install --frozen-lockfile
342
+
343
+ - name: Cache Playwright browsers
344
+ uses: actions/cache@v5
345
+ id: playwright-cache
346
+ with:
347
+ path: ~/.cache/ms-playwright
348
+ key: playwright-${{ runner.os }}-${{ hashFiles('frontend/pnpm-lock.yaml') }}
349
+
350
+ - name: Install Playwright browsers (cold)
351
+ working-directory: frontend
352
+ if: steps.playwright-cache.outputs.cache-hit != 'true'
353
+ run: pnpm exec playwright install --with-deps chromium
354
+
355
+ - name: Install Playwright system deps (cache hit)
356
+ working-directory: frontend
357
+ if: steps.playwright-cache.outputs.cache-hit == 'true'
358
+ run: pnpm exec playwright install-deps chromium
359
+
360
+ - name: Build frontend
361
+ working-directory: frontend
362
+ run: pnpm run build
363
+
364
+ - name: Run Playwright samples smoke
365
+ working-directory: frontend
366
+ env:
367
+ CI: 'true'
368
+ run: pnpm run e2e:samples
369
+
370
+ - name: Upload Playwright report
371
+ if: always()
372
+ uses: actions/upload-artifact@v7
373
+ with:
374
+ name: playwright-report-samples
375
+ path: frontend/playwright-report-samples/
376
+ retention-days: 14
@@ -28,6 +28,7 @@ frontend/.tsbuildinfo
28
28
 
29
29
  # Playwright artifacts
30
30
  frontend/playwright-report/
31
+ frontend/playwright-report-samples/
31
32
  frontend/test-results/
32
33
  frontend/blob-report/
33
34
  frontend/playwright/.cache/
@@ -1,4 +1,4 @@
1
1
  # file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/__init__.py
2
2
  # hypothesis_version: 6.155.1
3
3
 
4
- ['0.7.2']
4
+ ['0.7.3']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alpha-visualizer
3
- Version: 0.7.2
3
+ Version: 0.7.3
4
4
  Summary: Web visualization tool for AlphaForge backtest results
5
5
  Project-URL: Homepage, https://github.com/alforge-labs/alpha-visualizer
6
6
  Project-URL: Repository, https://github.com/alforge-labs/alpha-visualizer
@@ -151,12 +151,13 @@ test.describe.serial('README / docs 用スクリーンショット撮影', () =>
151
151
  await captureViewport(page, lang, 'browse', 1180)
152
152
  })
153
153
 
154
- // detail: 「エクイティ vs Buy&Hold」カード(タイトル+チャート)をクロップ
154
+ // detail: 「エクイティ & ドローダウン」カード(タイトル+チャート)をクロップ
155
155
  test('detail', async ({ page }) => {
156
156
  await gotoDetail(page, STRATEGY_ID)
157
157
  await setLang(page, lang)
158
- // backtest-equity-chart の親 div = セクションラベル+エクイティチャート
159
- const equitySection = page.getByTestId('backtest-equity-chart').locator('..')
158
+ // backtest-equity-chart-tv の親 div = セクションラベル+エクイティチャート
159
+ // (issue #231 以降は TV レンダラが既定)
160
+ const equitySection = page.getByTestId('backtest-equity-chart-tv').locator('..')
160
161
  await captureElement(page, lang, 'detail', equitySection, 280)
161
162
  })
162
163
 
@@ -39,7 +39,9 @@ test.describe.serial('lightweight-charts (TV) 用スクリーンショット', (
39
39
  }
40
40
 
41
41
  test('backtest-tv (ja, gotoDetail helper)', async ({ page }) => {
42
- // gotoDetail を経由しても feature flag が ON のまま維持されることの回帰確認
42
+ // gotoDetail を経由しても feature flag が ON のまま維持されることの回帰確認。
43
+ // renderer-mode バッジは issue #231 以降 ?tv クエリ無しの本番ビルドでは
44
+ // 表示されないため、TV チャート本体の testid で検証する。
43
45
  await clearViewerSettings(page)
44
46
  await page.addInitScript(() => {
45
47
  try {
@@ -50,6 +52,6 @@ test.describe.serial('lightweight-charts (TV) 用スクリーンショット', (
50
52
  })
51
53
  await gotoDetail(page, STRATEGY_ID)
52
54
  await page.waitForLoadState('networkidle')
53
- await page.getByTestId('renderer-mode').waitFor({ state: 'visible' })
55
+ await page.locator('[data-testid="backtest-equity-chart-tv"]').waitFor({ state: 'visible' })
54
56
  })
55
57
  })
@@ -11,10 +11,11 @@ test.describe('Compare スモーク', () => {
11
11
 
12
12
  await expect(page.getByTestId('compare-main-grid')).toBeVisible()
13
13
 
14
- const chart = page.getByLabel(/Compare equity chart, 2 strategies/)
14
+ // issue #231 以降は TV レンダラが既定(canvas 描画)
15
+ const chart = page.getByTestId('compare-equity-tv')
15
16
  await expect(chart).toBeVisible()
16
- // visx SVG パスが少なくとも 1 本描画されていること
17
- await expect(chart.locator('path').first()).toBeVisible()
17
+ await expect(chart.getByLabel(/Compare equity chart, 2 strategies/)).toBeVisible()
18
+ await expect(chart.locator('canvas').first()).toBeVisible()
18
19
 
19
20
  const table = page.getByTestId('compare-table')
20
21
  await expect(table).toBeVisible()
@@ -9,9 +9,9 @@ test.describe('Detail スモーク', () => {
9
9
  test('sma_cross の主要タブを順次切り替えられる', async ({ page }) => {
10
10
  await gotoDetail(page, 'sma_cross')
11
11
 
12
- // backtest タブ(既定)
12
+ // backtest タブ(既定)— issue #231 以降は TV レンダラが既定
13
13
  await expect(page.getByTestId('backtest-screen')).toBeVisible()
14
- await expect(page.getByTestId('backtest-equity-chart')).toBeVisible()
14
+ await expect(page.getByTestId('backtest-equity-chart-tv')).toBeVisible()
15
15
 
16
16
  // IS / OOS タブ
17
17
  await page.getByRole('tab', { name: 'IS / OOS' }).click()
@@ -36,4 +36,11 @@ test.describe('Detail スモーク', () => {
36
36
  await page.getByRole('tab', { name: /最適化|Optimize/ }).click()
37
37
  await expect(page.getByTestId('optimize-screen')).toBeVisible()
38
38
  })
39
+
40
+ test('?tv=0 で visx レンダラに fallback できる', async ({ page }) => {
41
+ // issue #231: TV 既定化後も visx を opt-out 経路として維持していることの回帰確認
42
+ await page.goto('/detail/sma_cross?tv=0')
43
+ await expect(page.getByTestId('backtest-equity-chart')).toBeVisible()
44
+ await expect(page.getByTestId('backtest-equity-chart-tv')).not.toBeVisible()
45
+ })
39
46
  })
@@ -37,7 +37,7 @@ export default defineConfig({
37
37
  webServer: {
38
38
  // FORGE_CONFIG が外部 forge.yaml を指していないよう明示クリア。
39
39
  command:
40
- 'env FORGE_CONFIG= uv run vis serve --forge-dir samples/sample-forge --forge-config samples/sample-forge/forge.yaml --host 127.0.0.1 --port 8124 --no-open',
40
+ 'env FORGE_CONFIG= uv run alpha-vis serve --forge-dir samples/sample-forge --forge-config samples/sample-forge/forge.yaml --host 127.0.0.1 --port 8124 --no-open',
41
41
  url: `${BASE_URL}/health`,
42
42
  cwd: '..',
43
43
  reuseExistingServer: !process.env.CI,
@@ -0,0 +1,120 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
2
+
3
+ import {
4
+ resolveLightweightChartsFlag,
5
+ setLightweightChartsFlag,
6
+ } from '../featureFlags'
7
+
8
+ const LS_KEY = 'alpha.flags.lightweightCharts'
9
+
10
+ /** jsdom の location.search をテストごとに設定する */
11
+ function setSearch(search: string): void {
12
+ window.history.replaceState(null, '', search === '' ? '/' : `/?${search}`)
13
+ }
14
+
15
+ // jsdom の localStorage が無効なため、useTheme.test.tsx と同じ in-memory Storage を stub する
16
+ function createMemoryStorage(): Storage {
17
+ const store = new Map<string, string>()
18
+ return {
19
+ getItem: (k: string) => store.get(k) ?? null,
20
+ setItem: (k: string, v: string) => {
21
+ store.set(k, v)
22
+ },
23
+ removeItem: (k: string) => {
24
+ store.delete(k)
25
+ },
26
+ clear: () => {
27
+ store.clear()
28
+ },
29
+ key: (i: number) => Array.from(store.keys())[i] ?? null,
30
+ get length() {
31
+ return store.size
32
+ },
33
+ }
34
+ }
35
+
36
+ let storage: Storage
37
+
38
+ beforeEach(() => {
39
+ storage = createMemoryStorage()
40
+ vi.stubGlobal('localStorage', storage)
41
+ setSearch('')
42
+ })
43
+
44
+ afterEach(() => {
45
+ vi.unstubAllGlobals()
46
+ vi.unstubAllEnvs()
47
+ window.history.replaceState({}, '', '/')
48
+ })
49
+
50
+ describe('resolveLightweightChartsFlag', () => {
51
+ // issue #231: TV チャートは既定 ON。docs/README は TV を主要機能として
52
+ // 提示しており(v0.3.0/v0.4.0 で移行済みと記載)、既定 OFF のままでは
53
+ // 公開 wheel の実挙動が docs と乖離する。
54
+ it('クエリ・localStorage・env が無いとき既定で true(TV レンダラ)を返す', () => {
55
+ expect(resolveLightweightChartsFlag()).toBe(true)
56
+ })
57
+
58
+ it('?tv=0 で false(visx fallback)になり localStorage に persist される', () => {
59
+ setSearch('tv=0')
60
+ expect(resolveLightweightChartsFlag()).toBe(false)
61
+ expect(storage.getItem(LS_KEY)).toBe('0')
62
+ })
63
+
64
+ it('?tv=1 で true になり localStorage に persist される', () => {
65
+ setSearch('tv=1')
66
+ expect(resolveLightweightChartsFlag()).toBe(true)
67
+ expect(storage.getItem(LS_KEY)).toBe('1')
68
+ })
69
+
70
+ it('localStorage の "0" で false を返す(クエリ無し)', () => {
71
+ storage.setItem(LS_KEY, '0')
72
+ expect(resolveLightweightChartsFlag()).toBe(false)
73
+ })
74
+
75
+ it('localStorage の "1" で true を返す', () => {
76
+ storage.setItem(LS_KEY, '1')
77
+ expect(resolveLightweightChartsFlag()).toBe(true)
78
+ })
79
+
80
+ // 既定 ON 化後も env で明示 OFF できること(CI やビルド時の退避経路)
81
+ it.each(['0', 'false'])('env VITE_USE_LIGHTWEIGHT_CHARTS=%s で false を返す', (raw) => {
82
+ vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', raw)
83
+ expect(resolveLightweightChartsFlag()).toBe(false)
84
+ })
85
+
86
+ it.each(['1', 'true'])('env VITE_USE_LIGHTWEIGHT_CHARTS=%s で true を返す', (raw) => {
87
+ vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', raw)
88
+ expect(resolveLightweightChartsFlag()).toBe(true)
89
+ })
90
+
91
+ it('認識できない env 値(typo 等)は無視して既定 true にフォールバックする', () => {
92
+ vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', 'off')
93
+ expect(resolveLightweightChartsFlag()).toBe(true)
94
+ })
95
+
96
+ it('優先順位: クエリ ?tv=1 は localStorage の "0" に勝つ', () => {
97
+ storage.setItem(LS_KEY, '0')
98
+ setSearch('tv=1')
99
+ expect(resolveLightweightChartsFlag()).toBe(true)
100
+ })
101
+
102
+ it('優先順位: localStorage の "1" は env の "0" に勝つ', () => {
103
+ vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', '0')
104
+ storage.setItem(LS_KEY, '1')
105
+ expect(resolveLightweightChartsFlag()).toBe(true)
106
+ })
107
+
108
+ it('優先順位: env の "0" は既定 true に勝つ(クエリ・storage 無し)', () => {
109
+ vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', '0')
110
+ expect(resolveLightweightChartsFlag()).toBe(false)
111
+ })
112
+ })
113
+
114
+ describe('setLightweightChartsFlag', () => {
115
+ it('false を保存すると次回解決時に visx fallback になる', () => {
116
+ setLightweightChartsFlag(false)
117
+ expect(storage.getItem(LS_KEY)).toBe('0')
118
+ expect(resolveLightweightChartsFlag()).toBe(false)
119
+ })
120
+ })
@@ -1,21 +1,25 @@
1
1
  /**
2
- * Feature flag 解決ロジック。issue #180 の lightweight-charts PoC 用。
2
+ * Feature flag 解決ロジック。issue #180 の lightweight-charts PoC として導入し、
3
+ * issue #231 で既定 ON に反転(TV レンダラを正式採用。visx は `?tv=0` fallback)。
3
4
  *
4
5
  * 優先順位:
5
6
  * 1. URL クエリ `?tv=1` / `?tv=0` (top priority — セッション中は localStorage へ persist)
6
7
  * 2. localStorage['alpha.flags.lightweightCharts']
7
- * 3. import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS === '1'
8
- * 4. デフォルト false
8
+ * 3. import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS('1'/'true' ON、'0'/'false' で OFF)
9
+ * 4. デフォルト true
9
10
  *
10
11
  * SSR / non-DOM コンテキストでは env と デフォルトだけを評価する。
11
12
  */
12
13
 
13
14
  const LS_KEY = 'alpha.flags.lightweightCharts'
14
15
  const QS_KEY = 'tv'
16
+ const DEFAULT_FLAG = true
15
17
 
16
- function readEnvFlag(): boolean {
18
+ function readEnvFlag(): boolean | null {
17
19
  const raw = import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS
18
- return raw === '1' || raw === 'true'
20
+ if (raw === '1' || raw === 'true') return true
21
+ if (raw === '0' || raw === 'false') return false
22
+ return null
19
23
  }
20
24
 
21
25
  function readQueryFlag(): boolean | null {
@@ -62,7 +66,7 @@ export function resolveLightweightChartsFlag(): boolean {
62
66
  }
63
67
  const fromStorage = readStorageFlag()
64
68
  if (fromStorage != null) return fromStorage
65
- return readEnvFlag()
69
+ return readEnvFlag() ?? DEFAULT_FLAG
66
70
  }
67
71
 
68
72
  /**
@@ -148,25 +148,28 @@ function BacktestScreenInner({ data, compact, lang }: Props) {
148
148
  {L('エクイティ & ドローダウン', 'Equity & Drawdown')}
149
149
  </SectionLabel>
150
150
  <div style={{ display: 'flex', gap: 6, alignItems: 'center' }}>
151
- <span
152
- data-testid="renderer-mode"
153
- style={{
154
- fontFamily: 'var(--mono)',
155
- fontSize: 10,
156
- letterSpacing: '0.08em',
157
- color: 'var(--accent)',
158
- padding: '2px 6px',
159
- borderRadius: 4,
160
- background: 'var(--accent-bg)',
161
- border: '1px solid var(--accent-glow)',
162
- }}
163
- >
164
- tv β
165
- </span>
151
+ {/* issue #231: TV が既定レンダラになったため、開発時のみバッジを表示(本番露出を防ぐ) */}
166
152
  {showRendererToggle && (
167
- <button type="button" style={exportBtnS} onClick={toggleTvRenderer}>
168
- {L('visx に戻す', 'Switch to visx')}
169
- </button>
153
+ <>
154
+ <span
155
+ data-testid="renderer-mode"
156
+ style={{
157
+ fontFamily: 'var(--mono)',
158
+ fontSize: 10,
159
+ letterSpacing: '0.08em',
160
+ color: 'var(--accent)',
161
+ padding: '2px 6px',
162
+ borderRadius: 4,
163
+ background: 'var(--accent-bg)',
164
+ border: '1px solid var(--accent-glow)',
165
+ }}
166
+ >
167
+ tv
168
+ </span>
169
+ <button type="button" style={exportBtnS} onClick={toggleTvRenderer}>
170
+ {L('visx に戻す', 'Switch to visx')}
171
+ </button>
172
+ </>
170
173
  )}
171
174
  <button
172
175
  type="button"
@@ -20,7 +20,7 @@ export interface SignalChartCardProps {
20
20
  * StrategyScreen の「シグナル時系列」セクション。
21
21
  *
22
22
  * 責務:
23
- * - feature flag `?tv=1` gating(OFF 時は実験機能 placeholder
23
+ * - feature flag の gating(既定 ON。`?tv=0` OFF にした場合は placeholder を表示)
24
24
  * - `useStrategyHistorical(symbol)` の loading / no_data / error / ready 分岐
25
25
  * - 空 trades のときも chart は表示し caption で「シグナルなし」と伝える
26
26
  *
@@ -29,7 +29,7 @@ export interface SignalChartCardProps {
29
29
  */
30
30
  export function SignalChartCard({ symbol, trades, regimeSeries, lang }: SignalChartCardProps) {
31
31
  const L = makeL(lang)
32
- // mount 時に 1 回だけ評価。?tv=1 で URL を切り替えた場合はリロード前提(既存 BacktestScreen と同等)。
32
+ // mount 時に 1 回だけ評価。?tv= で URL を切り替えた場合はリロード前提(既存 BacktestScreen と同等)。
33
33
  const [flagOn] = useState(() => resolveLightweightChartsFlag())
34
34
 
35
35
  if (!flagOn) {
@@ -37,8 +37,8 @@ export function SignalChartCard({ symbol, trades, regimeSeries, lang }: SignalCh
37
37
  <CardShell title={L('シグナル時系列', 'Signal Chart')}>
38
38
  <Hint>
39
39
  {L(
40
- 'シグナル時系列は実験機能です(?tv=1 で有効化)',
41
- 'Signal chart is experimental (enable with ?tv=1)',
40
+ 'シグナル時系列は TV レンダラでのみ利用できます(?tv=1 で再有効化)',
41
+ 'Signal chart requires the TV renderer (re-enable with ?tv=1)',
42
42
  )}
43
43
  </Hint>
44
44
  </CardShell>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alpha-visualizer"
3
- version = "0.7.2"
3
+ version = "0.7.3"
4
4
  description = "Web visualization tool for AlphaForge backtest results"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -85,7 +85,7 @@ dev = [
85
85
  ]
86
86
 
87
87
  [tool.bumpversion]
88
- current_version = "0.7.2"
88
+ current_version = "0.7.3"
89
89
  commit = true
90
90
  message = "chore: バージョン {new_version} にバンプ"
91
91
  tag = true
@@ -1,3 +1,3 @@
1
1
  """alpha-visualizer: AlphaForge バックテスト結果の Web 可視化ツール"""
2
2
 
3
- __version__ = "0.7.2"
3
+ __version__ = "0.7.3"